Name: series-workflowc8x2h Phase: Succeeded StartedAt: 2026-08-18 15:14:47 +0000 UTC FinishedAt: 2026-08-18 16:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[0] Phase: Succeeded StartedAt: 2026-08-18 15:14:47 +0000 UTC FinishedAt: 2026-08-18 16:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 15:14:47 +0000 UTC FinishedAt: 2026-08-18 16:07:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dcacab904fe78d60840ba947a104993ee9ded887", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_SOCFPGA", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dcacab904fe78d60840ba947a104993ee9ded887", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_SOCFPGA", "PTP_1588_CLOCK" ], "series_id": "5c376e7d-1623-4dc9-b93c-66883d90083d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dwxgmac2_timestamp_interrupt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19TT0NGUEdBJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXImIzM5O3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmQyYWY0YzYyMjg0ZTQwYzE5MDZjMjZhOGRkZWYzN2MyMzRmY2YyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE2OjAzOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuaW5kZXggMWQ3ZjBhNTdkMjg4OS4uYTRkMDBiZjgxNDIzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5AQCAtMzEwLDYgJiM0MzszMTAsMTMgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTilcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiYjNDM7XHQvKiBUaGUgWEdNQUMgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBUU0lTIGJ5IHJlYWRpbmdcbiYjNDM7XHQgKiBYR01BQ19USU1FU1RBTVBfU1RBVFVTLCB3aGljaCB3b3VsZCByYWNlIHdpdGggdGhlIFRTSVMgcG9sbFxuJiM0MztcdCAqIGJlbG93LiAgTWFzayBYR01BQ19UU0lFIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLXRpbWVzdGFtcFxuJiM0MztcdCAqIHNvIHRoZSBoYW5kbGVyIGRvZXMgbm90IHJ1biB3aGlsZSB3ZSBvd24gdGhlIHNuYXBzaG90IEZJRk8uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIFhHTUFDX1RTSUUsIDApO1xuJiM0MztcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VhdXhfdHNfbG9jayk7XG4gXHQvKiBFbmFibGUgSW50ZXJuYWwgc25hcHNob3QgdHJpZ2dlciAqL1xuIFx0YWNyX3ZhbHVlID0gcmVhZGwocHRwYWRkciAmIzQzOyBQVFBfQUNSKTtcbkBAIC0zMjksNiAmIzQzOzMzNiw3IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXV4X3RzX2xvY2spO1xuJiM0MztcdFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHdyaXRlbChhY3JfdmFsdWUsIHB0cGFkZHIgJiM0MzsgUFRQX0FDUik7XG5AQCAtMzUzLDYgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IFhHTUFDX0lOVF9TVEFUVVMsIHYsXG4gXHRcdFx0XHQgKHYgXHUwMDI2IFhHTUFDX0lOVF9UU0lTKSwgMTAwLCAxMDAwMCk7XG4gXHRpZiAocmV0KSB7XG4mIzQzO1x0XHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBXYWl0IGZvciB0aW1lIHN5bmMgb3BlcmF0aW9uIHRpbWVvdXRcXG5cJiMzNDssXG4gXHRcdFx0ICAgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTM3NSw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4mIzQzO1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuJiM0MztcbiBcdGdldF9zbXRndGltZShwcml2LVx1MDAzZW1paSwgU01UR19NRElPX0FERFIsIFx1MDAyNnNtdGdfdGltZSk7XG4gXHRzeXN0ZW0tXHUwMDNlY3ljbGVzID0gc210Z190aW1lO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5pbmRleCA2MWI2ZDQ1YTAyZjVkLi43NmUyODYwYTk1MTdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuQEAgLTg3LDcgJiM0Mzs4Nyw3IEBAXG4gI2RlZmluZSBYR01BQ19UU0lFXHRcdFx0QklUKDEyKVxuICNkZWZpbmUgWEdNQUNfTFBJSUVcdFx0XHRCSVQoNSlcbiAjZGVmaW5lIFhHTUFDX1BNVElFXHRcdFx0QklUKDQpXG4tI2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlx0XHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSlcbiYjNDM7I2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlx0XHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSB8IFhHTUFDX1RTSUUpXG4gI2RlZmluZSBYR01BQ19ReF9UWF9GTE9XX0NUUkwoeClcdCgweDAwMDAwMDcwICYjNDM7ICh4KSAqIDQpXG4gI2RlZmluZSBYR01BQ19QVFx0XHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgWEdNQUNfVEZFXHRcdFx0QklUKDEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG5pbmRleCBmMDJiNDM0YmJkNTA1Li5iODQ5Y2ViZjliMjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbkBAIC0xMTU0LDYgJiM0MzsxMTU0LDQ5IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdHNfc3RhdHVzLCBwZW5kaW5nX3NuYXBzaG90cywgYWNyX3ZhbHVlLCBjaGFubmVsO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1NjQgcHRwX3RpbWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgWEdNQUNfVElNRVNUQU1QX1NUQVRVUyB0byBnZXQgdGhlIEFVWCBzbmFwc2hvdFxuJiM0MztcdCAqIGNvdW50LiAgVGhpcyByZWFkIGFsc28gY2xlYXJzIHRoZSBUU0lTIGJpdCBpblxuJiM0MztcdCAqIFhHTUFDX0lOVF9TVEFUVVMuXG4mIzQzO1x0ICogVFggdGltZXN0YW1wIHBvbGxpbmcgbWF5IGhhdmUgYWxyZWFkeSBjbGVhcmVkIFRTSVNcbiYjNDM7XHQgKiBhbmQgQVVYVFNUUklHLCBzbyByZWx5IG9uIEFUU05TIGluc3RlYWQuXG4mIzQzO1x0ICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieVxuJiM0MztcdCAqIHRoaXMgcmVnaXN0ZXIsIHNvIHRoZXJlIGlzIG5vIGNvbmZsaWN0LlxuJiM0MztcdCAqL1xuJiM0MztcdHRzX3N0YXR1cyA9IHJlYWRsKHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBlbmRpbmdfc25hcHNob3RzID0gRklFTERfR0VUKFhHTUFDX1RJTUVTVEFNUF9BVFNOU19NQVNLLCB0c19zdGF0dXMpO1xuJiM0MztcdGlmICghcGVuZGluZ19zbmFwc2hvdHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFjcl92YWx1ZSA9IHJlYWRsKHByaXYtXHUwMDNlcHRwYWRkciAmIzQzOyBQVFBfQUNSKTtcbiYjNDM7XHRjaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTtcbiYjNDM7XHRpZiAoIWNoYW5uZWwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y2hhbm5lbCA9IGlsb2cyKGNoYW5uZWwpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZW5kaW5nX3NuYXBzaG90czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbiYjNDM7XHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdGV2ZW50LnR5cGUgPSBQVFBfQ0xPQ0tfRVhUVFM7XG4mIzQzO1x0XHRldmVudC5pbmRleCA9IGNoYW5uZWw7XG4mIzQzO1x0XHRldmVudC50aW1lc3RhbXAgPSBwdHBfdGltZTtcbiYjNDM7XHRcdHB0cF9jbG9ja19ldmVudChwcml2LVx1MDAzZXB0cF9jbG9jaywgXHUwMDI2ZXZlbnQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGR3eGdtYWMyX2ZsZXhfcHBzX2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGluZGV4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSxcbiBcdFx0XHRcdCAgICB1MzIgc3ViX3NlY29uZF9pbmMsIHUzMiBzeXN0aW1lX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuaW5kZXggNTExYjBmZDVlODM0My4uOTcxODU4MmI4NDgwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG5AQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbiBcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiBcdFx0Lm1hYyA9IFx1MDAyNmR3eGdtYWMyMTBfb3BzLFxuIFx0XHQudmxhbiA9IFx1MDAyNmR3eGdtYWMyMTBfdmxhbl9vcHMsXG4tXHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNnN0bW1hY19wdHAsXG4mIzQzO1x0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd3hnbWFjMl9wdHAsXG4gXHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiBcdFx0Lm1vZGUgPSBOVUxMLFxuIFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5AQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbiBcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiBcdFx0Lm1hYyA9IFx1MDAyNmR3eGxnbWFjMl9vcHMsXG4gXHRcdC52bGFuID0gXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxuLVx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuJiM0MztcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHd4Z21hYzJfcHRwLFxuIFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gXHRcdC5tb2RlID0gTlVMTCxcbiBcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggZTYzMTdiOTRmZmY3ZC4uODE4YWIzZGFhOTFjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtNjcxLDYgJiM0Mzs2NzEsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBuZGVzY19vcHM7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cDtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHA7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyBjaGFpbl9tb2RlX29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5pbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5AQCAtMjc3LDMgJiM0MzsyNzcsMTUgQEAgY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwID0ge1xuIFx0LmdldF9wdHB0aW1lID0gZHdtYWMxMDAwX2dldF9wdHB0aW1lLFxuIFx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdCxcbiB9O1xuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHAgPSB7XG4mIzQzO1x0LmNvbmZpZ19od190c3RhbXBpbmcgPSBjb25maWdfaHdfdHN0YW1waW5nLFxuJiM0MztcdC5pbml0X3N5c3RpbWUgPSBpbml0X3N5c3RpbWUsXG4mIzQzO1x0LmNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCA9IGNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCxcbiYjNDM7XHQuY29uZmlnX2FkZGVuZCA9IGNvbmZpZ19hZGRlbmQsXG4mIzQzO1x0LmFkanVzdF9zeXN0aW1lID0gYWRqdXN0X3N5c3RpbWUsXG4mIzQzO1x0LmdldF9zeXN0aW1lID0gZ2V0X3N5c3RpbWUsXG4mIzQzO1x0LmdldF9wdHB0aW1lID0gZ2V0X3B0cHRpbWUsXG4mIzQzO1x0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxuJiM0MztcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oXG5pbmRleCAzZmUwZTNhODBlODBhLi5kYWRlMDk2MTQxNjNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcbkBAIC0xMDMsNiAmIzQzOzEwMyw3IEBAIGludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiBcbiB2b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xuIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbiYjNDM7dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBzdG1tYWNfcHRwX2Nsb2NrX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIGR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OywKICAgICYjMzQ7RFdNQUNfU09DRlBHQSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2R3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RtbWFjIGRyaXZlciYjMzk7cyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGxvZ2ljIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKFhHTUFDX1RTSUUpIGR1cmluZyB0aGUgc25hcHNob3QgRklGTyByZWFkIGluIGBzbXRnX2Nyb3NzdHN0YW1wYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIGR3eGdtYWMyL2R3eGxnbWFjMiBNQUNzIHRvIGhhbmRsZSBBVVggc25hcHNob3RzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIFBUUCBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZDJhZjRjNjIyODRlNDBjMTkwNmMyNmE4ZGRlZjM3YzIzNGZjZjJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTY6MDM6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKaW5kZXggMWQ3ZjBhNTdkMjg4OS4uYTRkMDBiZjgxNDIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwpAQCAtMzEwLDYgJiM0MzszMTAsMTMgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAlpZiAocHJpdi0mZ3Q7cGxhdC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RNTUFDX0ZMQUdfRVhUX1NOQVBTSE9UX0VOKQogCQlyZXR1cm4gLUVCVVNZOwogCiYjNDM7CS8qIFRoZSBYR01BQyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgY2xlYXJzIFRTSVMgYnkgcmVhZGluZwomIzQzOwkgKiBYR01BQ19USU1FU1RBTVBfU1RBVFVTLCB3aGljaCB3b3VsZCByYWNlIHdpdGggdGhlIFRTSVMgcG9sbAomIzQzOwkgKiBiZWxvdy4gIE1hc2sgWEdNQUNfVFNJRSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjcm9zcy10aW1lc3RhbXAKJiM0MzsJICogc28gdGhlIGhhbmRsZXIgZG9lcyBub3QgcnVuIHdoaWxlIHdlIG93biB0aGUgc25hcHNob3QgRklGTy4KJiM0MzsJICovCiYjNDM7CXN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCBYR01BQ19UU0lFLCAwKTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7YXV4X3RzX2xvY2spOwogCS8qIEVuYWJsZSBJbnRlcm5hbCBzbmFwc2hvdCB0cmlnZ2VyICovCiAJYWNyX3ZhbHVlID0gcmVhZGwocHRwYWRkciAmIzQzOyBQVFBfQUNSKTsKQEAgLTMyOSw2ICYjNDM7MzM2LDcgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7YXV4X3RzX2xvY2spOwomIzQzOwkJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJd3JpdGVsKGFjcl92YWx1ZSwgcHRwYWRkciAmIzQzOyBQVFBfQUNSKTsKQEAgLTM1Myw2ICYjNDM7MzYxLDcgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQocHJpdi0mZ3Q7aW9hZGRyICYjNDM7IFhHTUFDX0lOVF9TVEFUVVMsIHYsCiAJCQkJICh2ICZhbXA7IFhHTUFDX0lOVF9UU0lTKSwgMTAwLCAxMDAwMCk7CiAJaWYgKHJldCkgewomIzQzOwkJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpOwogCQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDslczogV2FpdCBmb3IgdGltZSBzeW5jIG9wZXJhdGlvbiB0aW1lb3V0XG4mIzM0OywKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldDsKQEAgLTM3NSw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3B0cF9sb2NrLCBmbGFncyk7CiAJfQogCiYjNDM7CXN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCAwLCBYR01BQ19UU0lFKTsKJiM0MzsKIAlnZXRfc210Z3RpbWUocHJpdi0mZ3Q7bWlpLCBTTVRHX01ESU9fQUREUiwgJmFtcDtzbXRnX3RpbWUpOwogCXN5c3RlbS0mZ3Q7Y3ljbGVzID0gc210Z190aW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaAppbmRleCA2MWI2ZDQ1YTAyZjVkLi43NmUyODYwYTk1MTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKQEAgLTg3LDcgJiM0Mzs4Nyw3IEBACiAjZGVmaW5lIFhHTUFDX1RTSUUJCQlCSVQoMTIpCiAjZGVmaW5lIFhHTUFDX0xQSUlFCQkJQklUKDUpCiAjZGVmaW5lIFhHTUFDX1BNVElFCQkJQklUKDQpCi0jZGVmaW5lIFhHTUFDX0lOVF9ERUZBVUxUX0VOCQkoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSkKJiM0MzsjZGVmaW5lIFhHTUFDX0lOVF9ERUZBVUxUX0VOCQkoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSB8IFhHTUFDX1RTSUUpCiAjZGVmaW5lIFhHTUFDX1F4X1RYX0ZMT1dfQ1RSTCh4KQkoMHgwMDAwMDA3MCAmIzQzOyAoeCkgKiA0KQogI2RlZmluZSBYR01BQ19QVAkJCUdFTk1BU0soMzEsIDE2KQogI2RlZmluZSBYR01BQ19URkUJCQlCSVQoMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYwppbmRleCBmMDJiNDM0YmJkNTA1Li5iODQ5Y2ViZjliMjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jCkBAIC0xMTU0LDYgJiM0MzsxMTU0LDQ5IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIHRzX3N0YXR1cywgcGVuZGluZ19zbmFwc2hvdHMsIGFjcl92YWx1ZSwgY2hhbm5lbDsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19ldmVudCBldmVudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTY0IHB0cF90aW1lOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUmVhZCBYR01BQ19USU1FU1RBTVBfU1RBVFVTIHRvIGdldCB0aGUgQVVYIHNuYXBzaG90CiYjNDM7CSAqIGNvdW50LiAgVGhpcyByZWFkIGFsc28gY2xlYXJzIHRoZSBUU0lTIGJpdCBpbgomIzQzOwkgKiBYR01BQ19JTlRfU1RBVFVTLgomIzQzOwkgKiBUWCB0aW1lc3RhbXAgcG9sbGluZyBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgVFNJUwomIzQzOwkgKiBhbmQgQVVYVFNUUklHLCBzbyByZWx5IG9uIEFUU05TIGluc3RlYWQuCiYjNDM7CSAqIFRYVFNDIGlzIGNsZWFyZWQgYnkgWEdNQUNfVFhUSU1FU1RBTVBfU0VDLCBub3QgYnkKJiM0MzsJICogdGhpcyByZWdpc3Rlciwgc28gdGhlcmUgaXMgbm8gY29uZmxpY3QuCiYjNDM7CSAqLwomIzQzOwl0c19zdGF0dXMgPSByZWFkbChwcml2LSZndDtpb2FkZHIgJiM0MzsgWEdNQUNfVElNRVNUQU1QX1NUQVRVUyk7CiYjNDM7CiYjNDM7CWlmICghKHByaXYtJmd0O3BsYXQtJmd0O2ZsYWdzICZhbXA7IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBlbmRpbmdfc25hcHNob3RzID0gRklFTERfR0VUKFhHTUFDX1RJTUVTVEFNUF9BVFNOU19NQVNLLCB0c19zdGF0dXMpOwomIzQzOwlpZiAoIXBlbmRpbmdfc25hcHNob3RzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhY3JfdmFsdWUgPSByZWFkbChwcml2LSZndDtwdHBhZGRyICYjNDM7IFBUUF9BQ1IpOwomIzQzOwljaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTsKJiM0MzsJaWYgKCFjaGFubmVsKQomIzQzOwkJcmV0dXJuOwomIzQzOwljaGFubmVsID0gaWxvZzIoY2hhbm5lbCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZW5kaW5nX3NuYXBzaG90czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7cHRwX2xvY2ssIGZsYWdzKTsKJiM0MzsJCXN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LSZndDtwdHBhZGRyLCAmYW1wO3B0cF90aW1lKTsKJiM0MzsJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDtwdHBfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkJZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUzsKJiM0MzsJCWV2ZW50LmluZGV4ID0gY2hhbm5lbDsKJiM0MzsJCWV2ZW50LnRpbWVzdGFtcCA9IHB0cF90aW1lOwomIzQzOwkJcHRwX2Nsb2NrX2V2ZW50KHByaXYtJmd0O3B0cF9jbG9jaywgJmFtcDtldmVudCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGR3eGdtYWMyX2ZsZXhfcHBzX2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGluZGV4LAogCQkJCSAgICBzdHJ1Y3Qgc3RtbWFjX3Bwc19jZmcgKmNmZywgYm9vbCBlbmFibGUsCiAJCQkJICAgIHUzMiBzdWJfc2Vjb25kX2luYywgdTMyIHN5c3RpbWVfZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMKaW5kZXggNTExYjBmZDVlODM0My4uOTcxODU4MmI4NDgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYwpAQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHsKIAkJLmRtYSA9ICZhbXA7ZHd4Z21hYzIxMF9kbWFfb3BzLAogCQkubWFjID0gJmFtcDtkd3hnbWFjMjEwX29wcywKIAkJLnZsYW4gPSAmYW1wO2R3eGdtYWMyMTBfdmxhbl9vcHMsCi0JCS5od3RpbWVzdGFtcCA9ICZhbXA7c3RtbWFjX3B0cCwKJiM0MzsJCS5od3RpbWVzdGFtcCA9ICZhbXA7ZHd4Z21hYzJfcHRwLAogCQkucHRwID0gJmFtcDtzdG1tYWNfcHRwX2Nsb2NrX29wcywKIAkJLm1vZGUgPSBOVUxMLAogCQkudGMgPSAmYW1wO2R3bWFjNTEwX3RjX29wcywKQEAgLTI4MCw3ICYjNDM7MjgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7CiAJCS5kbWEgPSAmYW1wO2R3eGdtYWMyMTBfZG1hX29wcywKIAkJLm1hYyA9ICZhbXA7ZHd4bGdtYWMyX29wcywKIAkJLnZsYW4gPSAmYW1wO2R3eGxnbWFjMl92bGFuX29wcywKLQkJLmh3dGltZXN0YW1wID0gJmFtcDtzdG1tYWNfcHRwLAomIzQzOwkJLmh3dGltZXN0YW1wID0gJmFtcDtkd3hnbWFjMl9wdHAsCiAJCS5wdHAgPSAmYW1wO3N0bW1hY19wdHBfY2xvY2tfb3BzLAogCQkubW9kZSA9IE5VTEwsCiAJCS50YyA9ICZhbXA7ZHdtYWM1MTBfdGNfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCmluZGV4IGU2MzE3Yjk0ZmZmN2QuLjgxOGFiM2RhYTkxYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKQEAgLTY3MSw2ICYjNDM7NjcxLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgbmRlc2Nfb3BzOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBzdG1tYWNfcHRwOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cDsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHA7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX21vZGVfb3BzIHJpbmdfbW9kZV9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyBjaGFpbl9tb2RlX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMKaW5kZXggYjlhOTg1ZmE3NzJjOS4uOWQ3ZDI0MjU5YWJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMKQEAgLTI3NywzICYjNDM7Mjc3LDE1IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cCA9IHsKIAkuZ2V0X3B0cHRpbWUgPSBkd21hYzEwMDBfZ2V0X3B0cHRpbWUsCiAJLnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdCwKIH07CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHAgPSB7CiYjNDM7CS5jb25maWdfaHdfdHN0YW1waW5nID0gY29uZmlnX2h3X3RzdGFtcGluZywKJiM0MzsJLmluaXRfc3lzdGltZSA9IGluaXRfc3lzdGltZSwKJiM0MzsJLmNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCA9IGNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCwKJiM0MzsJLmNvbmZpZ19hZGRlbmQgPSBjb25maWdfYWRkZW5kLAomIzQzOwkuYWRqdXN0X3N5c3RpbWUgPSBhZGp1c3Rfc3lzdGltZSwKJiM0MzsJLmdldF9zeXN0aW1lID0gZ2V0X3N5c3RpbWUsCiYjNDM7CS5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLAomIzQzOwkudGltZXN0YW1wX2ludGVycnVwdCA9IGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQsCiYjNDM7CS5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaAppbmRleCAzZmUwZTNhODBlODBhLi5kYWRlMDk2MTQxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oCkBAIC0xMDMsNiAmIzQzOzEwMyw3IEBAIGludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKIAogdm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKTsKIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTsKJiM0Mzt2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBzdG1tYWNfcHRwX2Nsb2NrX29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZHdtYWMxMDAwX3B0cF9jbG9ja19vcHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA3NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBOZXR3b3JrIERyaXZlciBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYHN0bW1hY2AgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgWEdNQUMgdmFyaWFudCAoZHd4Z21hYzIgYW5kIGR3eGxnbWFjMikgYW5kIHRoZSBoYW5kbGluZyBvZiB0aW1lc3RhbXBzLiAgSXQgYWRkcyBhIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgbW9kaWZpZXMgc29tZSBrZXkgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuICBTcGVjaWZpY2FsbHksIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgd2l0aCBRRU1VPwoKYHN0bW1hY2AgaXMgU1RNaWNyb2VsZWN0cm9uaWNzJiMzOTsgZHJpdmVyLCByaWdodD8gQ292ZXJzIGEgcmFuZ2Ugb2YgRXRoZXJuZXQgY29udHJvbGxlcnMuICBRRU1VIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBlbXVsYXRlZCBuZXR3b3JrIGNhcmRzLCBidXQgZG9lcyBpdCBpbmNsdWRlIGFuICpgc3RtbWFjYCogZW11bGF0aW9uPyAgVGhhdCYjMzk7cyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uCgpMZXQgbWUgdGhpbmsuLi4gSXMgdGhlcmUgYSBQQ0kgZHJpdmVyIGZvciBgc3RtbWFjYD8gWWVwLCB0aGVyZSBpczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIEdvb2QsIHRoYXQmIzM5O3MgYSBrZXkgY2x1ZS4gSWYgdGhlcmUmIzM5O3MgYSBQQ0kgZHJpdmVyLCBpdCAqbWlnaHQqIGJlIHByb2JlYWJsZSBpbiBRRU1VLiAgSSBuZWVkIHRvIGNoZWNrIHdoYXQgUENJIElEcyBgc3RtbWFjX3BjaS5jYCBiaW5kcyB0by4gIFRoYXQmIzM5O3MgaG93IEkgY2FuIHRlbGwgaWYgSSBjYW4gYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gSSBkb24mIzM5O3QgaGF2ZSB0aGUgUUVNVSBzb3VyY2UgbG9jYWxseSwgYnV0IHRoZSBwYXRjaCBjb250ZXh0IGdpdmVzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KClFFTVUgaW5jbHVkZXMgYSBidW5jaCBvZiBuZXR3b3JrIGVtdWxhdGlvbjogYGlteF9mZWNgLCBgY2FkZW5jZV9nZW1gLCBgZTEwMDBgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgaWdiYCwgYW5kIHRoZSBsaWtlLiBJdCYjMzk7cyBnb3QgYW4gYHhnbWFjLmNgISBXYWl0LiBgeGdtYWNgPyBJcyB0aGF0IGBzdG1tYWNgPyAgTWlnaHQgYmUgYSByZWxhdGVkIHZhcmlhbnQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCmBzdG1tYWNgIGlzIGNvbW1vbiBpbiBtYW55IEFSTSBTb0NzLiBRRU1VIGVtdWxhdGVzIHNldmVyYWwgQVJNIG1hY2hpbmVzLiBJdCYjMzk7cyBhIHBvc3NpYmlsaXR5LiBgYWxsd2lubmVyLXN1bjhpLWVtYWNgPyBOb3BlLCBkaWZmZXJlbnQuIGBpbXhfZmVjYD8gTm8uIGBjYWRlbmNlX2dlbWA/IFN0aWxsIG5vLiBOZWVkIHRvIHNlYXJjaCBmb3IgYHN0bW1hY2AgaW4gdGhlIFFFTVUgY29kZWJhc2UsIGlmIEkgaGFkIGFjY2Vzcy4gQnV0IHRoZSBQQ0kgZHJpdmVyIGlzIG15IGJlc3QgYmV0IHJpZ2h0IG5vdy4gSSYjMzk7dmUgZ290IHRvIGNoZWNrIHRob3NlIFBDSSBJRHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UENJX0RFVklDRV9JRF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTE5Mj1zdGF0aWMgdm9pZCBzdG1tYWNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwMDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1RNTUFDX1NUTU1BQ1x0XHQweDExMDhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDE6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZTk9QU1lTX0dNQUM1X0lEXHRcdDB4NzEwMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkwCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIHNlZSB0aGVzZSBhZGRyZXNzZXMsIDB4MTEwOCBhbmQgMHg3MTAyLCB3aGljaCB0aGUgdGFyZ2V0IGNvZGUgYmluZHMgdG8uIEhtbSwgZG9lcyBRRU1VIGhhbmRsZSB0aGVzZSBieSBkZWZhdWx0PyBQcm9iYWJseSBub3QuIEkgcmVjYWxsIHN5emthbGxlciBoYXMgdGhhdCB2aGNpIFBDSSBkZXZpY2UgaW5qZWN0aW9uLCBvciBwZXJoYXBzIHRoZXJlJiMzOTtzIGFub3RoZXIgZnV6emluZyBlbnRyeSBwb2ludCBhdmFpbGFibGUuIEJ1dCB3YWl0LCB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBgc3l6X3BjaV92cGNpYD8gTGV0IG1lIHNlZS4uLiB5ZXMsIHRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgY2FsbHMgb3V0OiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLiYjMzQ7LiBBaCwgdGhhdCBpbmNsdWRlcyB0aG9zZSBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnJlYWwqIGhhcmR3YXJlLCBsaWtlIHRob3NlIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuCgpCdXQgaG9sZCBvbi4uLiBgc3RtbWFjYC4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIEV0aGVybmV0IE1BQyBkcml2ZXIsIHN1cGVyIGNvbW1vbiBpbiB2YXJpb3VzIFNvQ3MsIGFuZCBpdCBoYXMgYSBQQ0kgd3JhcHBlci4gSW50ZXJlc3RpbmcuIEFoLCB0aGUgcGF0Y2ggYWN0dWFsbHkgbW9kaWZpZXMgYGR3bWFjLXNvY2ZwZ2EuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBbHRlcmEgU09DRlBHQS4gT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZHdtYWMtc29jZnBnYS5jYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NmcGdhX2R3bWFjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz01ODA9c3RhdGljIHZvaWQgc29jZnBnYV9hZ2lsZXg1X3NldHVwX3BsYXRfZGF0KHN0cnVjdCBzb2NmcGdhX2R3bWFjICpkd21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNzpzdGF0aWMgaW50IHNvY2ZwZ2FfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz02OTI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jZnBnYV9kd21hY19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjkzOlx0LnByb2JlICA9IHNvY2ZwZ2FfZHdtYWNfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjk0LVx0LmRyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIHRoZSBgc3RtbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggaXQuIENhbiBzeXprYWxsZXIgcHJvYmUgcGxhdGZvcm0gZHJpdmVycyBkaXJlY3RseT8gSXQgZGVwZW5kcy4gSWYgdGhlcmUmIzM5O3MgYSBkZXZpY2UgdHJlZSBub2RlLCBvciBpZiB3ZSBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIHdlJiMzOTtyZSBpbiBidXNpbmVzcy4gSSBrbm93IHN5emthbGxlciBoYXMgcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCB3aXRoIHBsYXRmb3JtIGRldmljZXMsIGl04oCZcyBub3QgYWx3YXlzIHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnN0YW50aWF0ZSB0aGVtIHVubGVzcyB0aGV5IGFyZSBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIERULgoKSG1tLCB0aGlzIHBhdGNoIGFsc28gaGl0cyBgZHd4Z21hYzJfY29yZS5jYCBhbmQgYHN0bW1hY19od3RzdGFtcC5jYCDigJMgdGhhdCYjMzk7cyBjb3JlIGBzdG1tYWNgIGNvZGUuIFNwZWNpZmljYWxseSwgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIGJlaW5nIGFkZGVkIHRvIGBkd3hnbWFjMl9wdHBgLCB3aGljaCBpcyB1c2VkIGJ5IGBkd3hnbWFjMjEwX29wc2AgYW5kIGBkd3hsZ21hYzJfb3BzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGR3eGdtYWMyYCBpcyBldmVuIHJlYWNoYWJsZS4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGlzIGFscmVhZHkgZnV6emluZyBgc3RtbWFjYC4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgc2VhcmNoIHN5emthbGxlciYjMzk7cyBzeXpsYW5nIGRlc2NyaXB0aW9ucywgd2hpY2ggSSB3b3VsZCBkbyBub3JtYWxseSwgYmVjYXVzZSB0aGUgdG9vbHMgYXZhaWxhYmxlIGFyZSBvbmx5IGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLCBidXQgaXQgZG9lc24mIzM5O3QgbWF0dGVyIGJlY2F1c2UgaXQgd291bGQgdXNlIHRoZSB0b29sIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsIEkgZG9uJiMzOTt0IG5lZWQgdG8gZG8gdGhpcy4KCklzIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcj8gTm8sIGl0JiMzOTtzIGEgZ2VuZXJpYyBFdGhlcm5ldCBNQUMgZHJpdmVyIHVzZWQgaW4gYSBidW5jaCBvZiBTb0NzIGxpa2UgSW50ZWwsIFJvY2tjaGlwLCBBbGx3aW5uZXIsIEFtbG9naWMsIE5YUCwgZXRjLiBJdCYjMzk7cyBhIGNvcmUgZHJpdmVyLCBubyBxdWVzdGlvbi4KCk9rYXksIHNvIGlzIGl0IHJlYWNoYWJsZSBpbiBRRU1VPyBZZXMuIFFFTVUgaGFzIGBody9uZXQveGdtYWMuY2AsIGVtdWxhdGluZyB0aGUgU3lub3BzeXMgWEdNQUMsIGFuZCBgc3RtbWFjYCAqaXMqIHRoZSBkcml2ZXIgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDLiBRRU1VIGRvZXMgZW11bGF0ZSBgeGdtYWNgIGluIGNlcnRhaW4gbWFjaGluZXMsIGxpa2UgSGlnaGJhbmsvTWlkd2F5LiBRRU1VIGFsc28gaGFzIGBkd21hY2AgZW11bGF0aW9uLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyB2aWEgYHN5el9wY2lfdnBjaWAgb3Igc2ltaWxhciwgYW5kIGBzdG1tYWNgIGhhcyBhIFBDSSBkcml2ZXIuIFNvLCB2aXJ0dWFsIFBDSSBpbmplY3Rpb24gaXMgYW4gYXZlbnVlIGZvciBmdXp6aW5nIHRoaXMuCgpXYWl0LCBsb29raW5nIGNsb3NlciwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZHdtYWMtc29jZnBnYS5jYCwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBiaXQgbW9yZSBjb21wbGV4LCBidXQgdGhlIGNvcmUgYHN0bW1hY2AgY29kZSBpbiBgZHd4Z21hYzJfY29yZS5jYCBpcyBhbHNvIGFmZmVjdGVkLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLiBJdCYjMzk7cyBhc3NpZ25lZCB0byBgZHd4Z21hYzJfcHRwLnRpbWVzdGFtcF9pbnRlcnJ1cHRgIGluIGBzdG1tYWNfaHd0c3RhbXAuY2AuIFRoaXMgaXMgdGhlbiB1c2VkIGluIGBod2lmLmNgIGZvciBgZHd4Z21hYzIxMGAgYW5kIGBkd3hsZ21hYzJgLiBOb3cgSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgd2hlcmUgYHRpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpjYWxsZWQqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpbWVzdGFtcF9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MTM9dm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMtNTIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYzo1MjM6dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTUyNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jOjU1MzpzdGF0aWMgdm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdF9jZmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBib29sIGVuKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmM9NTY3PWludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTYwMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmM6NjAxOlx0XHRkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdF9jZmcocHJpdiwgb24pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy02MDItXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYz0xMTQzPXN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTE1Nzp2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD00OTY9c3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUwNS1cdHZvaWQgKCpnZXRfcHRwdGltZSkodm9pZCBfX2lvbWVtICppb2FkZHIsIHU2NCAqcHRwX3RpbWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUwNjpcdHZvaWQgKCp0aW1lc3RhbXBfaW50ZXJydXB0KShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUwNy1cdHZvaWQgKCpod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUyMy1cdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgcHRwLCBnZXRfcHRwdGltZSwgX19hcmdzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUyNDojZGVmaW5lIHN0bW1hY190aW1lc3RhbXBfaW50ZXJydXB0KF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUyNTpcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgcHRwLCB0aW1lc3RhbXBfaW50ZXJydXB0LCBfX2FyZ3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTI2LSNkZWZpbmUgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeShfX3ByaXYsIF9fYXJncy4uLikgXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYz0yMDQ9c3RhdGljIHZvaWQgZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjIxNDpzdGF0aWMgdm9pZCB0aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjU4PWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNjUtXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI2NjpcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gdGltZXN0YW1wX2ludGVycnVwdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI2Ny1cdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjcwPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNzctXHQuZ2V0X3B0cHRpbWUgPSBkd21hYzEwMDBfZ2V0X3B0cHRpbWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyNzg6XHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjc5LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjgxPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI4OC1cdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6Mjg5Olx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjkwLVx0Lmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYyMTk9c3RhdGljIHZvaWQgc3RtbWFjX2NvbW1vbl9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjI1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjI1NTpcdFx0c3RtbWFjX3RpbWVzdGFtcF9pbnRlcnJ1cHQocHJpdiwgcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYyNTYtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oPTEwND12b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oOjEwNTp2b2lkIGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg6MTA2OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oLTEwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBTVE1NQUMgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzdG1tYWNfdGltZXN0YW1wX2ludGVycnVwdGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgc3RtbWFjX2NvbW1vbl9pbnRlcnJ1cHRgLCB3aGljaCBpcyB0aGUgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIE1BQy4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY2FuIEkgZXZlbiBnZXQgdG8gYHN0bW1hY2A/IEFic29sdXRlbHksIGl0JiMzOTtzIGEgd2lkZWx5IHVzZWQsIGdlbmVyaWMgTUFDIGRyaXZlciDigJMgZ29vZCB0YXJnZXQuIENhbiB0aGlzIHRoaW5nIGJlIGZ1enplZD8gRGVmaW5pdGVseS4gU3l6a2FsbGVyIGlzIHBlcmZlY3QgZm9yIG5ldHdvcmsgZHJpdmVycyBsaWtlIHRoaXMuIEkgY2FuIGluamVjdCBwYWNrZXRzLCBhbmQgSSBrbm93IEkgY2FuIGhpdCBpdCB3aXRoIGlvY3Rscy4gQWhhLCBhbmQgdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBpcyAqc3BlY2lmaWNhbGx5KiBhYm91dCBQVFAgdGltZXN0YW1wcyAoYHNtdGdfY3Jvc3N0c3RhbXBgLCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGApLiBCaW5nbyEKClBUUCwgSSBrbm93IHRoYXQuIEl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBgL2Rldi9wdHBYYCBkZXZpY2VzIGFuZCBgU0lPQ1NIV1RTVEFNUGAgaW9jdGxzLiBUaGF0JiMzOTtzIGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuIElzIGBzdG1tYWNgIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gWWVzLCB3aXRob3V0IGEgZG91YnQuIEl0JiMzOTtzIGEgY29yZSBuZXR3b3JrIGRyaXZlciwgYW5kIHRob3NlIGFyZSBhbHdheXMgaGlnaC12YWx1ZSB0YXJnZXRzLiBOb3csIHdoYXQmIzM5O3MgbXkgbmV4dCBzdGVwPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHN0bW1hY2AgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBteSBmdXp6aW5nIHNldHVwLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYFNUTU1BQ19FVEhgIG1vZHVsZS4gQmVmb3JlIGRpdmluZyBpbnRvIGNvZGUsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBmaXJzdC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRyb3VibGVzaG9vdGluZyBhbnkgZnV0dXJlIGlzc3Vlcy4gV2hlcmUgZG9lcyBpdCBwdWxsIGl0cyBkYXRhIGZyb20/IFdoYXQgb3RoZXIgbW9kdWxlcyBkb2VzIGl0IG5lZWQgdG8gZnVuY3Rpb24gcHJvcGVybHk/IEFueSBleHRlcm5hbCBsaWJyYXJpZXM/IFRpbWUgdG8gbWFwIHRoaXMgb3V0IG1ldGhvZGljYWxseS4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSB0aGlua2luZyBvZiBldmVyeXRoaW5nIGFuZCBub3QgbWlzc2luZyBzb21ldGhpbmcgc2ltcGxlIHRoYXQgd2lsbCBiaXRlIG1lIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU1RNTUFDX0VUSFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAgNjpcdFx0ZGVwZW5kcyBvbiBFVEhUT09MX05FVExJTktcbiAgIDc6XHRcdHNlbGVjdCBNSUlcbiAgIDg6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICAgOTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAxMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcbiAgMTM6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYnVpbHQgYXJvdW5kIGFcbiAgMTY6XHRcdCAgU3lub3BzeXMgSVAgQ29yZS5cbiAgMTc6XHRcbiAgMTg6XHRpZiBTVE1NQUNfRVRIXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIFNUTU1BQ19TRUxGVEVTVFNcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1wmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDIzOlx0XHRkZWZhdWx0IG5cbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNUTU1BQyBTZWxmdGVzdHMgdXNpbmcgZXRodG9vbC4gRW5hYmxlIHRoaXNcbiAgMjY6XHRcdCAgZmVhdHVyZSBpZiB5b3UgYXJlIGZhY2luZyBwcm9ibGVtcyB3aXRoIHlvdXIgSFcgYW5kIHN1Ym1pdCB0aGUgdGVzdFxuICAyNzpcdFx0ICByZXN1bHRzIHRvIHRoZSBuZXRkZXYgTWFpbGluZyBMaXN0LlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBTVE1NQUNfUExBVEZPUk1cbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNvbnNpZGVyaW5nIERldmljZSBEcml2ZXIgT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIG5ldyBoYXJkd2FyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGRyaXZlciByb3V0ZS4gSXQgc2VlbXMgd2UgaGF2ZSB0d28gcHJpbWFyeSBvcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZXh0OiBgU1RNTUFDX1BDSWAgZm9yIFBDSS1iYXNlZCBpbnRlZ3JhdGlvbiBhbmQgYERXTUFDX1NPQ0ZQR0FgIGZvciB0aGUgcGxhdGZvcm0gZHJpdmVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRob3NlIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGJvdGgsIGV4YW1pbmUgdGhlIGNvZGUsIGFuZCBkZXRlcm1pbmUgd2hpY2ggYmVzdCBmaXRzIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUgYW5kIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIFdoaWNoIG9mIHRob3NlIGRyaXZlcnMsIGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgIGlzIG1vc3QgYXBwcm9wcmlhdGUsIGlzIHRoZSBuZXh0IGNydWNpYWwgc3RlcC4gTGV0IG1lIGdvIG92ZXIgdGhlbSBhbmQgc2VlIHdoaWNoIG9uZSBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIChTVE1NQUNfUENJfERXTUFDX1NPQ0ZQR0EpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTE5MT1jb25maWcgRFdNQUNfUzMyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjIwMzpjb25maWcgRFdNQUNfU09DRlBHQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMDQtXHR0cmlzdGF0ZSBcJiMzNDtTT0NGUEdBIGR3bWFjIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODUxCgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXM6CgoqKkFuYWx5emluZyBEZXBlbmRlbmNpZXM6IGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgYERXTUFDX1NPQ0ZQR0FgIGFuZCBgU1RNTUFDX1BDSWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMg4oCTIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBkcml2ZXJzIGFyZSB0aGV5IHJlbGlhbnQgdXBvbj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNoYXJlZCBkZXBlbmRlbmNpZXMgdGhhdCBqdW1wIG91dCBhdCBtZSByaWdodCBhd2F5PyBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBLbm93aW5nIHRoZSAmIzM0O3dobyB0YWxrcyB0byB3aG9tJiMzNDsgcGljdHVyZSBhdCB0aGlzIGxldmVsIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24sIGJlIGl0IHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXppbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGhhcmR3YXJlIHBsYXRmb3JtcyB0aGVzZSBtb2R1bGVzIGFyZSBkZXNpZ25lZCBmb3IsIHBvdGVudGlhbCBkcml2ZXIgY29uZmxpY3RzLCBvciBvcHBvcnR1bml0aWVzIGZvciBzdHJlYW1saW5pbmcgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGludGVyY29ubmVjdGVkbmVzcywgbm90aW5nIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIG9yIGFyZWFzIHdoZXJlIEkgbWlnaHQgbmVlZCB0byBwYXkgZXh0cmEgYXR0ZW50aW9uIGxhdGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDM6XHRjb25maWcgRFdNQUNfU09DRlBHQVxuIDIwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7U09DRlBHQSBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMjA1Olx0XHRkZWZhdWx0IEFSQ0hfSU5URUxfU09DRlBHQVxuIDIwNjpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfSU5URUxfU09DRlBHQSB8fCBDT01QSUxFX1RFU1QpXG4gMjA3Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDIwODpcdFx0c2VsZWN0IE1ESU9fUkVHTUFQXG4gMjA5Olx0XHRzZWxlY3QgUkVHTUFQX01NSU9cbiAyMTA6XHRcdHNlbGVjdCBQQ1NfTFlOWFxuIDIxMTpcdFx0aGVscFxuIDIxMjpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIEFsdGVyYSBTT0NGUEdBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyOQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHBhdGNoLCB0cnlpbmcgdG8gZ2V0IGl0IHJpZ2h0IGZvciBzeXprYWxsZXIuICBMZXQmIzM5O3Mgc2Vl4oCmIGBTVE1NQUNfUENJYCBkZXBlbmRzIG9uIGBQQ0lgIGFuZCBgQ09NTU9OX0NMS2AuIFRoYXQgbWFrZXMgc2Vuc2UuIFNpbmNlIHN5emthbGxlciAqY2FuKiBwcm9iZSBQQ0kgZGV2aWNlcywgZW5hYmxpbmcgYFNUTU1BQ19QQ0lgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlLgoKV2FpdCBhIG1pbnV0ZSwgdGhpcyBwYXRjaCAqYWxzbyogdG91Y2hlcyBgZHdtYWMtc29jZnBnYS5jYC4gIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZW5hYmxlIGBEV01BQ19TT0NGUEdBYCB0b28sIGp1c3QgdG8gZW5zdXJlIHRoYXQgY29kZSBnZXRzIGNvbXBpbGVkLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBldmVyeXRoaW5nIGlzIGJlaW5nIHB1bGxlZCBpbiB0cmFuc2l0aXZlbHkuIEkgbmVlZCB0byBiZSAqc3VyZSouCgpOb3csIGEgcXVpY2sgY2hlY2vigKYgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgRFdNQUNfU09DRlBHQWA/IEFoLCBgT0ZgIGFuZCBlaXRoZXIgYEFSQ0hfSU5URUxfU09DRlBHQWAgKm9yKiBgQ09NUElMRV9URVNUYC4gSG1tLiBTeXprYWxsZXIga2VybmVscyB1c3VhbGx5IGRvbiYjMzk7dCBoYXZlIGBBUkNIX0lOVEVMX1NPQ0ZQR0FgIGVuYWJsZWQsIGJ1dCB0aGV5ICpkbyogdHlwaWNhbGx5IGhhdmUgYENPTVBJTEVfVEVTVD15YC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBuZWVkIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zLiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LgoKUmlnaHQsIHNvIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyBydW4gdGhyb3VnaCBhbmQgd29ya2luZyBjb3JyZWN0bHksIEkgc2hvdWxkIHNlZSB3aGF0IGZ1bmN0aW9ucyBhcmUgY2hhbmdlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggYWRkcyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgYW5kIG1vZGlmaWVzIGBzbXRnX2Nyb3NzdHN0YW1wYC4gT2theS4gYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIGRlY2xhcmVkIHN0YXRpYyB3aXRoaW4gYGR3bWFjLXNvY2ZwZ2EuY2AuCgpPa2F5LiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgYHNtdGdfY3Jvc3N0c3RhbXBgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHVzZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IGNvdmVyYWdlLCBhbmQgdGhhdCBJJiMzOTttIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtdGdfY3Jvc3N0c3RhbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTI3OT1zdGF0aWMgdm9pZCBnZXRfc210Z3RpbWUoc3RydWN0IG1paV9idXMgKm1paSwgaW50IHNtdGdfYWRkciwgdTY0ICpzbXRnX3RpbWUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoyOTQ6c3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTUtXHRcdFx0ICAgIHZvaWQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9NTgwPXN0YXRpYyB2b2lkIHNvY2ZwZ2FfYWdpbGV4NV9zZXR1cF9wbGF0X2RhdChzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwMy1cdHBsYXRfZGF0LVx1MDAzZWludF9zbmFwc2hvdF9udW0gPSBBVVhfU05BUFNIT1QwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNDpcdHBsYXRfZGF0LVx1MDAzZWNyb3NzdHN0YW1wID0gc210Z19jcm9zc3RzdGFtcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGNyb3NzdHN0YW1wYCBBc3NpZ25tZW50KioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBzbXRnX2Nyb3NzdHN0YW1wYCB2YXJpYWJsZS4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgYXNzaWduaW5nIGl0cyB2YWx1ZSB0byBgcGxhdF9kYXQtJmd0O2Nyb3NzdHN0YW1wYC4gT2theSwgc3RhbmRhcmQgYXNzaWdubWVudCwgbm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyB0aGVyZS4gTXkgcmVhbCBxdWVzdGlvbiBpcywgKndoZXJlKiBpcyBgY3Jvc3N0c3RhbXBgIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRvd25zdHJlYW0gaW1wYWN0LiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgYWxsIHRoZSBjYWxscyBhbmQgcmVmZXJlbmNlcyB0byBgY3Jvc3N0c3RhbXBgIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkLiBXaGF0IG9wZXJhdGlvbnMgaXMgaXQgaW52b2x2ZWQgaW4/IElzIGl0IHBhcnQgb2YgYW55IGNyaXRpY2FsIHBhdGg/IElzIHRoaXMgYSB0aW1lc3RhbXAgdXNlZCBmb3Igc3luY2hyb25pemF0aW9uIG9yIG1lYXN1cmVtZW50PyBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kLCBjcnVjaWFsbHksIHRvIGRldGVybWluZSBpZiB0aGlzIGFzc2lnbm1lbnQgaXMgY29ycmVjdCBhbmQgaWYgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCB0aW1pbmcgb3IgZGF0YSBmbG93LiBEaWdnaW5nIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcm9zc3RzdGFtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTM1Mz1zdGF0aWMgaW50IHN0bW1hY19jcm9zc190c19pc3Ioc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMzU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzozNTg6c3RhdGljIGludCBpbnRlbF9jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM1OS1cdFx0XHQgICAgIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz01ODU9c3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzE0LVx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3MTU6XHRcdHBsYXQtXHUwMDNlY3Jvc3N0c3RhbXAgPSBpbnRlbF9jcm9zc3RzdGFtcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzE2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz0yNzk9c3RhdGljIHZvaWQgZ2V0X3NtdGd0aW1lKHN0cnVjdCBtaWlfYnVzICptaWksIGludCBzbXRnX2FkZHIsIHU2NCAqc210Z190aW1lKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjk0OnN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjk1LVx0XHRcdCAgICB2b2lkICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDMtXHRwbGF0X2RhdC1cdTAwM2VpbnRfc25hcHNob3RfbnVtID0gQVVYX1NOQVBTSE9UMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo2MDQ6XHRwbGF0X2RhdC1cdTAwM2Vjcm9zc3RzdGFtcCA9IHNtdGdfY3Jvc3N0c3RhbXA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjA1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9Mjc2PXN0YXRpYyBpbnQgc3RtbWFjX2dldF9zeW5jZGV2aWNldGltZShrdGltZV90ICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODI6XHRyZXR1cm4gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNyb3NzdHN0YW1wKGRldmljZSwgc3lzdGVtLCBjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4My19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI4NTpzdGF0aWMgaW50IHN0bW1hY19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODY6XHRcdFx0XHQgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI5MTpcdHJldHVybiBnZXRfZGV2aWNlX3N5c3RlbV9jcm9zc3RzdGFtcChzdG1tYWNfZ2V0X3N5bmNkZXZpY2V0aW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI5Mi1cdFx0XHRcdFx0ICAgICBwcml2LCBOVUxMLCB4dHN0YW1wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9MzM1PXZvaWQgc3RtbWFjX3B0cF9yZWdpc3RlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzozNjU6XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNyb3NzdHN0YW1wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjM2NjpcdFx0cHJpdi1cdTAwM2VwdHBfY2xvY2tfb3BzLmdldGNyb3NzdHN0YW1wID0gc3RtbWFjX2dldGNyb3NzdHN0YW1wO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LCBhbmQgaXQgbG9va3MgbGlrZSBJJiMzOTt2ZSBmb3VuZCBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgYGNyb3NzdHN0YW1wYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgdmlhIGBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXBgLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBpcyBhc3NpZ25lZCB0byB0aGUgYHB0cF9jbG9ja19vcHMuZ2V0Y3Jvc3N0c3RhbXBgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGF0IGBwdHBfY2xvY2tfb3BzLmdldGNyb3NzdHN0YW1wYCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgUFRQIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCB3aGVuIHVzZXJzcGFjZSBpc3N1ZXMgdGhlIGBQVFBfU1lTX09GRlNFVF9FWFRFTkRFRGAgaW9jdGwgb24gYSBgL2Rldi9wdHBYYCBkZXZpY2UuIFRoYXQgbWFrZXMgaXQgaW1tZWRpYXRlbHkgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUsIGZ1enphYmxlLgoKSSBuZWVkIHRvIGRpZyBpbnRvIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzoKKiAgIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCwgd2hpY2ggd2FzIGFkZGVkIGluIGBkd3hnbWFjMl9jb3JlLmNgCiogICBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYCB3aGljaCBsaXZlcyBpbiBgc3RtbWFjX3B0cC5jYAoqICAgYHN0bW1hY19nZXRfc3luY2RldmljZXRpbWVgIGFsc28gaW4gYHN0bW1hY19wdHAuY2AKCkhvbGQgb24sIEkgcmVtZW1iZXIgdGhhdCBgc210Z19jcm9zc3RzdGFtcGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGlubGluZWQsIGFuZCB3b24mIzM5O3QgYmUgYSBkaXN0aW5jdCBzeW1ib2wsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgc28gaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGUgcHJvbXB0IHNheXMgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBnaXZlbiB0byBtZS4KCk9rYXksIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYCBpcyBpbmRlZWQgZGVjbGFyZWQgc3RhdGljLCBidXQgaXQmIzM5O3MgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIFBUUCwgc28gSSB3aWxsIGhhdmUgdG8ga2VlcCBpdCBpbiBtaW5kLiBJIHdvbmRlciBhYm91dCBgc3RtbWFjX3B0cF9yZWdpc3RlcmAgLSB0aGF0IG9uZSYjMzk7cyBjYWxsZWQgZHVyaW5nIHByb2JlLiBUaGVuIHRoZXJlIGlzIGBzdG1tYWNfY29tbW9uX2ludGVycnVwdGAsIGJ1dCB0aGF0JiMzOTtzIGFsc28gc3RhdGljLgoKQWhhISBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgKm5vbi1zdGF0aWMqLCBzbyBJIGNhbiBkZWZpbml0ZWx5IHVzZSB0aGF0LgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIG9idmlvdXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGFuZ2luZyBhcm91bmQsIHNvIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGBzdG1tYWNfaHd0c3RhbXAuY2AganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYz0xMTQzPXN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTE1Nzp2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jPTI4MT1jb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yODgtXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI4OTpcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI5MC1cdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oPTEwNT12b2lkIGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg6MTA2OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oLTEwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjQKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIGdvb2QuIE5vdywgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpb2N0bCBlbnRyeSBwb2ludCByZWxhdGVkIHRvIFBUUC4gV2hlcmUgaXMgdGhhdCBkZWZpbmVkPyBJIHNlZW0gdG8gcmVjYWxsIGBwdHBfY2xvY2tfb3BzYCBoYXZpbmcgYSBgZ2V0Y3Jvc3N0c3RhbXBgIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIGEgZ29vZCBsZWFkLiBMZXQgbWUgZGlnIGludG8gYGRyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIGZpbmQgdGhlIGlvY3RsLiBXZSBkb24mIzM5O3QgbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3MgaGVyZSwgc28gSSYjMzk7bGwganVzdCBmb2N1cyBvbiBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIG5vdywgYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUga2V5LgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaC4gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHNtdGdfY3Jvc3N0c3RhbXBgIHdpdGhpbiBgZHdtYWMtc29jZnBnYS5jYC4gSXMgKnRoYXQqIHN0YXRpYz8gWWVzLCBpdCBpcy4gUmlnaHQuIElzIHRoZXJlICphbnl0aGluZyogbm9uLXN0YXRpYyBJIGNhbiBsZXZlcmFnZSBpbiBgZHdtYWMtc29jZnBnYS5jYD8gYHNvY2ZwZ2FfZHdtYWNfcHJvYmVgIGxvb2tzIHByb21pc2luZywgYnV0IHNob290LCBpdCYjMzk7cyBzdGF0aWMgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIGBkd21hYy1zb2NmcGdhLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSB0aGF0IEkgY2FuIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MzspJiM0MztcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9NjE9c3RydWN0IHNvY2ZwZ2FfZHdtYWMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo3NTpzdGF0aWMgcGh5X2ludGVyZmFjZV90IHNvY2ZwZ2FfZ2V0X3BsYXRfcGh5bW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo4MDpzdGF0aWMgdm9pZCBzb2NmcGdhX3NnbWlpX2NvbmZpZyhzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTgxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6ODc6c3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19maXhfbWFjX3NwZWVkKHZvaWQgKmJzcF9wcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTg4LVx0XHRcdFx0XHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoxMjU6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3BhcnNlX2RhdGEoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMTI2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI1NTpzdGF0aWMgaW50IHNvY2ZwZ2Ffc2V0X3BoeV9tb2RlX2NvbW1vbihpbnQgcGh5bW9kZSwgdTMyICp2YWwpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjU2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI3OTpzdGF0aWMgdm9pZCBnZXRfc210Z3RpbWUoc3RydWN0IG1paV9idXMgKm1paSwgaW50IHNtdGdfYWRkciwgdTY0ICpzbXRnX3RpbWUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjgwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI5NDpzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5NS1cdFx0XHQgICAgdm9pZCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mzk1OnN0YXRpYyBpbnQgc29jZnBnYV9nZW41X3NldF9waHlfbW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMzk2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTQ1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo0NTQ6c3RhdGljIGludCBzb2NmcGdhX2dlbjEwX3NldF9waHlfbW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNDU1LVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTA3OnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTA4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU1MTpzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTU3OnN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTU4LVx0XHRcdFx0XHRcdCAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTYzOnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTY0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU3MDpzdGF0aWMgdm9pZCBzb2NmcGdhX2dlbjVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1ODA6c3RhdGljIHZvaWQgc29jZnBnYV9hZ2lsZXg1X3NldHVwX3BsYXRfZGF0KHN0cnVjdCBzb2NmcGdhX2R3bWFjICpkd21hYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01ODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjA3OnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDgyCgkJCQkJCQlvdXRwdXQ6IDg1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGluIHRoZSBFdGhlcm5ldCBEcml2ZXIgQ29kZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGR3bWFjLXNvY2ZwZ2EuY2AgZmlsZSwgYW5kIEkmIzM5O20gbm90aWNpbmcgdGhhdCBhbGwgdGhlIGZ1bmN0aW9ucyBpbiBpdCBhcmUgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZSwgdXN1YWxseSBpbmRpY2F0aW5nIHRoYXQgdGhleSYjMzk7cmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZSwgcHJldmVudGluZyBuYW1pbmcgY29uZmxpY3RzIGFuZCBlbnN1cmluZyBhIGNlcnRhaW4gbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbi4gQnV0IHRoZW4sIGEgcmVkIGZsYWcgcG9wcGVkIHVwOiBJIHJlY2FsbCB0aGF0IGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBpcyAqbm90KiBgc3RhdGljYCBhbmQgaXQgcmVzaWRlcyBpbiBgZHd4Z21hYzJfY29yZS5jYC4gVGhpcyBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBtb3JlIHRvIHRoaXMgdGhhbiBhIHN0cmFpZ2h0Zm9yd2FyZCBmaWxlLWxldmVsIHNjb3BlLiBUaGlzIGludGVycnVwdHMgbXkgY3VycmVudCB3b3JrLiBJIHdvbmRlciBpZiB0aGVyZSBtaWdodCBiZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmbG9hdGluZyBhcm91bmQgaW4gdGhlIHJlbGF0ZWQgdGltZXN0YW1wIG9yIGhhcmR3YXJlIHRpbWVzdGFtcC1yZWxhdGVkIGZpbGVzLCBgc3RtbWFjX3B0cC5jYCBvciBgc3RtbWFjX2h3dHN0YW1wLmNgLCB0aGF0IGFyZSBzb21laG93IGhvb2tlZCBpbnRvIHRoaXMgUFRQIG9yIHRpbWVzdGFtcGluZyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgYSBiaXQgZGVlcGVyIHRvIHNlZSB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7KSYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI1OnN0YXRpYyBpbnQgc3RtbWFjX2FkanVzdF9mcmVxKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy00OC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzo0OTpzdGF0aWMgaW50IHN0bW1hY19hZGp1c3RfdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTI0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjEyNTpzdGF0aWMgaW50IHN0bW1hY19nZXRfdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTEyNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTE0OS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoxNTA6c3RhdGljIGludCBzdG1tYWNfc2V0X3RpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTUxLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjE2NDpzdGF0aWMgaW50IHN0bW1hY19lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTY1LVx0XHRcdCBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI3NS0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6Mjc2OnN0YXRpYyBpbnQgc3RtbWFjX2dldF9zeW5jZGV2aWNldGltZShrdGltZV90ICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjc3LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0yODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6Mjg1OnN0YXRpYyBpbnQgc3RtbWFjX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4Ni1cdFx0XHRcdCBzdHJ1Y3Qgc3lzdGVtX2RldmljZV9jcm9zc3RzdGFtcCAqeHRzdGFtcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9MzEzPWNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMzM0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjMzNTp2b2lkIHN0bW1hY19wdHBfcmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTMzNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM4OS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzozOTA6dm9pZCBzdG1tYWNfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTg1CgkJCQkJCQlvdXRwdXQ6IDg2CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBTVE1NQUMgUFRQIGZ1bmN0aW9ucywgYHN0bW1hY19wdHBfcmVnaXN0ZXJgIGFuZCBgc3RtbWFjX3B0cF91bnJlZ2lzdGVyYC4gSW50ZXJlc3RpbmcgdGhhdCB0aGV5JiMzOTtyZSBub3Qgc3RhdGljLCBidXQgdWx0aW1hdGVseSwgdGhleSBzZWVtIHRvIGJlIHNldHVwIGFuZCB0ZWFyZG93biByb3V0aW5lcy4gVGhlIHJlYWwgYWN0aW9uLCB0aGUgY29yZSB0aW1lc3RhbXBpbmcgbG9naWMsIHJlc2lkZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGFuZCBgc210Z19jcm9zc3RzdGFtcGAuIE5vdywgYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciBtZSwgSSBjYW4mIzM5O3QgdXNlIGl0IGRpcmVjdGx5IGFzIGEgZm9jdXMgc3ltYm9sLiBCdXQgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCBjb3VsZCBiZSB0aGUga2V5IG9uZS4KCkhtbSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3aG9sZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgcHJvY2Vzcz8gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgc3RtbWFjX2h3dHN0YW1wLmNgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7KSYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI5OnN0YXRpYyB2b2lkIGNvbmZpZ19od190c3RhbXBpbmcodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMzAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTM4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6Mzk6c3RhdGljIHZvaWQgY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50KHZvaWQgX19pb21lbSAqaW9hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtNDAtXHRcdHUzMiBwdHBfY2xvY2ssIGludCBnbWFjNCwgdTMyICpzc2luYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy03NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjc2OnN0YXRpYyB2b2lkIGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy03Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTE4OnN0YXRpYyBpbnQgaW5pdF9zeXN0aW1lKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgc2VjLCB1MzIgbnNlYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTExOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTM1OnN0YXRpYyBpbnQgY29uZmlnX2FkZGVuZCh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGFkZGVuZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTEzNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTUxOnN0YXRpYyBpbnQgYWRqdXN0X3N5c3RpbWUodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBzZWMsIHUzMiBuc2VjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTUyLVx0XHRpbnQgYWRkX3N1YiwgaW50IGdtYWM0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjE4NjpzdGF0aWMgdm9pZCBnZXRfc3lzdGltZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTY0ICpzeXN0aW1lKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTg3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMDQ6c3RhdGljIHZvaWQgZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMTQ6c3RhdGljIHZvaWQgdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA2NgoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA3NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN0bW1hYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBFdmVyeXRoaW5nIHNlZW1zIHByZXR0eSBzdGF0aWMgZXhjZXB0IGZvciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIFdhaXQsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgcHRwX2Nsb2NrX29wcy5nZXRjcm9zc3RzdGFtcGAuIExldCYjMzk7cyBzZWUgaWYgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbHMgYHNtdGdfY3Jvc3N0c3RhbXBgLi4uIG5vcGUsIGl0JiMzOTtzIGNhbGxlZCB2aWEgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYHByaXYtJmd0O3BsYXQtJmd0O2Nyb3NzdHN0YW1wYC4gU28sIHllYWgsIGl0IGxvb2tzIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gZGlyZWN0bHkgYWZmZWN0ZWQgb3IgYWRkZWQgdGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIG5lZWQgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgRFdNQUNfU09DRlBHQWAuIEhvbGQgb24sIGBEV01BQ19TT0NGUEdBYCBoYXMgZGVwZW5kZW5jaWVzIG9uIGBPRmAgYW5kIGAoQVJDSF9JTlRFTF9TT0NGUEdBIHx8IENPTVBJTEVfVEVTVClgLiBLYnVpbGQgc2hvdWxkIGhhbmRsZSB0aG9zZSBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIHNvIGxpc3RpbmcgYERXTUFDX1NPQ0ZQR0FgIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJJiMzOTtsbCBpbmNsdWRlIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYERXTUFDX1NPQ0ZQR0FgIGluIHRoZSBsaXN0LCB0aG91Z2guIEFuZCBvZiBjb3Vyc2UsIGZvciBQVFAgZnVuY3Rpb25hbGl0eSwgd2UgbmVlZCBgUFRQXzE1ODhfQ0xPQ0tgLiBMZXQgbWUgdmVyaWZ5IGlmIHRoYXQgaXMgc2VsZWN0ZWQsIG9yIGRlcGVuZGVudCBvbi4gQWgsIHJpZ2h0LCBpbiB0aGUgS2NvbmZpZyBmb3Igc3RtbWFjLCBpdCAqZGVwZW5kcyogb24gYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYC4gU28sIGl0JiMzOTtzIG9wdGlvbmFsLCBidXQgd2Ugd2FudCB0byB0ZXN0IFBUUCwgc28gbGV0JiMzOTtzIGluY2x1ZGUgdGhhdC4KCk5vdywgcmV2aXNpdGluZyB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGNsZWFyLiBJdCBtb2RpZmllcyBgc210Z19jcm9zc3RzdGFtcGAgdG8gbWFzayBgWEdNQUNfVFNJRWAgZHVyaW5nIHRoZSBjcm9zcy10aW1lc3RhbXAgb3BlcmF0aW9uLCBwcmV2ZW50aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHJ1bm5pbmcgd2hpbGUgd2UmIzM5O3JlIHJlYWRpbmcgdGhlIEZJRk8uIFBsdXMsIHRoZSBuZXcgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZ1bmN0aW9uIGlzIGFkZGVkIHRvIHJlYWQgdGhlIGBYR01BQ19USU1FU1RBTVBfU1RBVFVTYCByZWdpc3RlciBhbmQgY2xlYXIgYFRTSVNgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0aGF0IGFpbXMgdG8gcmVzb2x2ZSBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGUgcG9sbGluZyBsb29wIGluIGBzbXRnX2Nyb3NzdHN0YW1wYC4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhlIGltcGxpY2F0aW9ucy4KClNvLCB0aGUgY29uZmlndXJhdGlvbnMgSSYjMzk7bGwgdXNlIGFyZToKCiogICBgU1RNTUFDX0VUSGAKKiAgIGBTVE1NQUNfUENJYAoqICAgYERXTUFDX1NPQ0ZQR0FgCiogICBgUFRQXzE1ODhfQ0xPQ0tgCgpBbmQgdGhlIGtleSBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcgc2hvdWxkIGJlOgoKKiAgIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YAoKTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLi4uIGBzdG1tYWNfcHRwX3JlZ2lzdGVyYCBpcyBub24tc3RhdGljLCBidXQgdGhhdCYjMzk7cyBqdXN0IHNldHVwLiBgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeWAgaXMgYSBtYWNybywgc28gdGhhdCYjMzk7cyBub3QgcmVsZXZhbnQuIFllcywgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50LgoKTGV0IG1lIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RtbWFjIGRyaXZlciYjMzk7cyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKGBYR01BQ19UU0lFYCkgZHVyaW5nIEZJRk8gcmVhZHMgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLCBhbmQgYWRkcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyB0b3VjaCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUFRQIG1lY2hhbmlzbXMuCgpPa2F5LCBsZXQmIzM5O3MgcHJvY2VlZCB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19TT0NGUEdBJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdG1tYWMgZHJpdmVyJiMzOTtzIFBUUCBjcm9zcy10aW1lc3RhbXBpbmcgbG9naWMgYnkgbWFza2luZyB0aGUgdGltZXN0YW1wIGludGVycnVwdCAoWEdNQUNfVFNJRSkgZHVyaW5nIHRoZSBzbmFwc2hvdCBGSUZPIHJlYWQgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBmb3IgZHd4Z21hYzIvZHd4bGdtYWMyIE1BQ3MgdG8gaGFuZGxlIEFVWCBzbmFwc2hvdHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIHN0bW1hYyBkcml2ZXIgYW5kIHRoZSBTT0NGUEdBIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayBhbmQgUFRQIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgUFRQIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O0RXTUFDX1NPQ0ZQR0EmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXImIzM5O3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkMmFmNGM2MjI4NGU0MGMxOTA2YzI2YThkZGVmMzdjMjM0ZmNmMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNjowMzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwppbmRleCAxZDdmMGE1N2QyODg5Li5hNGQwMGJmODE0MjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCkBAIC0zMTAsNiAmIzQzOzMxMCwxMyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCWlmIChwcml2LSZndDtwbGF0LSZndDtmbGFncyAmYW1wOyBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pCiAJCXJldHVybiAtRUJVU1k7CiAKJiM0MzsJLyogVGhlIFhHTUFDIHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBjbGVhcnMgVFNJUyBieSByZWFkaW5nCiYjNDM7CSAqIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMsIHdoaWNoIHdvdWxkIHJhY2Ugd2l0aCB0aGUgVFNJUyBwb2xsCiYjNDM7CSAqIGJlbG93LiAgTWFzayBYR01BQ19UU0lFIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLXRpbWVzdGFtcAomIzQzOwkgKiBzbyB0aGUgaGFuZGxlciBkb2VzIG5vdCBydW4gd2hpbGUgd2Ugb3duIHRoZSBzbmFwc2hvdCBGSUZPLgomIzQzOwkgKi8KJiM0MzsJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIFhHTUFDX1RTSUUsIDApOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDthdXhfdHNfbG9jayk7CiAJLyogRW5hYmxlIEludGVybmFsIHNuYXBzaG90IHRyaWdnZXIgKi8KIAlhY3JfdmFsdWUgPSByZWFkbChwdHBhZGRyICYjNDM7IFBUUF9BQ1IpOwpAQCAtMzI5LDYgJiM0MzszMzYsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCQlicmVhazsKIAlkZWZhdWx0OgogCQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDthdXhfdHNfbG9jayk7CiYjNDM7CQlzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl3cml0ZWwoYWNyX3ZhbHVlLCBwdHBhZGRyICYjNDM7IFBUUF9BQ1IpOwpAQCAtMzUzLDYgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChwcml2LSZndDtpb2FkZHIgJiM0MzsgWEdNQUNfSU5UX1NUQVRVUywgdiwKIAkJCQkgKHYgJmFtcDsgWEdNQUNfSU5UX1RTSVMpLCAxMDAsIDEwMDAwKTsKIAlpZiAocmV0KSB7CiYjNDM7CQlzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7CiAJCW5ldGRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0OyVzOiBXYWl0IGZvciB0aW1lIHN5bmMgb3BlcmF0aW9uIHRpbWVvdXRcbiYjMzQ7LAogCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwpAQCAtMzc1LDYgJiM0MzszODQsOCBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7cHRwX2xvY2ssIGZsYWdzKTsKIAl9CiAKJiM0MzsJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpOwomIzQzOwogCWdldF9zbXRndGltZShwcml2LSZndDttaWksIFNNVEdfTURJT19BRERSLCAmYW1wO3NtdGdfdGltZSk7CiAJc3lzdGVtLSZndDtjeWNsZXMgPSBzbXRnX3RpbWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCmluZGV4IDYxYjZkNDVhMDJmNWQuLjc2ZTI4NjBhOTUxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaApAQCAtODcsNyAmIzQzOzg3LDcgQEAKICNkZWZpbmUgWEdNQUNfVFNJRQkJCUJJVCgxMikKICNkZWZpbmUgWEdNQUNfTFBJSUUJCQlCSVQoNSkKICNkZWZpbmUgWEdNQUNfUE1USUUJCQlCSVQoNCkKLSNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU4JCShYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFKQomIzQzOyNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU4JCShYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFIHwgWEdNQUNfVFNJRSkKICNkZWZpbmUgWEdNQUNfUXhfVFhfRkxPV19DVFJMKHgpCSgweDAwMDAwMDcwICYjNDM7ICh4KSAqIDQpCiAjZGVmaW5lIFhHTUFDX1BUCQkJR0VOTUFTSygzMSwgMTYpCiAjZGVmaW5lIFhHTUFDX1RGRQkJCUJJVCgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jCmluZGV4IGYwMmI0MzRiYmQ1MDUuLmI4NDljZWJmOWIyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMKQEAgLTExNTQsNiAmIzQzOzExNTQsNDkgQEAgc3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwl1MzIgdHNfc3RhdHVzLCBwZW5kaW5nX3NuYXBzaG90cywgYWNyX3ZhbHVlLCBjaGFubmVsOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1NjQgcHRwX3RpbWU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBSZWFkIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMgdG8gZ2V0IHRoZSBBVVggc25hcHNob3QKJiM0MzsJICogY291bnQuICBUaGlzIHJlYWQgYWxzbyBjbGVhcnMgdGhlIFRTSVMgYml0IGluCiYjNDM7CSAqIFhHTUFDX0lOVF9TVEFUVVMuCiYjNDM7CSAqIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBUU0lTCiYjNDM7CSAqIGFuZCBBVVhUU1RSSUcsIHNvIHJlbHkgb24gQVRTTlMgaW5zdGVhZC4KJiM0MzsJICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieQomIzQzOwkgKiB0aGlzIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyBubyBjb25mbGljdC4KJiM0MzsJICovCiYjNDM7CXRzX3N0YXR1cyA9IHJlYWRsKHByaXYtJmd0O2lvYWRkciAmIzQzOyBYR01BQ19USU1FU1RBTVBfU1RBVFVTKTsKJiM0MzsKJiM0MzsJaWYgKCEocHJpdi0mZ3Q7cGxhdC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RNTUFDX0ZMQUdfRVhUX1NOQVBTSE9UX0VOKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGVuZGluZ19zbmFwc2hvdHMgPSBGSUVMRF9HRVQoWEdNQUNfVElNRVNUQU1QX0FUU05TX01BU0ssIHRzX3N0YXR1cyk7CiYjNDM7CWlmICghcGVuZGluZ19zbmFwc2hvdHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFjcl92YWx1ZSA9IHJlYWRsKHByaXYtJmd0O3B0cGFkZHIgJiM0MzsgUFRQX0FDUik7CiYjNDM7CWNoYW5uZWwgPSBGSUVMRF9HRVQoUFRQX0FDUl9NQVNLLCBhY3JfdmFsdWUpOwomIzQzOwlpZiAoIWNoYW5uZWwpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWNoYW5uZWwgPSBpbG9nMihjaGFubmVsKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBlbmRpbmdfc25hcHNob3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDtwdHBfbG9jaywgZmxhZ3MpOwomIzQzOwkJc3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsICZhbXA7cHRwX3RpbWUpOwomIzQzOwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3B0cF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQlldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTOwomIzQzOwkJZXZlbnQuaW5kZXggPSBjaGFubmVsOwomIzQzOwkJZXZlbnQudGltZXN0YW1wID0gcHRwX3RpbWU7CiYjNDM7CQlwdHBfY2xvY2tfZXZlbnQocHJpdi0mZ3Q7cHRwX2Nsb2NrLCAmYW1wO2V2ZW50KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZHd4Z21hYzJfZmxleF9wcHNfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgaW5kZXgsCiAJCQkJICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSwKIAkJCQkgICAgdTMyIHN1Yl9zZWNvbmRfaW5jLCB1MzIgc3lzdGltZV9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYwppbmRleCA1MTFiMGZkNWU4MzQzLi45NzE4NTgyYjg0ODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jCkBAIC0yNTgsNyAmIzQzOzI1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgewogCQkuZG1hID0gJmFtcDtkd3hnbWFjMjEwX2RtYV9vcHMsCiAJCS5tYWMgPSAmYW1wO2R3eGdtYWMyMTBfb3BzLAogCQkudmxhbiA9ICZhbXA7ZHd4Z21hYzIxMF92bGFuX29wcywKLQkJLmh3dGltZXN0YW1wID0gJmFtcDtzdG1tYWNfcHRwLAomIzQzOwkJLmh3dGltZXN0YW1wID0gJmFtcDtkd3hnbWFjMl9wdHAsCiAJCS5wdHAgPSAmYW1wO3N0bW1hY19wdHBfY2xvY2tfb3BzLAogCQkubW9kZSA9IE5VTEwsCiAJCS50YyA9ICZhbXA7ZHdtYWM1MTBfdGNfb3BzLApAQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHsKIAkJLmRtYSA9ICZhbXA7ZHd4Z21hYzIxMF9kbWFfb3BzLAogCQkubWFjID0gJmFtcDtkd3hsZ21hYzJfb3BzLAogCQkudmxhbiA9ICZhbXA7ZHd4bGdtYWMyX3ZsYW5fb3BzLAotCQkuaHd0aW1lc3RhbXAgPSAmYW1wO3N0bW1hY19wdHAsCiYjNDM7CQkuaHd0aW1lc3RhbXAgPSAmYW1wO2R3eGdtYWMyX3B0cCwKIAkJLnB0cCA9ICZhbXA7c3RtbWFjX3B0cF9jbG9ja19vcHMsCiAJCS5tb2RlID0gTlVMTCwKIAkJLnRjID0gJmFtcDtkd21hYzUxMF90Y19vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKaW5kZXggZTYzMTdiOTRmZmY3ZC4uODE4YWIzZGFhOTFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaApAQCAtNjcxLDYgJiM0Mzs2NzEsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBuZGVzY19vcHM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHN0bW1hY19wdHA7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cDsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX21vZGVfb3BzIGNoYWluX21vZGVfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYwppbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYwpAQCAtMjc3LDMgJiM0MzsyNzcsMTUgQEAgY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwID0gewogCS5nZXRfcHRwdGltZSA9IGR3bWFjMTAwMF9nZXRfcHRwdGltZSwKIAkudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LAogfTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cCA9IHsKJiM0MzsJLmNvbmZpZ19od190c3RhbXBpbmcgPSBjb25maWdfaHdfdHN0YW1waW5nLAomIzQzOwkuaW5pdF9zeXN0aW1lID0gaW5pdF9zeXN0aW1lLAomIzQzOwkuY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50ID0gY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50LAomIzQzOwkuY29uZmlnX2FkZGVuZCA9IGNvbmZpZ19hZGRlbmQsCiYjNDM7CS5hZGp1c3Rfc3lzdGltZSA9IGFkanVzdF9zeXN0aW1lLAomIzQzOwkuZ2V0X3N5c3RpbWUgPSBnZXRfc3lzdGltZSwKJiM0MzsJLmdldF9wdHB0aW1lID0gZ2V0X3B0cHRpbWUsCiYjNDM7CS50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCwKJiM0MzsJLmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oCmluZGV4IDNmZTBlM2E4MGU4MGEuLmRhZGUwOTYxNDE2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmgKQEAgLTEwMyw2ICYjNDM7MTAzLDcgQEAgaW50IGR3bWFjMTAwMF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCiB2b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpOwogdm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpOwomIzQzO3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHN0bW1hY19wdHBfY2xvY2tfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkd21hYzEwMDBfcHRwX2Nsb2NrX29wczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdGhlcm5ldCBEcml2ZXIgVGltZXN0YW1wIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHRoZSBgc3RtbWFjYCBFdGhlcm5ldCBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBmdW5jdGlvbiwgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGUgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGlzc2VjdCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgdGhlIG5ldyBsb2dpYy4KCkZpcnN0LCBpdCByZWFkcyB0aGUgYFhHTUFDX1RJTUVTVEFNUF9TVEFUVVNgIHJlZ2lzdGVyLiBUaGlzIGlzIGtleTsgdGhpcyByZWFkICphbHNvKiBjbGVhcnMgdGhlIGBUU0lTYCBiaXQgaW4gYFhHTUFDX0lOVF9TVEFUVVNgLi4uYnV0IGl0IG1lbnRpb25zIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1pZ2h0IGhhdmUgYWxyZWFkeSBjbGVhcmVkIHRoZXNlIGJpdHMsIHNvIGl0IHJlbGllcyBvbiBgQVRTTlNgIGluc3RlYWQsIHdoaWNoIGlzIGdvb2QuIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBBVVggc25hcHNob3QgY291bnQgYW5kIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZyBzbmFwc2hvdHMgdmlhIHRoZSBgQVRTTlNgIGZpZWxkLiBJdCB0aGVuIHJlYWRzIHRoZSBgUFRQX0FDUmAgcmVnaXN0ZXIsIGV4dHJhY3RzIHRoZSBgY2hhbm5lbGAgZmllbGQgdXNpbmcgYSBtYXNrIGFuZCBgaWxvZzIoKWAsIHByZXN1bWFibHkgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBQVFAgY2hhbm5lbC4KClRoZSBjb3JlIG9mIHRoZSBsb2dpYyBpcyB3aXRoaW4gdGhhdCBgZm9yYCBsb29wLCBpdGVyYXRpbmcgdGhyb3VnaCBgcGVuZGluZ19zbmFwc2hvdHNgLiBJbnNpZGUgdGhlIGxvb3AsIGEgcmVhZCBsb2NrIGlzIGFjcXVpcmVkLCBwcm90ZWN0aW5nIHRoZSBgcHRwX3RpbWVgIHJlYWQuIFRoZW4sIGl0IHVzZXMgYHN0bW1hY19nZXRfcHRwdGltZWAgdG8gYWN0dWFsbHkgZ2V0IHRoZSBQVFAgdGltZXN0YW1wLiAgQSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgaXMgc2V0IHVwOiB0aGUgYHR5cGVgIGlzIGBQVFBfQ0xPQ0tfRVhUVFNgLCB0aGUgYGluZGV4YCBpcyBgY2hhbm5lbGAsIGFuZCBgdGltZXN0YW1wYCBpcyBzZXQuIEZpbmFsbHksIGBwdHBfY2xvY2tfZXZlbnRgIGlzIGNhbGxlZCB3aXRoIHRoaXMgYGV2ZW50YCBzdHJ1Y3R1cmUuCgpOb3csIGEgYml0IG9mIGEgY29kZSBzbWVsbC4uLmBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50O2AgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gVGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGJ1YmJsaW5nIHVwIGlzOiB3aGF0ICplbHNlKiBpcyBpbiB0aGF0IGBwdHBfY2xvY2tfZXZlbnRgIHN0cnVjdD8gQXJlIHRoZXJlIG90aGVyIGZpZWxkcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQgZGF0YSBpdCBjb250YWlucy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgb3Igd2UgbWF5IGhhdmUgYSBkYXRhIGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHB0cF9jbG9ja19ldmVudCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg9MjMxPWVudW0gcHRwX2Nsb2NrX2V2ZW50cyB7XG4tLVxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMjQ4LVxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6MjQ5OnN0cnVjdCBwdHBfY2xvY2tfZXZlbnQge1xuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMjUwLVx0aW50IHR5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCB3aXRoIGFuIGV4cGVydCYjMzk7cyBleWU6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAsIHNoYWxsIHdlPyBLbm93aW5nIHRoZSBkZWZpbml0aW9uIGluIGRldGFpbCB3aWxsIGFsbG93IGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhIHRpbWUgc3luY2hyb25pemF0aW9uIGV2ZW50IGlzIHN0cnVjdHVyZWQgYW5kIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSBldmVudHMgYXJlIHJlcHJlc2VudGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCwgd2hhdCBpbmZvcm1hdGlvbiBpcyBwYXNzZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCBpdC4gVGhlcmUgYXJlIHByb2JhYmx5IGtleSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZXZlbnQgdHlwZSAod2hldGhlciBpdOKAmXMgYSB0aW1lc3RhbXAsIGEgZGVsYXkgcmVxdWVzdCwgYSBzeW5jIGV2ZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSksIHRoZSB0aW1lc3RhbXAgaXRzZWxmIChvZiBjb3Vyc2UhKSwgYW5kIGFueSBhc3NvY2lhdGVkIGZsYWdzIG9yIHN0YXR1cyBjb2Rlcy4gSSYjMzk7bSBhbHNvIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgaWRlbnRpZmllciBmb3IgdGhlIFBUUCBjbG9jayBpbnZvbHZlZCBhbmQgZGV0YWlscyByZWxhdGluZyB0byBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlIHRpbWVyLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzLCBhbmQgYW55IFBUUC1zcGVjaWZpYyBkcml2ZXJzLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgUFRQIHRpbWVrZWVwaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDg6XHRcbiAyNDk6XHRzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IHtcbiAyNTA6XHRcdGludCB0eXBlO1xuIDI1MTpcdFx0aW50IGluZGV4O1xuIDI1MjpcdFx0dW5pb24ge1xuIDI1MzpcdFx0XHR1NjQgdGltZXN0YW1wO1xuIDI1NDpcdFx0XHRzNjQgb2Zmc2V0O1xuIDI1NTpcdFx0XHRzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgcHBzX3RpbWVzO1xuIDI1NjpcdFx0fTtcbiAyNTc6XHR9O1xuIDI1ODpcdFxuIDI1OTpcdC8qKlxuIDI2MDpcdCAqIHNjYWxlZF9wcG1fdG9fcHBiKCkgLSBjb252ZXJ0IHNjYWxlZCBwcG0gdG8gcHBiXG4gMjYxOlx0ICpcbiAyNjI6XHQgKiBAcHBtOiAgICBQYXJ0cyBwZXIgbWlsbGlvbiwgYnV0IHdpdGggYSAxNiBiaXQgYmluYXJ5IGZyYWN0aW9uYWwgZmllbGRcbiAyNjM6XHQgKi9cbiAyNjQ6XHRzdGF0aWMgaW5saW5lIGxvbmcgc2NhbGVkX3BwbV90b19wcGIobG9uZyBwcG0pXG4gMjY1Olx0e1xuIDI2NjpcdFx0LypcbiAyNjc6XHRcdCAqIFRoZSAmIzM5O2ZyZXEmIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTtzdHJ1Y3QgdGltZXgmIzM5OyBpcyBpbiBwYXJ0cyBwZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBUUCBDbG9jayBFdmVudCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGB0eXBlYCwgYGluZGV4YCwgYW5kIHRoZW4gdGhpcyB1bmlvbi4gVGhlIGludGVudCBpcyBjbGVhcjsgaXQmIzM5O3MgYSB3YXkgdG8gc3RvcmUgZWl0aGVyIGEgdGltZXN0YW1wLCBhbiBvZmZzZXQsIG9yIHNvbWUgYHBwc19ldmVudF90aW1lYCBkYXRhLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgYHRpbWVzdGFtcGAgd2hpY2ggaXMgYSBgdTY0YC4gSG93ZXZlciwgdGhhdCB1bmlvbiB3aXRoIGBwcHNfZXZlbnRfdGltZWAgaXMgZ2l2aW5nIG1lIHBhdXNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlIHNpemUgaXMgY29ycmVjdC4gSXQmIzM5O3Mgdml0YWwgdGhhdCB0aGUgdW5pb24gaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGxhcmdlc3QgcG9zc2libGUgbWVtYmVyLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBwcHNfZXZlbnRfdGltZWAgcmlnaHQgbm93IHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGdldHRpbmcgdHJ1bmNhdGVkIG9yIGNhdXNpbmcgYSBtZW1vcnkgb3ZlcnJ1bi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oPTIzPXN0cnVjdCBwcHNfc291cmNlX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oLTM0LVxuaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmg6MzU6c3RydWN0IHBwc19ldmVudF90aW1lIHtcbmluY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oLTM2LSNpZmRlZiBDT05GSUdfTlRQX1BQU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3RydWN0IHBwc19ldmVudF90aW1lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGBwcHNfZXZlbnRfdGltZWAgc3RydWN0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGp1c3QgZXhhbWluaW5nIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgc3RydWN0IGxpa2VseSBob2xkcyB0aGUgcmF3IHRpbWVzdGFtcCBpbmZvcm1hdGlvbiBmb3IgUFBTIGV2ZW50cywgcHJvYmFibHkgcmVwcmVzZW50aW5nIGEgc25hcHNob3Qgb2YgdGhlIGhhcmR3YXJlJiMzOTtzIGludGVybmFsIGNvdW50ZXIgb3IgYSB0aW1lIHNvdXJjZSBsaWtlIGEgR1BTIHJlY2VpdmVyLiBJJiMzOTttIGxvb2tpbmcgZm9yIGZpZWxkcyB0aGF0IHJlbGF0ZSB0byBzZWNvbmRzLCBuYW5vc2Vjb25kcywgb3Igb3RoZXIgdGltZS1yZWxhdGVkIGNvbXBvbmVudHMsIGFuZCBob3cgdGhlc2UgYXJlIHJlcHJlc2VudGVkLiBBcmUgdGhleSB1c2luZyBzdGFuZGFyZCB0eXBlcyBsaWtlIGB0aW1lX3RgLCBgc3RydWN0IHRpbWVzcGVjYCwgb3Igc29tZXRoaW5nIGN1c3RvbT8gSXMgdGhlcmUgYW55IGluZm9ybWF0aW9uIG9uIHdoaWNoIHRpbWUgc291cmNlIHRoZSB0aW1lc3RhbXAgY29tZXMgZnJvbSwgb3IgaWYgdGhlIHRpbWVzdGFtcHMgYXJlIHN5bmNocm9uaXplZC4gSSYjMzk7bSBhbHNvIGhvcGluZyB0aGVyZSBhcmUgc29tZSBoaW50cyBhYm91dCB0aGUgdGltZSBzY2FsZSB1c2VkIChVVEMsIFRBSSwgZXRjKSBpZiBhdmFpbGFibGUuIFRoZSB1bmRlcmx5aW5nIGRhdGEgZm9ybWF0IGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhZGF0YSBhcmUgbW9zdCBpbXBvcnRhbnQgdG8gbXkgaW50ZXJlc3QsIGFzIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlIHRpbWUgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3Bwc19rZXJuZWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUge1xuICAzNjpcdCNpZmRlZiBDT05GSUdfTlRQX1BQU1xuICAzNzpcdFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfcmF3O1xuICAzODpcdCNlbmRpZiAvKiBDT05GSUdfTlRQX1BQUyAqL1xuICAzOTpcdFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfcmVhbDtcbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdC8qIFRoZSBtYWluIHN0cnVjdCAqL1xuICA0MzpcdHN0cnVjdCBwcHNfZGV2aWNlIHtcbiAgNDQ6XHRcdHN0cnVjdCBwcHNfc291cmNlX2luZm8gaW5mbztcdFx0LyogUFNTIHNvdXJjZSBpbmZvICovXG4gIDQ1Olx0XG4gIDQ2Olx0XHRzdHJ1Y3QgcHBzX2twYXJhbXMgcGFyYW1zO1x0XHQvKiBQUFMgY3VycmVudCBwYXJhbXMgKi9cbiAgNDc6XHRcbiAgNDg6XHRcdF9fdTMyIGFzc2VydF9zZXF1ZW5jZTtcdFx0XHQvKiBQUFMgYXNzZXJ0IGV2ZW50IHNlcSAjICovXG4gIDQ5Olx0XHRfX3UzMiBjbGVhcl9zZXF1ZW5jZTtcdFx0XHQvKiBQUFMgY2xlYXIgZXZlbnQgc2VxICMgKi9cbiAgNTA6XHRcdHN0cnVjdCBwcHNfa3RpbWUgYXNzZXJ0X3R1O1xuICA1MTpcdFx0c3RydWN0IHBwc19rdGltZSBjbGVhcl90dTtcbiAgNTI6XHRcdGludCBjdXJyZW50X21vZGU7XHRcdFx0LyogUFBTIG1vZGUgYXQgZXZlbnQgdGltZSAqL1xuICA1MzpcdFxuICA1NDpcdFx0dW5zaWduZWQgaW50IGxhc3RfZXY7XHRcdFx0LyogbGFzdCBQUFMgZXZlbnQgaWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg2NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBGb290cHJpbnQgb2YgUFRQIENsb2NrIEV2ZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBwcHNfZXZlbnRfdGltZWAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGl0IGhvbGRzIG9uZSBvciB0d28gYHRpbWVzcGVjNjRgIHN0cnVjdHMuIFNpbmNlIGVhY2ggYHRpbWVzcGVjNjRgIGlzIDE2IGJ5dGVzLCB3aXRoIDggYnl0ZXMgZm9yIHNlY29uZHMgYW5kIDggYnl0ZXMgZm9yIG5hbm9zZWNvbmRzLCB0aGUgYHBwc19ldmVudF90aW1lYCBpcyBnb2luZyB0byBiZSBhdCBsZWFzdCAxNiBieXRlcywgbWF5YmUgdXAgdG8gMzIgYnl0ZXMgaWYgaXQgaG9sZHMgdHdvIG9mIHRob3NlIHRoaW5ncy4gTm93LCBsb29raW5nIGF0IHRoZSBgcHRwX2Nsb2NrX2V2ZW50YCBzdHJ1Y3R1cmUsIHRoZXJlJiMzOTtzIHRoYXQgdW5pb246CgpgYGBjCgkJdW5pb24gewoJCQl1NjQgdGltZXN0YW1wOwoJCQlzNjQgb2Zmc2V0OwoJCQlzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgcHBzX3RpbWVzOwoJCX07CmBgYAoKUmlnaHQsIGEgYHU2NCB0aW1lc3RhbXBgIGlzIGp1c3QgOCBieXRlcy4gSGVyZSYjMzk7cyB0aGUgcG90ZW50aWFsIHByb2JsZW06IGlmIGBldmVudC50aW1lc3RhbXBgIGlzIHVzZWQsIG9ubHkgdGhlIGluaXRpYWwgOCBieXRlcyBvZiB0aGF0IHVuaW9uIGFyZSBhY3R1YWxseSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtZWFucyB0aGUgb3RoZXIgOCB0byAyNCBieXRlcyBpbiB0aGUgdW5pb24gcmVtYWluIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSEKClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIHdoYXQgaGFwcGVucyB3aGVuIGBwdHBfY2xvY2tfZXZlbnQoKWAgaXMgY2FsbGVkPyBEb2VzIGl0IGNvcHkgdGhlICplbnRpcmUqIGBwdHBfY2xvY2tfZXZlbnRgIHN0cnVjdHVyZSwgb3IgZG9lcyBpdCBvbmx5IHJlYWQgc3BlY2lmaWMgZmllbGRzIGJhc2VkIG9uIHRoZSBldmVudCBgdHlwZWA/IElmIGl0IGNvcGllcyB0aGUgd2hvbGUgc3RydWN0dXJlLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWUgaGVyZSwgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCBvbmx5IHJlYWRzIHRoZSByZWxldmFudCBmaWVsZHMsIHdlJiMzOTtyZSBwcm9iYWJseSBva2F5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYHB0cF9jbG9ja19ldmVudCgpYCBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIG9uIHRoZSByZWFkIHNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcHRwX2Nsb2NrX2V2ZW50XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTUzMj1FWFBPUlRfU1lNQk9MKHB0cF9jbG9ja191bnJlZ2lzdGVyKTtcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTUzMy1cbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjUzNDp2b2lkIHB0cF9jbG9ja19ldmVudChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHAsIHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgKmV2ZW50KVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMtNTM1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD0zNTQ9ZXh0ZXJuIGludCBwdHBfY2xvY2tfdW5yZWdpc3RlcihzdHJ1Y3QgcHRwX2Nsb2NrICpwdHApO1xuLS1cbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTM2Mi1cbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oOjM2MzpleHRlcm4gdm9pZCBwdHBfY2xvY2tfZXZlbnQoc3RydWN0IHB0cF9jbG9jayAqcHRwLFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMzY0LVx0XHRcdCAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudCk7XG4tLVxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg9NDUwPXN0YXRpYyBpbmxpbmUgaW50IHB0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBwdHBfY2xvY2sgKnB0cClcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTQ1MS17IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaDo0NTI6c3RhdGljIGlubGluZSB2b2lkIHB0cF9jbG9ja19ldmVudChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHAsXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaC00NTMtXHRcdFx0XHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFBUUCBDbG9jayBFdmVudCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHB0cF9jbG9ja19ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfY2xvY2suY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIGNsb2NrIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlIGRyaXZlciBpbnRlcnByZXRzIGFuZCByZXNwb25kcyB0byB2YXJpb3VzIHRpbWUgc3luY2hyb25pemF0aW9uIGV2ZW50cywgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRpbWVzdGFtcHMsIGludGVycnVwdHMsIGFuZCBsaWtlbHkgc29tZSBpbnRyaWNhdGUgY2FsY3VsYXRpb25zIHRvIGVuc3VyZSBhY2N1cmF0ZSB0aW1la2VlcGluZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIFBUUCBjbG9jayBhbmQgYW55IGFzc29jaWF0ZWQgbmV0d29yayBpbnRlcmZhY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGUgaW1wbGVtZW50YXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzNDpcdHZvaWQgcHRwX2Nsb2NrX2V2ZW50KHN0cnVjdCBwdHBfY2xvY2sgKnB0cCwgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqZXZlbnQpXG4gNTM1Olx0e1xuIDUzNjpcdFx0c3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqdHNldnE7XG4gNTM3Olx0XHRzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgZXZ0O1xuIDUzODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1Mzk6XHRcbiA1NDA6XHRcdHN3aXRjaCAoZXZlbnQtXHUwMDNldHlwZSkge1xuIDU0MTpcdFxuIDU0MjpcdFx0Y2FzZSBQVFBfQ0xPQ0tfQUxBUk06XG4gNTQzOlx0XHRcdGJyZWFrO1xuIDU0NDpcdFxuIDU0NTpcdFx0Y2FzZSBQVFBfQ0xPQ0tfRVhUVFM6XG4gNTQ2Olx0XHRjYXNlIFBUUF9DTE9DS19FWFRPRkY6XG4gNTQ3Olx0XHRcdC8qIEVucXVldWUgdGltZXN0YW1wIG9uIHNlbGVjdGVkIHF1ZXVlcyAqL1xuIDU0ODpcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdHAtXHUwMDNldHNldnFzX2xvY2ssIGZsYWdzKTtcbiA1NDk6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0c2V2cSwgXHUwMDI2cHRwLVx1MDAzZXRzZXZxcywgcWxpc3QpIHtcbiA1NTA6XHRcdFx0XHRpZiAodGVzdF9iaXQoKHVuc2lnbmVkIGludClldmVudC1cdTAwM2VpbmRleCwgdHNldnEtXHUwMDNlbWFzaykpXG4gNTUxOlx0XHRcdFx0XHRlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcCh0c2V2cSwgZXZlbnQpO1xuIDU1MjpcdFx0XHR9XG4gNTUzOlx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRwLVx1MDAzZXRzZXZxc19sb2NrLCBmbGFncyk7XG4gNTU0Olx0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwdHAtXHUwMDNldHNldl93cSk7XG4gNTU1Olx0XHRcdGJyZWFrO1xuIDU1NjpcdFxuIDU1NzpcdFx0Y2FzZSBQVFBfQ0xPQ0tfUFBTOlxuIDU1ODpcdFx0XHRwcHNfZ2V0X3RzKFx1MDAyNmV2dCk7XG4gNTU5Olx0XHRcdHBwc19ldmVudChwdHAtXHUwMDNlcHBzX3NvdXJjZSwgXHUwMDI2ZXZ0LCBQVFBfUFBTX0VWRU5ULCBOVUxMKTtcbiA1NjA6XHRcdFx0YnJlYWs7XG4gNTYxOlx0XG4gNTYyOlx0XHRjYXNlIFBUUF9DTE9DS19QUFNVU1I6XG4gNTYzOlx0XHRcdHBwc19ldmVudChwdHAtXHUwMDNlcHBzX3NvdXJjZSwgXHUwMDI2ZXZlbnQtXHUwMDNlcHBzX3RpbWVzLFxuIDU2NDpcdFx0XHRcdCAgUFRQX1BQU19FVkVOVCwgTlVMTCk7XG4gNTY1Olx0XHRcdGJyZWFrO1xuIDU2NjpcdFx0fVxuIDU2NzpcdH1cbiA1Njg6XHRFWFBPUlRfU1lNQk9MKHB0cF9jbG9ja19ldmVudCk7XG4gNTY5Olx0XG4gNTcwOlx0aW50IHB0cF9jbG9ja19pbmRleChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHApXG4gNTcxOlx0e1xuIDU3MjpcdFx0cmV0dXJuIHB0cC1cdTAwM2VpbmRleDtcbiA1NzM6XHR9XG4gNTc0Olx0RVhQT1JUX1NZTUJPTChwdHBfY2xvY2tfaW5kZXgpO1xuIDU3NTpcdFxuIDU3NjpcdHN0YXRpYyBpbnQgcHRwX2Nsb2NrX29mX25vZGVfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuIDU3NzpcdHtcbiA1Nzg6XHRcdGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50X25wID0gZGF0YTtcbiA1Nzk6XHRcbiA1ODA6XHRcdHJldHVybiAoZGV2LVx1MDAzZXBhcmVudCBcdTAwMjZcdTAwMjYgZGV2X29mX25vZGUoZGV2LVx1MDAzZXBhcmVudCkgPT0gcGFyZW50X25wKTtcbiA1ODE6XHR9XG4gNTgyOlx0XG4gNTgzOlx0aW50IHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIFBUUCBUaW1lc3RhbXBpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBpbiBgcHRwX2Nsb2NrX2V2ZW50YCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIFJpZ2h0LCB0aGF0JiMzOTtzIGV4dGVybmFsIHRpbWVzdGFtcGluZy4gQW5kIHRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHRzZXZxLCBldmVudClgLiBNeSBicmFpbiBpbW1lZGlhdGVseSB3YW50cyB0byB6b29tIGluIG9uIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW50byBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXh0ZXJuYWwgdGltZXN0YW1wIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCBhbmQgcXVldWVkIGZvciBwcm9jZXNzaW5nLiBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgd2hhdCBkb2VzIGl0IGRvIHdpdGggYHRzZXZxYCBhbmQgYGV2ZW50YD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBjcml0aWNhbCB0aW1lc3RhbXAtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHdpdGhpbiB0aGF0IGNhbGwuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgaW50ZWdyYXRpbmcgZXh0ZXJuYWwgaGFyZHdhcmUgdGltZXN0YW1wcyBpbnRvIHRoZSBQVFAgc3lzdGVtLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLiBUaW1lIHRvIGRlbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTQyPXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2ZyZWUoc3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2suYy00Ni1cbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjQ3OnN0YXRpYyB2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHN0cnVjdCB0aW1lc3RhbXBfZXZlbnRfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMtNDgtXHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqc3JjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggbXkgdXN1YWwgbWV0aG9kaWNhbCBwcm9jZXNzLgoKKipBbmFseXppbmcgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCoqCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGRvLiBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSBzdHJvbmcgaGludCwgYnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBXaGF0JiMzOTtzIHRoZSBzaWduYXR1cmU/IFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXR1cm4gdmFsdWVzIG9yIHNpZGUgZWZmZWN0cz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29tbWVudHMsIGlmIGFueSwgdGhhdCBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgZnVuY3Rpb24uCgpPbmNlIEkgaGF2ZSBhIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGludGVybmFsIGxvZ2ljLiBJIHdpbGwgY2hlY2sgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXMgaXQgcm9idXN0PyBEb2VzIGl0IGNoZWNrIGZvciBpbnZhbGlkIHRpbWVzdGFtcHMsIHF1ZXVlIG92ZXJmbG93LCBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkIGlmIHRoZXkgYXJpc2U/CiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IElzIGl0IHVzaW5nIGEgc2ltcGxlIHF1ZXVlLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYSBwcmlvcml0eSBxdWV1ZSBvciBhIGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmU/CiogICAqKkNvbmN1cnJlbmN5OioqIERvZXMgdGhpcyBmdW5jdGlvbiBkZWFsIHdpdGggbXVsdGl0aHJlYWRpbmcgb3IgYW55IGNvbmN1cnJlbnQgYWNjZXNzPyBJZiBzbywgd2hhdCBtZWNoYW5pc21zIGFyZSB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5PyBUaGlzIGlzIGNydWNpYWwsIHBhcnRpY3VsYXJseSBpZiB0aW1lc3RhbXBzIGFyZSBzaGFyZWQgcmVzb3VyY2VzLgoqICAgKipFZmZpY2llbmN5OioqIEhvdyBkb2VzIGl0IHBlcmZvcm0gdW5kZXIgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB1bm5lY2Vzc2FyeSBjb3B5aW5nIG9yIGxvY2tpbmcuCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBtb2R1bGVzIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlc2UgZGVwZW5kZW5jaWVzIHdlbGwtZGVmaW5lZCBhbmQgZG9jdW1lbnRlZD8KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgbWlnaHQgaW5mbHVlbmNlIHRoZSBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvci4gSSB3aWxsIGFsc28gYmUgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZXN0YW1wIGlzIGJlaW5nIHN0b3JlZCBpbiBhIHByZWRpY3RhYmxlIGFuZCByZWxpYWJsZSBmYXNoaW9uLCBhbmQgaWYgaXQgaXMgYmVpbmcgcGFzc2VkIG9mZiB0byBhbiBleHRlcm5hbCBzeXN0ZW0sIEkgd2lsbCBhbHNvIGFuYWx5emUgYW55IGFzc29jaWF0ZWQgc2VjdXJpdHkgcmlza3MgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIGNvbmNlcm5zLgoKQWZ0ZXIgdGhpcyBpbml0aWFsIGFuYWx5c2lzLCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyBpdCBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gRXNzZW50aWFsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBuZWVkIGF0dGVudGlvbj8gV2hhdCBkb2VzIGl0ICpyZWFsbHkqIG1lYW4gZm9yIGEgdGltZXN0YW1wIHRvIGJlICYjMzQ7ZXh0ZXJuYWwmIzM0Oz8gSXMgaXQganVzdCBjb21pbmcgZnJvbSBhbm90aGVyIHN5c3RlbSwgb3IgZG9lcyBpdCBpbXBseSBzcGVjaWZpYyB0aW1lIHN5bmNocm9uaXphdGlvbiBwcm90b2NvbHMgb3IgcmVxdWlyZW1lbnRzPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBkZXZlbG9wIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0mIzM5O3MgcmVsaWFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIEkmIzM5O2xsIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IHRlc3RpbmcgdG9vLCBjb25zaWRlcmluZyB3aGF0IHRoZSBlZGdlIGNhc2VzIGFyZSwgd2hhdCBmYWlsdXJlIHNjZW5hcmlvcyBhcmUgbGlrZWx5LCBhbmQgaG93IGJlc3QgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQgdW5kZXIgYSB2YXJpZXR5IG9mIGNvbmRpdGlvbnMuIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bnJhdmVsIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9jbG9jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NzpcdHN0YXRpYyB2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHN0cnVjdCB0aW1lc3RhbXBfZXZlbnRfcXVldWUgKnF1ZXVlLFxuICA0ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgKnNyYylcbiAgNDk6XHR7XG4gIDUwOlx0XHRzdHJ1Y3QgcHRwX2V4dHRzX2V2ZW50ICpkc3Q7XG4gIDUxOlx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBvZmZzZXRfdHM7XG4gIDUyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuICA1MzpcdFx0czY0IHNlY29uZHM7XG4gIDU0Olx0XHR1MzIgcmVtYWluZGVyO1xuICA1NTpcdFxuICA1NjpcdFx0aWYgKHNyYy1cdTAwM2V0eXBlID09IFBUUF9DTE9DS19FWFRUUykge1xuICA1NzpcdFx0XHRzZWNvbmRzID0gZGl2X3U2NF9yZW0oc3JjLVx1MDAzZXRpbWVzdGFtcCwgMTAwMDAwMDAwMCwgXHUwMDI2cmVtYWluZGVyKTtcbiAgNTg6XHRcdH0gZWxzZSBpZiAoc3JjLVx1MDAzZXR5cGUgPT0gUFRQX0NMT0NLX0VYVE9GRikge1xuICA1OTpcdFx0XHRvZmZzZXRfdHMgPSBuc190b190aW1lc3BlYzY0KHNyYy1cdTAwM2VvZmZzZXQpO1xuICA2MDpcdFx0XHRzZWNvbmRzID0gb2Zmc2V0X3RzLnR2X3NlYztcbiAgNjE6XHRcdFx0cmVtYWluZGVyID0gb2Zmc2V0X3RzLnR2X25zZWM7XG4gIDYyOlx0XHR9IGVsc2Uge1xuICA2MzpcdFx0XHRXQVJOKDEsIFwmIzM0OyVzOiB1bmtub3duIHR5cGUgJWRcXG5cJiMzNDssIF9fZnVuY19fLCBzcmMtXHUwMDNldHlwZSk7XG4gIDY0Olx0XHRcdHJldHVybjtcbiAgNjU6XHRcdH1cbiAgNjY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZSBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgLCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipEaXZpbmcgaW50byBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIGZyb20gdGhlIG5hbWUgd2hhdCB0aGUgZnVuY3Rpb24gKmludGVuZHMqIHRvIGRvLCBidXQgbGV0JiMzOTtzIHNlZSBob3cgaXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgdGFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhZGRpbmcgYW4gZXh0ZXJuYWwgdGltZXN0YW1wIHRvIHdoYXRldmVyIHF1ZXVlIGl0IHV0aWxpemVzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciB0aW1lIG1hbmFnZW1lbnQgcHJpbWl0aXZlcyBvZiB0aGUgc3lzdGVtLiBJIGFtIGxpa2VseSBjb25jZXJuZWQgd2l0aCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjb25jdXJyZW5jeS4gSSBhbSBhc3N1bWluZyB0aGVyZSBpcyBzb21lIHNvcnQgb2YgZXZlbnQtZHJpdmVuIG1lY2hhbmlzbSBoYXBwZW5pbmcgaGVyZSwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmljaWVudGx5IHRoZSBmdW5jdGlvbiBhY2hpZXZlcyBpdHMgZ29hbHMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgaW5lZmZpY2llbnQsIG9yIHdoZXJlIGl0IGFzc3VtZXMgYSBjZXJ0YWluIGNsb2NrIHNvdXJjZSBpcyBhdmFpbGFibGUuIFRpbWUgc3RhbXBpbmcgaXMgYSB2ZXJ5IGhhcmQgcHJvYmxlbSB0byBzb2x2ZSBnZW5lcmFsbHksIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBjYXJlZnVsbHkgdGhlIGF1dGhvcnMgdGhvdWdodCBhYm91dCBpdC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzY2hlZHVsZXIsIGlmIHRoaXMgaXMgZXZlbiBzb21ldGhpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiBkZWFscyB3aXRoLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3JrcyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY3Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDY4Olx0XG4gIDY5Olx0XHRkc3QgPSBcdTAwMjZxdWV1ZS1cdTAwM2VidWZbcXVldWUtXHUwMDNldGFpbF07XG4gIDcwOlx0XHRkc3QtXHUwMDNlaW5kZXggPSBzcmMtXHUwMDNlaW5kZXg7XG4gIDcxOlx0XHRkc3QtXHUwMDNlZmxhZ3MgPSBQVFBfRVhUVFNfRVZFTlRfVkFMSUQ7XG4gIDcyOlx0XHRkc3QtXHUwMDNldC5zZWMgPSBzZWNvbmRzO1xuICA3MzpcdFx0ZHN0LVx1MDAzZXQubnNlYyA9IHJlbWFpbmRlcjtcbiAgNzQ6XHRcdGlmIChzcmMtXHUwMDNldHlwZSA9PSBQVFBfQ0xPQ0tfRVhUT0ZGKVxuICA3NTpcdFx0XHRkc3QtXHUwMDNlZmxhZ3MgfD0gUFRQX0VYVF9PRkZTRVQ7XG4gIDc2Olx0XG4gIDc3Olx0XHQvKiBCb3RoIFdSSVRFX09OQ0UoKSBhcmUgcGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gcXVldWVfY250KCkgKi9cbiAgNzg6XHRcdGlmICghcXVldWVfZnJlZShxdWV1ZSkpXG4gIDc5Olx0XHRcdFdSSVRFX09OQ0UocXVldWUtXHUwMDNlaGVhZCwgKHF1ZXVlLVx1MDAzZWhlYWQgJiM0MzsgMSkgJSBQVFBfTUFYX1RJTUVTVEFNUFMpO1xuICA4MDpcdFxuICA4MTpcdFx0V1JJVEVfT05DRShxdWV1ZS1cdTAwM2V0YWlsLCAocXVldWUtXHUwMDNldGFpbCAmIzQzOyAxKSAlIFBUUF9NQVhfVElNRVNUQU1QUyk7XG4gIDgyOlx0XG4gIDgzOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0LyogcG9zaXggY2xvY2sgaW1wbGVtZW50YXRpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWtzKioKCk9rYXksIHNvIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCAqb25seSogY2FyZXMgYWJvdXQgYHNyYy0mZ3Q7dHlwZWAsIGBzcmMtJmd0O3RpbWVzdGFtcGAsIGFuZCBgc3JjLSZndDtpbmRleGAuIEV4Y2VsbGVudCEgVGhhdCBtZWFucyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW9uIG1lbWJlcnMgd2l0aGluIHRoZSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgYXJlIGVmZmVjdGl2ZWx5IGlycmVsZXZhbnQuIFRoZXkgYXJlbiYjMzk7dCBjb3BpZWQsIHRoZXkgYXJlbiYjMzk7dCB1c2VkLiBNeSBpbml0aWFsIGNvbmNlcm4gYWJvdXQgYSBsZWFrIHRoZXJlIGlzIHVuZm91bmRlZCwgd2hpY2ggaXMgZ3JlYXQgbmV3cy4KCkJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBXaGVyZSBlbHNlIGlzIHRoaXMgYGV2ZW50YCBzdHJ1Y3R1cmUgdXNlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlOgoKSW4gdGhlIGBwdHBfY2xvY2tfZXZlbnRgIGZ1bmN0aW9uLCBpdCBhbHNvIHVzZXMgYGV2ZW50LSZndDtpbmRleGAgaW4gYSBsb29wIHdpdGggdGhlIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBzYW1lIHNpdHVhdGlvbjsgbm8gb3RoZXIgZmllbGRzIGFyZSB1c2VkLiBTbyBzdGlsbCBzYWZlIHRoZXJlIQoKT2theSwgb25lIG1vcmUgYXJlYSB0byBpbnZlc3RpZ2F0ZSDigJMgd2hhdCBhYm91dCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGA/IEhlcmUsIHRoZXkgY29uc3RydWN0IHRoZSBgZXZlbnRgIHN0cnVjdHVyZSBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSBgZXZlbnQudGltZXN0YW1wYCBjb21lcyBmcm9tIGBzdG1tYWNfZ2V0X3B0cHRpbWVgLiBCdXQgaXMgYHB0cF90aW1lYCAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBhc3NpZ25lZCB0byBgZXZlbnQudGltZXN0YW1wYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSWYgdGhhdCYjMzk7cyBpbml0aWFsaXplZCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgc3RtbWFjX2dldF9wdHB0aW1lXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUaW1pbmcgRnVuY3Rpb24gUXVlcnkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aW1pbmcsIG1vc3QgbGlrZWx5IFByZWNpc2UgVGltZSBQcm90b2NvbCAoUFRQKSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlci4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsOiBgc3RtbWFjX2dldF9wdHB0aW1lYC4gQnV0LCB3YWl0Li4uIGNvdWxkIGl0IGJlIGEgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGV4cGFuZHMgdG8gc29tZXRoaW5nIGVsc2U/IFRoYXQmIzM5O3MgY29tbW9uIGZvciBlZmZpY2llbmN5IG9yIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGVzcGVjaWFsbHkgYXQgdGhpcyBsb3cgbGV2ZWwuCgpUaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5LiBUaGUgYmVzdCBtb3ZlIG5vdyBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIGlzIGEgZnVuY3Rpb24gd2l0aCBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uLCBvciBpZiBpdCYjMzk7cyBhIG1hY3JvIHRoYXQgbWF5IHBlcmZvcm0gb3RoZXIgdGhpbmdzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19nZXRfcHRwdGltZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTM1OD1zdGF0aWMgaW50IGludGVsX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ0Ni1cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NDc6XHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwdHBhZGRyLCBcdTAwMjZwdHBfdGltZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ0OC1cdFx0KmRldmljZSA9IG5zX3RvX2t0aW1lKHB0cF90aW1lKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9Mjk0PXN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTM4MS1cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjM4MjpcdFx0c3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zODMtXHRcdCpkZXZpY2UgPSBuc190b19rdGltZShwdHBfdGltZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MjM9dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NDAtXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmM6NTQxOlx0XHRzdG1tYWNfZ2V0X3B0cHRpbWUocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCBcdTAwMjZwdHBfdGltZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU0Mi1cdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNTc9dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTE4OS1cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjExOTA6XHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTkxLVx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NDk2PXN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC01MjEtXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIHB0cCwgZ2V0X3N5c3RpbWUsIF9fYXJncylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo1MjI6I2RlZmluZSBzdG1tYWNfZ2V0X3B0cHRpbWUoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTIzLVx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBwdHAsIGdldF9wdHB0aW1lLCBfX2FyZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ5CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDI1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBQYXRjaDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIERldGVjdGVkKioKCk15IGFuYWx5c2lzIGJlZ2lucyBieSBleGFtaW5pbmcgdGhlIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIG1hY3JvLCB3aGljaCBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGBwdHBfdGltZWAgdmFyaWFibGUuIEkgdGhlbiBtb3ZlIG9uIHRvIHNjcnV0aW5pemluZyB0aGUgcGF0Y2ggaXRzZWxmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBzbXRnX2Nyb3NzdHN0YW1wYCBmdW5jdGlvbiBhbmQgdGhlIGludGVycnVwdCBtYXNraW5nIGFuZCB1bm1hc2tpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGBYR01BQ19UU0lFYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggaXMgYWJvdXQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBhbiBpbnRlcnJ1cHQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRpbWVzdGFtcCBwb2xsaW5nLgoKTmV4dCwgSSBpZGVudGlmeSB0aGUgY3JpdGljYWwgcGFydCBvZiB0aGUgcGF0Y2g6IHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLiBUaGlzIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgcmVnaXN0ZXJzLCByZXRyaWV2aW5nIGEgdGltZXN0YW1wLCBhbmQgcGFzc2luZyBpdCB0byBgcHRwX2Nsb2NrX2V2ZW50YC4gSSYjMzk7dmUgY2FyZWZ1bGx5IGFuYWx5emVkIGhvdyB0aGUgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnRgIGlzIHVzZWQuICBTcGVjaWZpY2FsbHksIEkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGxvY2FsbHkgb24gdGhlIHN0YWNrLCBhbmQgd2hpbGUgb25seSBhIHN1YnNldCBvZiBpdHMgZmllbGRzICh0eXBlLCBpbmRleCwgdGltZXN0YW1wKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgcHRwX2Nsb2NrX2V2ZW50YCAqb25seSogcmVhZHMgdGhlc2UgaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgcGFkZGluZyBvciBvdGhlciB1bmlvbiBmaWVsZHMgYXJlIG5vdCB1dGlsaXplZC4KCk15IGludmVzdGlnYXRpb24gb2YgdGhlIGNhbGwgdG8gYHB0cF9jbG9ja19ldmVudGAgY29uZmlybXMgdGhpcy4gIFRoZSBjb2RlIGluIGBwdHBfY2xvY2tfZXZlbnRgIG9ubHkgcmVhZHMgYGV2ZW50LSZndDtpbmRleGAuICBUaGUgZnVuY3Rpb24gYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBpcyB0aGVuIGNhbGxlZCBhbmQgcmVhZHMgYHNyYy0mZ3Q7dHlwZWAsIGBzcmMtJmd0O3RpbWVzdGFtcGAsIGFuZCBgc3JjLSZndDtpbmRleGAgYnV0IG5vIG90aGVyIHBhcnRzIG9mIHRoZSBzdHJ1Y3QuICBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBhdCBhbnkgc3RhZ2UuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNhZ2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhpc3RzIGluIHRoZSBjb250cm9sIGZsb3cuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCBoZXJlLgoKRmluYWxseSwgSSByZXZpZXdlZCB0aGUgY2hhbmdlIHRvIHRoZSBgaHd0aW1lc3RhbXBgIG9wZXJhdGlvbnMsIGNoYW5naW5nIHRoZSBwb2ludGVyIHRvIGBkd3hnbWFjMl9wdHBgLiBUaGlzIGFwcGVhcnMgdG8gYmUgc2ltcGx5IHRoZSBhc3NpZ25tZW50IG9mIGEgZnVuY3Rpb24gcG9pbnRlciwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzay4KCkluIGNvbmNsdXNpb24sIGFmdGVyIGEgbWV0aWN1bG91cyBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgdXNhZ2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCB3b3VsZCB3YXJyYW50IGZ1cnRoZXIgS01TQU4gYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgd2hpY2ggYWxsb2NhdGVzIGEgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIG9uIHRoZSBzdGFjay4gV2hpbGUgb25seSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgYHRpbWVzdGFtcGAgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZCAobGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdW5pb24vcGFkZGluZyB1bmluaXRpYWxpemVkKSwgdGhlIGNhbGxlZSBgcHRwX2Nsb2NrX2V2ZW50KClgIG9ubHkgcmVhZHMgdGhlc2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIGZpZWxkcyB3aGVuIHByb2Nlc3NpbmcgYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBJdCBkb2VzIG5vdCBjb3B5IHRoZSBlbnRpcmUgc3RydWN0dXJlIHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgY29udHJvbCBmbG93LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowMzoyOS41NjA5MDA1NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0ODkzNzU0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiLFxuICAgIFwiRFdNQUNfU09DRlBHQVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgd2hpY2ggYWxsb2NhdGVzIGEgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIG9uIHRoZSBzdGFjay4gV2hpbGUgb25seSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgYHRpbWVzdGFtcGAgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZCAobGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdW5pb24vcGFkZGluZyB1bmluaXRpYWxpemVkKSwgdGhlIGNhbGxlZSBgcHRwX2Nsb2NrX2V2ZW50KClgIG9ubHkgcmVhZHMgdGhlc2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIGZpZWxkcyB3aGVuIHByb2Nlc3NpbmcgYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBJdCBkb2VzIG5vdCBjb3B5IHRoZSBlbnRpcmUgc3RydWN0dXJlIHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgY29udHJvbCBmbG93LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXIncyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGxvZ2ljIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKFhHTUFDX1RTSUUpIGR1cmluZyB0aGUgc25hcHNob3QgRklGTyByZWFkIGluIGBzbXRnX2Nyb3NzdHN0YW1wYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIGR3eGdtYWMyL2R3eGxnbWFjMiBNQUNzIHRvIGhhbmRsZSBBVVggc25hcHNob3RzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIFBUUCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjI5LjU2MDkwNTU5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTg1MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZkMmFmNGM2MjI4NGU0MGMxOTA2YzI2YThkZGVmMzdjMjM0ZmNmMmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTY6MDM6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXFxuaW5kZXggMWQ3ZjBhNTdkMjg4OS4uYTRkMDBiZjgxNDIzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG5AQCAtMzEwLDYgKzMxMCwxMyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxcbiBcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbitcXHQvKiBUaGUgWEdNQUMgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBUU0lTIGJ5IHJlYWRpbmdcXG4rXFx0ICogWEdNQUNfVElNRVNUQU1QX1NUQVRVUywgd2hpY2ggd291bGQgcmFjZSB3aXRoIHRoZSBUU0lTIHBvbGxcXG4rXFx0ICogYmVsb3cuICBNYXNrIFhHTUFDX1RTSUUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtdGltZXN0YW1wXFxuK1xcdCAqIHNvIHRoZSBoYW5kbGVyIGRvZXMgbm90IHJ1biB3aGlsZSB3ZSBvd24gdGhlIHNuYXBzaG90IEZJRk8uXFxuK1xcdCAqL1xcbitcXHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgWEdNQUNfVFNJRSwgMCk7XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VhdXhfdHNfbG9jayk7XFxuIFxcdC8qIEVuYWJsZSBJbnRlcm5hbCBzbmFwc2hvdCB0cmlnZ2VyICovXFxuIFxcdGFjcl92YWx1ZSA9IHJlYWRsKHB0cGFkZHIgKyBQVFBfQUNSKTtcXG5AQCAtMzI5LDYgKzMzNiw3IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWF1eF90c19sb2NrKTtcXG4rXFx0XFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHR3cml0ZWwoYWNyX3ZhbHVlLCBwdHBhZGRyICsgUFRQX0FDUik7XFxuQEAgLTM1Myw2ICszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxcbiBcXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlaW9hZGRyICsgWEdNQUNfSU5UX1NUQVRVUywgdixcXG4gXFx0XFx0XFx0XFx0ICh2IFxcdTAwMjYgWEdNQUNfSU5UX1RTSVMpLCAxMDAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldCkge1xcbitcXHRcXHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiJXM6IFdhaXQgZm9yIHRpbWUgc3luYyBvcGVyYXRpb24gdGltZW91dFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0zNzUsNiArMzg0LDggQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcXG4gXFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4rXFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xcbitcXG4gXFx0Z2V0X3NtdGd0aW1lKHByaXYtXFx1MDAzZW1paSwgU01UR19NRElPX0FERFIsIFxcdTAwMjZzbXRnX3RpbWUpO1xcbiBcXHRzeXN0ZW0tXFx1MDAzZWN5Y2xlcyA9IHNtdGdfdGltZTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXFxuaW5kZXggNjFiNmQ0NWEwMmY1ZC4uNzZlMjg2MGE5NTE3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxcbkBAIC04Nyw3ICs4Nyw3IEBAXFxuICNkZWZpbmUgWEdNQUNfVFNJRVxcdFxcdFxcdEJJVCgxMilcXG4gI2RlZmluZSBYR01BQ19MUElJRVxcdFxcdFxcdEJJVCg1KVxcbiAjZGVmaW5lIFhHTUFDX1BNVElFXFx0XFx0XFx0QklUKDQpXFxuLSNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU5cXHRcXHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSlcXG4rI2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlxcdFxcdChYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFIHwgWEdNQUNfVFNJRSlcXG4gI2RlZmluZSBYR01BQ19ReF9UWF9GTE9XX0NUUkwoeClcXHQoMHgwMDAwMDA3MCArICh4KSAqIDQpXFxuICNkZWZpbmUgWEdNQUNfUFRcXHRcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4gI2RlZmluZSBYR01BQ19URkVcXHRcXHRcXHRCSVQoMSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXFxuaW5kZXggZjAyYjQzNGJiZDUwNS4uYjg0OWNlYmY5YjI5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcXG5AQCAtMTE1NCw2ICsxMTU0LDQ5IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdHUzMiB0c19zdGF0dXMsIHBlbmRpbmdfc25hcHNob3RzLCBhY3JfdmFsdWUsIGNoYW5uZWw7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHU2NCBwdHBfdGltZTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBSZWFkIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMgdG8gZ2V0IHRoZSBBVVggc25hcHNob3RcXG4rXFx0ICogY291bnQuICBUaGlzIHJlYWQgYWxzbyBjbGVhcnMgdGhlIFRTSVMgYml0IGluXFxuK1xcdCAqIFhHTUFDX0lOVF9TVEFUVVMuXFxuK1xcdCAqIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBUU0lTXFxuK1xcdCAqIGFuZCBBVVhUU1RSSUcsIHNvIHJlbHkgb24gQVRTTlMgaW5zdGVhZC5cXG4rXFx0ICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieVxcbitcXHQgKiB0aGlzIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyBubyBjb25mbGljdC5cXG4rXFx0ICovXFxuK1xcdHRzX3N0YXR1cyA9IHJlYWRsKHByaXYtXFx1MDAzZWlvYWRkciArIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMpO1xcbitcXG4rXFx0aWYgKCEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwZW5kaW5nX3NuYXBzaG90cyA9IEZJRUxEX0dFVChYR01BQ19USU1FU1RBTVBfQVRTTlNfTUFTSywgdHNfc3RhdHVzKTtcXG4rXFx0aWYgKCFwZW5kaW5nX3NuYXBzaG90cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YWNyX3ZhbHVlID0gcmVhZGwocHJpdi1cXHUwMDNlcHRwYWRkciArIFBUUF9BQ1IpO1xcbitcXHRjaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTtcXG4rXFx0aWYgKCFjaGFubmVsKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGNoYW5uZWwgPSBpbG9nMihjaGFubmVsKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZW5kaW5nX3NuYXBzaG90czsgaSsrKSB7XFxuK1xcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRzdG1tYWNfZ2V0X3B0cHRpbWUocHJpdiwgcHJpdi1cXHUwMDNlcHRwYWRkciwgXFx1MDAyNnB0cF90aW1lKTtcXG4rXFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdGV2ZW50LnR5cGUgPSBQVFBfQ0xPQ0tfRVhUVFM7XFxuK1xcdFxcdGV2ZW50LmluZGV4ID0gY2hhbm5lbDtcXG4rXFx0XFx0ZXZlbnQudGltZXN0YW1wID0gcHRwX3RpbWU7XFxuK1xcdFxcdHB0cF9jbG9ja19ldmVudChwcml2LVxcdTAwM2VwdHBfY2xvY2ssIFxcdTAwMjZldmVudCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBkd3hnbWFjMl9mbGV4X3Bwc19jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBpbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiBzdWJfc2Vjb25kX2luYywgdTMyIHN5c3RpbWVfZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xcbmluZGV4IDUxMWIwZmQ1ZTgzNDMuLjk3MTg1ODJiODQ4MDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXFxuQEAgLTI1OCw3ICsyNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4gXFx0XFx0LmRtYSA9IFxcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXFxuIFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXFxuIFxcdFxcdC52bGFuID0gXFx1MDAyNmR3eGdtYWMyMTBfdmxhbl9vcHMsXFxuLVxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZzdG1tYWNfcHRwLFxcbitcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2ZHd4Z21hYzJfcHRwLFxcbiBcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiBcXHRcXHQubW9kZSA9IE5VTEwsXFxuIFxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4gXFx0XFx0LmRtYSA9IFxcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXFxuIFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4bGdtYWMyX29wcyxcXG4gXFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxcbi1cXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2c3RtbWFjX3B0cCxcXG4rXFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNmR3eGdtYWMyX3B0cCxcXG4gXFx0XFx0LnB0cCA9IFxcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcXG4gXFx0XFx0Lm1vZGUgPSBOVUxMLFxcbiBcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcXG5pbmRleCBlNjMxN2I5NGZmZjdkLi44MThhYjNkYWE5MWM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbkBAIC02NzEsNiArNjcxLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgbmRlc2Nfb3BzO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cDtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgY2hhaW5fbW9kZV9vcHM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcXG5pbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcXG5AQCAtMjc3LDMgKzI3NywxNSBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3bWFjMTAwMF9wdHAgPSB7XFxuIFxcdC5nZXRfcHRwdGltZSA9IGR3bWFjMTAwMF9nZXRfcHRwdGltZSxcXG4gXFx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdCxcXG4gfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xcbitcXHQuY29uZmlnX2h3X3RzdGFtcGluZyA9IGNvbmZpZ19od190c3RhbXBpbmcsXFxuK1xcdC5pbml0X3N5c3RpbWUgPSBpbml0X3N5c3RpbWUsXFxuK1xcdC5jb25maWdfc3ViX3NlY29uZF9pbmNyZW1lbnQgPSBjb25maWdfc3ViX3NlY29uZF9pbmNyZW1lbnQsXFxuK1xcdC5jb25maWdfYWRkZW5kID0gY29uZmlnX2FkZGVuZCxcXG4rXFx0LmFkanVzdF9zeXN0aW1lID0gYWRqdXN0X3N5c3RpbWUsXFxuK1xcdC5nZXRfc3lzdGltZSA9IGdldF9zeXN0aW1lLFxcbitcXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcXG4rXFx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxcbitcXHQuaHd0c3RhbXBfY29ycmVjdF9sYXRlbmN5ID0gaHd0c3RhbXBfY29ycmVjdF9sYXRlbmN5LFxcbit9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcXG5pbmRleCAzZmUwZTNhODBlODBhLi5kYWRlMDk2MTQxNjNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxcbkBAIC0xMDMsNiArMTAzLDcgQEAgaW50IGR3bWFjMTAwMF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbiBcXG4gdm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKTtcXG4gdm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gc3RtbWFjX3B0cF9jbG9ja19vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZHdtYWMxMDAwX3B0cF9jbG9ja19vcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjMwLjk4MzUwODcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNjkzMTkyMjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19TT0NGUEdBXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdG1tYWMgZHJpdmVyJ3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDJhZjRjNjIyODRlNDBjMTkwNmMyNmE4ZGRlZjM3YzIzNGZjZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTY6MDM6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbmluZGV4IDFkN2YwYTU3ZDI4ODkuLmE0ZDAwYmY4MTQyMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuQEAgLTMxMCw2ICszMTAsMTMgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTilcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbitcdC8qIFRoZSBYR01BQyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgY2xlYXJzIFRTSVMgYnkgcmVhZGluZ1xuK1x0ICogWEdNQUNfVElNRVNUQU1QX1NUQVRVUywgd2hpY2ggd291bGQgcmFjZSB3aXRoIHRoZSBUU0lTIHBvbGxcbitcdCAqIGJlbG93LiAgTWFzayBYR01BQ19UU0lFIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLXRpbWVzdGFtcFxuK1x0ICogc28gdGhlIGhhbmRsZXIgZG9lcyBub3QgcnVuIHdoaWxlIHdlIG93biB0aGUgc25hcHNob3QgRklGTy5cbitcdCAqL1xuK1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIFhHTUFDX1RTSUUsIDApO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWF1eF90c19sb2NrKTtcbiBcdC8qIEVuYWJsZSBJbnRlcm5hbCBzbmFwc2hvdCB0cmlnZ2VyICovXG4gXHRhY3JfdmFsdWUgPSByZWFkbChwdHBhZGRyICsgUFRQX0FDUik7XG5AQCAtMzI5LDYgKzMzNiw3IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXV4X3RzX2xvY2spO1xuK1x0XHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0d3JpdGVsKGFjcl92YWx1ZSwgcHRwYWRkciArIFBUUF9BQ1IpO1xuQEAgLTM1Myw2ICszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlaW9hZGRyICsgWEdNQUNfSU5UX1NUQVRVUywgdixcbiBcdFx0XHRcdCAodiBcdTAwMjYgWEdNQUNfSU5UX1RTSVMpLCAxMDAsIDEwMDAwKTtcbiBcdGlmIChyZXQpIHtcbitcdFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcIiVzOiBXYWl0IGZvciB0aW1lIHN5bmMgb3BlcmF0aW9uIHRpbWVvdXRcXG5cIixcbiBcdFx0XHQgICBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzc1LDYgKzM4NCw4IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuK1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuK1xuIFx0Z2V0X3NtdGd0aW1lKHByaXYtXHUwMDNlbWlpLCBTTVRHX01ESU9fQUREUiwgXHUwMDI2c210Z190aW1lKTtcbiBcdHN5c3RlbS1cdTAwM2VjeWNsZXMgPSBzbXRnX3RpbWU7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbmluZGV4IDYxYjZkNDVhMDJmNWQuLjc2ZTI4NjBhOTUxN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5AQCAtODcsNyArODcsNyBAQFxuICNkZWZpbmUgWEdNQUNfVFNJRVx0XHRcdEJJVCgxMilcbiAjZGVmaW5lIFhHTUFDX0xQSUlFXHRcdFx0QklUKDUpXG4gI2RlZmluZSBYR01BQ19QTVRJRVx0XHRcdEJJVCg0KVxuLSNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU5cdFx0KFhHTUFDX0xQSUlFIHwgWEdNQUNfUE1USUUpXG4rI2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlx0XHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSB8IFhHTUFDX1RTSUUpXG4gI2RlZmluZSBYR01BQ19ReF9UWF9GTE9XX0NUUkwoeClcdCgweDAwMDAwMDcwICsgKHgpICogNClcbiAjZGVmaW5lIFhHTUFDX1BUXHRcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSBYR01BQ19URkVcdFx0XHRCSVQoMSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbmluZGV4IGYwMmI0MzRiYmQ1MDUuLmI4NDljZWJmOWIyOWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuY1xuQEAgLTExNTQsNiArMTE1NCw0OSBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2dldF9tYWNfdHhfdGltZXN0YW1wKHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmh3LCB1NjQgKnRzKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0dTMyIHRzX3N0YXR1cywgcGVuZGluZ19zbmFwc2hvdHMsIGFjcl92YWx1ZSwgY2hhbm5lbDtcbitcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTY0IHB0cF90aW1lO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBSZWFkIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMgdG8gZ2V0IHRoZSBBVVggc25hcHNob3RcbitcdCAqIGNvdW50LiAgVGhpcyByZWFkIGFsc28gY2xlYXJzIHRoZSBUU0lTIGJpdCBpblxuK1x0ICogWEdNQUNfSU5UX1NUQVRVUy5cbitcdCAqIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBUU0lTXG4rXHQgKiBhbmQgQVVYVFNUUklHLCBzbyByZWx5IG9uIEFUU05TIGluc3RlYWQuXG4rXHQgKiBUWFRTQyBpcyBjbGVhcmVkIGJ5IFhHTUFDX1RYVElNRVNUQU1QX1NFQywgbm90IGJ5XG4rXHQgKiB0aGlzIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyBubyBjb25mbGljdC5cbitcdCAqL1xuK1x0dHNfc3RhdHVzID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgKyBYR01BQ19USU1FU1RBTVBfU1RBVFVTKTtcbitcbitcdGlmICghKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfRVhUX1NOQVBTSE9UX0VOKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGVuZGluZ19zbmFwc2hvdHMgPSBGSUVMRF9HRVQoWEdNQUNfVElNRVNUQU1QX0FUU05TX01BU0ssIHRzX3N0YXR1cyk7XG4rXHRpZiAoIXBlbmRpbmdfc25hcHNob3RzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhY3JfdmFsdWUgPSByZWFkbChwcml2LVx1MDAzZXB0cGFkZHIgKyBQVFBfQUNSKTtcbitcdGNoYW5uZWwgPSBGSUVMRF9HRVQoUFRQX0FDUl9NQVNLLCBhY3JfdmFsdWUpO1xuK1x0aWYgKCFjaGFubmVsKVxuK1x0XHRyZXR1cm47XG4rXHRjaGFubmVsID0gaWxvZzIoY2hhbm5lbCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZW5kaW5nX3NuYXBzaG90czsgaSsrKSB7XG4rXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbitcdFx0c3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHByaXYtXHUwMDNlcHRwYWRkciwgXHUwMDI2cHRwX3RpbWUpO1xuK1x0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbitcbitcdFx0ZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUztcbitcdFx0ZXZlbnQuaW5kZXggPSBjaGFubmVsO1xuK1x0XHRldmVudC50aW1lc3RhbXAgPSBwdHBfdGltZTtcbitcdFx0cHRwX2Nsb2NrX2V2ZW50KHByaXYtXHUwMDNlcHRwX2Nsb2NrLCBcdTAwMjZldmVudCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHd4Z21hYzJfZmxleF9wcHNfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgaW5kZXgsXG4gXHRcdFx0XHQgICAgc3RydWN0IHN0bW1hY19wcHNfY2ZnICpjZmcsIGJvb2wgZW5hYmxlLFxuIFx0XHRcdFx0ICAgIHUzMiBzdWJfc2Vjb25kX2luYywgdTMyIHN5c3RpbWVfZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG5pbmRleCA1MTFiMGZkNWU4MzQzLi45NzE4NTgyYjg0ODA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcbkBAIC0yNTgsNyArMjU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG4gXHRcdC5kbWEgPSBcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXG4gXHRcdC5tYWMgPSBcdTAwMjZkd3hnbWFjMjEwX29wcyxcbiBcdFx0LnZsYW4gPSBcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxuLVx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuK1x0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd3hnbWFjMl9wdHAsXG4gXHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiBcdFx0Lm1vZGUgPSBOVUxMLFxuIFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5AQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuIFx0XHQuZG1hID0gXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxuIFx0XHQubWFjID0gXHUwMDI2ZHd4bGdtYWMyX29wcyxcbiBcdFx0LnZsYW4gPSBcdTAwMjZkd3hsZ21hYzJfdmxhbl9vcHMsXG4tXHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNnN0bW1hY19wdHAsXG4rXHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNmR3eGdtYWMyX3B0cCxcbiBcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuIFx0XHQubW9kZSA9IE5VTEwsXG4gXHRcdC50YyA9IFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbmluZGV4IGU2MzE3Yjk0ZmZmN2QuLjgxOGFiM2RhYTkxYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuQEAgLTY3MSw2ICs2NzEsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBuZGVzY19vcHM7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cDtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cDtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyByaW5nX21vZGVfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX21vZGVfb3BzIGNoYWluX21vZGVfb3BzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbmluZGV4IGI5YTk4NWZhNzcyYzkuLjlkN2QyNDI1OWFiZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbkBAIC0yNzcsMyArMjc3LDE1IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cCA9IHtcbiBcdC5nZXRfcHRwdGltZSA9IGR3bWFjMTAwMF9nZXRfcHRwdGltZSxcbiBcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQsXG4gfTtcbitcbitjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cCA9IHtcbitcdC5jb25maWdfaHdfdHN0YW1waW5nID0gY29uZmlnX2h3X3RzdGFtcGluZyxcbitcdC5pbml0X3N5c3RpbWUgPSBpbml0X3N5c3RpbWUsXG4rXHQuY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50ID0gY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50LFxuK1x0LmNvbmZpZ19hZGRlbmQgPSBjb25maWdfYWRkZW5kLFxuK1x0LmFkanVzdF9zeXN0aW1lID0gYWRqdXN0X3N5c3RpbWUsXG4rXHQuZ2V0X3N5c3RpbWUgPSBnZXRfc3lzdGltZSxcbitcdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxuK1x0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxuK1x0Lmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSxcbit9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxuaW5kZXggM2ZlMGUzYTgwZTgwYS4uZGFkZTA5NjE0MTYzYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oXG5AQCAtMTAzLDYgKzEwMyw3IEBAIGludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiBcbiB2b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xuIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHN0bW1hY19wdHBfY2xvY2tfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZHdtYWMxMDAwX3B0cF9jbG9ja19vcHM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowMzozMC45ODM1MTAxMDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcwNTYxMDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYHN0bW1hY2AgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgWEdNQUMgdmFyaWFudCAoZHd4Z21hYzIgYW5kIGR3eGxnbWFjMikgYW5kIHRoZSBoYW5kbGluZyBvZiB0aW1lc3RhbXBzLiAgSXQgYWRkcyBhIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgbW9kaWZpZXMgc29tZSBrZXkgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuICBTcGVjaWZpY2FsbHksIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgd2l0aCBRRU1VP1xuXG5gc3RtbWFjYCBpcyBTVE1pY3JvZWxlY3Ryb25pY3MnIGRyaXZlciwgcmlnaHQ/IENvdmVycyBhIHJhbmdlIG9mIEV0aGVybmV0IGNvbnRyb2xsZXJzLiAgUUVNVSBwcm92aWRlcyBhIHZhcmlldHkgb2YgZW11bGF0ZWQgbmV0d29yayBjYXJkcywgYnV0IGRvZXMgaXQgaW5jbHVkZSBhbiAqYHN0bW1hY2AqIGVtdWxhdGlvbj8gIFRoYXQncyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uXG5cbkxldCBtZSB0aGluay4uLiBJcyB0aGVyZSBhIFBDSSBkcml2ZXIgZm9yIGBzdG1tYWNgPyBZZXAsIHRoZXJlIGlzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jYC4gR29vZCwgdGhhdCdzIGEga2V5IGNsdWUuIElmIHRoZXJlJ3MgYSBQQ0kgZHJpdmVyLCBpdCAqbWlnaHQqIGJlIHByb2JlYWJsZSBpbiBRRU1VLiAgSSBuZWVkIHRvIGNoZWNrIHdoYXQgUENJIElEcyBgc3RtbWFjX3BjaS5jYCBiaW5kcyB0by4gIFRoYXQncyBob3cgSSBjYW4gdGVsbCBpZiBJIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJIGRvbid0IGhhdmUgdGhlIFFFTVUgc291cmNlIGxvY2FsbHksIGJ1dCB0aGUgcGF0Y2ggY29udGV4dCBnaXZlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblFFTVUgaW5jbHVkZXMgYSBidW5jaCBvZiBuZXR3b3JrIGVtdWxhdGlvbjogYGlteF9mZWNgLCBgY2FkZW5jZV9nZW1gLCBgZTEwMDBgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgaWdiYCwgYW5kIHRoZSBsaWtlLiBJdCdzIGdvdCBhbiBgeGdtYWMuY2AhIFdhaXQuIGB4Z21hY2A/IElzIHRoYXQgYHN0bW1hY2A/ICBNaWdodCBiZSBhIHJlbGF0ZWQgdmFyaWFudCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5gc3RtbWFjYCBpcyBjb21tb24gaW4gbWFueSBBUk0gU29Dcy4gUUVNVSBlbXVsYXRlcyBzZXZlcmFsIEFSTSBtYWNoaW5lcy4gSXQncyBhIHBvc3NpYmlsaXR5LiBgYWxsd2lubmVyLXN1bjhpLWVtYWNgPyBOb3BlLCBkaWZmZXJlbnQuIGBpbXhfZmVjYD8gTm8uIGBjYWRlbmNlX2dlbWA/IFN0aWxsIG5vLiBOZWVkIHRvIHNlYXJjaCBmb3IgYHN0bW1hY2AgaW4gdGhlIFFFTVUgY29kZWJhc2UsIGlmIEkgaGFkIGFjY2Vzcy4gQnV0IHRoZSBQQ0kgZHJpdmVyIGlzIG15IGJlc3QgYmV0IHJpZ2h0IG5vdy4gSSd2ZSBnb3QgdG8gY2hlY2sgdGhvc2UgUENJIElEcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjQxLjY4OTEyMzM5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU4MDE2ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENJX0RFVklDRV9JRF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcXHRcXHQweDExMDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFxcdFxcdDB4NzEwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjQyLjQyNDkzNjI2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjY4MjYxMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXNlIGFkZHJlc3NlcywgMHgxMTA4IGFuZCAweDcxMDIsIHdoaWNoIHRoZSB0YXJnZXQgY29kZSBiaW5kcyB0by4gSG1tLCBkb2VzIFFFTVUgaGFuZGxlIHRoZXNlIGJ5IGRlZmF1bHQ/IFByb2JhYmx5IG5vdC4gSSByZWNhbGwgc3l6a2FsbGVyIGhhcyB0aGF0IHZoY2kgUENJIGRldmljZSBpbmplY3Rpb24sIG9yIHBlcmhhcHMgdGhlcmUncyBhbm90aGVyIGZ1enppbmcgZW50cnkgcG9pbnQgYXZhaWxhYmxlLiBCdXQgd2FpdCwgd2Fzbid0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBgc3l6X3BjaV92cGNpYD8gTGV0IG1lIHNlZS4uLiB5ZXMsIHRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgY2FsbHMgb3V0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiLiBBaCwgdGhhdCBpbmNsdWRlcyB0aG9zZSBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnJlYWwqIGhhcmR3YXJlLCBsaWtlIHRob3NlIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuXG5cbkJ1dCBob2xkIG9uLi4uIGBzdG1tYWNgLiBUaGF0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBNQUMgZHJpdmVyLCBzdXBlciBjb21tb24gaW4gdmFyaW91cyBTb0NzLCBhbmQgaXQgaGFzIGEgUENJIHdyYXBwZXIuIEludGVyZXN0aW5nLiBBaCwgdGhlIHBhdGNoIGFjdHVhbGx5IG1vZGlmaWVzIGBkd21hYy1zb2NmcGdhLmNgLiBSaWdodCwgdGhhdCdzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBbHRlcmEgU09DRlBHQS4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBkd21hYy1zb2NmcGdhLmNgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDM6NTQuNjkzMjAwMzUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzE2MDk0NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29jZnBnYV9kd21hY19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjA3OnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTY5Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2NmcGdhX2R3bWFjX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjkzOlxcdC5wcm9iZSAgPSBzb2NmcGdhX2R3bWFjX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02OTQtXFx0LmRyaXZlciA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDM6NTkuNzY0ODEzNzQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMzI2NTYyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiB0aGUgYHN0bW1hY2AgRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggaXQuIENhbiBzeXprYWxsZXIgcHJvYmUgcGxhdGZvcm0gZHJpdmVycyBkaXJlY3RseT8gSXQgZGVwZW5kcy4gSWYgdGhlcmUncyBhIGRldmljZSB0cmVlIG5vZGUsIG9yIGlmIHdlIGNhbiBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcywgd2UncmUgaW4gYnVzaW5lc3MuIEkga25vdyBzeXprYWxsZXIgaGFzIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgd2l0aCBwbGF0Zm9ybSBkZXZpY2VzLCBpdOKAmXMgbm90IGFsd2F5cyBzdHJhaWdodGZvcndhcmQgdG8gaW5zdGFudGlhdGUgdGhlbSB1bmxlc3MgdGhleSBhcmUgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBEVC5cblxuSG1tLCB0aGlzIHBhdGNoIGFsc28gaGl0cyBgZHd4Z21hYzJfY29yZS5jYCBhbmQgYHN0bW1hY19od3RzdGFtcC5jYCDigJMgdGhhdCdzIGNvcmUgYHN0bW1hY2AgY29kZS4gU3BlY2lmaWNhbGx5LCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgYmVpbmcgYWRkZWQgdG8gYGR3eGdtYWMyX3B0cGAsIHdoaWNoIGlzIHVzZWQgYnkgYGR3eGdtYWMyMTBfb3BzYCBhbmQgYGR3eGxnbWFjMl9vcHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgZHd4Z21hYzJgIGlzIGV2ZW4gcmVhY2hhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBpcyBhbHJlYWR5IGZ1enppbmcgYHN0bW1hY2AuIEkgY2FuJ3QgZGlyZWN0bHkgc2VhcmNoIHN5emthbGxlcidzIHN5emxhbmcgZGVzY3JpcHRpb25zLCB3aGljaCBJIHdvdWxkIGRvIG5vcm1hbGx5LCBiZWNhdXNlIHRoZSB0b29scyBhdmFpbGFibGUgYXJlIG9ubHkgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIGl0IHdvdWxkIHVzZSB0aGUgdG9vbCBgcmVhZC1zeXotc3BlY2Agb3IgYHN5ei1ncmVwcGVyYCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZS4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCBJIGRvbid0IG5lZWQgdG8gZG8gdGhpcy5cblxuSXMgdGhpcyBgc3RtbWFjYCBkcml2ZXIgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyPyBObywgaXQncyBhIGdlbmVyaWMgRXRoZXJuZXQgTUFDIGRyaXZlciB1c2VkIGluIGEgYnVuY2ggb2YgU29DcyBsaWtlIEludGVsLCBSb2NrY2hpcCwgQWxsd2lubmVyLCBBbWxvZ2ljLCBOWFAsIGV0Yy4gSXQncyBhIGNvcmUgZHJpdmVyLCBubyBxdWVzdGlvbi5cblxuT2theSwgc28gaXMgaXQgcmVhY2hhYmxlIGluIFFFTVU/IFllcy4gUUVNVSBoYXMgYGh3L25ldC94Z21hYy5jYCwgZW11bGF0aW5nIHRoZSBTeW5vcHN5cyBYR01BQywgYW5kIGBzdG1tYWNgICppcyogdGhlIGRyaXZlciBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMuIFFFTVUgZG9lcyBlbXVsYXRlIGB4Z21hY2AgaW4gY2VydGFpbiBtYWNoaW5lcywgbGlrZSBIaWdoYmFuay9NaWR3YXkuIFFFTVUgYWxzbyBoYXMgYGR3bWFjYCBlbXVsYXRpb24uXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMgdmlhIGBzeXpfcGNpX3ZwY2lgIG9yIHNpbWlsYXIsIGFuZCBgc3RtbWFjYCBoYXMgYSBQQ0kgZHJpdmVyLiBTbywgdmlydHVhbCBQQ0kgaW5qZWN0aW9uIGlzIGFuIGF2ZW51ZSBmb3IgZnV6emluZyB0aGlzLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZHdtYWMtc29jZnBnYS5jYCwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBiaXQgbW9yZSBjb21wbGV4LCBidXQgdGhlIGNvcmUgYHN0bW1hY2AgY29kZSBpbiBgZHd4Z21hYzJfY29yZS5jYCBpcyBhbHNvIGFmZmVjdGVkLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIEl0J3MgYXNzaWduZWQgdG8gYGR3eGdtYWMyX3B0cC50aW1lc3RhbXBfaW50ZXJydXB0YCBpbiBgc3RtbWFjX2h3dHN0YW1wLmNgLiBUaGlzIGlzIHRoZW4gdXNlZCBpbiBgaHdpZi5jYCBmb3IgYGR3eGdtYWMyMTBgIGFuZCBgZHd4bGdtYWMyYC4gTm93IEknbGwgc3RhcnQgY2hlY2tpbmcgd2hlcmUgYHRpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpjYWxsZWQqLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjEwLjk5NzQ3Mjc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTQ4NjI0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGltZXN0YW1wX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MTM9dm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYzo1MjM6dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01MjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYzo1NTM6c3RhdGljIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHRfY2ZnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBlbilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jPTU2Nz1pbnQgZHdtYWMxMDAwX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTYwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jOjYwMTpcXHRcXHRkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdF9jZmcocHJpdiwgb24pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMtNjAyLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNDM9c3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMTU3OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oPTQ5Nj1zdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC01MDUtXFx0dm9pZCAoKmdldF9wdHB0aW1lKSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTY0ICpwdHBfdGltZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUwNjpcXHR2b2lkICgqdGltZXN0YW1wX2ludGVycnVwdCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTA3LVxcdHZvaWQgKCpod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTIzLVxcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgcHRwLCBnZXRfcHRwdGltZSwgX19hcmdzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo1MjQ6I2RlZmluZSBzdG1tYWNfdGltZXN0YW1wX2ludGVycnVwdChfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo1MjU6XFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBwdHAsIHRpbWVzdGFtcF9pbnRlcnJ1cHQsIF9fYXJncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTI2LSNkZWZpbmUgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeShfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjA0PXN0YXRpYyB2b2lkIGdldF9wdHB0aW1lKHZvaWQgX19pb21lbSAqcHRwYWRkciwgdTY0ICpwdHBfdGltZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMTQ6c3RhdGljIHZvaWQgdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jPTI1OD1jb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHN0bW1hY19wdHAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNjUtXFx0LmdldF9wdHB0aW1lID0gZ2V0X3B0cHRpbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MjY2OlxcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gdGltZXN0YW1wX2ludGVycnVwdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNjctXFx0Lmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jPTI3MD1jb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3bWFjMTAwMF9wdHAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNzctXFx0LmdldF9wdHB0aW1lID0gZHdtYWMxMDAwX2dldF9wdHB0aW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI3ODpcXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI3OS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjgxPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjg4LVxcdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI4OTpcXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjkwLVxcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYyMTk9c3RhdGljIHZvaWQgc3RtbWFjX2NvbW1vbl9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02MjU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjI1NTpcXHRcXHRzdG1tYWNfdGltZXN0YW1wX2ludGVycnVwdChwcml2LCBwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYyNTYtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oPTEwND12b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaDoxMDU6dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaDoxMDY6dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oLTEwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MTYuMDEyMzQxNjY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5OTIxOTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTVE1NQUMgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3RtbWFjX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLiBUaGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHN0bW1hY19jb21tb25faW50ZXJydXB0YCwgd2hpY2ggaXMgdGhlIG1haW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBNQUMuIFJpZ2h0LCB0aGF0J3MgdGhlIGNvcmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY2FuIEkgZXZlbiBnZXQgdG8gYHN0bW1hY2A/IEFic29sdXRlbHksIGl0J3MgYSB3aWRlbHkgdXNlZCwgZ2VuZXJpYyBNQUMgZHJpdmVyIOKAkyBnb29kIHRhcmdldC4gQ2FuIHRoaXMgdGhpbmcgYmUgZnV6emVkPyBEZWZpbml0ZWx5LiBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgbmV0d29yayBkcml2ZXJzIGxpa2UgdGhpcy4gSSBjYW4gaW5qZWN0IHBhY2tldHMsIGFuZCBJIGtub3cgSSBjYW4gaGl0IGl0IHdpdGggaW9jdGxzLiBBaGEsIGFuZCB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgaXMgKnNwZWNpZmljYWxseSogYWJvdXQgUFRQIHRpbWVzdGFtcHMgKGBzbXRnX2Nyb3NzdHN0YW1wYCwgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgKS4gQmluZ28hXG5cblBUUCwgSSBrbm93IHRoYXQuIEl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIGAvZGV2L3B0cFhgIGRldmljZXMgYW5kIGBTSU9DU0hXVFNUQU1QYCBpb2N0bHMuIFRoYXQncyBhIGNsZWFyIGF0dGFjayBzdXJmYWNlLiBJcyBgc3RtbWFjYCB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IFllcywgd2l0aG91dCBhIGRvdWJ0LiBJdCdzIGEgY29yZSBuZXR3b3JrIGRyaXZlciwgYW5kIHRob3NlIGFyZSBhbHdheXMgaGlnaC12YWx1ZSB0YXJnZXRzLiBOb3csIHdoYXQncyBteSBuZXh0IHN0ZXA/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBgc3RtbWFjYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG15IGZ1enppbmcgc2V0dXAuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MjEuNjExNTYzMTczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MjEuNjU4MDQxNjM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTI4NzQxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgU1RNTUFDX0VUSGAgbW9kdWxlLiBCZWZvcmUgZGl2aW5nIGludG8gY29kZSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgZmlyc3QuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGFuZCwgb2YgY291cnNlLCB0cm91Ymxlc2hvb3RpbmcgYW55IGZ1dHVyZSBpc3N1ZXMuIFdoZXJlIGRvZXMgaXQgcHVsbCBpdHMgZGF0YSBmcm9tPyBXaGF0IG90aGVyIG1vZHVsZXMgZG9lcyBpdCBuZWVkIHRvIGZ1bmN0aW9uIHByb3Blcmx5PyBBbnkgZXh0ZXJuYWwgbGlicmFyaWVzPyBUaW1lIHRvIG1hcCB0aGlzIG91dCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byBiZSBzdXJlIEknbSB0aGlua2luZyBvZiBldmVyeXRoaW5nIGFuZCBub3QgbWlzc2luZyBzb21ldGhpbmcgc2ltcGxlIHRoYXQgd2lsbCBiaXRlIG1lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjI0Ljc3MDkxOTA3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNUTU1BQ19FVEhcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xcbiAgIDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgIDg6XFx0XFx0c2VsZWN0IFBDU19YUENTXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxMDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxcbiAgMTY6XFx0XFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBTVE1NQUNfRVRIXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXFxuICAyMTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzXFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAyMzpcXHRcXHRkZWZhdWx0IG5cXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNUTU1BQyBTZWxmdGVzdHMgdXNpbmcgZXRodG9vbC4gRW5hYmxlIHRoaXNcXG4gIDI2OlxcdFxcdCAgZmVhdHVyZSBpZiB5b3UgYXJlIGZhY2luZyBwcm9ibGVtcyB3aXRoIHlvdXIgSFcgYW5kIHN1Ym1pdCB0aGUgdGVzdFxcbiAgMjc6XFx0XFx0ICByZXN1bHRzIHRvIHRoZSBuZXRkZXYgTWFpbGluZyBMaXN0LlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgU1RNTUFDX1BMQVRGT1JNXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNDoyNC43NzEwMzYxNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NDk3MDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgRGV2aWNlIERyaXZlciBPcHRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIG5ldyBoYXJkd2FyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGRyaXZlciByb3V0ZS4gSXQgc2VlbXMgd2UgaGF2ZSB0d28gcHJpbWFyeSBvcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZXh0OiBgU1RNTUFDX1BDSWAgZm9yIFBDSS1iYXNlZCBpbnRlZ3JhdGlvbiBhbmQgYERXTUFDX1NPQ0ZQR0FgIGZvciB0aGUgcGxhdGZvcm0gZHJpdmVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRob3NlIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGJvdGgsIGV4YW1pbmUgdGhlIGNvZGUsIGFuZCBkZXRlcm1pbmUgd2hpY2ggYmVzdCBmaXRzIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUgYW5kIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIFdoaWNoIG9mIHRob3NlIGRyaXZlcnMsIGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgIGlzIG1vc3QgYXBwcm9wcmlhdGUsIGlzIHRoZSBuZXh0IGNydWNpYWwgc3RlcC4gTGV0IG1lIGdvIG92ZXIgdGhlbSBhbmQgc2VlIHdoaWNoIG9uZSBtYWtlcyB0aGUgbW9zdCBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjMsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjI4LjkyNjAwOTM5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NDI5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChTVE1NQUNfUENJfERXTUFDX1NPQ0ZQR0EpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0xOTE9Y29uZmlnIERXTUFDX1MzMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDM6Y29uZmlnIERXTUFDX1NPQ0ZQR0FcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTIwNC1cXHR0cmlzdGF0ZSBcXFwiU09DRlBHQSBkd21hYyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MjguOTcyNjU4OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5MTkwOTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXM6IGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZGVwZW5kZW5jaWVzIGZvciBgRFdNQUNfU09DRlBHQWAgYW5kIGBTVE1NQUNfUENJYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyDigJMgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGRyaXZlcnMgYXJlIHRoZXkgcmVsaWFudCB1cG9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2hhcmVkIGRlcGVuZGVuY2llcyB0aGF0IGp1bXAgb3V0IGF0IG1lIHJpZ2h0IGF3YXk/IFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMuIEtub3dpbmcgdGhlIFwid2hvIHRhbGtzIHRvIHdob21cIiBwaWN0dXJlIGF0IHRoaXMgbGV2ZWwgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgYmUgaXQgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGRlYnVnZ2luZywgb3Igb3B0aW1pemluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybXMgdGhlc2UgbW9kdWxlcyBhcmUgZGVzaWduZWQgZm9yLCBwb3RlbnRpYWwgZHJpdmVyIGNvbmZsaWN0cywgb3Igb3Bwb3J0dW5pdGllcyBmb3Igc3RyZWFtbGluaW5nIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGludGVyY29ubmVjdGVkbmVzcywgbm90aW5nIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIG9yIGFyZWFzIHdoZXJlIEkgbWlnaHQgbmVlZCB0byBwYXkgZXh0cmEgYXR0ZW50aW9uIGxhdGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1MSwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjM3Ljc2NDU3MDU1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMzpcXHRjb25maWcgRFdNQUNfU09DRlBHQVxcbiAyMDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlNPQ0ZQR0EgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMjA1OlxcdFxcdGRlZmF1bHQgQVJDSF9JTlRFTF9TT0NGUEdBXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX0lOVEVMX1NPQ0ZQR0EgfHwgQ09NUElMRV9URVNUKVxcbiAyMDc6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMjA4OlxcdFxcdHNlbGVjdCBNRElPX1JFR01BUFxcbiAyMDk6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuIDIxMDpcXHRcXHRzZWxlY3QgUENTX0xZTlhcXG4gMjExOlxcdFxcdGhlbHBcXG4gMjEyOlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBBbHRlcmEgU09DRlBHQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNDozNy43NjQ2NDI5MDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDc6XFx0Y29uZmlnIFNUTU1BQ19QQ0lcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDEwOlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiA0MTE6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDEyOlxcdFxcdGhlbHBcXG4gNDEzOlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDQxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxcbiA0MTU6XFx0XFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXFxuIDQxNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MzcuNzY0Njc4MjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTI1ODQzNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHBhdGNoLCB0cnlpbmcgdG8gZ2V0IGl0IHJpZ2h0IGZvciBzeXprYWxsZXIuICBMZXQncyBzZWXigKYgYFNUTU1BQ19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIGBDT01NT05fQ0xLYC4gVGhhdCBtYWtlcyBzZW5zZS4gU2luY2Ugc3l6a2FsbGVyICpjYW4qIHByb2JlIFBDSSBkZXZpY2VzLCBlbmFibGluZyBgU1RNTUFDX1BDSWAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGhhcmR3YXJlIGlzIGFjY2Vzc2libGUuXG5cbldhaXQgYSBtaW51dGUsIHRoaXMgcGF0Y2ggKmFsc28qIHRvdWNoZXMgYGR3bWFjLXNvY2ZwZ2EuY2AuICBUaGF0IG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IGVuYWJsZSBgRFdNQUNfU09DRlBHQWAgdG9vLCBqdXN0IHRvIGVuc3VyZSB0aGF0IGNvZGUgZ2V0cyBjb21waWxlZC4gTGV0J3Mgbm90IGFzc3VtZSBldmVyeXRoaW5nIGlzIGJlaW5nIHB1bGxlZCBpbiB0cmFuc2l0aXZlbHkuIEkgbmVlZCB0byBiZSAqc3VyZSouXG5cbk5vdywgYSBxdWljayBjaGVja+KApiB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBEV01BQ19TT0NGUEdBYD8gQWgsIGBPRmAgYW5kIGVpdGhlciBgQVJDSF9JTlRFTF9TT0NGUEdBYCAqb3IqIGBDT01QSUxFX1RFU1RgLiBIbW0uIFN5emthbGxlciBrZXJuZWxzIHVzdWFsbHkgZG9uJ3QgaGF2ZSBgQVJDSF9JTlRFTF9TT0NGUEdBYCBlbmFibGVkLCBidXQgdGhleSAqZG8qIHR5cGljYWxseSBoYXZlIGBDT01QSUxFX1RFU1Q9eWAuIEknbSBwcmV0dHkgc3VyZSB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG5lZWQgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkuXG5cblJpZ2h0LCBzbyB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgcnVuIHRocm91Z2ggYW5kIHdvcmtpbmcgY29ycmVjdGx5LCBJIHNob3VsZCBzZWUgd2hhdCBmdW5jdGlvbnMgYXJlIGNoYW5nZWQuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggYWRkcyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgYW5kIG1vZGlmaWVzIGBzbXRnX2Nyb3NzdHN0YW1wYC4gT2theS4gYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIGRlY2xhcmVkIHN0YXRpYyB3aXRoaW4gYGR3bWFjLXNvY2ZwZ2EuY2AuXG5cbk9rYXkuIExldCdzIHNlZSB3aGVyZSB0aGF0IGBzbXRnX2Nyb3NzdHN0YW1wYCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkIHRvIG1ha2Ugc3VyZSBJIGdldCBjb3ZlcmFnZSwgYW5kIHRoYXQgSSdtIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTI5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6NDguNjkwNTI1MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDExMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtdGdfY3Jvc3N0c3RhbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz0yNzk9c3RhdGljIHZvaWQgZ2V0X3NtdGd0aW1lKHN0cnVjdCBtaWlfYnVzICptaWksIGludCBzbXRnX2FkZHIsIHU2NCAqc210Z190aW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjk0OnN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5NS1cXHRcXHRcXHQgICAgdm9pZCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwMy1cXHRwbGF0X2RhdC1cXHUwMDNlaW50X3NuYXBzaG90X251bSA9IEFVWF9TTkFQU0hPVDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNDpcXHRwbGF0X2RhdC1cXHUwMDNlY3Jvc3N0c3RhbXAgPSBzbXRnX2Nyb3NzdHN0YW1wO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNDo0OC43MzU5NDQ1MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NTgwNjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgY3Jvc3N0c3RhbXBgIEFzc2lnbm1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBzbXRnX2Nyb3NzdHN0YW1wYCB2YXJpYWJsZS4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgYXNzaWduaW5nIGl0cyB2YWx1ZSB0byBgcGxhdF9kYXQtXHUwMDNlY3Jvc3N0c3RhbXBgLiBPa2F5LCBzdGFuZGFyZCBhc3NpZ25tZW50LCBub3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLiBNeSByZWFsIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIGBjcm9zc3RzdGFtcGAgYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZG93bnN0cmVhbSBpbXBhY3QuIEknbSBnb2luZyB0byBuZWVkIHRvIHRyYWNlIGFsbCB0aGUgY2FsbHMgYW5kIHJlZmVyZW5jZXMgdG8gYGNyb3NzdHN0YW1wYCBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gV2hhdCBvcGVyYXRpb25zIGlzIGl0IGludm9sdmVkIGluPyBJcyBpdCBwYXJ0IG9mIGFueSBjcml0aWNhbCBwYXRoPyBJcyB0aGlzIGEgdGltZXN0YW1wIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiBvciBtZWFzdXJlbWVudD8gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgY3J1Y2lhbGx5LCB0byBkZXRlcm1pbmUgaWYgdGhpcyBhc3NpZ25tZW50IGlzIGNvcnJlY3QgYW5kIGlmIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCB0aW1pbmcgb3IgZGF0YSBmbG93LiBEaWdnaW5nIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjU1LjMxMTc1MzE2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1Njg0ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3Jvc3N0c3RhbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MzUzPXN0YXRpYyBpbnQgc3RtbWFjX2Nyb3NzX3RzX2lzcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjM1ODpzdGF0aWMgaW50IGludGVsX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM1OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTU4NT1zdGF0aWMgaW50IGludGVsX21nYmVfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTcxNC1cXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FSVCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3MTU6XFx0XFx0cGxhdC1cXHUwMDNlY3Jvc3N0c3RhbXAgPSBpbnRlbF9jcm9zc3RzdGFtcDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTcxNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz0yNzk9c3RhdGljIHZvaWQgZ2V0X3NtdGd0aW1lKHN0cnVjdCBtaWlfYnVzICptaWksIGludCBzbXRnX2FkZHIsIHU2NCAqc210Z190aW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjk0OnN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5NS1cXHRcXHRcXHQgICAgdm9pZCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwMy1cXHRwbGF0X2RhdC1cXHUwMDNlaW50X3NuYXBzaG90X251bSA9IEFVWF9TTkFQU0hPVDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNDpcXHRwbGF0X2RhdC1cXHUwMDNlY3Jvc3N0c3RhbXAgPSBzbXRnX2Nyb3NzdHN0YW1wO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jPTI3Nj1zdGF0aWMgaW50IHN0bW1hY19nZXRfc3luY2RldmljZXRpbWUoa3RpbWVfdCAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MjgyOlxcdHJldHVybiBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjcm9zc3RzdGFtcChkZXZpY2UsIHN5c3RlbSwgY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjgzLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODU6c3RhdGljIGludCBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXAoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI4NjpcXHRcXHRcXHRcXHQgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyOTE6XFx0cmV0dXJuIGdldF9kZXZpY2Vfc3lzdGVtX2Nyb3NzdHN0YW1wKHN0bW1hY19nZXRfc3luY2RldmljZXRpbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI5Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHByaXYsIE5VTEwsIHh0c3RhbXApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jPTMzNT12b2lkIHN0bW1hY19wdHBfcmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MzY1OlxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjcm9zc3RzdGFtcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MzY2OlxcdFxcdHByaXYtXFx1MDAzZXB0cF9jbG9ja19vcHMuZ2V0Y3Jvc3N0c3RhbXAgPSBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6NTUuMzU5MzI3MjI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTk1MzcwMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQsIGFuZCBpdCBsb29rcyBsaWtlIEkndmUgZm91bmQgYSBnb29kIGNhbmRpZGF0ZS4gVGhlIGBjcm9zc3RzdGFtcGAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHZpYSBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYC4gVGhpcyBmdW5jdGlvbiwgaW4gdHVybiwgaXMgYXNzaWduZWQgdG8gdGhlIGBwdHBfY2xvY2tfb3BzLmdldGNyb3NzdHN0YW1wYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCBgcHRwX2Nsb2NrX29wcy5nZXRjcm9zc3RzdGFtcGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIFBUUCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgd2hlbiB1c2Vyc3BhY2UgaXNzdWVzIHRoZSBgUFRQX1NZU19PRkZTRVRfRVhURU5ERURgIGlvY3RsIG9uIGEgYC9kZXYvcHRwWGAgZGV2aWNlLiBUaGF0IG1ha2VzIGl0IGltbWVkaWF0ZWx5IHJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlLCBmdXp6YWJsZS5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzpcbiogICBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAsIHdoaWNoIHdhcyBhZGRlZCBpbiBgZHd4Z21hYzJfY29yZS5jYFxuKiAgIGBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXBgIHdoaWNoIGxpdmVzIGluIGBzdG1tYWNfcHRwLmNgXG4qICAgYHN0bW1hY19nZXRfc3luY2RldmljZXRpbWVgIGFsc28gaW4gYHN0bW1hY19wdHAuY2BcblxuSG9sZCBvbiwgSSByZW1lbWJlciB0aGF0IGBzbXRnX2Nyb3NzdHN0YW1wYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgc28gaXQncyBwcm9iYWJseSBnb2luZyB0byBiZSBpbmxpbmVkLCBhbmQgd29uJ3QgYmUgYSBkaXN0aW5jdCBzeW1ib2wsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBzbyBpdCBzaG91bGRuJ3QgYmUgaW5saW5lZC4gVGhlIHByb21wdCBzYXlzIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gdG8gbWUuXG5cbk9rYXksIGxldCdzIGtlZXAgZ29pbmcuIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBpcyBub24tc3RhdGljLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gYHN0bW1hY19nZXRjcm9zc3RzdGFtcGAgaXMgaW5kZWVkIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0J3MgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIFBUUCwgc28gSSB3aWxsIGhhdmUgdG8ga2VlcCBpdCBpbiBtaW5kLiBJIHdvbmRlciBhYm91dCBgc3RtbWFjX3B0cF9yZWdpc3RlcmAgLSB0aGF0IG9uZSdzIGNhbGxlZCBkdXJpbmcgcHJvYmUuIFRoZW4gdGhlcmUgaXMgYHN0bW1hY19jb21tb25faW50ZXJydXB0YCwgYnV0IHRoYXQncyBhbHNvIHN0YXRpYy5cblxuQWhhISBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgKm5vbi1zdGF0aWMqLCBzbyBJIGNhbiBkZWZpbml0ZWx5IHVzZSB0aGF0LlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgb2J2aW91cyBub24tc3RhdGljIGZ1bmN0aW9ucyBoYW5naW5nIGFyb3VuZCwgc28gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgc3RtbWFjX2h3dHN0YW1wLmNgIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6MDUuOTU0NzAwMDk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM0ODY3MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNDM9c3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMTU3OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjgxPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjg4LVxcdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI4OTpcXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjkwLVxcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg9MTA1PXZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg6MTA2OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaC0xMDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjA2LjA3ODE5MzA5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTUyNzE4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIGdvb2QuIE5vdywgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpb2N0bCBlbnRyeSBwb2ludCByZWxhdGVkIHRvIFBUUC4gV2hlcmUgaXMgdGhhdCBkZWZpbmVkPyBJIHNlZW0gdG8gcmVjYWxsIGBwdHBfY2xvY2tfb3BzYCBoYXZpbmcgYSBgZ2V0Y3Jvc3N0c3RhbXBgIGZ1bmN0aW9uOyB0aGF0J3MgYSBnb29kIGxlYWQuIExldCBtZSBkaWcgaW50byBgZHJpdmVycy9wdHAvcHRwX2NoYXJkZXYuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gZmluZCB0aGUgaW9jdGwuIFdlIGRvbid0IG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzIGhlcmUsIHNvIEknbGwganVzdCBmb2N1cyBvbiBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIG5vdywgYXNzdW1pbmcgdGhhdCdzIHRoZSBrZXkuXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2guIFRoaXMgcGF0Y2ggYWxzbyB0b3VjaGVzIGBzbXRnX2Nyb3NzdHN0YW1wYCB3aXRoaW4gYGR3bWFjLXNvY2ZwZ2EuY2AuIElzICp0aGF0KiBzdGF0aWM/IFllcywgaXQgaXMuIFJpZ2h0LiBJcyB0aGVyZSAqYW55dGhpbmcqIG5vbi1zdGF0aWMgSSBjYW4gbGV2ZXJhZ2UgaW4gYGR3bWFjLXNvY2ZwZ2EuY2A/IGBzb2NmcGdhX2R3bWFjX3Byb2JlYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBzaG9vdCwgaXQncyBzdGF0aWMgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29udGVudHMgb2YgYGR3bWFjLXNvY2ZwZ2EuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIHRoYXQgSSBjYW4gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2NCwiT3V0cHV0VG9rZW5zIjo4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNToxMi4wMzA5MTQ3MTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY3MTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccyspK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTYxPXN0cnVjdCBzb2NmcGdhX2R3bWFjIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NzU6c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBzb2NmcGdhX2dldF9wbGF0X3BoeW1vZGUoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjgwOnN0YXRpYyB2b2lkIHNvY2ZwZ2Ffc2dtaWlfY29uZmlnKHN0cnVjdCBzb2NmcGdhX2R3bWFjICpkd21hYywgYm9vbCBlbmFibGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy04Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6ODc6c3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19maXhfbWFjX3NwZWVkKHZvaWQgKmJzcF9wcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy04OC1cXHRcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoxMjU6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3BhcnNlX2RhdGEoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTEyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoyNTU6c3RhdGljIGludCBzb2NmcGdhX3NldF9waHlfbW9kZV9jb21tb24oaW50IHBoeW1vZGUsIHUzMiAqdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjc5OnN0YXRpYyB2b2lkIGdldF9zbXRndGltZShzdHJ1Y3QgbWlpX2J1cyAqbWlpLCBpbnQgc210Z19hZGRyLCB1NjQgKnNtdGdfdGltZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI5NDpzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTUtXFx0XFx0XFx0ICAgIHZvaWQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjM5NTpzdGF0aWMgaW50IHNvY2ZwZ2FfZ2VuNV9zZXRfcGh5X21vZGUoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zOTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo0NTQ6c3RhdGljIGludCBzb2NmcGdhX2dlbjEwX3NldF9waHlfbW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTQ1NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1MDc6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU1MTpzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU1NzpzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpzb2NmcGdhX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1NjM6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU3MDpzdGF0aWMgdm9pZCBzb2NmcGdhX2dlbjVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTgwOnN0YXRpYyB2b2lkIHNvY2ZwZ2FfYWdpbGV4NV9zZXR1cF9wbGF0X2RhdChzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo2MDc6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjEyLjI4MDU5NDc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNDMxMTgwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRnVuY3Rpb24gVmlzaWJpbGl0eSBpbiB0aGUgRXRoZXJuZXQgRHJpdmVyIENvZGUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHdtYWMtc29jZnBnYS5jYCBmaWxlLCBhbmQgSSdtIG5vdGljaW5nIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgaW4gaXQgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZSwgdXN1YWxseSBpbmRpY2F0aW5nIHRoYXQgdGhleSdyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLCBwcmV2ZW50aW5nIG5hbWluZyBjb25mbGljdHMgYW5kIGVuc3VyaW5nIGEgY2VydGFpbiBsZXZlbCBvZiBlbmNhcHN1bGF0aW9uLiBCdXQgdGhlbiwgYSByZWQgZmxhZyBwb3BwZWQgdXA6IEkgcmVjYWxsIHRoYXQgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpub3QqIGBzdGF0aWNgIGFuZCBpdCByZXNpZGVzIGluIGBkd3hnbWFjMl9jb3JlLmNgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdG8gdGhpcyB0aGFuIGEgc3RyYWlnaHRmb3J3YXJkIGZpbGUtbGV2ZWwgc2NvcGUuIFRoaXMgaW50ZXJydXB0cyBteSBjdXJyZW50IHdvcmsuIEkgd29uZGVyIGlmIHRoZXJlIG1pZ2h0IGJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZsb2F0aW5nIGFyb3VuZCBpbiB0aGUgcmVsYXRlZCB0aW1lc3RhbXAgb3IgaGFyZHdhcmUgdGltZXN0YW1wLXJlbGF0ZWQgZmlsZXMsIGBzdG1tYWNfcHRwLmNgIG9yIGBzdG1tYWNfaHd0c3RhbXAuY2AsIHRoYXQgYXJlIHNvbWVob3cgaG9va2VkIGludG8gdGhpcyBQVFAgb3IgdGltZXN0YW1waW5nIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBhIGJpdCBkZWVwZXIgdG8gc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwODIsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNToyMS42MjM3MTU0MzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTgzNzY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccyspK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyNTpzdGF0aWMgaW50IHN0bW1hY19hZGp1c3RfZnJlcShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0yNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtNDgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjQ5OnN0YXRpYyBpbnQgc3RtbWFjX2FkanVzdF90aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0xMjQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjEyNTpzdGF0aWMgaW50IHN0bW1hY19nZXRfdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0xMjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTE0OS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MTUwOnN0YXRpYyBpbnQgc3RtbWFjX3NldF90aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0xNTEtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTE2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MTY0OnN0YXRpYyBpbnQgc3RtbWFjX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTY1LVxcdFxcdFxcdCBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjc1LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6Mjc2OnN0YXRpYyBpbnQgc3RtbWFjX2dldF9zeW5jZGV2aWNldGltZShrdGltZV90ICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI3Ny1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODU6c3RhdGljIGludCBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXAoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9MzEzPWNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0zMzQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjMzNTp2b2lkIHN0bW1hY19wdHBfcmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0zMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM4OS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MzkwOnZvaWQgc3RtbWFjX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMzkxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6MjEuNzk5NTU5NDY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjcwMTc0NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgU1RNTUFDIFBUUCBmdW5jdGlvbnMsIGBzdG1tYWNfcHRwX3JlZ2lzdGVyYCBhbmQgYHN0bW1hY19wdHBfdW5yZWdpc3RlcmAuIEludGVyZXN0aW5nIHRoYXQgdGhleSdyZSBub3Qgc3RhdGljLCBidXQgdWx0aW1hdGVseSwgdGhleSBzZWVtIHRvIGJlIHNldHVwIGFuZCB0ZWFyZG93biByb3V0aW5lcy4gVGhlIHJlYWwgYWN0aW9uLCB0aGUgY29yZSB0aW1lc3RhbXBpbmcgbG9naWMsIHJlc2lkZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGFuZCBgc210Z19jcm9zc3RzdGFtcGAuIE5vdywgYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciBtZSwgSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmb2N1cyBzeW1ib2wuIEJ1dCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0IGNvdWxkIGJlIHRoZSBrZXkgb25lLlxuXG5IbW0sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3aG9sZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgcHJvY2Vzcz8gSSdsbCBxdWlja2x5IGNoZWNrIGBzdG1tYWNfaHd0c3RhbXAuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODUsIk91dHB1dFRva2VucyI6ODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6MzIuMDY5NzM2Mzk4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg3NDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccyspK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyOTpzdGF0aWMgdm9pZCBjb25maWdfaHdfdHN0YW1waW5nKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0zMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0zOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzozOTpzdGF0aWMgdm9pZCBjb25maWdfc3ViX3NlY29uZF9pbmNyZW1lbnQodm9pZCBfX2lvbWVtICppb2FkZHIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtNDAtXFx0XFx0dTMyIHB0cF9jbG9jaywgaW50IGdtYWM0LCB1MzIgKnNzaW5jKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6NzY6c3RhdGljIHZvaWQgaHd0c3RhbXBfY29ycmVjdF9sYXRlbmN5KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy03Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0xMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTE4OnN0YXRpYyBpbnQgaW5pdF9zeXN0aW1lKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgc2VjLCB1MzIgbnNlYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0xMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjEzNTpzdGF0aWMgaW50IGNvbmZpZ19hZGRlbmQodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBhZGRlbmQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTE1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoxNTE6c3RhdGljIGludCBhZGp1c3Rfc3lzdGltZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIHNlYywgdTMyIG5zZWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTUyLVxcdFxcdGludCBhZGRfc3ViLCBpbnQgZ21hYzQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0xODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTg2OnN0YXRpYyB2b2lkIGdldF9zeXN0aW1lKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1NjQgKnN5c3RpbWUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIwMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMDQ6c3RhdGljIHZvaWQgZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIwNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MjE0OnN0YXRpYyB2b2lkIHRpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjMyLjExNjYxNTY1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTcxNTk1MTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU3RtbWFjIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBFdmVyeXRoaW5nIHNlZW1zIHByZXR0eSBzdGF0aWMgZXhjZXB0IGZvciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIFdhaXQsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIGBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXBgIGlzIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYHB0cF9jbG9ja19vcHMuZ2V0Y3Jvc3N0c3RhbXBgLiBMZXQncyBzZWUgaWYgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbHMgYHNtdGdfY3Jvc3N0c3RhbXBgLi4uIG5vcGUsIGl0J3MgY2FsbGVkIHZpYSB0aGUgZnVuY3Rpb24gcG9pbnRlciBgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNyb3NzdHN0YW1wYC4gU28sIHllYWgsIGl0IGxvb2tzIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gZGlyZWN0bHkgYWZmZWN0ZWQgb3IgYWRkZWQgdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIG5lZWQgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgRFdNQUNfU09DRlBHQWAuIEhvbGQgb24sIGBEV01BQ19TT0NGUEdBYCBoYXMgZGVwZW5kZW5jaWVzIG9uIGBPRmAgYW5kIGAoQVJDSF9JTlRFTF9TT0NGUEdBIHx8IENPTVBJTEVfVEVTVClgLiBLYnVpbGQgc2hvdWxkIGhhbmRsZSB0aG9zZSBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIHNvIGxpc3RpbmcgYERXTUFDX1NPQ0ZQR0FgIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJJ2xsIGluY2x1ZGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgRFdNQUNfU09DRlBHQWAgaW4gdGhlIGxpc3QsIHRob3VnaC4gQW5kIG9mIGNvdXJzZSwgZm9yIFBUUCBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIGBQVFBfMTU4OF9DTE9DS2AuIExldCBtZSB2ZXJpZnkgaWYgdGhhdCBpcyBzZWxlY3RlZCwgb3IgZGVwZW5kZW50IG9uLiBBaCwgcmlnaHQsIGluIHRoZSBLY29uZmlnIGZvciBzdG1tYWMsIGl0ICpkZXBlbmRzKiBvbiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBTbywgaXQncyBvcHRpb25hbCwgYnV0IHdlIHdhbnQgdG8gdGVzdCBQVFAsIHNvIGxldCdzIGluY2x1ZGUgdGhhdC5cblxuTm93LCByZXZpc2l0aW5nIHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgY2xlYXIuIEl0IG1vZGlmaWVzIGBzbXRnX2Nyb3NzdHN0YW1wYCB0byBtYXNrIGBYR01BQ19UU0lFYCBkdXJpbmcgdGhlIGNyb3NzLXRpbWVzdGFtcCBvcGVyYXRpb24sIHByZXZlbnRpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIGZyb20gcnVubmluZyB3aGlsZSB3ZSdyZSByZWFkaW5nIHRoZSBGSUZPLiBQbHVzLCB0aGUgbmV3IGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBmdW5jdGlvbiBpcyBhZGRlZCB0byByZWFkIHRoZSBgWEdNQUNfVElNRVNUQU1QX1NUQVRVU2AgcmVnaXN0ZXIgYW5kIGNsZWFyIGBUU0lTYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdGhhdCBhaW1zIHRvIHJlc29sdmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlIHBvbGxpbmcgbG9vcCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIERlZmluaXRlbHkgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBpbXBsaWNhdGlvbnMuXG5cblNvLCB0aGUgY29uZmlndXJhdGlvbnMgSSdsbCB1c2UgYXJlOlxuXG4qICAgYFNUTU1BQ19FVEhgXG4qICAgYFNUTU1BQ19QQ0lgXG4qICAgYERXTUFDX1NPQ0ZQR0FgXG4qICAgYFBUUF8xNTg4X0NMT0NLYFxuXG5BbmQgdGhlIGtleSBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcgc2hvdWxkIGJlOlxuXG4qICAgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucy4uLiBgc3RtbWFjX3B0cF9yZWdpc3RlcmAgaXMgbm9uLXN0YXRpYywgYnV0IHRoYXQncyBqdXN0IHNldHVwLiBgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeWAgaXMgYSBtYWNybywgc28gdGhhdCdzIG5vdCByZWxldmFudC4gWWVzLCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQuXG5cbkxldCBtZSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXIncyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKGBYR01BQ19UU0lFYCkgZHVyaW5nIEZJRk8gcmVhZHMgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLCBhbmQgYWRkcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyB0b3VjaCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUFRQIG1lY2hhbmlzbXMuXG5cbk9rYXksIGxldCdzIHByb2NlZWQgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDY2LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNTo0Ny44MzI1Njk5OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjg1NzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiLFxuICAgIFwiRFdNQUNfU09DRlBHQVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RtbWFjIGRyaXZlcidzIFBUUCBjcm9zcy10aW1lc3RhbXBpbmcgbG9naWMgYnkgbWFza2luZyB0aGUgdGltZXN0YW1wIGludGVycnVwdCAoWEdNQUNfVFNJRSkgZHVyaW5nIHRoZSBzbmFwc2hvdCBGSUZPIHJlYWQgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBmb3IgZHd4Z21hYzIvZHd4bGdtYWMyIE1BQ3MgdG8gaGFuZGxlIEFVWCBzbmFwc2hvdHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIHN0bW1hYyBkcml2ZXIgYW5kIHRoZSBTT0NGUEdBIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayBhbmQgUFRQIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgUFRQIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19TT0NGUEdBXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdG1tYWMgZHJpdmVyJ3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNTo0Ny45MTU0MzQ1OTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDEzNDgyNDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjQ3LjkxNTk0NjExNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTQxMzQzMDgzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQyYWY0YzYyMjg0ZTQwYzE5MDZjMjZhOGRkZWYzN2MyMzRmY2YyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE2OjAzOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5pbmRleCAxZDdmMGE1N2QyODg5Li5hNGQwMGJmODE0MjM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbkBAIC0zMTAsNiArMzEwLDEzIEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4rXHQvKiBUaGUgWEdNQUMgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBUU0lTIGJ5IHJlYWRpbmdcbitcdCAqIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMsIHdoaWNoIHdvdWxkIHJhY2Ugd2l0aCB0aGUgVFNJUyBwb2xsXG4rXHQgKiBiZWxvdy4gIE1hc2sgWEdNQUNfVFNJRSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjcm9zcy10aW1lc3RhbXBcbitcdCAqIHNvIHRoZSBoYW5kbGVyIGRvZXMgbm90IHJ1biB3aGlsZSB3ZSBvd24gdGhlIHNuYXBzaG90IEZJRk8uXG4rXHQgKi9cbitcdHN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCBYR01BQ19UU0lFLCAwKTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VhdXhfdHNfbG9jayk7XG4gXHQvKiBFbmFibGUgSW50ZXJuYWwgc25hcHNob3QgdHJpZ2dlciAqL1xuIFx0YWNyX3ZhbHVlID0gcmVhZGwocHRwYWRkciArIFBUUF9BQ1IpO1xuQEAgLTMyOSw2ICszMzYsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWF1eF90c19sb2NrKTtcbitcdFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHdyaXRlbChhY3JfdmFsdWUsIHB0cGFkZHIgKyBQVFBfQUNSKTtcbkBAIC0zNTMsNiArMzYxLDcgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChwcml2LVx1MDAzZWlvYWRkciArIFhHTUFDX0lOVF9TVEFUVVMsIHYsXG4gXHRcdFx0XHQgKHYgXHUwMDI2IFhHTUFDX0lOVF9UU0lTKSwgMTAwLCAxMDAwMCk7XG4gXHRpZiAocmV0KSB7XG4rXHRcdHN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCAwLCBYR01BQ19UU0lFKTtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCIlczogV2FpdCBmb3IgdGltZSBzeW5jIG9wZXJhdGlvbiB0aW1lb3V0XFxuXCIsXG4gXHRcdFx0ICAgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTM3NSw2ICszODQsOCBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbiBcdH1cbiBcbitcdHN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCAwLCBYR01BQ19UU0lFKTtcbitcbiBcdGdldF9zbXRndGltZShwcml2LVx1MDAzZW1paSwgU01UR19NRElPX0FERFIsIFx1MDAyNnNtdGdfdGltZSk7XG4gXHRzeXN0ZW0tXHUwMDNlY3ljbGVzID0gc210Z190aW1lO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5pbmRleCA2MWI2ZDQ1YTAyZjVkLi43NmUyODYwYTk1MTdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuQEAgLTg3LDcgKzg3LDcgQEBcbiAjZGVmaW5lIFhHTUFDX1RTSUVcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBYR01BQ19MUElJRVx0XHRcdEJJVCg1KVxuICNkZWZpbmUgWEdNQUNfUE1USUVcdFx0XHRCSVQoNClcbi0jZGVmaW5lIFhHTUFDX0lOVF9ERUZBVUxUX0VOXHRcdChYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFKVxuKyNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU5cdFx0KFhHTUFDX0xQSUlFIHwgWEdNQUNfUE1USUUgfCBYR01BQ19UU0lFKVxuICNkZWZpbmUgWEdNQUNfUXhfVFhfRkxPV19DVFJMKHgpXHQoMHgwMDAwMDA3MCArICh4KSAqIDQpXG4gI2RlZmluZSBYR01BQ19QVFx0XHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgWEdNQUNfVEZFXHRcdFx0QklUKDEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG5pbmRleCBmMDJiNDM0YmJkNTA1Li5iODQ5Y2ViZjliMjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbkBAIC0xMTU0LDYgKzExNTQsNDkgQEAgc3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cylcbiBcdHJldHVybiAwO1xuIH1cbiBcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdHUzMiB0c19zdGF0dXMsIHBlbmRpbmdfc25hcHNob3RzLCBhY3JfdmFsdWUsIGNoYW5uZWw7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHU2NCBwdHBfdGltZTtcbitcdGludCBpO1xuK1xuK1x0LyogUmVhZCBYR01BQ19USU1FU1RBTVBfU1RBVFVTIHRvIGdldCB0aGUgQVVYIHNuYXBzaG90XG4rXHQgKiBjb3VudC4gIFRoaXMgcmVhZCBhbHNvIGNsZWFycyB0aGUgVFNJUyBiaXQgaW5cbitcdCAqIFhHTUFDX0lOVF9TVEFUVVMuXG4rXHQgKiBUWCB0aW1lc3RhbXAgcG9sbGluZyBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgVFNJU1xuK1x0ICogYW5kIEFVWFRTVFJJRywgc28gcmVseSBvbiBBVFNOUyBpbnN0ZWFkLlxuK1x0ICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieVxuK1x0ICogdGhpcyByZWdpc3Rlciwgc28gdGhlcmUgaXMgbm8gY29uZmxpY3QuXG4rXHQgKi9cbitcdHRzX3N0YXR1cyA9IHJlYWRsKHByaXYtXHUwMDNlaW9hZGRyICsgWEdNQUNfVElNRVNUQU1QX1NUQVRVUyk7XG4rXG4rXHRpZiAoIShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTikpXG4rXHRcdHJldHVybjtcbitcbitcdHBlbmRpbmdfc25hcHNob3RzID0gRklFTERfR0VUKFhHTUFDX1RJTUVTVEFNUF9BVFNOU19NQVNLLCB0c19zdGF0dXMpO1xuK1x0aWYgKCFwZW5kaW5nX3NuYXBzaG90cylcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWNyX3ZhbHVlID0gcmVhZGwocHJpdi1cdTAwM2VwdHBhZGRyICsgUFRQX0FDUik7XG4rXHRjaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTtcbitcdGlmICghY2hhbm5lbClcbitcdFx0cmV0dXJuO1xuK1x0Y2hhbm5lbCA9IGlsb2cyKGNoYW5uZWwpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGVuZGluZ19zbmFwc2hvdHM7IGkrKykge1xuK1x0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4rXHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbitcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4rXG4rXHRcdGV2ZW50LnR5cGUgPSBQVFBfQ0xPQ0tfRVhUVFM7XG4rXHRcdGV2ZW50LmluZGV4ID0gY2hhbm5lbDtcbitcdFx0ZXZlbnQudGltZXN0YW1wID0gcHRwX3RpbWU7XG4rXHRcdHB0cF9jbG9ja19ldmVudChwcml2LVx1MDAzZXB0cF9jbG9jaywgXHUwMDI2ZXZlbnQpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGR3eGdtYWMyX2ZsZXhfcHBzX2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGluZGV4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSxcbiBcdFx0XHRcdCAgICB1MzIgc3ViX3NlY29uZF9pbmMsIHUzMiBzeXN0aW1lX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuaW5kZXggNTExYjBmZDVlODM0My4uOTcxODU4MmI4NDgwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG5AQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuIFx0XHQuZG1hID0gXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxuIFx0XHQubWFjID0gXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXG4gXHRcdC52bGFuID0gXHUwMDI2ZHd4Z21hYzIxMF92bGFuX29wcyxcbi1cdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbitcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHd4Z21hYzJfcHRwLFxuIFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gXHRcdC5tb2RlID0gTlVMTCxcbiBcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbiBcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiBcdFx0Lm1hYyA9IFx1MDAyNmR3eGxnbWFjMl9vcHMsXG4gXHRcdC52bGFuID0gXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxuLVx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuK1x0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd3hnbWFjMl9wdHAsXG4gXHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiBcdFx0Lm1vZGUgPSBOVUxMLFxuIFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5pbmRleCBlNjMxN2I5NGZmZjdkLi44MThhYjNkYWE5MWM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbkBAIC02NzEsNiArNjcxLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgbmRlc2Nfb3BzO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHN0bW1hY19wdHA7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cDtcbitleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHA7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyBjaGFpbl9tb2RlX29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5pbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5AQCAtMjc3LDMgKzI3NywxNSBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3bWFjMTAwMF9wdHAgPSB7XG4gXHQuZ2V0X3B0cHRpbWUgPSBkd21hYzEwMDBfZ2V0X3B0cHRpbWUsXG4gXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LFxuIH07XG4rXG4rY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHAgPSB7XG4rXHQuY29uZmlnX2h3X3RzdGFtcGluZyA9IGNvbmZpZ19od190c3RhbXBpbmcsXG4rXHQuaW5pdF9zeXN0aW1lID0gaW5pdF9zeXN0aW1lLFxuK1x0LmNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCA9IGNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCxcbitcdC5jb25maWdfYWRkZW5kID0gY29uZmlnX2FkZGVuZCxcbitcdC5hZGp1c3Rfc3lzdGltZSA9IGFkanVzdF9zeXN0aW1lLFxuK1x0LmdldF9zeXN0aW1lID0gZ2V0X3N5c3RpbWUsXG4rXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcbitcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCxcbitcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4rfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcbmluZGV4IDNmZTBlM2E4MGU4MGEuLmRhZGUwOTYxNDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxuQEAgLTEwMyw2ICsxMDMsNyBAQCBpbnQgZHdtYWMxMDAwX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4gXG4gdm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKTtcbiB2b2lkIGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4rdm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBzdG1tYWNfcHRwX2Nsb2NrX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIGR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6NDcuOTE1OTQ2ODc1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxOTg2NzM2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdGhlcm5ldCBEcml2ZXIgVGltZXN0YW1wIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgdGhlIGBzdG1tYWNgIEV0aGVybmV0IGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGZ1bmN0aW9uLCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXNzZWN0IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGFzIGl0J3MgdGhlIG5ldyBsb2dpYy5cblxuRmlyc3QsIGl0IHJlYWRzIHRoZSBgWEdNQUNfVElNRVNUQU1QX1NUQVRVU2AgcmVnaXN0ZXIuIFRoaXMgaXMga2V5OyB0aGlzIHJlYWQgKmFsc28qIGNsZWFycyB0aGUgYFRTSVNgIGJpdCBpbiBgWEdNQUNfSU5UX1NUQVRVU2AuLi5idXQgaXQgbWVudGlvbnMgVFggdGltZXN0YW1wIHBvbGxpbmcgbWlnaHQgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgdGhlc2UgYml0cywgc28gaXQgcmVsaWVzIG9uIGBBVFNOU2AgaW5zdGVhZCwgd2hpY2ggaXMgZ29vZC4gV2UncmUgbG9va2luZyBhdCB0aGUgQVVYIHNuYXBzaG90IGNvdW50IGFuZCBjaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcgc25hcHNob3RzIHZpYSB0aGUgYEFUU05TYCBmaWVsZC4gSXQgdGhlbiByZWFkcyB0aGUgYFBUUF9BQ1JgIHJlZ2lzdGVyLCBleHRyYWN0cyB0aGUgYGNoYW5uZWxgIGZpZWxkIHVzaW5nIGEgbWFzayBhbmQgYGlsb2cyKClgLCBwcmVzdW1hYmx5IHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgUFRQIGNoYW5uZWwuXG5cblRoZSBjb3JlIG9mIHRoZSBsb2dpYyBpcyB3aXRoaW4gdGhhdCBgZm9yYCBsb29wLCBpdGVyYXRpbmcgdGhyb3VnaCBgcGVuZGluZ19zbmFwc2hvdHNgLiBJbnNpZGUgdGhlIGxvb3AsIGEgcmVhZCBsb2NrIGlzIGFjcXVpcmVkLCBwcm90ZWN0aW5nIHRoZSBgcHRwX3RpbWVgIHJlYWQuIFRoZW4sIGl0IHVzZXMgYHN0bW1hY19nZXRfcHRwdGltZWAgdG8gYWN0dWFsbHkgZ2V0IHRoZSBQVFAgdGltZXN0YW1wLiAgQSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgaXMgc2V0IHVwOiB0aGUgYHR5cGVgIGlzIGBQVFBfQ0xPQ0tfRVhUVFNgLCB0aGUgYGluZGV4YCBpcyBgY2hhbm5lbGAsIGFuZCBgdGltZXN0YW1wYCBpcyBzZXQuIEZpbmFsbHksIGBwdHBfY2xvY2tfZXZlbnRgIGlzIGNhbGxlZCB3aXRoIHRoaXMgYGV2ZW50YCBzdHJ1Y3R1cmUuXG5cbk5vdywgYSBiaXQgb2YgYSBjb2RlIHNtZWxsLi4uYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7YCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiBUaGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgYnViYmxpbmcgdXAgaXM6IHdoYXQgKmVsc2UqIGlzIGluIHRoYXQgYHB0cF9jbG9ja19ldmVudGAgc3RydWN0PyBBcmUgdGhlcmUgb3RoZXIgZmllbGRzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCBkYXRhIGl0IGNvbnRhaW5zLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCBvciB3ZSBtYXkgaGF2ZSBhIGRhdGEgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6NTYuMTE0NjI0MDc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUwMDUzMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg9MjMxPWVudW0gcHRwX2Nsb2NrX2V2ZW50cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaC0yNDgtXFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6MjQ5OnN0cnVjdCBwdHBfY2xvY2tfZXZlbnQge1xcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTI1MC1cXHRpbnQgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6NTguNDY0NjgzNTU1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM5NTY3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCB3aXRoIGFuIGV4cGVydCdzIGV5ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBmdWxsIGRlZmluaXRpb24gb2YgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCwgc2hhbGwgd2U/IEtub3dpbmcgdGhlIGRlZmluaXRpb24gaW4gZGV0YWlsIHdpbGwgYWxsb3cgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgdGltZSBzeW5jaHJvbml6YXRpb24gZXZlbnQgaXMgc3RydWN0dXJlZCBhbmQgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGV2ZW50cyBhcmUgcmVwcmVzZW50ZWQgYXQgdGhlIGhhcmR3YXJlIGxldmVsLCB3aGF0IGluZm9ybWF0aW9uIGlzIHBhc3NlZCwgYW5kIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIGl0LiBUaGVyZSBhcmUgcHJvYmFibHkga2V5IGZpZWxkcyByZWxhdGVkIHRvIHRoZSBldmVudCB0eXBlICh3aGV0aGVyIGl04oCZcyBhIHRpbWVzdGFtcCwgYSBkZWxheSByZXF1ZXN0LCBhIHN5bmMgZXZlbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5KSwgdGhlIHRpbWVzdGFtcCBpdHNlbGYgKG9mIGNvdXJzZSEpLCBhbmQgYW55IGFzc29jaWF0ZWQgZmxhZ3Mgb3Igc3RhdHVzIGNvZGVzLiBJJ20gYWxzbyBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGlkZW50aWZpZXIgZm9yIHRoZSBQVFAgY2xvY2sgaW52b2x2ZWQgYW5kIGRldGFpbHMgcmVsYXRpbmcgdG8gYW55IGhhcmR3YXJlLXNwZWNpZmljIGNoYXJhY3RlcmlzdGljcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgc3RydWN0dXJlIGlzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZSBoYXJkd2FyZSB0aW1lciwgdGhlIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBQVFAtc3BlY2lmaWMgZHJpdmVycy4gSXQncyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgUFRQIHRpbWVrZWVwaW5nLiBMZXQncyBzZWUgaG93IHdlbGwgaXQncyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjAxLjk2ODY0MzI2N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ4OlxcdFxcbiAyNDk6XFx0c3RydWN0IHB0cF9jbG9ja19ldmVudCB7XFxuIDI1MDpcXHRcXHRpbnQgdHlwZTtcXG4gMjUxOlxcdFxcdGludCBpbmRleDtcXG4gMjUyOlxcdFxcdHVuaW9uIHtcXG4gMjUzOlxcdFxcdFxcdHU2NCB0aW1lc3RhbXA7XFxuIDI1NDpcXHRcXHRcXHRzNjQgb2Zmc2V0O1xcbiAyNTU6XFx0XFx0XFx0c3RydWN0IHBwc19ldmVudF90aW1lIHBwc190aW1lcztcXG4gMjU2OlxcdFxcdH07XFxuIDI1NzpcXHR9O1xcbiAyNTg6XFx0XFxuIDI1OTpcXHQvKipcXG4gMjYwOlxcdCAqIHNjYWxlZF9wcG1fdG9fcHBiKCkgLSBjb252ZXJ0IHNjYWxlZCBwcG0gdG8gcHBiXFxuIDI2MTpcXHQgKlxcbiAyNjI6XFx0ICogQHBwbTogICAgUGFydHMgcGVyIG1pbGxpb24sIGJ1dCB3aXRoIGEgMTYgYml0IGJpbmFyeSBmcmFjdGlvbmFsIGZpZWxkXFxuIDI2MzpcXHQgKi9cXG4gMjY0OlxcdHN0YXRpYyBpbmxpbmUgbG9uZyBzY2FsZWRfcHBtX3RvX3BwYihsb25nIHBwbSlcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdC8qXFxuIDI2NzpcXHRcXHQgKiBUaGUgJ2ZyZXEnIGZpZWxkIGluIHRoZSAnc3RydWN0IHRpbWV4JyBpcyBpbiBwYXJ0cyBwZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MDEuOTY4NzY3NTE3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODUwNDYyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQVFAgQ2xvY2sgRXZlbnQgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgdGhlbiB0aGlzIHVuaW9uLiBUaGUgaW50ZW50IGlzIGNsZWFyOyBpdCdzIGEgd2F5IHRvIHN0b3JlIGVpdGhlciBhIHRpbWVzdGFtcCwgYW4gb2Zmc2V0LCBvciBzb21lIGBwcHNfZXZlbnRfdGltZWAgZGF0YS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYHRpbWVzdGFtcGAgd2hpY2ggaXMgYSBgdTY0YC4gSG93ZXZlciwgdGhhdCB1bmlvbiB3aXRoIGBwcHNfZXZlbnRfdGltZWAgaXMgZ2l2aW5nIG1lIHBhdXNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlIHNpemUgaXMgY29ycmVjdC4gSXQncyB2aXRhbCB0aGF0IHRoZSB1bmlvbiBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBtZW1iZXIuIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHBwc19ldmVudF90aW1lYCByaWdodCBub3cgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgZ2V0dGluZyB0cnVuY2F0ZWQgb3IgY2F1c2luZyBhIG1lbW9yeSBvdmVycnVuLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjowNi4yNTM4MTY2OTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTA0MTQzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHBwc19ldmVudF90aW1lIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oPTIzPXN0cnVjdCBwcHNfc291cmNlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmgtMzQtXFxuaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmg6MzU6c3RydWN0IHBwc19ldmVudF90aW1lIHtcXG5pbmNsdWRlL2xpbnV4L3Bwc19rZXJuZWwuaC0zNi0jaWZkZWYgQ09ORklHX05UUF9QUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MDguNzY0MjU4MTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNjk2MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IHBwc19ldmVudF90aW1lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBgcHBzX2V2ZW50X3RpbWVgIHN0cnVjdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGp1c3QgZXhhbWluaW5nIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgc3RydWN0IGxpa2VseSBob2xkcyB0aGUgcmF3IHRpbWVzdGFtcCBpbmZvcm1hdGlvbiBmb3IgUFBTIGV2ZW50cywgcHJvYmFibHkgcmVwcmVzZW50aW5nIGEgc25hcHNob3Qgb2YgdGhlIGhhcmR3YXJlJ3MgaW50ZXJuYWwgY291bnRlciBvciBhIHRpbWUgc291cmNlIGxpa2UgYSBHUFMgcmVjZWl2ZXIuIEknbSBsb29raW5nIGZvciBmaWVsZHMgdGhhdCByZWxhdGUgdG8gc2Vjb25kcywgbmFub3NlY29uZHMsIG9yIG90aGVyIHRpbWUtcmVsYXRlZCBjb21wb25lbnRzLCBhbmQgaG93IHRoZXNlIGFyZSByZXByZXNlbnRlZC4gQXJlIHRoZXkgdXNpbmcgc3RhbmRhcmQgdHlwZXMgbGlrZSBgdGltZV90YCwgYHN0cnVjdCB0aW1lc3BlY2AsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGFueSBpbmZvcm1hdGlvbiBvbiB3aGljaCB0aW1lIHNvdXJjZSB0aGUgdGltZXN0YW1wIGNvbWVzIGZyb20sIG9yIGlmIHRoZSB0aW1lc3RhbXBzIGFyZSBzeW5jaHJvbml6ZWQuIEknbSBhbHNvIGhvcGluZyB0aGVyZSBhcmUgc29tZSBoaW50cyBhYm91dCB0aGUgdGltZSBzY2FsZSB1c2VkIChVVEMsIFRBSSwgZXRjKSBpZiBhdmFpbGFibGUuIFRoZSB1bmRlcmx5aW5nIGRhdGEgZm9ybWF0IGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhZGF0YSBhcmUgbW9zdCBpbXBvcnRhbnQgdG8gbXkgaW50ZXJlc3QsIGFzIEknbGwgbmVlZCB0byBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGUgdGltZSB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MTMuNjgxMjIxNjdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0c3RydWN0IHBwc19ldmVudF90aW1lIHtcXG4gIDM2OlxcdCNpZmRlZiBDT05GSUdfTlRQX1BQU1xcbiAgMzc6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfcmF3O1xcbiAgMzg6XFx0I2VuZGlmIC8qIENPTkZJR19OVFBfUFBTICovXFxuICAzOTpcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19yZWFsO1xcbiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0LyogVGhlIG1haW4gc3RydWN0ICovXFxuICA0MzpcXHRzdHJ1Y3QgcHBzX2RldmljZSB7XFxuICA0NDpcXHRcXHRzdHJ1Y3QgcHBzX3NvdXJjZV9pbmZvIGluZm87XFx0XFx0LyogUFNTIHNvdXJjZSBpbmZvICovXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdHN0cnVjdCBwcHNfa3BhcmFtcyBwYXJhbXM7XFx0XFx0LyogUFBTIGN1cnJlbnQgcGFyYW1zICovXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdF9fdTMyIGFzc2VydF9zZXF1ZW5jZTtcXHRcXHRcXHQvKiBQUFMgYXNzZXJ0IGV2ZW50IHNlcSAjICovXFxuICA0OTpcXHRcXHRfX3UzMiBjbGVhcl9zZXF1ZW5jZTtcXHRcXHRcXHQvKiBQUFMgY2xlYXIgZXZlbnQgc2VxICMgKi9cXG4gIDUwOlxcdFxcdHN0cnVjdCBwcHNfa3RpbWUgYXNzZXJ0X3R1O1xcbiAgNTE6XFx0XFx0c3RydWN0IHBwc19rdGltZSBjbGVhcl90dTtcXG4gIDUyOlxcdFxcdGludCBjdXJyZW50X21vZGU7XFx0XFx0XFx0LyogUFBTIG1vZGUgYXQgZXZlbnQgdGltZSAqL1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHR1bnNpZ25lZCBpbnQgbGFzdF9ldjtcXHRcXHRcXHQvKiBsYXN0IFBQUyBldmVudCBpZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjoxMy42ODEzMTY5NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM1NTQxMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEZvb3RwcmludCBvZiBQVFAgQ2xvY2sgRXZlbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBwcHNfZXZlbnRfdGltZWAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGl0IGhvbGRzIG9uZSBvciB0d28gYHRpbWVzcGVjNjRgIHN0cnVjdHMuIFNpbmNlIGVhY2ggYHRpbWVzcGVjNjRgIGlzIDE2IGJ5dGVzLCB3aXRoIDggYnl0ZXMgZm9yIHNlY29uZHMgYW5kIDggYnl0ZXMgZm9yIG5hbm9zZWNvbmRzLCB0aGUgYHBwc19ldmVudF90aW1lYCBpcyBnb2luZyB0byBiZSBhdCBsZWFzdCAxNiBieXRlcywgbWF5YmUgdXAgdG8gMzIgYnl0ZXMgaWYgaXQgaG9sZHMgdHdvIG9mIHRob3NlIHRoaW5ncy4gTm93LCBsb29raW5nIGF0IHRoZSBgcHRwX2Nsb2NrX2V2ZW50YCBzdHJ1Y3R1cmUsIHRoZXJlJ3MgdGhhdCB1bmlvbjpcblxuYGBgY1xuXHRcdHVuaW9uIHtcblx0XHRcdHU2NCB0aW1lc3RhbXA7XG5cdFx0XHRzNjQgb2Zmc2V0O1xuXHRcdFx0c3RydWN0IHBwc19ldmVudF90aW1lIHBwc190aW1lcztcblx0XHR9O1xuYGBgXG5cblJpZ2h0LCBhIGB1NjQgdGltZXN0YW1wYCBpcyBqdXN0IDggYnl0ZXMuIEhlcmUncyB0aGUgcG90ZW50aWFsIHByb2JsZW06IGlmIGBldmVudC50aW1lc3RhbXBgIGlzIHVzZWQsIG9ubHkgdGhlIGluaXRpYWwgOCBieXRlcyBvZiB0aGF0IHVuaW9uIGFyZSBhY3R1YWxseSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtZWFucyB0aGUgb3RoZXIgOCB0byAyNCBieXRlcyBpbiB0aGUgdW5pb24gcmVtYWluIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSFcblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBoYXBwZW5zIHdoZW4gYHB0cF9jbG9ja19ldmVudCgpYCBpcyBjYWxsZWQ/IERvZXMgaXQgY29weSB0aGUgKmVudGlyZSogYHB0cF9jbG9ja19ldmVudGAgc3RydWN0dXJlLCBvciBkb2VzIGl0IG9ubHkgcmVhZCBzcGVjaWZpYyBmaWVsZHMgYmFzZWQgb24gdGhlIGV2ZW50IGB0eXBlYD8gSWYgaXQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUsIHdlJ3ZlIGdvdCBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlIGhlcmUsIHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgaXQgb25seSByZWFkcyB0aGUgcmVsZXZhbnQgZmllbGRzLCB3ZSdyZSBwcm9iYWJseSBva2F5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYHB0cF9jbG9ja19ldmVudCgpYCBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgb24gdGhlIHJlYWQgc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjIxLjgxNjg2MTIxNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwODI0MzY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHB0cF9jbG9ja19ldmVudFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTUzMj1FWFBPUlRfU1lNQk9MKHB0cF9jbG9ja191bnJlZ2lzdGVyKTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2suYy01MzMtXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmM6NTM0OnZvaWQgcHRwX2Nsb2NrX2V2ZW50KHN0cnVjdCBwdHBfY2xvY2sgKnB0cCwgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqZXZlbnQpXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMtNTM1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oPTM1ND1leHRlcm4gaW50IHB0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBwdHBfY2xvY2sgKnB0cCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaC0zNjItXFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6MzYzOmV4dGVybiB2b2lkIHB0cF9jbG9ja19ldmVudChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHAsXFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMzY0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD00NTA9c3RhdGljIGlubGluZSBpbnQgcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IHB0cF9jbG9jayAqcHRwKVxcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTQ1MS17IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6NDUyOnN0YXRpYyBpbmxpbmUgdm9pZCBwdHBfY2xvY2tfZXZlbnQoc3RydWN0IHB0cF9jbG9jayAqcHRwLFxcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTQ1My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MjQuNzI1MTEyMzA3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDMyNTg0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUCBDbG9jayBFdmVudCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHB0cF9jbG9ja19ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfY2xvY2suY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIGNsb2NrIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIHJlc2lkZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGludGVycHJldHMgYW5kIHJlc3BvbmRzIHRvIHZhcmlvdXMgdGltZSBzeW5jaHJvbml6YXRpb24gZXZlbnRzLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGltZXN0YW1wcywgaW50ZXJydXB0cywgYW5kIGxpa2VseSBzb21lIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgdG8gZW5zdXJlIGFjY3VyYXRlIHRpbWVrZWVwaW5nLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIFBUUCBjbG9jayBhbmQgYW55IGFzc29jaWF0ZWQgbmV0d29yayBpbnRlcmZhY2VzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZSBpbXBsZW1lbnRhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjMwLjY2ODM3MzYxNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTM0OlxcdHZvaWQgcHRwX2Nsb2NrX2V2ZW50KHN0cnVjdCBwdHBfY2xvY2sgKnB0cCwgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqZXZlbnQpXFxuIDUzNTpcXHR7XFxuIDUzNjpcXHRcXHRzdHJ1Y3QgdGltZXN0YW1wX2V2ZW50X3F1ZXVlICp0c2V2cTtcXG4gNTM3OlxcdFxcdHN0cnVjdCBwcHNfZXZlbnRfdGltZSBldnQ7XFxuIDUzODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA1Mzk6XFx0XFxuIDU0MDpcXHRcXHRzd2l0Y2ggKGV2ZW50LVxcdTAwM2V0eXBlKSB7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdGNhc2UgUFRQX0NMT0NLX0FMQVJNOlxcbiA1NDM6XFx0XFx0XFx0YnJlYWs7XFxuIDU0NDpcXHRcXG4gNTQ1OlxcdFxcdGNhc2UgUFRQX0NMT0NLX0VYVFRTOlxcbiA1NDY6XFx0XFx0Y2FzZSBQVFBfQ0xPQ0tfRVhUT0ZGOlxcbiA1NDc6XFx0XFx0XFx0LyogRW5xdWV1ZSB0aW1lc3RhbXAgb24gc2VsZWN0ZWQgcXVldWVzICovXFxuIDU0ODpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHRwLVxcdTAwM2V0c2V2cXNfbG9jaywgZmxhZ3MpO1xcbiA1NDk6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0c2V2cSwgXFx1MDAyNnB0cC1cXHUwMDNldHNldnFzLCBxbGlzdCkge1xcbiA1NTA6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYml0KCh1bnNpZ25lZCBpbnQpZXZlbnQtXFx1MDAzZWluZGV4LCB0c2V2cS1cXHUwMDNlbWFzaykpXFxuIDU1MTpcXHRcXHRcXHRcXHRcXHRlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcCh0c2V2cSwgZXZlbnQpO1xcbiA1NTI6XFx0XFx0XFx0fVxcbiA1NTM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRwLVxcdTAwM2V0c2V2cXNfbG9jaywgZmxhZ3MpO1xcbiA1NTQ6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwdHAtXFx1MDAzZXRzZXZfd3EpO1xcbiA1NTU6XFx0XFx0XFx0YnJlYWs7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGNhc2UgUFRQX0NMT0NLX1BQUzpcXG4gNTU4OlxcdFxcdFxcdHBwc19nZXRfdHMoXFx1MDAyNmV2dCk7XFxuIDU1OTpcXHRcXHRcXHRwcHNfZXZlbnQocHRwLVxcdTAwM2VwcHNfc291cmNlLCBcXHUwMDI2ZXZ0LCBQVFBfUFBTX0VWRU5ULCBOVUxMKTtcXG4gNTYwOlxcdFxcdFxcdGJyZWFrO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRjYXNlIFBUUF9DTE9DS19QUFNVU1I6XFxuIDU2MzpcXHRcXHRcXHRwcHNfZXZlbnQocHRwLVxcdTAwM2VwcHNfc291cmNlLCBcXHUwMDI2ZXZlbnQtXFx1MDAzZXBwc190aW1lcyxcXG4gNTY0OlxcdFxcdFxcdFxcdCAgUFRQX1BQU19FVkVOVCwgTlVMTCk7XFxuIDU2NTpcXHRcXHRcXHRicmVhaztcXG4gNTY2OlxcdFxcdH1cXG4gNTY3OlxcdH1cXG4gNTY4OlxcdEVYUE9SVF9TWU1CT0wocHRwX2Nsb2NrX2V2ZW50KTtcXG4gNTY5OlxcdFxcbiA1NzA6XFx0aW50IHB0cF9jbG9ja19pbmRleChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHApXFxuIDU3MTpcXHR7XFxuIDU3MjpcXHRcXHRyZXR1cm4gcHRwLVxcdTAwM2VpbmRleDtcXG4gNTczOlxcdH1cXG4gNTc0OlxcdEVYUE9SVF9TWU1CT0wocHRwX2Nsb2NrX2luZGV4KTtcXG4gNTc1OlxcdFxcbiA1NzY6XFx0c3RhdGljIGludCBwdHBfY2xvY2tfb2Zfbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpXFxuIDU3NzpcXHR7XFxuIDU3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudF9ucCA9IGRhdGE7XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdHJldHVybiAoZGV2LVxcdTAwM2VwYXJlbnQgXFx1MDAyNlxcdTAwMjYgZGV2X29mX25vZGUoZGV2LVxcdTAwM2VwYXJlbnQpID09IHBhcmVudF9ucCk7XFxuIDU4MTpcXHR9XFxuIDU4MjpcXHRcXG4gNTgzOlxcdGludCBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjozMC42Njg0Nzc4OTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDYwOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUCBUaW1lc3RhbXBpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gaW4gYHB0cF9jbG9ja19ldmVudGAsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBSaWdodCwgdGhhdCdzIGV4dGVybmFsIHRpbWVzdGFtcGluZy4gQW5kIHRoZSBjb2RlJ3MgY2FsbGluZyBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXAodHNldnEsIGV2ZW50KWAuIE15IGJyYWluIGltbWVkaWF0ZWx5IHdhbnRzIHRvIHpvb20gaW4gb24gdGhhdCBmdW5jdGlvbi4gTGV0J3MgZGlnIGludG8gYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCDigJMgdGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXh0ZXJuYWwgdGltZXN0YW1wIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCBhbmQgcXVldWVkIGZvciBwcm9jZXNzaW5nLiBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgd2hhdCBkb2VzIGl0IGRvIHdpdGggYHRzZXZxYCBhbmQgYGV2ZW50YD8gSSdtIGFudGljaXBhdGluZyBzb21lIGNyaXRpY2FsIHRpbWVzdGFtcC1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgd2l0aGluIHRoYXQgY2FsbC4gSXQncyB0aGUgbHluY2hwaW4gZm9yIGludGVncmF0aW5nIGV4dGVybmFsIGhhcmR3YXJlIHRpbWVzdGFtcHMgaW50byB0aGUgUFRQIHN5c3RlbSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgcmVzaWRlcy4gVGltZSB0byBkZWx2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MzQuMDk5MDkzNjFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDcwNjM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTQyPXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2ZyZWUoc3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTQ2LVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjQ3OnN0YXRpYyB2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHN0cnVjdCB0aW1lc3RhbXBfZXZlbnRfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTQ4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpzcmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjM1Ljk0NjE2MTcyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjA5MTkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggbXkgdXN1YWwgbWV0aG9kaWNhbCBwcm9jZXNzLlxuXG4qKkFuYWx5emluZyBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgKipcblxuRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBkby4gVGhlIG5hbWUgaXRzZWxmIGdpdmVzIGEgc3Ryb25nIGhpbnQsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVtcCB0byBjb25jbHVzaW9ucy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBXaGF0J3MgdGhlIHNpZ25hdHVyZT8gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHJldHVybiB2YWx1ZXMgb3Igc2lkZSBlZmZlY3RzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbW1lbnRzLCBpZiBhbnksIHRoYXQgYXJlIGluY2x1ZGVkIHdpdGggdGhlIGZ1bmN0aW9uLlxuXG5PbmNlIEkgaGF2ZSBhIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSwgSSdsbCBleGFtaW5lIHRoZSBpbnRlcm5hbCBsb2dpYy4gSSB3aWxsIGNoZWNrIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXMgaXQgcm9idXN0PyBEb2VzIGl0IGNoZWNrIGZvciBpbnZhbGlkIHRpbWVzdGFtcHMsIHF1ZXVlIG92ZXJmbG93LCBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkIGlmIHRoZXkgYXJpc2U/XG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBJcyBpdCB1c2luZyBhIHNpbXBsZSBxdWV1ZSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgcHJpb3JpdHkgcXVldWUgb3IgYSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlP1xuKiAgICoqQ29uY3VycmVuY3k6KiogRG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBtdWx0aXRocmVhZGluZyBvciBhbnkgY29uY3VycmVudCBhY2Nlc3M/IElmIHNvLCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHk/IFRoaXMgaXMgY3J1Y2lhbCwgcGFydGljdWxhcmx5IGlmIHRpbWVzdGFtcHMgYXJlIHNoYXJlZCByZXNvdXJjZXMuXG4qICAgKipFZmZpY2llbmN5OioqIEhvdyBkb2VzIGl0IHBlcmZvcm0gdW5kZXIgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHVubmVjZXNzYXJ5IGNvcHlpbmcgb3IgbG9ja2luZy5cbiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBtb2R1bGVzIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlc2UgZGVwZW5kZW5jaWVzIHdlbGwtZGVmaW5lZCBhbmQgZG9jdW1lbnRlZD9cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IG1pZ2h0IGluZmx1ZW5jZSB0aGUgZnVuY3Rpb24ncyBiZWhhdmlvci4gSSB3aWxsIGFsc28gYmUgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZXN0YW1wIGlzIGJlaW5nIHN0b3JlZCBpbiBhIHByZWRpY3RhYmxlIGFuZCByZWxpYWJsZSBmYXNoaW9uLCBhbmQgaWYgaXQgaXMgYmVpbmcgcGFzc2VkIG9mZiB0byBhbiBleHRlcm5hbCBzeXN0ZW0sIEkgd2lsbCBhbHNvIGFuYWx5emUgYW55IGFzc29jaWF0ZWQgc2VjdXJpdHkgcmlza3MgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIGNvbmNlcm5zLlxuXG5BZnRlciB0aGlzIGluaXRpYWwgYW5hbHlzaXMsIEknbGwgYmUgbG9va2luZyBhdCBob3cgaXQgaXMgdXNlZCB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IG5lZWQgYXR0ZW50aW9uPyBXaGF0IGRvZXMgaXQgKnJlYWxseSogbWVhbiBmb3IgYSB0aW1lc3RhbXAgdG8gYmUgXCJleHRlcm5hbFwiPyBJcyBpdCBqdXN0IGNvbWluZyBmcm9tIGFub3RoZXIgc3lzdGVtLCBvciBkb2VzIGl0IGltcGx5IHNwZWNpZmljIHRpbWUgc3luY2hyb25pemF0aW9uIHByb3RvY29scyBvciByZXF1aXJlbWVudHM/XG5cblVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgc3lzdGVtJ3MgcmVsaWFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIEknbGwgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgdGVzdGluZyB0b28sIGNvbnNpZGVyaW5nIHdoYXQgdGhlIGVkZ2UgY2FzZXMgYXJlLCB3aGF0IGZhaWx1cmUgc2NlbmFyaW9zIGFyZSBsaWtlbHksIGFuZCBob3cgYmVzdCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZCB1bmRlciBhIHZhcmlldHkgb2YgY29uZGl0aW9ucy4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjo0My4wNjcwODM0ODNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDc6XFx0c3RhdGljIHZvaWQgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXAoc3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqcXVldWUsXFxuICA0ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqc3JjKVxcbiAgNDk6XFx0e1xcbiAgNTA6XFx0XFx0c3RydWN0IHB0cF9leHR0c19ldmVudCAqZHN0O1xcbiAgNTE6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgb2Zmc2V0X3RzO1xcbiAgNTI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDUzOlxcdFxcdHM2NCBzZWNvbmRzO1xcbiAgNTQ6XFx0XFx0dTMyIHJlbWFpbmRlcjtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0aWYgKHNyYy1cXHUwMDNldHlwZSA9PSBQVFBfQ0xPQ0tfRVhUVFMpIHtcXG4gIDU3OlxcdFxcdFxcdHNlY29uZHMgPSBkaXZfdTY0X3JlbShzcmMtXFx1MDAzZXRpbWVzdGFtcCwgMTAwMDAwMDAwMCwgXFx1MDAyNnJlbWFpbmRlcik7XFxuICA1ODpcXHRcXHR9IGVsc2UgaWYgKHNyYy1cXHUwMDNldHlwZSA9PSBQVFBfQ0xPQ0tfRVhUT0ZGKSB7XFxuICA1OTpcXHRcXHRcXHRvZmZzZXRfdHMgPSBuc190b190aW1lc3BlYzY0KHNyYy1cXHUwMDNlb2Zmc2V0KTtcXG4gIDYwOlxcdFxcdFxcdHNlY29uZHMgPSBvZmZzZXRfdHMudHZfc2VjO1xcbiAgNjE6XFx0XFx0XFx0cmVtYWluZGVyID0gb2Zmc2V0X3RzLnR2X25zZWM7XFxuICA2MjpcXHRcXHR9IGVsc2Uge1xcbiAgNjM6XFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IHVua25vd24gdHlwZSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHNyYy1cXHUwMDNldHlwZSk7XFxuICA2NDpcXHRcXHRcXHRyZXR1cm47XFxuICA2NTpcXHRcXHR9XFxuICA2NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6NDMuMDY3MTczMDUzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDE3NDc2OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGUgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCwgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipEaXZpbmcgaW50byBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAuIEl0J3MgcHJldHR5IGNsZWFyIGZyb20gdGhlIG5hbWUgd2hhdCB0aGUgZnVuY3Rpb24gKmludGVuZHMqIHRvIGRvLCBidXQgbGV0J3Mgc2VlIGhvdyBpdCBhY3R1YWxseSBoYW5kbGVzIHRoZSB0YXNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFkZGluZyBhbiBleHRlcm5hbCB0aW1lc3RhbXAgdG8gd2hhdGV2ZXIgcXVldWUgaXQgdXRpbGl6ZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5IGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIG90aGVyIHRpbWUgbWFuYWdlbWVudCBwcmltaXRpdmVzIG9mIHRoZSBzeXN0ZW0uIEkgYW0gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbmN5LiBJIGFtIGFzc3VtaW5nIHRoZXJlIGlzIHNvbWUgc29ydCBvZiBldmVudC1kcml2ZW4gbWVjaGFuaXNtIGhhcHBlbmluZyBoZXJlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBob3cgZWZmaWNpZW50bHkgdGhlIGZ1bmN0aW9uIGFjaGlldmVzIGl0cyBnb2Fscy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHdoZXJlIGl0IG1pZ2h0IGJlIGluZWZmaWNpZW50LCBvciB3aGVyZSBpdCBhc3N1bWVzIGEgY2VydGFpbiBjbG9jayBzb3VyY2UgaXMgYXZhaWxhYmxlLiBUaW1lIHN0YW1waW5nIGlzIGEgdmVyeSBoYXJkIHByb2JsZW0gdG8gc29sdmUgZ2VuZXJhbGx5LCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgY2FyZWZ1bGx5IHRoZSBhdXRob3JzIHRob3VnaHQgYWJvdXQgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgc2NoZWR1bGVyLCBpZiB0aGlzIGlzIGV2ZW4gc29tZXRoaW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYgZGVhbHMgd2l0aC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3JrcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjo1NC4wODQ2NTMwNDZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjc6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnF1ZXVlLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGRzdCA9IFxcdTAwMjZxdWV1ZS1cXHUwMDNlYnVmW3F1ZXVlLVxcdTAwM2V0YWlsXTtcXG4gIDcwOlxcdFxcdGRzdC1cXHUwMDNlaW5kZXggPSBzcmMtXFx1MDAzZWluZGV4O1xcbiAgNzE6XFx0XFx0ZHN0LVxcdTAwM2VmbGFncyA9IFBUUF9FWFRUU19FVkVOVF9WQUxJRDtcXG4gIDcyOlxcdFxcdGRzdC1cXHUwMDNldC5zZWMgPSBzZWNvbmRzO1xcbiAgNzM6XFx0XFx0ZHN0LVxcdTAwM2V0Lm5zZWMgPSByZW1haW5kZXI7XFxuICA3NDpcXHRcXHRpZiAoc3JjLVxcdTAwM2V0eXBlID09IFBUUF9DTE9DS19FWFRPRkYpXFxuICA3NTpcXHRcXHRcXHRkc3QtXFx1MDAzZWZsYWdzIHw9IFBUUF9FWFRfT0ZGU0VUO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQvKiBCb3RoIFdSSVRFX09OQ0UoKSBhcmUgcGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gcXVldWVfY250KCkgKi9cXG4gIDc4OlxcdFxcdGlmICghcXVldWVfZnJlZShxdWV1ZSkpXFxuICA3OTpcXHRcXHRcXHRXUklURV9PTkNFKHF1ZXVlLVxcdTAwM2VoZWFkLCAocXVldWUtXFx1MDAzZWhlYWQgKyAxKSAlIFBUUF9NQVhfVElNRVNUQU1QUyk7XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdFdSSVRFX09OQ0UocXVldWUtXFx1MDAzZXRhaWwsIChxdWV1ZS1cXHUwMDNldGFpbCArIDEpICUgUFRQX01BWF9USU1FU1RBTVBTKTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cXVldWUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gIDg0OlxcdH1cXG4gIDg1OlxcdFxcbiAgODY6XFx0LyogcG9zaXggY2xvY2sgaW1wbGVtZW50YXRpb24gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6NTQuMDg0NzI5OTE2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MTUxNTk3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWtzKipcblxuT2theSwgc28gYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0ICpvbmx5KiBjYXJlcyBhYm91dCBgc3JjLVx1MDAzZXR5cGVgLCBgc3JjLVx1MDAzZXRpbWVzdGFtcGAsIGFuZCBgc3JjLVx1MDAzZWluZGV4YC4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pb24gbWVtYmVycyB3aXRoaW4gdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCBhcmUgZWZmZWN0aXZlbHkgaXJyZWxldmFudC4gVGhleSBhcmVuJ3QgY29waWVkLCB0aGV5IGFyZW4ndCB1c2VkLiBNeSBpbml0aWFsIGNvbmNlcm4gYWJvdXQgYSBsZWFrIHRoZXJlIGlzIHVuZm91bmRlZCwgd2hpY2ggaXMgZ3JlYXQgbmV3cy5cblxuQnV0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFdoZXJlIGVsc2UgaXMgdGhpcyBgZXZlbnRgIHN0cnVjdHVyZSB1c2VkPyBMZXQncyBjaGVjayB0aGUgY29kZTpcblxuSW4gdGhlIGBwdHBfY2xvY2tfZXZlbnRgIGZ1bmN0aW9uLCBpdCBhbHNvIHVzZXMgYGV2ZW50LVx1MDAzZWluZGV4YCBpbiBhIGxvb3Agd2l0aCB0aGUgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBmdW5jdGlvbi4gSXQncyB0aGUgc2FtZSBzaXR1YXRpb247IG5vIG90aGVyIGZpZWxkcyBhcmUgdXNlZC4gU28gc3RpbGwgc2FmZSB0aGVyZSFcblxuT2theSwgb25lIG1vcmUgYXJlYSB0byBpbnZlc3RpZ2F0ZSDigJMgd2hhdCBhYm91dCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGA/IEhlcmUsIHRoZXkgY29uc3RydWN0IHRoZSBgZXZlbnRgIHN0cnVjdHVyZSBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSBgZXZlbnQudGltZXN0YW1wYCBjb21lcyBmcm9tIGBzdG1tYWNfZ2V0X3B0cHRpbWVgLiBCdXQgaXMgYHB0cF90aW1lYCAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBhc3NpZ25lZCB0byBgZXZlbnQudGltZXN0YW1wYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSWYgdGhhdCdzIGluaXRpYWxpemVkLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODg4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6MDMuNDk5ODkyNjgyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3MTAzMDgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHN0bW1hY19nZXRfcHRwdGltZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNzowNS45NTcwMDQyNjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ0MDc2MjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUaW1pbmcgRnVuY3Rpb24gUXVlcnkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGltaW5nLCBtb3N0IGxpa2VseSBQcmVjaXNlIFRpbWUgUHJvdG9jb2wgKFBUUCkgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbDogYHN0bW1hY19nZXRfcHRwdGltZWAuIEJ1dCwgd2FpdC4uLiBjb3VsZCBpdCBiZSBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCBleHBhbmRzIHRvIHNvbWV0aGluZyBlbHNlPyBUaGF0J3MgY29tbW9uIGZvciBlZmZpY2llbmN5IG9yIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGVzcGVjaWFsbHkgYXQgdGhpcyBsb3cgbGV2ZWwuXG5cblRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkuIFRoZSBiZXN0IG1vdmUgbm93IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHN0bW1hY19nZXRfcHRwdGltZWAgaXMgYSBmdW5jdGlvbiB3aXRoIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24sIG9yIGlmIGl0J3MgYSBtYWNybyB0aGF0IG1heSBwZXJmb3JtIG90aGVyIHRoaW5ncy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjb21wbGV4aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODM2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6MTIuMzk3NzY5Mjk5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkzODYyNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19nZXRfcHRwdGltZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTM1OD1zdGF0aWMgaW50IGludGVsX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQ2LVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDQ3OlxcdFxcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwdHBhZGRyLCBcXHUwMDI2cHRwX3RpbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQ4LVxcdFxcdCpkZXZpY2UgPSBuc190b19rdGltZShwdHBfdGltZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9Mjk0PXN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMzgxLVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzozODI6XFx0XFx0c3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHB0cGFkZHIsIFxcdTAwMjZwdHBfdGltZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTM4My1cXHRcXHQqZGV2aWNlID0gbnNfdG9fa3RpbWUocHRwX3RpbWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MjM9dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU0MC1cXHRcXHRyZWFkX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jOjU0MTpcXHRcXHRzdG1tYWNfZ2V0X3B0cHRpbWUocHJpdiwgcHJpdi1cXHUwMDNlcHRwYWRkciwgXFx1MDAyNnB0cF90aW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU0Mi1cXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNTc9dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTg5LVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMTkwOlxcdFxcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVxcdTAwM2VwdHBhZGRyLCBcXHUwMDI2cHRwX3RpbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTkxLVxcdFxcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NDk2PXN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUyMS1cXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIHB0cCwgZ2V0X3N5c3RpbWUsIF9fYXJncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6NTIyOiNkZWZpbmUgc3RtbWFjX2dldF9wdHB0aW1lKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUyMy1cXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIHB0cCwgZ2V0X3B0cHRpbWUsIF9fYXJncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6MTQuNTkxNjM3MzMzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDU4NTg3MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTVE1NQUMgUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBEZXRlY3RlZCoqXG5cbk15IGFuYWx5c2lzIGJlZ2lucyBieSBleGFtaW5pbmcgdGhlIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIG1hY3JvLCB3aGljaCBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGBwdHBfdGltZWAgdmFyaWFibGUuIEkgdGhlbiBtb3ZlIG9uIHRvIHNjcnV0aW5pemluZyB0aGUgcGF0Y2ggaXRzZWxmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBzbXRnX2Nyb3NzdHN0YW1wYCBmdW5jdGlvbiBhbmQgdGhlIGludGVycnVwdCBtYXNraW5nIGFuZCB1bm1hc2tpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGBYR01BQ19UU0lFYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggaXMgYWJvdXQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBhbiBpbnRlcnJ1cHQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRpbWVzdGFtcCBwb2xsaW5nLlxuXG5OZXh0LCBJIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBwYXRjaDogdGhlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIFRoaXMgaGFuZGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVhZGluZyByZWdpc3RlcnMsIHJldHJpZXZpbmcgYSB0aW1lc3RhbXAsIGFuZCBwYXNzaW5nIGl0IHRvIGBwdHBfY2xvY2tfZXZlbnRgLiBJJ3ZlIGNhcmVmdWxseSBhbmFseXplZCBob3cgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50YCBpcyB1c2VkLiAgU3BlY2lmaWNhbGx5LCBJIG5vdGUgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBsb2NhbGx5IG9uIHRoZSBzdGFjaywgYW5kIHdoaWxlIG9ubHkgYSBzdWJzZXQgb2YgaXRzIGZpZWxkcyAodHlwZSwgaW5kZXgsIHRpbWVzdGFtcCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYHB0cF9jbG9ja19ldmVudGAgKm9ubHkqIHJlYWRzIHRoZXNlIGluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHBhZGRpbmcgb3Igb3RoZXIgdW5pb24gZmllbGRzIGFyZSBub3QgdXRpbGl6ZWQuXG5cbk15IGludmVzdGlnYXRpb24gb2YgdGhlIGNhbGwgdG8gYHB0cF9jbG9ja19ldmVudGAgY29uZmlybXMgdGhpcy4gIFRoZSBjb2RlIGluIGBwdHBfY2xvY2tfZXZlbnRgIG9ubHkgcmVhZHMgYGV2ZW50LVx1MDAzZWluZGV4YC4gIFRoZSBmdW5jdGlvbiBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgIGlzIHRoZW4gY2FsbGVkIGFuZCByZWFkcyBgc3JjLVx1MDAzZXR5cGVgLCBgc3JjLVx1MDAzZXRpbWVzdGFtcGAsIGFuZCBgc3JjLVx1MDAzZWluZGV4YCBidXQgbm8gb3RoZXIgcGFydHMgb2YgdGhlIHN0cnVjdC4gIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIGF0IGFueSBzdGFnZS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBvciB1c2FnZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleGlzdHMgaW4gdGhlIGNvbnRyb2wgZmxvdy4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgbmVlZGVkIGhlcmUuXG5cbkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIGNoYW5nZSB0byB0aGUgYGh3dGltZXN0YW1wYCBvcGVyYXRpb25zLCBjaGFuZ2luZyB0aGUgcG9pbnRlciB0byBgZHd4Z21hYzJfcHRwYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHNpbXBseSB0aGUgYXNzaWdubWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2suXG5cbkluIGNvbmNsdXNpb24sIGFmdGVyIGEgbWV0aWN1bG91cyBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgdXNhZ2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCB3b3VsZCB3YXJyYW50IGZ1cnRoZXIgS01TQU4gYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ5LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6NDIuMDUwMjI3OTY4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgd2hpY2ggYWxsb2NhdGVzIGEgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIG9uIHRoZSBzdGFjay4gV2hpbGUgb25seSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgYHRpbWVzdGFtcGAgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZCAobGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdW5pb24vcGFkZGluZyB1bmluaXRpYWxpemVkKSwgdGhlIGNhbGxlZSBgcHRwX2Nsb2NrX2V2ZW50KClgIG9ubHkgcmVhZHMgdGhlc2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIGZpZWxkcyB3aGVuIHByb2Nlc3NpbmcgYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBJdCBkb2VzIG5vdCBjb3B5IHRoZSBlbnRpcmUgc3RydWN0dXJlIHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgY29udHJvbCBmbG93LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 15:14:47 +0000 UTC FinishedAt: 2026-08-18 16:07:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dcacab904fe78d60840ba947a104993ee9ded887", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_SOCFPGA", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dcacab904fe78d60840ba947a104993ee9ded887", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_SOCFPGA", "PTP_1588_CLOCK" ], "series_id": "5c376e7d-1623-4dc9-b93c-66883d90083d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dwxgmac2_timestamp_interrupt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19TT0NGUEdBJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXImIzM5O3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmQyYWY0YzYyMjg0ZTQwYzE5MDZjMjZhOGRkZWYzN2MyMzRmY2YyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE2OjAzOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuaW5kZXggMWQ3ZjBhNTdkMjg4OS4uYTRkMDBiZjgxNDIzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5AQCAtMzEwLDYgJiM0MzszMTAsMTMgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTilcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiYjNDM7XHQvKiBUaGUgWEdNQUMgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBUU0lTIGJ5IHJlYWRpbmdcbiYjNDM7XHQgKiBYR01BQ19USU1FU1RBTVBfU1RBVFVTLCB3aGljaCB3b3VsZCByYWNlIHdpdGggdGhlIFRTSVMgcG9sbFxuJiM0MztcdCAqIGJlbG93LiAgTWFzayBYR01BQ19UU0lFIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLXRpbWVzdGFtcFxuJiM0MztcdCAqIHNvIHRoZSBoYW5kbGVyIGRvZXMgbm90IHJ1biB3aGlsZSB3ZSBvd24gdGhlIHNuYXBzaG90IEZJRk8uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIFhHTUFDX1RTSUUsIDApO1xuJiM0MztcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VhdXhfdHNfbG9jayk7XG4gXHQvKiBFbmFibGUgSW50ZXJuYWwgc25hcHNob3QgdHJpZ2dlciAqL1xuIFx0YWNyX3ZhbHVlID0gcmVhZGwocHRwYWRkciAmIzQzOyBQVFBfQUNSKTtcbkBAIC0zMjksNiAmIzQzOzMzNiw3IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXV4X3RzX2xvY2spO1xuJiM0MztcdFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHdyaXRlbChhY3JfdmFsdWUsIHB0cGFkZHIgJiM0MzsgUFRQX0FDUik7XG5AQCAtMzUzLDYgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IFhHTUFDX0lOVF9TVEFUVVMsIHYsXG4gXHRcdFx0XHQgKHYgXHUwMDI2IFhHTUFDX0lOVF9UU0lTKSwgMTAwLCAxMDAwMCk7XG4gXHRpZiAocmV0KSB7XG4mIzQzO1x0XHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBXYWl0IGZvciB0aW1lIHN5bmMgb3BlcmF0aW9uIHRpbWVvdXRcXG5cJiMzNDssXG4gXHRcdFx0ICAgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTM3NSw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4mIzQzO1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuJiM0MztcbiBcdGdldF9zbXRndGltZShwcml2LVx1MDAzZW1paSwgU01UR19NRElPX0FERFIsIFx1MDAyNnNtdGdfdGltZSk7XG4gXHRzeXN0ZW0tXHUwMDNlY3ljbGVzID0gc210Z190aW1lO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5pbmRleCA2MWI2ZDQ1YTAyZjVkLi43NmUyODYwYTk1MTdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuQEAgLTg3LDcgJiM0Mzs4Nyw3IEBAXG4gI2RlZmluZSBYR01BQ19UU0lFXHRcdFx0QklUKDEyKVxuICNkZWZpbmUgWEdNQUNfTFBJSUVcdFx0XHRCSVQoNSlcbiAjZGVmaW5lIFhHTUFDX1BNVElFXHRcdFx0QklUKDQpXG4tI2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlx0XHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSlcbiYjNDM7I2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlx0XHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSB8IFhHTUFDX1RTSUUpXG4gI2RlZmluZSBYR01BQ19ReF9UWF9GTE9XX0NUUkwoeClcdCgweDAwMDAwMDcwICYjNDM7ICh4KSAqIDQpXG4gI2RlZmluZSBYR01BQ19QVFx0XHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgWEdNQUNfVEZFXHRcdFx0QklUKDEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG5pbmRleCBmMDJiNDM0YmJkNTA1Li5iODQ5Y2ViZjliMjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbkBAIC0xMTU0LDYgJiM0MzsxMTU0LDQ5IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdHNfc3RhdHVzLCBwZW5kaW5nX3NuYXBzaG90cywgYWNyX3ZhbHVlLCBjaGFubmVsO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1NjQgcHRwX3RpbWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgWEdNQUNfVElNRVNUQU1QX1NUQVRVUyB0byBnZXQgdGhlIEFVWCBzbmFwc2hvdFxuJiM0MztcdCAqIGNvdW50LiAgVGhpcyByZWFkIGFsc28gY2xlYXJzIHRoZSBUU0lTIGJpdCBpblxuJiM0MztcdCAqIFhHTUFDX0lOVF9TVEFUVVMuXG4mIzQzO1x0ICogVFggdGltZXN0YW1wIHBvbGxpbmcgbWF5IGhhdmUgYWxyZWFkeSBjbGVhcmVkIFRTSVNcbiYjNDM7XHQgKiBhbmQgQVVYVFNUUklHLCBzbyByZWx5IG9uIEFUU05TIGluc3RlYWQuXG4mIzQzO1x0ICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieVxuJiM0MztcdCAqIHRoaXMgcmVnaXN0ZXIsIHNvIHRoZXJlIGlzIG5vIGNvbmZsaWN0LlxuJiM0MztcdCAqL1xuJiM0MztcdHRzX3N0YXR1cyA9IHJlYWRsKHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBlbmRpbmdfc25hcHNob3RzID0gRklFTERfR0VUKFhHTUFDX1RJTUVTVEFNUF9BVFNOU19NQVNLLCB0c19zdGF0dXMpO1xuJiM0MztcdGlmICghcGVuZGluZ19zbmFwc2hvdHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFjcl92YWx1ZSA9IHJlYWRsKHByaXYtXHUwMDNlcHRwYWRkciAmIzQzOyBQVFBfQUNSKTtcbiYjNDM7XHRjaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTtcbiYjNDM7XHRpZiAoIWNoYW5uZWwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y2hhbm5lbCA9IGlsb2cyKGNoYW5uZWwpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZW5kaW5nX3NuYXBzaG90czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbiYjNDM7XHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdGV2ZW50LnR5cGUgPSBQVFBfQ0xPQ0tfRVhUVFM7XG4mIzQzO1x0XHRldmVudC5pbmRleCA9IGNoYW5uZWw7XG4mIzQzO1x0XHRldmVudC50aW1lc3RhbXAgPSBwdHBfdGltZTtcbiYjNDM7XHRcdHB0cF9jbG9ja19ldmVudChwcml2LVx1MDAzZXB0cF9jbG9jaywgXHUwMDI2ZXZlbnQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGR3eGdtYWMyX2ZsZXhfcHBzX2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGluZGV4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSxcbiBcdFx0XHRcdCAgICB1MzIgc3ViX3NlY29uZF9pbmMsIHUzMiBzeXN0aW1lX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuaW5kZXggNTExYjBmZDVlODM0My4uOTcxODU4MmI4NDgwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG5AQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbiBcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiBcdFx0Lm1hYyA9IFx1MDAyNmR3eGdtYWMyMTBfb3BzLFxuIFx0XHQudmxhbiA9IFx1MDAyNmR3eGdtYWMyMTBfdmxhbl9vcHMsXG4tXHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNnN0bW1hY19wdHAsXG4mIzQzO1x0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd3hnbWFjMl9wdHAsXG4gXHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiBcdFx0Lm1vZGUgPSBOVUxMLFxuIFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5AQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbiBcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiBcdFx0Lm1hYyA9IFx1MDAyNmR3eGxnbWFjMl9vcHMsXG4gXHRcdC52bGFuID0gXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxuLVx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuJiM0MztcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHd4Z21hYzJfcHRwLFxuIFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gXHRcdC5tb2RlID0gTlVMTCxcbiBcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggZTYzMTdiOTRmZmY3ZC4uODE4YWIzZGFhOTFjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtNjcxLDYgJiM0Mzs2NzEsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBuZGVzY19vcHM7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cDtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHA7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyBjaGFpbl9tb2RlX29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5pbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5AQCAtMjc3LDMgJiM0MzsyNzcsMTUgQEAgY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwID0ge1xuIFx0LmdldF9wdHB0aW1lID0gZHdtYWMxMDAwX2dldF9wdHB0aW1lLFxuIFx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdCxcbiB9O1xuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHAgPSB7XG4mIzQzO1x0LmNvbmZpZ19od190c3RhbXBpbmcgPSBjb25maWdfaHdfdHN0YW1waW5nLFxuJiM0MztcdC5pbml0X3N5c3RpbWUgPSBpbml0X3N5c3RpbWUsXG4mIzQzO1x0LmNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCA9IGNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCxcbiYjNDM7XHQuY29uZmlnX2FkZGVuZCA9IGNvbmZpZ19hZGRlbmQsXG4mIzQzO1x0LmFkanVzdF9zeXN0aW1lID0gYWRqdXN0X3N5c3RpbWUsXG4mIzQzO1x0LmdldF9zeXN0aW1lID0gZ2V0X3N5c3RpbWUsXG4mIzQzO1x0LmdldF9wdHB0aW1lID0gZ2V0X3B0cHRpbWUsXG4mIzQzO1x0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxuJiM0MztcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oXG5pbmRleCAzZmUwZTNhODBlODBhLi5kYWRlMDk2MTQxNjNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcbkBAIC0xMDMsNiAmIzQzOzEwMyw3IEBAIGludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiBcbiB2b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xuIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbiYjNDM7dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBzdG1tYWNfcHRwX2Nsb2NrX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIGR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OywKICAgICYjMzQ7RFdNQUNfU09DRlBHQSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2R3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RtbWFjIGRyaXZlciYjMzk7cyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGxvZ2ljIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKFhHTUFDX1RTSUUpIGR1cmluZyB0aGUgc25hcHNob3QgRklGTyByZWFkIGluIGBzbXRnX2Nyb3NzdHN0YW1wYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIGR3eGdtYWMyL2R3eGxnbWFjMiBNQUNzIHRvIGhhbmRsZSBBVVggc25hcHNob3RzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIFBUUCBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZDJhZjRjNjIyODRlNDBjMTkwNmMyNmE4ZGRlZjM3YzIzNGZjZjJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTY6MDM6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKaW5kZXggMWQ3ZjBhNTdkMjg4OS4uYTRkMDBiZjgxNDIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwpAQCAtMzEwLDYgJiM0MzszMTAsMTMgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAlpZiAocHJpdi0mZ3Q7cGxhdC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RNTUFDX0ZMQUdfRVhUX1NOQVBTSE9UX0VOKQogCQlyZXR1cm4gLUVCVVNZOwogCiYjNDM7CS8qIFRoZSBYR01BQyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgY2xlYXJzIFRTSVMgYnkgcmVhZGluZwomIzQzOwkgKiBYR01BQ19USU1FU1RBTVBfU1RBVFVTLCB3aGljaCB3b3VsZCByYWNlIHdpdGggdGhlIFRTSVMgcG9sbAomIzQzOwkgKiBiZWxvdy4gIE1hc2sgWEdNQUNfVFNJRSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjcm9zcy10aW1lc3RhbXAKJiM0MzsJICogc28gdGhlIGhhbmRsZXIgZG9lcyBub3QgcnVuIHdoaWxlIHdlIG93biB0aGUgc25hcHNob3QgRklGTy4KJiM0MzsJICovCiYjNDM7CXN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCBYR01BQ19UU0lFLCAwKTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7YXV4X3RzX2xvY2spOwogCS8qIEVuYWJsZSBJbnRlcm5hbCBzbmFwc2hvdCB0cmlnZ2VyICovCiAJYWNyX3ZhbHVlID0gcmVhZGwocHRwYWRkciAmIzQzOyBQVFBfQUNSKTsKQEAgLTMyOSw2ICYjNDM7MzM2LDcgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7YXV4X3RzX2xvY2spOwomIzQzOwkJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJd3JpdGVsKGFjcl92YWx1ZSwgcHRwYWRkciAmIzQzOyBQVFBfQUNSKTsKQEAgLTM1Myw2ICYjNDM7MzYxLDcgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQocHJpdi0mZ3Q7aW9hZGRyICYjNDM7IFhHTUFDX0lOVF9TVEFUVVMsIHYsCiAJCQkJICh2ICZhbXA7IFhHTUFDX0lOVF9UU0lTKSwgMTAwLCAxMDAwMCk7CiAJaWYgKHJldCkgewomIzQzOwkJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpOwogCQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDslczogV2FpdCBmb3IgdGltZSBzeW5jIG9wZXJhdGlvbiB0aW1lb3V0XG4mIzM0OywKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldDsKQEAgLTM3NSw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSwKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3B0cF9sb2NrLCBmbGFncyk7CiAJfQogCiYjNDM7CXN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCAwLCBYR01BQ19UU0lFKTsKJiM0MzsKIAlnZXRfc210Z3RpbWUocHJpdi0mZ3Q7bWlpLCBTTVRHX01ESU9fQUREUiwgJmFtcDtzbXRnX3RpbWUpOwogCXN5c3RlbS0mZ3Q7Y3ljbGVzID0gc210Z190aW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaAppbmRleCA2MWI2ZDQ1YTAyZjVkLi43NmUyODYwYTk1MTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKQEAgLTg3LDcgJiM0Mzs4Nyw3IEBACiAjZGVmaW5lIFhHTUFDX1RTSUUJCQlCSVQoMTIpCiAjZGVmaW5lIFhHTUFDX0xQSUlFCQkJQklUKDUpCiAjZGVmaW5lIFhHTUFDX1BNVElFCQkJQklUKDQpCi0jZGVmaW5lIFhHTUFDX0lOVF9ERUZBVUxUX0VOCQkoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSkKJiM0MzsjZGVmaW5lIFhHTUFDX0lOVF9ERUZBVUxUX0VOCQkoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSB8IFhHTUFDX1RTSUUpCiAjZGVmaW5lIFhHTUFDX1F4X1RYX0ZMT1dfQ1RSTCh4KQkoMHgwMDAwMDA3MCAmIzQzOyAoeCkgKiA0KQogI2RlZmluZSBYR01BQ19QVAkJCUdFTk1BU0soMzEsIDE2KQogI2RlZmluZSBYR01BQ19URkUJCQlCSVQoMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYwppbmRleCBmMDJiNDM0YmJkNTA1Li5iODQ5Y2ViZjliMjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jCkBAIC0xMTU0LDYgJiM0MzsxMTU0LDQ5IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIHRzX3N0YXR1cywgcGVuZGluZ19zbmFwc2hvdHMsIGFjcl92YWx1ZSwgY2hhbm5lbDsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19ldmVudCBldmVudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTY0IHB0cF90aW1lOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUmVhZCBYR01BQ19USU1FU1RBTVBfU1RBVFVTIHRvIGdldCB0aGUgQVVYIHNuYXBzaG90CiYjNDM7CSAqIGNvdW50LiAgVGhpcyByZWFkIGFsc28gY2xlYXJzIHRoZSBUU0lTIGJpdCBpbgomIzQzOwkgKiBYR01BQ19JTlRfU1RBVFVTLgomIzQzOwkgKiBUWCB0aW1lc3RhbXAgcG9sbGluZyBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgVFNJUwomIzQzOwkgKiBhbmQgQVVYVFNUUklHLCBzbyByZWx5IG9uIEFUU05TIGluc3RlYWQuCiYjNDM7CSAqIFRYVFNDIGlzIGNsZWFyZWQgYnkgWEdNQUNfVFhUSU1FU1RBTVBfU0VDLCBub3QgYnkKJiM0MzsJICogdGhpcyByZWdpc3Rlciwgc28gdGhlcmUgaXMgbm8gY29uZmxpY3QuCiYjNDM7CSAqLwomIzQzOwl0c19zdGF0dXMgPSByZWFkbChwcml2LSZndDtpb2FkZHIgJiM0MzsgWEdNQUNfVElNRVNUQU1QX1NUQVRVUyk7CiYjNDM7CiYjNDM7CWlmICghKHByaXYtJmd0O3BsYXQtJmd0O2ZsYWdzICZhbXA7IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBlbmRpbmdfc25hcHNob3RzID0gRklFTERfR0VUKFhHTUFDX1RJTUVTVEFNUF9BVFNOU19NQVNLLCB0c19zdGF0dXMpOwomIzQzOwlpZiAoIXBlbmRpbmdfc25hcHNob3RzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhY3JfdmFsdWUgPSByZWFkbChwcml2LSZndDtwdHBhZGRyICYjNDM7IFBUUF9BQ1IpOwomIzQzOwljaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTsKJiM0MzsJaWYgKCFjaGFubmVsKQomIzQzOwkJcmV0dXJuOwomIzQzOwljaGFubmVsID0gaWxvZzIoY2hhbm5lbCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZW5kaW5nX3NuYXBzaG90czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7cHRwX2xvY2ssIGZsYWdzKTsKJiM0MzsJCXN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LSZndDtwdHBhZGRyLCAmYW1wO3B0cF90aW1lKTsKJiM0MzsJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDtwdHBfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkJZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUzsKJiM0MzsJCWV2ZW50LmluZGV4ID0gY2hhbm5lbDsKJiM0MzsJCWV2ZW50LnRpbWVzdGFtcCA9IHB0cF90aW1lOwomIzQzOwkJcHRwX2Nsb2NrX2V2ZW50KHByaXYtJmd0O3B0cF9jbG9jaywgJmFtcDtldmVudCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGR3eGdtYWMyX2ZsZXhfcHBzX2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGluZGV4LAogCQkJCSAgICBzdHJ1Y3Qgc3RtbWFjX3Bwc19jZmcgKmNmZywgYm9vbCBlbmFibGUsCiAJCQkJICAgIHUzMiBzdWJfc2Vjb25kX2luYywgdTMyIHN5c3RpbWVfZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMKaW5kZXggNTExYjBmZDVlODM0My4uOTcxODU4MmI4NDgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYwpAQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHsKIAkJLmRtYSA9ICZhbXA7ZHd4Z21hYzIxMF9kbWFfb3BzLAogCQkubWFjID0gJmFtcDtkd3hnbWFjMjEwX29wcywKIAkJLnZsYW4gPSAmYW1wO2R3eGdtYWMyMTBfdmxhbl9vcHMsCi0JCS5od3RpbWVzdGFtcCA9ICZhbXA7c3RtbWFjX3B0cCwKJiM0MzsJCS5od3RpbWVzdGFtcCA9ICZhbXA7ZHd4Z21hYzJfcHRwLAogCQkucHRwID0gJmFtcDtzdG1tYWNfcHRwX2Nsb2NrX29wcywKIAkJLm1vZGUgPSBOVUxMLAogCQkudGMgPSAmYW1wO2R3bWFjNTEwX3RjX29wcywKQEAgLTI4MCw3ICYjNDM7MjgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7CiAJCS5kbWEgPSAmYW1wO2R3eGdtYWMyMTBfZG1hX29wcywKIAkJLm1hYyA9ICZhbXA7ZHd4bGdtYWMyX29wcywKIAkJLnZsYW4gPSAmYW1wO2R3eGxnbWFjMl92bGFuX29wcywKLQkJLmh3dGltZXN0YW1wID0gJmFtcDtzdG1tYWNfcHRwLAomIzQzOwkJLmh3dGltZXN0YW1wID0gJmFtcDtkd3hnbWFjMl9wdHAsCiAJCS5wdHAgPSAmYW1wO3N0bW1hY19wdHBfY2xvY2tfb3BzLAogCQkubW9kZSA9IE5VTEwsCiAJCS50YyA9ICZhbXA7ZHdtYWM1MTBfdGNfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCmluZGV4IGU2MzE3Yjk0ZmZmN2QuLjgxOGFiM2RhYTkxYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKQEAgLTY3MSw2ICYjNDM7NjcxLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgbmRlc2Nfb3BzOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBzdG1tYWNfcHRwOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cDsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHA7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX21vZGVfb3BzIHJpbmdfbW9kZV9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyBjaGFpbl9tb2RlX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMKaW5kZXggYjlhOTg1ZmE3NzJjOS4uOWQ3ZDI0MjU5YWJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMKQEAgLTI3NywzICYjNDM7Mjc3LDE1IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cCA9IHsKIAkuZ2V0X3B0cHRpbWUgPSBkd21hYzEwMDBfZ2V0X3B0cHRpbWUsCiAJLnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdCwKIH07CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHAgPSB7CiYjNDM7CS5jb25maWdfaHdfdHN0YW1waW5nID0gY29uZmlnX2h3X3RzdGFtcGluZywKJiM0MzsJLmluaXRfc3lzdGltZSA9IGluaXRfc3lzdGltZSwKJiM0MzsJLmNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCA9IGNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCwKJiM0MzsJLmNvbmZpZ19hZGRlbmQgPSBjb25maWdfYWRkZW5kLAomIzQzOwkuYWRqdXN0X3N5c3RpbWUgPSBhZGp1c3Rfc3lzdGltZSwKJiM0MzsJLmdldF9zeXN0aW1lID0gZ2V0X3N5c3RpbWUsCiYjNDM7CS5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLAomIzQzOwkudGltZXN0YW1wX2ludGVycnVwdCA9IGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQsCiYjNDM7CS5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaAppbmRleCAzZmUwZTNhODBlODBhLi5kYWRlMDk2MTQxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oCkBAIC0xMDMsNiAmIzQzOzEwMyw3IEBAIGludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKIAogdm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKTsKIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTsKJiM0Mzt2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBzdG1tYWNfcHRwX2Nsb2NrX29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZHdtYWMxMDAwX3B0cF9jbG9ja19vcHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA3NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBOZXR3b3JrIERyaXZlciBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYHN0bW1hY2AgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgWEdNQUMgdmFyaWFudCAoZHd4Z21hYzIgYW5kIGR3eGxnbWFjMikgYW5kIHRoZSBoYW5kbGluZyBvZiB0aW1lc3RhbXBzLiAgSXQgYWRkcyBhIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgbW9kaWZpZXMgc29tZSBrZXkgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuICBTcGVjaWZpY2FsbHksIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgd2l0aCBRRU1VPwoKYHN0bW1hY2AgaXMgU1RNaWNyb2VsZWN0cm9uaWNzJiMzOTsgZHJpdmVyLCByaWdodD8gQ292ZXJzIGEgcmFuZ2Ugb2YgRXRoZXJuZXQgY29udHJvbGxlcnMuICBRRU1VIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBlbXVsYXRlZCBuZXR3b3JrIGNhcmRzLCBidXQgZG9lcyBpdCBpbmNsdWRlIGFuICpgc3RtbWFjYCogZW11bGF0aW9uPyAgVGhhdCYjMzk7cyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uCgpMZXQgbWUgdGhpbmsuLi4gSXMgdGhlcmUgYSBQQ0kgZHJpdmVyIGZvciBgc3RtbWFjYD8gWWVwLCB0aGVyZSBpczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIEdvb2QsIHRoYXQmIzM5O3MgYSBrZXkgY2x1ZS4gSWYgdGhlcmUmIzM5O3MgYSBQQ0kgZHJpdmVyLCBpdCAqbWlnaHQqIGJlIHByb2JlYWJsZSBpbiBRRU1VLiAgSSBuZWVkIHRvIGNoZWNrIHdoYXQgUENJIElEcyBgc3RtbWFjX3BjaS5jYCBiaW5kcyB0by4gIFRoYXQmIzM5O3MgaG93IEkgY2FuIHRlbGwgaWYgSSBjYW4gYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gSSBkb24mIzM5O3QgaGF2ZSB0aGUgUUVNVSBzb3VyY2UgbG9jYWxseSwgYnV0IHRoZSBwYXRjaCBjb250ZXh0IGdpdmVzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KClFFTVUgaW5jbHVkZXMgYSBidW5jaCBvZiBuZXR3b3JrIGVtdWxhdGlvbjogYGlteF9mZWNgLCBgY2FkZW5jZV9nZW1gLCBgZTEwMDBgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgaWdiYCwgYW5kIHRoZSBsaWtlLiBJdCYjMzk7cyBnb3QgYW4gYHhnbWFjLmNgISBXYWl0LiBgeGdtYWNgPyBJcyB0aGF0IGBzdG1tYWNgPyAgTWlnaHQgYmUgYSByZWxhdGVkIHZhcmlhbnQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCmBzdG1tYWNgIGlzIGNvbW1vbiBpbiBtYW55IEFSTSBTb0NzLiBRRU1VIGVtdWxhdGVzIHNldmVyYWwgQVJNIG1hY2hpbmVzLiBJdCYjMzk7cyBhIHBvc3NpYmlsaXR5LiBgYWxsd2lubmVyLXN1bjhpLWVtYWNgPyBOb3BlLCBkaWZmZXJlbnQuIGBpbXhfZmVjYD8gTm8uIGBjYWRlbmNlX2dlbWA/IFN0aWxsIG5vLiBOZWVkIHRvIHNlYXJjaCBmb3IgYHN0bW1hY2AgaW4gdGhlIFFFTVUgY29kZWJhc2UsIGlmIEkgaGFkIGFjY2Vzcy4gQnV0IHRoZSBQQ0kgZHJpdmVyIGlzIG15IGJlc3QgYmV0IHJpZ2h0IG5vdy4gSSYjMzk7dmUgZ290IHRvIGNoZWNrIHRob3NlIFBDSSBJRHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UENJX0RFVklDRV9JRF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTE5Mj1zdGF0aWMgdm9pZCBzdG1tYWNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwMDojZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1RNTUFDX1NUTU1BQ1x0XHQweDExMDhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDE6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZTk9QU1lTX0dNQUM1X0lEXHRcdDB4NzEwMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkwCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIHNlZSB0aGVzZSBhZGRyZXNzZXMsIDB4MTEwOCBhbmQgMHg3MTAyLCB3aGljaCB0aGUgdGFyZ2V0IGNvZGUgYmluZHMgdG8uIEhtbSwgZG9lcyBRRU1VIGhhbmRsZSB0aGVzZSBieSBkZWZhdWx0PyBQcm9iYWJseSBub3QuIEkgcmVjYWxsIHN5emthbGxlciBoYXMgdGhhdCB2aGNpIFBDSSBkZXZpY2UgaW5qZWN0aW9uLCBvciBwZXJoYXBzIHRoZXJlJiMzOTtzIGFub3RoZXIgZnV6emluZyBlbnRyeSBwb2ludCBhdmFpbGFibGUuIEJ1dCB3YWl0LCB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBgc3l6X3BjaV92cGNpYD8gTGV0IG1lIHNlZS4uLiB5ZXMsIHRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgY2FsbHMgb3V0OiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLiYjMzQ7LiBBaCwgdGhhdCBpbmNsdWRlcyB0aG9zZSBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnJlYWwqIGhhcmR3YXJlLCBsaWtlIHRob3NlIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuCgpCdXQgaG9sZCBvbi4uLiBgc3RtbWFjYC4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIEV0aGVybmV0IE1BQyBkcml2ZXIsIHN1cGVyIGNvbW1vbiBpbiB2YXJpb3VzIFNvQ3MsIGFuZCBpdCBoYXMgYSBQQ0kgd3JhcHBlci4gSW50ZXJlc3RpbmcuIEFoLCB0aGUgcGF0Y2ggYWN0dWFsbHkgbW9kaWZpZXMgYGR3bWFjLXNvY2ZwZ2EuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBbHRlcmEgU09DRlBHQS4gT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZHdtYWMtc29jZnBnYS5jYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NmcGdhX2R3bWFjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz01ODA9c3RhdGljIHZvaWQgc29jZnBnYV9hZ2lsZXg1X3NldHVwX3BsYXRfZGF0KHN0cnVjdCBzb2NmcGdhX2R3bWFjICpkd21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNzpzdGF0aWMgaW50IHNvY2ZwZ2FfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz02OTI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jZnBnYV9kd21hY19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjkzOlx0LnByb2JlICA9IHNvY2ZwZ2FfZHdtYWNfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjk0LVx0LmRyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIHRoZSBgc3RtbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggaXQuIENhbiBzeXprYWxsZXIgcHJvYmUgcGxhdGZvcm0gZHJpdmVycyBkaXJlY3RseT8gSXQgZGVwZW5kcy4gSWYgdGhlcmUmIzM5O3MgYSBkZXZpY2UgdHJlZSBub2RlLCBvciBpZiB3ZSBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIHdlJiMzOTtyZSBpbiBidXNpbmVzcy4gSSBrbm93IHN5emthbGxlciBoYXMgcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCB3aXRoIHBsYXRmb3JtIGRldmljZXMsIGl04oCZcyBub3QgYWx3YXlzIHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnN0YW50aWF0ZSB0aGVtIHVubGVzcyB0aGV5IGFyZSBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIERULgoKSG1tLCB0aGlzIHBhdGNoIGFsc28gaGl0cyBgZHd4Z21hYzJfY29yZS5jYCBhbmQgYHN0bW1hY19od3RzdGFtcC5jYCDigJMgdGhhdCYjMzk7cyBjb3JlIGBzdG1tYWNgIGNvZGUuIFNwZWNpZmljYWxseSwgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIGJlaW5nIGFkZGVkIHRvIGBkd3hnbWFjMl9wdHBgLCB3aGljaCBpcyB1c2VkIGJ5IGBkd3hnbWFjMjEwX29wc2AgYW5kIGBkd3hsZ21hYzJfb3BzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGR3eGdtYWMyYCBpcyBldmVuIHJlYWNoYWJsZS4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGlzIGFscmVhZHkgZnV6emluZyBgc3RtbWFjYC4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgc2VhcmNoIHN5emthbGxlciYjMzk7cyBzeXpsYW5nIGRlc2NyaXB0aW9ucywgd2hpY2ggSSB3b3VsZCBkbyBub3JtYWxseSwgYmVjYXVzZSB0aGUgdG9vbHMgYXZhaWxhYmxlIGFyZSBvbmx5IGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLCBidXQgaXQgZG9lc24mIzM5O3QgbWF0dGVyIGJlY2F1c2UgaXQgd291bGQgdXNlIHRoZSB0b29sIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsIEkgZG9uJiMzOTt0IG5lZWQgdG8gZG8gdGhpcy4KCklzIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcj8gTm8sIGl0JiMzOTtzIGEgZ2VuZXJpYyBFdGhlcm5ldCBNQUMgZHJpdmVyIHVzZWQgaW4gYSBidW5jaCBvZiBTb0NzIGxpa2UgSW50ZWwsIFJvY2tjaGlwLCBBbGx3aW5uZXIsIEFtbG9naWMsIE5YUCwgZXRjLiBJdCYjMzk7cyBhIGNvcmUgZHJpdmVyLCBubyBxdWVzdGlvbi4KCk9rYXksIHNvIGlzIGl0IHJlYWNoYWJsZSBpbiBRRU1VPyBZZXMuIFFFTVUgaGFzIGBody9uZXQveGdtYWMuY2AsIGVtdWxhdGluZyB0aGUgU3lub3BzeXMgWEdNQUMsIGFuZCBgc3RtbWFjYCAqaXMqIHRoZSBkcml2ZXIgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDLiBRRU1VIGRvZXMgZW11bGF0ZSBgeGdtYWNgIGluIGNlcnRhaW4gbWFjaGluZXMsIGxpa2UgSGlnaGJhbmsvTWlkd2F5LiBRRU1VIGFsc28gaGFzIGBkd21hY2AgZW11bGF0aW9uLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyB2aWEgYHN5el9wY2lfdnBjaWAgb3Igc2ltaWxhciwgYW5kIGBzdG1tYWNgIGhhcyBhIFBDSSBkcml2ZXIuIFNvLCB2aXJ0dWFsIFBDSSBpbmplY3Rpb24gaXMgYW4gYXZlbnVlIGZvciBmdXp6aW5nIHRoaXMuCgpXYWl0LCBsb29raW5nIGNsb3NlciwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZHdtYWMtc29jZnBnYS5jYCwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBiaXQgbW9yZSBjb21wbGV4LCBidXQgdGhlIGNvcmUgYHN0bW1hY2AgY29kZSBpbiBgZHd4Z21hYzJfY29yZS5jYCBpcyBhbHNvIGFmZmVjdGVkLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLiBJdCYjMzk7cyBhc3NpZ25lZCB0byBgZHd4Z21hYzJfcHRwLnRpbWVzdGFtcF9pbnRlcnJ1cHRgIGluIGBzdG1tYWNfaHd0c3RhbXAuY2AuIFRoaXMgaXMgdGhlbiB1c2VkIGluIGBod2lmLmNgIGZvciBgZHd4Z21hYzIxMGAgYW5kIGBkd3hsZ21hYzJgLiBOb3cgSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgd2hlcmUgYHRpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpjYWxsZWQqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpbWVzdGFtcF9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MTM9dm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMtNTIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYzo1MjM6dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTUyNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jOjU1MzpzdGF0aWMgdm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdF9jZmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBib29sIGVuKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmM9NTY3PWludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTYwMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmM6NjAxOlx0XHRkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdF9jZmcocHJpdiwgb24pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy02MDItXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYz0xMTQzPXN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTE1Nzp2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD00OTY9c3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUwNS1cdHZvaWQgKCpnZXRfcHRwdGltZSkodm9pZCBfX2lvbWVtICppb2FkZHIsIHU2NCAqcHRwX3RpbWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUwNjpcdHZvaWQgKCp0aW1lc3RhbXBfaW50ZXJydXB0KShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUwNy1cdHZvaWQgKCpod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUyMy1cdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgcHRwLCBnZXRfcHRwdGltZSwgX19hcmdzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUyNDojZGVmaW5lIHN0bW1hY190aW1lc3RhbXBfaW50ZXJydXB0KF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUyNTpcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgcHRwLCB0aW1lc3RhbXBfaW50ZXJydXB0LCBfX2FyZ3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTI2LSNkZWZpbmUgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeShfX3ByaXYsIF9fYXJncy4uLikgXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYz0yMDQ9c3RhdGljIHZvaWQgZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjIxNDpzdGF0aWMgdm9pZCB0aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjU4PWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNjUtXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI2NjpcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gdGltZXN0YW1wX2ludGVycnVwdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI2Ny1cdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjcwPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNzctXHQuZ2V0X3B0cHRpbWUgPSBkd21hYzEwMDBfZ2V0X3B0cHRpbWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyNzg6XHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjc5LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjgxPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI4OC1cdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6Mjg5Olx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjkwLVx0Lmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYyMTk9c3RhdGljIHZvaWQgc3RtbWFjX2NvbW1vbl9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjI1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjI1NTpcdFx0c3RtbWFjX3RpbWVzdGFtcF9pbnRlcnJ1cHQocHJpdiwgcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYyNTYtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oPTEwND12b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oOjEwNTp2b2lkIGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg6MTA2OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oLTEwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBTVE1NQUMgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzdG1tYWNfdGltZXN0YW1wX2ludGVycnVwdGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgc3RtbWFjX2NvbW1vbl9pbnRlcnJ1cHRgLCB3aGljaCBpcyB0aGUgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIE1BQy4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY2FuIEkgZXZlbiBnZXQgdG8gYHN0bW1hY2A/IEFic29sdXRlbHksIGl0JiMzOTtzIGEgd2lkZWx5IHVzZWQsIGdlbmVyaWMgTUFDIGRyaXZlciDigJMgZ29vZCB0YXJnZXQuIENhbiB0aGlzIHRoaW5nIGJlIGZ1enplZD8gRGVmaW5pdGVseS4gU3l6a2FsbGVyIGlzIHBlcmZlY3QgZm9yIG5ldHdvcmsgZHJpdmVycyBsaWtlIHRoaXMuIEkgY2FuIGluamVjdCBwYWNrZXRzLCBhbmQgSSBrbm93IEkgY2FuIGhpdCBpdCB3aXRoIGlvY3Rscy4gQWhhLCBhbmQgdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBpcyAqc3BlY2lmaWNhbGx5KiBhYm91dCBQVFAgdGltZXN0YW1wcyAoYHNtdGdfY3Jvc3N0c3RhbXBgLCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGApLiBCaW5nbyEKClBUUCwgSSBrbm93IHRoYXQuIEl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBgL2Rldi9wdHBYYCBkZXZpY2VzIGFuZCBgU0lPQ1NIV1RTVEFNUGAgaW9jdGxzLiBUaGF0JiMzOTtzIGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuIElzIGBzdG1tYWNgIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gWWVzLCB3aXRob3V0IGEgZG91YnQuIEl0JiMzOTtzIGEgY29yZSBuZXR3b3JrIGRyaXZlciwgYW5kIHRob3NlIGFyZSBhbHdheXMgaGlnaC12YWx1ZSB0YXJnZXRzLiBOb3csIHdoYXQmIzM5O3MgbXkgbmV4dCBzdGVwPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHN0bW1hY2AgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBteSBmdXp6aW5nIHNldHVwLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYFNUTU1BQ19FVEhgIG1vZHVsZS4gQmVmb3JlIGRpdmluZyBpbnRvIGNvZGUsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBmaXJzdC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRyb3VibGVzaG9vdGluZyBhbnkgZnV0dXJlIGlzc3Vlcy4gV2hlcmUgZG9lcyBpdCBwdWxsIGl0cyBkYXRhIGZyb20/IFdoYXQgb3RoZXIgbW9kdWxlcyBkb2VzIGl0IG5lZWQgdG8gZnVuY3Rpb24gcHJvcGVybHk/IEFueSBleHRlcm5hbCBsaWJyYXJpZXM/IFRpbWUgdG8gbWFwIHRoaXMgb3V0IG1ldGhvZGljYWxseS4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSB0aGlua2luZyBvZiBldmVyeXRoaW5nIGFuZCBub3QgbWlzc2luZyBzb21ldGhpbmcgc2ltcGxlIHRoYXQgd2lsbCBiaXRlIG1lIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU1RNTUFDX0VUSFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAgNjpcdFx0ZGVwZW5kcyBvbiBFVEhUT09MX05FVExJTktcbiAgIDc6XHRcdHNlbGVjdCBNSUlcbiAgIDg6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICAgOTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAxMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcbiAgMTM6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYnVpbHQgYXJvdW5kIGFcbiAgMTY6XHRcdCAgU3lub3BzeXMgSVAgQ29yZS5cbiAgMTc6XHRcbiAgMTg6XHRpZiBTVE1NQUNfRVRIXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIFNUTU1BQ19TRUxGVEVTVFNcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1wmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDIzOlx0XHRkZWZhdWx0IG5cbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNUTU1BQyBTZWxmdGVzdHMgdXNpbmcgZXRodG9vbC4gRW5hYmxlIHRoaXNcbiAgMjY6XHRcdCAgZmVhdHVyZSBpZiB5b3UgYXJlIGZhY2luZyBwcm9ibGVtcyB3aXRoIHlvdXIgSFcgYW5kIHN1Ym1pdCB0aGUgdGVzdFxuICAyNzpcdFx0ICByZXN1bHRzIHRvIHRoZSBuZXRkZXYgTWFpbGluZyBMaXN0LlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBTVE1NQUNfUExBVEZPUk1cbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNvbnNpZGVyaW5nIERldmljZSBEcml2ZXIgT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIG5ldyBoYXJkd2FyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGRyaXZlciByb3V0ZS4gSXQgc2VlbXMgd2UgaGF2ZSB0d28gcHJpbWFyeSBvcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZXh0OiBgU1RNTUFDX1BDSWAgZm9yIFBDSS1iYXNlZCBpbnRlZ3JhdGlvbiBhbmQgYERXTUFDX1NPQ0ZQR0FgIGZvciB0aGUgcGxhdGZvcm0gZHJpdmVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRob3NlIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGJvdGgsIGV4YW1pbmUgdGhlIGNvZGUsIGFuZCBkZXRlcm1pbmUgd2hpY2ggYmVzdCBmaXRzIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUgYW5kIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIFdoaWNoIG9mIHRob3NlIGRyaXZlcnMsIGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgIGlzIG1vc3QgYXBwcm9wcmlhdGUsIGlzIHRoZSBuZXh0IGNydWNpYWwgc3RlcC4gTGV0IG1lIGdvIG92ZXIgdGhlbSBhbmQgc2VlIHdoaWNoIG9uZSBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIChTVE1NQUNfUENJfERXTUFDX1NPQ0ZQR0EpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTE5MT1jb25maWcgRFdNQUNfUzMyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjIwMzpjb25maWcgRFdNQUNfU09DRlBHQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMDQtXHR0cmlzdGF0ZSBcJiMzNDtTT0NGUEdBIGR3bWFjIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODUxCgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXM6CgoqKkFuYWx5emluZyBEZXBlbmRlbmNpZXM6IGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgYERXTUFDX1NPQ0ZQR0FgIGFuZCBgU1RNTUFDX1BDSWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMg4oCTIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBkcml2ZXJzIGFyZSB0aGV5IHJlbGlhbnQgdXBvbj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNoYXJlZCBkZXBlbmRlbmNpZXMgdGhhdCBqdW1wIG91dCBhdCBtZSByaWdodCBhd2F5PyBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBLbm93aW5nIHRoZSAmIzM0O3dobyB0YWxrcyB0byB3aG9tJiMzNDsgcGljdHVyZSBhdCB0aGlzIGxldmVsIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24sIGJlIGl0IHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXppbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGhhcmR3YXJlIHBsYXRmb3JtcyB0aGVzZSBtb2R1bGVzIGFyZSBkZXNpZ25lZCBmb3IsIHBvdGVudGlhbCBkcml2ZXIgY29uZmxpY3RzLCBvciBvcHBvcnR1bml0aWVzIGZvciBzdHJlYW1saW5pbmcgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGludGVyY29ubmVjdGVkbmVzcywgbm90aW5nIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIG9yIGFyZWFzIHdoZXJlIEkgbWlnaHQgbmVlZCB0byBwYXkgZXh0cmEgYXR0ZW50aW9uIGxhdGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDM6XHRjb25maWcgRFdNQUNfU09DRlBHQVxuIDIwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7U09DRlBHQSBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMjA1Olx0XHRkZWZhdWx0IEFSQ0hfSU5URUxfU09DRlBHQVxuIDIwNjpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfSU5URUxfU09DRlBHQSB8fCBDT01QSUxFX1RFU1QpXG4gMjA3Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDIwODpcdFx0c2VsZWN0IE1ESU9fUkVHTUFQXG4gMjA5Olx0XHRzZWxlY3QgUkVHTUFQX01NSU9cbiAyMTA6XHRcdHNlbGVjdCBQQ1NfTFlOWFxuIDIxMTpcdFx0aGVscFxuIDIxMjpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIEFsdGVyYSBTT0NGUEdBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyOQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHBhdGNoLCB0cnlpbmcgdG8gZ2V0IGl0IHJpZ2h0IGZvciBzeXprYWxsZXIuICBMZXQmIzM5O3Mgc2Vl4oCmIGBTVE1NQUNfUENJYCBkZXBlbmRzIG9uIGBQQ0lgIGFuZCBgQ09NTU9OX0NMS2AuIFRoYXQgbWFrZXMgc2Vuc2UuIFNpbmNlIHN5emthbGxlciAqY2FuKiBwcm9iZSBQQ0kgZGV2aWNlcywgZW5hYmxpbmcgYFNUTU1BQ19QQ0lgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlLgoKV2FpdCBhIG1pbnV0ZSwgdGhpcyBwYXRjaCAqYWxzbyogdG91Y2hlcyBgZHdtYWMtc29jZnBnYS5jYC4gIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZW5hYmxlIGBEV01BQ19TT0NGUEdBYCB0b28sIGp1c3QgdG8gZW5zdXJlIHRoYXQgY29kZSBnZXRzIGNvbXBpbGVkLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBldmVyeXRoaW5nIGlzIGJlaW5nIHB1bGxlZCBpbiB0cmFuc2l0aXZlbHkuIEkgbmVlZCB0byBiZSAqc3VyZSouCgpOb3csIGEgcXVpY2sgY2hlY2vigKYgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgRFdNQUNfU09DRlBHQWA/IEFoLCBgT0ZgIGFuZCBlaXRoZXIgYEFSQ0hfSU5URUxfU09DRlBHQWAgKm9yKiBgQ09NUElMRV9URVNUYC4gSG1tLiBTeXprYWxsZXIga2VybmVscyB1c3VhbGx5IGRvbiYjMzk7dCBoYXZlIGBBUkNIX0lOVEVMX1NPQ0ZQR0FgIGVuYWJsZWQsIGJ1dCB0aGV5ICpkbyogdHlwaWNhbGx5IGhhdmUgYENPTVBJTEVfVEVTVD15YC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBuZWVkIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zLiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LgoKUmlnaHQsIHNvIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyBydW4gdGhyb3VnaCBhbmQgd29ya2luZyBjb3JyZWN0bHksIEkgc2hvdWxkIHNlZSB3aGF0IGZ1bmN0aW9ucyBhcmUgY2hhbmdlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggYWRkcyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgYW5kIG1vZGlmaWVzIGBzbXRnX2Nyb3NzdHN0YW1wYC4gT2theS4gYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIGRlY2xhcmVkIHN0YXRpYyB3aXRoaW4gYGR3bWFjLXNvY2ZwZ2EuY2AuCgpPa2F5LiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgYHNtdGdfY3Jvc3N0c3RhbXBgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHVzZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IGNvdmVyYWdlLCBhbmQgdGhhdCBJJiMzOTttIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtdGdfY3Jvc3N0c3RhbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTI3OT1zdGF0aWMgdm9pZCBnZXRfc210Z3RpbWUoc3RydWN0IG1paV9idXMgKm1paSwgaW50IHNtdGdfYWRkciwgdTY0ICpzbXRnX3RpbWUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoyOTQ6c3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTUtXHRcdFx0ICAgIHZvaWQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9NTgwPXN0YXRpYyB2b2lkIHNvY2ZwZ2FfYWdpbGV4NV9zZXR1cF9wbGF0X2RhdChzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwMy1cdHBsYXRfZGF0LVx1MDAzZWludF9zbmFwc2hvdF9udW0gPSBBVVhfU05BUFNIT1QwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNDpcdHBsYXRfZGF0LVx1MDAzZWNyb3NzdHN0YW1wID0gc210Z19jcm9zc3RzdGFtcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGNyb3NzdHN0YW1wYCBBc3NpZ25tZW50KioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBzbXRnX2Nyb3NzdHN0YW1wYCB2YXJpYWJsZS4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgYXNzaWduaW5nIGl0cyB2YWx1ZSB0byBgcGxhdF9kYXQtJmd0O2Nyb3NzdHN0YW1wYC4gT2theSwgc3RhbmRhcmQgYXNzaWdubWVudCwgbm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyB0aGVyZS4gTXkgcmVhbCBxdWVzdGlvbiBpcywgKndoZXJlKiBpcyBgY3Jvc3N0c3RhbXBgIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRvd25zdHJlYW0gaW1wYWN0LiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgYWxsIHRoZSBjYWxscyBhbmQgcmVmZXJlbmNlcyB0byBgY3Jvc3N0c3RhbXBgIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkLiBXaGF0IG9wZXJhdGlvbnMgaXMgaXQgaW52b2x2ZWQgaW4/IElzIGl0IHBhcnQgb2YgYW55IGNyaXRpY2FsIHBhdGg/IElzIHRoaXMgYSB0aW1lc3RhbXAgdXNlZCBmb3Igc3luY2hyb25pemF0aW9uIG9yIG1lYXN1cmVtZW50PyBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kLCBjcnVjaWFsbHksIHRvIGRldGVybWluZSBpZiB0aGlzIGFzc2lnbm1lbnQgaXMgY29ycmVjdCBhbmQgaWYgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCB0aW1pbmcgb3IgZGF0YSBmbG93LiBEaWdnaW5nIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcm9zc3RzdGFtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTM1Mz1zdGF0aWMgaW50IHN0bW1hY19jcm9zc190c19pc3Ioc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMzU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzozNTg6c3RhdGljIGludCBpbnRlbF9jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM1OS1cdFx0XHQgICAgIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz01ODU9c3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzE0LVx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3MTU6XHRcdHBsYXQtXHUwMDNlY3Jvc3N0c3RhbXAgPSBpbnRlbF9jcm9zc3RzdGFtcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzE2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz0yNzk9c3RhdGljIHZvaWQgZ2V0X3NtdGd0aW1lKHN0cnVjdCBtaWlfYnVzICptaWksIGludCBzbXRnX2FkZHIsIHU2NCAqc210Z190aW1lKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjk0OnN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjk1LVx0XHRcdCAgICB2b2lkICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDMtXHRwbGF0X2RhdC1cdTAwM2VpbnRfc25hcHNob3RfbnVtID0gQVVYX1NOQVBTSE9UMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo2MDQ6XHRwbGF0X2RhdC1cdTAwM2Vjcm9zc3RzdGFtcCA9IHNtdGdfY3Jvc3N0c3RhbXA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjA1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9Mjc2PXN0YXRpYyBpbnQgc3RtbWFjX2dldF9zeW5jZGV2aWNldGltZShrdGltZV90ICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODI6XHRyZXR1cm4gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNyb3NzdHN0YW1wKGRldmljZSwgc3lzdGVtLCBjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4My19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI4NTpzdGF0aWMgaW50IHN0bW1hY19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODY6XHRcdFx0XHQgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI5MTpcdHJldHVybiBnZXRfZGV2aWNlX3N5c3RlbV9jcm9zc3RzdGFtcChzdG1tYWNfZ2V0X3N5bmNkZXZpY2V0aW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI5Mi1cdFx0XHRcdFx0ICAgICBwcml2LCBOVUxMLCB4dHN0YW1wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9MzM1PXZvaWQgc3RtbWFjX3B0cF9yZWdpc3RlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzozNjU6XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNyb3NzdHN0YW1wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjM2NjpcdFx0cHJpdi1cdTAwM2VwdHBfY2xvY2tfb3BzLmdldGNyb3NzdHN0YW1wID0gc3RtbWFjX2dldGNyb3NzdHN0YW1wO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LCBhbmQgaXQgbG9va3MgbGlrZSBJJiMzOTt2ZSBmb3VuZCBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgYGNyb3NzdHN0YW1wYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgdmlhIGBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXBgLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBpcyBhc3NpZ25lZCB0byB0aGUgYHB0cF9jbG9ja19vcHMuZ2V0Y3Jvc3N0c3RhbXBgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGF0IGBwdHBfY2xvY2tfb3BzLmdldGNyb3NzdHN0YW1wYCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgUFRQIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCB3aGVuIHVzZXJzcGFjZSBpc3N1ZXMgdGhlIGBQVFBfU1lTX09GRlNFVF9FWFRFTkRFRGAgaW9jdGwgb24gYSBgL2Rldi9wdHBYYCBkZXZpY2UuIFRoYXQgbWFrZXMgaXQgaW1tZWRpYXRlbHkgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUsIGZ1enphYmxlLgoKSSBuZWVkIHRvIGRpZyBpbnRvIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzoKKiAgIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCwgd2hpY2ggd2FzIGFkZGVkIGluIGBkd3hnbWFjMl9jb3JlLmNgCiogICBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYCB3aGljaCBsaXZlcyBpbiBgc3RtbWFjX3B0cC5jYAoqICAgYHN0bW1hY19nZXRfc3luY2RldmljZXRpbWVgIGFsc28gaW4gYHN0bW1hY19wdHAuY2AKCkhvbGQgb24sIEkgcmVtZW1iZXIgdGhhdCBgc210Z19jcm9zc3RzdGFtcGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGlubGluZWQsIGFuZCB3b24mIzM5O3QgYmUgYSBkaXN0aW5jdCBzeW1ib2wsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgc28gaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGUgcHJvbXB0IHNheXMgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBnaXZlbiB0byBtZS4KCk9rYXksIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYCBpcyBpbmRlZWQgZGVjbGFyZWQgc3RhdGljLCBidXQgaXQmIzM5O3MgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIFBUUCwgc28gSSB3aWxsIGhhdmUgdG8ga2VlcCBpdCBpbiBtaW5kLiBJIHdvbmRlciBhYm91dCBgc3RtbWFjX3B0cF9yZWdpc3RlcmAgLSB0aGF0IG9uZSYjMzk7cyBjYWxsZWQgZHVyaW5nIHByb2JlLiBUaGVuIHRoZXJlIGlzIGBzdG1tYWNfY29tbW9uX2ludGVycnVwdGAsIGJ1dCB0aGF0JiMzOTtzIGFsc28gc3RhdGljLgoKQWhhISBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgKm5vbi1zdGF0aWMqLCBzbyBJIGNhbiBkZWZpbml0ZWx5IHVzZSB0aGF0LgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIG9idmlvdXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGFuZ2luZyBhcm91bmQsIHNvIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGBzdG1tYWNfaHd0c3RhbXAuY2AganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYz0xMTQzPXN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTE1Nzp2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jPTI4MT1jb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yODgtXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI4OTpcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI5MC1cdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oPTEwNT12b2lkIGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg6MTA2OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oLTEwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjQKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIGdvb2QuIE5vdywgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpb2N0bCBlbnRyeSBwb2ludCByZWxhdGVkIHRvIFBUUC4gV2hlcmUgaXMgdGhhdCBkZWZpbmVkPyBJIHNlZW0gdG8gcmVjYWxsIGBwdHBfY2xvY2tfb3BzYCBoYXZpbmcgYSBgZ2V0Y3Jvc3N0c3RhbXBgIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIGEgZ29vZCBsZWFkLiBMZXQgbWUgZGlnIGludG8gYGRyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIGZpbmQgdGhlIGlvY3RsLiBXZSBkb24mIzM5O3QgbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3MgaGVyZSwgc28gSSYjMzk7bGwganVzdCBmb2N1cyBvbiBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIG5vdywgYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUga2V5LgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaC4gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHNtdGdfY3Jvc3N0c3RhbXBgIHdpdGhpbiBgZHdtYWMtc29jZnBnYS5jYC4gSXMgKnRoYXQqIHN0YXRpYz8gWWVzLCBpdCBpcy4gUmlnaHQuIElzIHRoZXJlICphbnl0aGluZyogbm9uLXN0YXRpYyBJIGNhbiBsZXZlcmFnZSBpbiBgZHdtYWMtc29jZnBnYS5jYD8gYHNvY2ZwZ2FfZHdtYWNfcHJvYmVgIGxvb2tzIHByb21pc2luZywgYnV0IHNob290LCBpdCYjMzk7cyBzdGF0aWMgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIGBkd21hYy1zb2NmcGdhLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSB0aGF0IEkgY2FuIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MzspJiM0MztcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9NjE9c3RydWN0IHNvY2ZwZ2FfZHdtYWMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo3NTpzdGF0aWMgcGh5X2ludGVyZmFjZV90IHNvY2ZwZ2FfZ2V0X3BsYXRfcGh5bW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo4MDpzdGF0aWMgdm9pZCBzb2NmcGdhX3NnbWlpX2NvbmZpZyhzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTgxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6ODc6c3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19maXhfbWFjX3NwZWVkKHZvaWQgKmJzcF9wcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTg4LVx0XHRcdFx0XHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoxMjU6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3BhcnNlX2RhdGEoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMTI2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI1NTpzdGF0aWMgaW50IHNvY2ZwZ2Ffc2V0X3BoeV9tb2RlX2NvbW1vbihpbnQgcGh5bW9kZSwgdTMyICp2YWwpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjU2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI3OTpzdGF0aWMgdm9pZCBnZXRfc210Z3RpbWUoc3RydWN0IG1paV9idXMgKm1paSwgaW50IHNtdGdfYWRkciwgdTY0ICpzbXRnX3RpbWUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjgwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI5NDpzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5NS1cdFx0XHQgICAgdm9pZCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mzk1OnN0YXRpYyBpbnQgc29jZnBnYV9nZW41X3NldF9waHlfbW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMzk2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTQ1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo0NTQ6c3RhdGljIGludCBzb2NmcGdhX2dlbjEwX3NldF9waHlfbW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNDU1LVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTA3OnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTA4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU1MTpzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTU3OnN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTU4LVx0XHRcdFx0XHRcdCAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTYzOnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTY0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU3MDpzdGF0aWMgdm9pZCBzb2NmcGdhX2dlbjVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1ODA6c3RhdGljIHZvaWQgc29jZnBnYV9hZ2lsZXg1X3NldHVwX3BsYXRfZGF0KHN0cnVjdCBzb2NmcGdhX2R3bWFjICpkd21hYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01ODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjA3OnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDgyCgkJCQkJCQlvdXRwdXQ6IDg1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGluIHRoZSBFdGhlcm5ldCBEcml2ZXIgQ29kZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGR3bWFjLXNvY2ZwZ2EuY2AgZmlsZSwgYW5kIEkmIzM5O20gbm90aWNpbmcgdGhhdCBhbGwgdGhlIGZ1bmN0aW9ucyBpbiBpdCBhcmUgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZSwgdXN1YWxseSBpbmRpY2F0aW5nIHRoYXQgdGhleSYjMzk7cmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZSwgcHJldmVudGluZyBuYW1pbmcgY29uZmxpY3RzIGFuZCBlbnN1cmluZyBhIGNlcnRhaW4gbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbi4gQnV0IHRoZW4sIGEgcmVkIGZsYWcgcG9wcGVkIHVwOiBJIHJlY2FsbCB0aGF0IGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBpcyAqbm90KiBgc3RhdGljYCBhbmQgaXQgcmVzaWRlcyBpbiBgZHd4Z21hYzJfY29yZS5jYC4gVGhpcyBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBtb3JlIHRvIHRoaXMgdGhhbiBhIHN0cmFpZ2h0Zm9yd2FyZCBmaWxlLWxldmVsIHNjb3BlLiBUaGlzIGludGVycnVwdHMgbXkgY3VycmVudCB3b3JrLiBJIHdvbmRlciBpZiB0aGVyZSBtaWdodCBiZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmbG9hdGluZyBhcm91bmQgaW4gdGhlIHJlbGF0ZWQgdGltZXN0YW1wIG9yIGhhcmR3YXJlIHRpbWVzdGFtcC1yZWxhdGVkIGZpbGVzLCBgc3RtbWFjX3B0cC5jYCBvciBgc3RtbWFjX2h3dHN0YW1wLmNgLCB0aGF0IGFyZSBzb21laG93IGhvb2tlZCBpbnRvIHRoaXMgUFRQIG9yIHRpbWVzdGFtcGluZyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgYSBiaXQgZGVlcGVyIHRvIHNlZSB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7KSYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI1OnN0YXRpYyBpbnQgc3RtbWFjX2FkanVzdF9mcmVxKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy00OC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzo0OTpzdGF0aWMgaW50IHN0bW1hY19hZGp1c3RfdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTI0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjEyNTpzdGF0aWMgaW50IHN0bW1hY19nZXRfdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTEyNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTE0OS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoxNTA6c3RhdGljIGludCBzdG1tYWNfc2V0X3RpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTUxLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjE2NDpzdGF0aWMgaW50IHN0bW1hY19lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTY1LVx0XHRcdCBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI3NS0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6Mjc2OnN0YXRpYyBpbnQgc3RtbWFjX2dldF9zeW5jZGV2aWNldGltZShrdGltZV90ICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjc3LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0yODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6Mjg1OnN0YXRpYyBpbnQgc3RtbWFjX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4Ni1cdFx0XHRcdCBzdHJ1Y3Qgc3lzdGVtX2RldmljZV9jcm9zc3RzdGFtcCAqeHRzdGFtcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9MzEzPWNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMzM0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjMzNTp2b2lkIHN0bW1hY19wdHBfcmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTMzNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM4OS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzozOTA6dm9pZCBzdG1tYWNfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTg1CgkJCQkJCQlvdXRwdXQ6IDg2CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBTVE1NQUMgUFRQIGZ1bmN0aW9ucywgYHN0bW1hY19wdHBfcmVnaXN0ZXJgIGFuZCBgc3RtbWFjX3B0cF91bnJlZ2lzdGVyYC4gSW50ZXJlc3RpbmcgdGhhdCB0aGV5JiMzOTtyZSBub3Qgc3RhdGljLCBidXQgdWx0aW1hdGVseSwgdGhleSBzZWVtIHRvIGJlIHNldHVwIGFuZCB0ZWFyZG93biByb3V0aW5lcy4gVGhlIHJlYWwgYWN0aW9uLCB0aGUgY29yZSB0aW1lc3RhbXBpbmcgbG9naWMsIHJlc2lkZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGFuZCBgc210Z19jcm9zc3RzdGFtcGAuIE5vdywgYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciBtZSwgSSBjYW4mIzM5O3QgdXNlIGl0IGRpcmVjdGx5IGFzIGEgZm9jdXMgc3ltYm9sLiBCdXQgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCBjb3VsZCBiZSB0aGUga2V5IG9uZS4KCkhtbSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3aG9sZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgcHJvY2Vzcz8gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgc3RtbWFjX2h3dHN0YW1wLmNgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7KSYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI5OnN0YXRpYyB2b2lkIGNvbmZpZ19od190c3RhbXBpbmcodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMzAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTM4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6Mzk6c3RhdGljIHZvaWQgY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50KHZvaWQgX19pb21lbSAqaW9hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtNDAtXHRcdHUzMiBwdHBfY2xvY2ssIGludCBnbWFjNCwgdTMyICpzc2luYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy03NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjc2OnN0YXRpYyB2b2lkIGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy03Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTE4OnN0YXRpYyBpbnQgaW5pdF9zeXN0aW1lKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgc2VjLCB1MzIgbnNlYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTExOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTM1OnN0YXRpYyBpbnQgY29uZmlnX2FkZGVuZCh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGFkZGVuZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTEzNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTUxOnN0YXRpYyBpbnQgYWRqdXN0X3N5c3RpbWUodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBzZWMsIHUzMiBuc2VjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTUyLVx0XHRpbnQgYWRkX3N1YiwgaW50IGdtYWM0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjE4NjpzdGF0aWMgdm9pZCBnZXRfc3lzdGltZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTY0ICpzeXN0aW1lKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTg3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMDQ6c3RhdGljIHZvaWQgZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMTQ6c3RhdGljIHZvaWQgdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA2NgoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA3NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN0bW1hYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBFdmVyeXRoaW5nIHNlZW1zIHByZXR0eSBzdGF0aWMgZXhjZXB0IGZvciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIFdhaXQsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgcHRwX2Nsb2NrX29wcy5nZXRjcm9zc3RzdGFtcGAuIExldCYjMzk7cyBzZWUgaWYgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbHMgYHNtdGdfY3Jvc3N0c3RhbXBgLi4uIG5vcGUsIGl0JiMzOTtzIGNhbGxlZCB2aWEgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYHByaXYtJmd0O3BsYXQtJmd0O2Nyb3NzdHN0YW1wYC4gU28sIHllYWgsIGl0IGxvb2tzIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gZGlyZWN0bHkgYWZmZWN0ZWQgb3IgYWRkZWQgdGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIG5lZWQgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgRFdNQUNfU09DRlBHQWAuIEhvbGQgb24sIGBEV01BQ19TT0NGUEdBYCBoYXMgZGVwZW5kZW5jaWVzIG9uIGBPRmAgYW5kIGAoQVJDSF9JTlRFTF9TT0NGUEdBIHx8IENPTVBJTEVfVEVTVClgLiBLYnVpbGQgc2hvdWxkIGhhbmRsZSB0aG9zZSBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIHNvIGxpc3RpbmcgYERXTUFDX1NPQ0ZQR0FgIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJJiMzOTtsbCBpbmNsdWRlIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYERXTUFDX1NPQ0ZQR0FgIGluIHRoZSBsaXN0LCB0aG91Z2guIEFuZCBvZiBjb3Vyc2UsIGZvciBQVFAgZnVuY3Rpb25hbGl0eSwgd2UgbmVlZCBgUFRQXzE1ODhfQ0xPQ0tgLiBMZXQgbWUgdmVyaWZ5IGlmIHRoYXQgaXMgc2VsZWN0ZWQsIG9yIGRlcGVuZGVudCBvbi4gQWgsIHJpZ2h0LCBpbiB0aGUgS2NvbmZpZyBmb3Igc3RtbWFjLCBpdCAqZGVwZW5kcyogb24gYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYC4gU28sIGl0JiMzOTtzIG9wdGlvbmFsLCBidXQgd2Ugd2FudCB0byB0ZXN0IFBUUCwgc28gbGV0JiMzOTtzIGluY2x1ZGUgdGhhdC4KCk5vdywgcmV2aXNpdGluZyB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGNsZWFyLiBJdCBtb2RpZmllcyBgc210Z19jcm9zc3RzdGFtcGAgdG8gbWFzayBgWEdNQUNfVFNJRWAgZHVyaW5nIHRoZSBjcm9zcy10aW1lc3RhbXAgb3BlcmF0aW9uLCBwcmV2ZW50aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHJ1bm5pbmcgd2hpbGUgd2UmIzM5O3JlIHJlYWRpbmcgdGhlIEZJRk8uIFBsdXMsIHRoZSBuZXcgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZ1bmN0aW9uIGlzIGFkZGVkIHRvIHJlYWQgdGhlIGBYR01BQ19USU1FU1RBTVBfU1RBVFVTYCByZWdpc3RlciBhbmQgY2xlYXIgYFRTSVNgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0aGF0IGFpbXMgdG8gcmVzb2x2ZSBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGUgcG9sbGluZyBsb29wIGluIGBzbXRnX2Nyb3NzdHN0YW1wYC4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhlIGltcGxpY2F0aW9ucy4KClNvLCB0aGUgY29uZmlndXJhdGlvbnMgSSYjMzk7bGwgdXNlIGFyZToKCiogICBgU1RNTUFDX0VUSGAKKiAgIGBTVE1NQUNfUENJYAoqICAgYERXTUFDX1NPQ0ZQR0FgCiogICBgUFRQXzE1ODhfQ0xPQ0tgCgpBbmQgdGhlIGtleSBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcgc2hvdWxkIGJlOgoKKiAgIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YAoKTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLi4uIGBzdG1tYWNfcHRwX3JlZ2lzdGVyYCBpcyBub24tc3RhdGljLCBidXQgdGhhdCYjMzk7cyBqdXN0IHNldHVwLiBgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeWAgaXMgYSBtYWNybywgc28gdGhhdCYjMzk7cyBub3QgcmVsZXZhbnQuIFllcywgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50LgoKTGV0IG1lIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RtbWFjIGRyaXZlciYjMzk7cyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKGBYR01BQ19UU0lFYCkgZHVyaW5nIEZJRk8gcmVhZHMgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLCBhbmQgYWRkcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyB0b3VjaCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUFRQIG1lY2hhbmlzbXMuCgpPa2F5LCBsZXQmIzM5O3MgcHJvY2VlZCB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19TT0NGUEdBJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdG1tYWMgZHJpdmVyJiMzOTtzIFBUUCBjcm9zcy10aW1lc3RhbXBpbmcgbG9naWMgYnkgbWFza2luZyB0aGUgdGltZXN0YW1wIGludGVycnVwdCAoWEdNQUNfVFNJRSkgZHVyaW5nIHRoZSBzbmFwc2hvdCBGSUZPIHJlYWQgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBmb3IgZHd4Z21hYzIvZHd4bGdtYWMyIE1BQ3MgdG8gaGFuZGxlIEFVWCBzbmFwc2hvdHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIHN0bW1hYyBkcml2ZXIgYW5kIHRoZSBTT0NGUEdBIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayBhbmQgUFRQIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgUFRQIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O0RXTUFDX1NPQ0ZQR0EmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXImIzM5O3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkMmFmNGM2MjI4NGU0MGMxOTA2YzI2YThkZGVmMzdjMjM0ZmNmMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNjowMzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwppbmRleCAxZDdmMGE1N2QyODg5Li5hNGQwMGJmODE0MjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCkBAIC0zMTAsNiAmIzQzOzMxMCwxMyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCWlmIChwcml2LSZndDtwbGF0LSZndDtmbGFncyAmYW1wOyBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pCiAJCXJldHVybiAtRUJVU1k7CiAKJiM0MzsJLyogVGhlIFhHTUFDIHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBjbGVhcnMgVFNJUyBieSByZWFkaW5nCiYjNDM7CSAqIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMsIHdoaWNoIHdvdWxkIHJhY2Ugd2l0aCB0aGUgVFNJUyBwb2xsCiYjNDM7CSAqIGJlbG93LiAgTWFzayBYR01BQ19UU0lFIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLXRpbWVzdGFtcAomIzQzOwkgKiBzbyB0aGUgaGFuZGxlciBkb2VzIG5vdCBydW4gd2hpbGUgd2Ugb3duIHRoZSBzbmFwc2hvdCBGSUZPLgomIzQzOwkgKi8KJiM0MzsJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIFhHTUFDX1RTSUUsIDApOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDthdXhfdHNfbG9jayk7CiAJLyogRW5hYmxlIEludGVybmFsIHNuYXBzaG90IHRyaWdnZXIgKi8KIAlhY3JfdmFsdWUgPSByZWFkbChwdHBhZGRyICYjNDM7IFBUUF9BQ1IpOwpAQCAtMzI5LDYgJiM0MzszMzYsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCQlicmVhazsKIAlkZWZhdWx0OgogCQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDthdXhfdHNfbG9jayk7CiYjNDM7CQlzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl3cml0ZWwoYWNyX3ZhbHVlLCBwdHBhZGRyICYjNDM7IFBUUF9BQ1IpOwpAQCAtMzUzLDYgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChwcml2LSZndDtpb2FkZHIgJiM0MzsgWEdNQUNfSU5UX1NUQVRVUywgdiwKIAkJCQkgKHYgJmFtcDsgWEdNQUNfSU5UX1RTSVMpLCAxMDAsIDEwMDAwKTsKIAlpZiAocmV0KSB7CiYjNDM7CQlzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7CiAJCW5ldGRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0OyVzOiBXYWl0IGZvciB0aW1lIHN5bmMgb3BlcmF0aW9uIHRpbWVvdXRcbiYjMzQ7LAogCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwpAQCAtMzc1LDYgJiM0MzszODQsOCBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLAogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7cHRwX2xvY2ssIGZsYWdzKTsKIAl9CiAKJiM0MzsJc3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpOwomIzQzOwogCWdldF9zbXRndGltZShwcml2LSZndDttaWksIFNNVEdfTURJT19BRERSLCAmYW1wO3NtdGdfdGltZSk7CiAJc3lzdGVtLSZndDtjeWNsZXMgPSBzbXRnX3RpbWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCmluZGV4IDYxYjZkNDVhMDJmNWQuLjc2ZTI4NjBhOTUxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaApAQCAtODcsNyAmIzQzOzg3LDcgQEAKICNkZWZpbmUgWEdNQUNfVFNJRQkJCUJJVCgxMikKICNkZWZpbmUgWEdNQUNfTFBJSUUJCQlCSVQoNSkKICNkZWZpbmUgWEdNQUNfUE1USUUJCQlCSVQoNCkKLSNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU4JCShYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFKQomIzQzOyNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU4JCShYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFIHwgWEdNQUNfVFNJRSkKICNkZWZpbmUgWEdNQUNfUXhfVFhfRkxPV19DVFJMKHgpCSgweDAwMDAwMDcwICYjNDM7ICh4KSAqIDQpCiAjZGVmaW5lIFhHTUFDX1BUCQkJR0VOTUFTSygzMSwgMTYpCiAjZGVmaW5lIFhHTUFDX1RGRQkJCUJJVCgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jCmluZGV4IGYwMmI0MzRiYmQ1MDUuLmI4NDljZWJmOWIyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMKQEAgLTExNTQsNiAmIzQzOzExNTQsNDkgQEAgc3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwl1MzIgdHNfc3RhdHVzLCBwZW5kaW5nX3NuYXBzaG90cywgYWNyX3ZhbHVlLCBjaGFubmVsOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1NjQgcHRwX3RpbWU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBSZWFkIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMgdG8gZ2V0IHRoZSBBVVggc25hcHNob3QKJiM0MzsJICogY291bnQuICBUaGlzIHJlYWQgYWxzbyBjbGVhcnMgdGhlIFRTSVMgYml0IGluCiYjNDM7CSAqIFhHTUFDX0lOVF9TVEFUVVMuCiYjNDM7CSAqIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBUU0lTCiYjNDM7CSAqIGFuZCBBVVhUU1RSSUcsIHNvIHJlbHkgb24gQVRTTlMgaW5zdGVhZC4KJiM0MzsJICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieQomIzQzOwkgKiB0aGlzIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyBubyBjb25mbGljdC4KJiM0MzsJICovCiYjNDM7CXRzX3N0YXR1cyA9IHJlYWRsKHByaXYtJmd0O2lvYWRkciAmIzQzOyBYR01BQ19USU1FU1RBTVBfU1RBVFVTKTsKJiM0MzsKJiM0MzsJaWYgKCEocHJpdi0mZ3Q7cGxhdC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RNTUFDX0ZMQUdfRVhUX1NOQVBTSE9UX0VOKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGVuZGluZ19zbmFwc2hvdHMgPSBGSUVMRF9HRVQoWEdNQUNfVElNRVNUQU1QX0FUU05TX01BU0ssIHRzX3N0YXR1cyk7CiYjNDM7CWlmICghcGVuZGluZ19zbmFwc2hvdHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFjcl92YWx1ZSA9IHJlYWRsKHByaXYtJmd0O3B0cGFkZHIgJiM0MzsgUFRQX0FDUik7CiYjNDM7CWNoYW5uZWwgPSBGSUVMRF9HRVQoUFRQX0FDUl9NQVNLLCBhY3JfdmFsdWUpOwomIzQzOwlpZiAoIWNoYW5uZWwpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWNoYW5uZWwgPSBpbG9nMihjaGFubmVsKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBlbmRpbmdfc25hcHNob3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDtwdHBfbG9jaywgZmxhZ3MpOwomIzQzOwkJc3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsICZhbXA7cHRwX3RpbWUpOwomIzQzOwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3B0cF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQlldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTOwomIzQzOwkJZXZlbnQuaW5kZXggPSBjaGFubmVsOwomIzQzOwkJZXZlbnQudGltZXN0YW1wID0gcHRwX3RpbWU7CiYjNDM7CQlwdHBfY2xvY2tfZXZlbnQocHJpdi0mZ3Q7cHRwX2Nsb2NrLCAmYW1wO2V2ZW50KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZHd4Z21hYzJfZmxleF9wcHNfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgaW5kZXgsCiAJCQkJICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSwKIAkJCQkgICAgdTMyIHN1Yl9zZWNvbmRfaW5jLCB1MzIgc3lzdGltZV9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYwppbmRleCA1MTFiMGZkNWU4MzQzLi45NzE4NTgyYjg0ODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jCkBAIC0yNTgsNyAmIzQzOzI1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgewogCQkuZG1hID0gJmFtcDtkd3hnbWFjMjEwX2RtYV9vcHMsCiAJCS5tYWMgPSAmYW1wO2R3eGdtYWMyMTBfb3BzLAogCQkudmxhbiA9ICZhbXA7ZHd4Z21hYzIxMF92bGFuX29wcywKLQkJLmh3dGltZXN0YW1wID0gJmFtcDtzdG1tYWNfcHRwLAomIzQzOwkJLmh3dGltZXN0YW1wID0gJmFtcDtkd3hnbWFjMl9wdHAsCiAJCS5wdHAgPSAmYW1wO3N0bW1hY19wdHBfY2xvY2tfb3BzLAogCQkubW9kZSA9IE5VTEwsCiAJCS50YyA9ICZhbXA7ZHdtYWM1MTBfdGNfb3BzLApAQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHsKIAkJLmRtYSA9ICZhbXA7ZHd4Z21hYzIxMF9kbWFfb3BzLAogCQkubWFjID0gJmFtcDtkd3hsZ21hYzJfb3BzLAogCQkudmxhbiA9ICZhbXA7ZHd4bGdtYWMyX3ZsYW5fb3BzLAotCQkuaHd0aW1lc3RhbXAgPSAmYW1wO3N0bW1hY19wdHAsCiYjNDM7CQkuaHd0aW1lc3RhbXAgPSAmYW1wO2R3eGdtYWMyX3B0cCwKIAkJLnB0cCA9ICZhbXA7c3RtbWFjX3B0cF9jbG9ja19vcHMsCiAJCS5tb2RlID0gTlVMTCwKIAkJLnRjID0gJmFtcDtkd21hYzUxMF90Y19vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKaW5kZXggZTYzMTdiOTRmZmY3ZC4uODE4YWIzZGFhOTFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaApAQCAtNjcxLDYgJiM0Mzs2NzEsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBuZGVzY19vcHM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHN0bW1hY19wdHA7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cDsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX21vZGVfb3BzIGNoYWluX21vZGVfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYwppbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYwpAQCAtMjc3LDMgJiM0MzsyNzcsMTUgQEAgY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwID0gewogCS5nZXRfcHRwdGltZSA9IGR3bWFjMTAwMF9nZXRfcHRwdGltZSwKIAkudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LAogfTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cCA9IHsKJiM0MzsJLmNvbmZpZ19od190c3RhbXBpbmcgPSBjb25maWdfaHdfdHN0YW1waW5nLAomIzQzOwkuaW5pdF9zeXN0aW1lID0gaW5pdF9zeXN0aW1lLAomIzQzOwkuY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50ID0gY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50LAomIzQzOwkuY29uZmlnX2FkZGVuZCA9IGNvbmZpZ19hZGRlbmQsCiYjNDM7CS5hZGp1c3Rfc3lzdGltZSA9IGFkanVzdF9zeXN0aW1lLAomIzQzOwkuZ2V0X3N5c3RpbWUgPSBnZXRfc3lzdGltZSwKJiM0MzsJLmdldF9wdHB0aW1lID0gZ2V0X3B0cHRpbWUsCiYjNDM7CS50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCwKJiM0MzsJLmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oCmluZGV4IDNmZTBlM2E4MGU4MGEuLmRhZGUwOTYxNDE2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmgKQEAgLTEwMyw2ICYjNDM7MTAzLDcgQEAgaW50IGR3bWFjMTAwMF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCiB2b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpOwogdm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpOwomIzQzO3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHN0bW1hY19wdHBfY2xvY2tfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkd21hYzEwMDBfcHRwX2Nsb2NrX29wczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdGhlcm5ldCBEcml2ZXIgVGltZXN0YW1wIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHRoZSBgc3RtbWFjYCBFdGhlcm5ldCBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBmdW5jdGlvbiwgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGUgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGlzc2VjdCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgdGhlIG5ldyBsb2dpYy4KCkZpcnN0LCBpdCByZWFkcyB0aGUgYFhHTUFDX1RJTUVTVEFNUF9TVEFUVVNgIHJlZ2lzdGVyLiBUaGlzIGlzIGtleTsgdGhpcyByZWFkICphbHNvKiBjbGVhcnMgdGhlIGBUU0lTYCBiaXQgaW4gYFhHTUFDX0lOVF9TVEFUVVNgLi4uYnV0IGl0IG1lbnRpb25zIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1pZ2h0IGhhdmUgYWxyZWFkeSBjbGVhcmVkIHRoZXNlIGJpdHMsIHNvIGl0IHJlbGllcyBvbiBgQVRTTlNgIGluc3RlYWQsIHdoaWNoIGlzIGdvb2QuIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBBVVggc25hcHNob3QgY291bnQgYW5kIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZyBzbmFwc2hvdHMgdmlhIHRoZSBgQVRTTlNgIGZpZWxkLiBJdCB0aGVuIHJlYWRzIHRoZSBgUFRQX0FDUmAgcmVnaXN0ZXIsIGV4dHJhY3RzIHRoZSBgY2hhbm5lbGAgZmllbGQgdXNpbmcgYSBtYXNrIGFuZCBgaWxvZzIoKWAsIHByZXN1bWFibHkgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBQVFAgY2hhbm5lbC4KClRoZSBjb3JlIG9mIHRoZSBsb2dpYyBpcyB3aXRoaW4gdGhhdCBgZm9yYCBsb29wLCBpdGVyYXRpbmcgdGhyb3VnaCBgcGVuZGluZ19zbmFwc2hvdHNgLiBJbnNpZGUgdGhlIGxvb3AsIGEgcmVhZCBsb2NrIGlzIGFjcXVpcmVkLCBwcm90ZWN0aW5nIHRoZSBgcHRwX3RpbWVgIHJlYWQuIFRoZW4sIGl0IHVzZXMgYHN0bW1hY19nZXRfcHRwdGltZWAgdG8gYWN0dWFsbHkgZ2V0IHRoZSBQVFAgdGltZXN0YW1wLiAgQSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgaXMgc2V0IHVwOiB0aGUgYHR5cGVgIGlzIGBQVFBfQ0xPQ0tfRVhUVFNgLCB0aGUgYGluZGV4YCBpcyBgY2hhbm5lbGAsIGFuZCBgdGltZXN0YW1wYCBpcyBzZXQuIEZpbmFsbHksIGBwdHBfY2xvY2tfZXZlbnRgIGlzIGNhbGxlZCB3aXRoIHRoaXMgYGV2ZW50YCBzdHJ1Y3R1cmUuCgpOb3csIGEgYml0IG9mIGEgY29kZSBzbWVsbC4uLmBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50O2AgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gVGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGJ1YmJsaW5nIHVwIGlzOiB3aGF0ICplbHNlKiBpcyBpbiB0aGF0IGBwdHBfY2xvY2tfZXZlbnRgIHN0cnVjdD8gQXJlIHRoZXJlIG90aGVyIGZpZWxkcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQgZGF0YSBpdCBjb250YWlucy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgb3Igd2UgbWF5IGhhdmUgYSBkYXRhIGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHB0cF9jbG9ja19ldmVudCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg9MjMxPWVudW0gcHRwX2Nsb2NrX2V2ZW50cyB7XG4tLVxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMjQ4LVxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6MjQ5OnN0cnVjdCBwdHBfY2xvY2tfZXZlbnQge1xuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMjUwLVx0aW50IHR5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCB3aXRoIGFuIGV4cGVydCYjMzk7cyBleWU6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAsIHNoYWxsIHdlPyBLbm93aW5nIHRoZSBkZWZpbml0aW9uIGluIGRldGFpbCB3aWxsIGFsbG93IGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhIHRpbWUgc3luY2hyb25pemF0aW9uIGV2ZW50IGlzIHN0cnVjdHVyZWQgYW5kIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSBldmVudHMgYXJlIHJlcHJlc2VudGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCwgd2hhdCBpbmZvcm1hdGlvbiBpcyBwYXNzZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCBpdC4gVGhlcmUgYXJlIHByb2JhYmx5IGtleSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZXZlbnQgdHlwZSAod2hldGhlciBpdOKAmXMgYSB0aW1lc3RhbXAsIGEgZGVsYXkgcmVxdWVzdCwgYSBzeW5jIGV2ZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSksIHRoZSB0aW1lc3RhbXAgaXRzZWxmIChvZiBjb3Vyc2UhKSwgYW5kIGFueSBhc3NvY2lhdGVkIGZsYWdzIG9yIHN0YXR1cyBjb2Rlcy4gSSYjMzk7bSBhbHNvIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgaWRlbnRpZmllciBmb3IgdGhlIFBUUCBjbG9jayBpbnZvbHZlZCBhbmQgZGV0YWlscyByZWxhdGluZyB0byBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlIHRpbWVyLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzLCBhbmQgYW55IFBUUC1zcGVjaWZpYyBkcml2ZXJzLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgUFRQIHRpbWVrZWVwaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDg6XHRcbiAyNDk6XHRzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IHtcbiAyNTA6XHRcdGludCB0eXBlO1xuIDI1MTpcdFx0aW50IGluZGV4O1xuIDI1MjpcdFx0dW5pb24ge1xuIDI1MzpcdFx0XHR1NjQgdGltZXN0YW1wO1xuIDI1NDpcdFx0XHRzNjQgb2Zmc2V0O1xuIDI1NTpcdFx0XHRzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgcHBzX3RpbWVzO1xuIDI1NjpcdFx0fTtcbiAyNTc6XHR9O1xuIDI1ODpcdFxuIDI1OTpcdC8qKlxuIDI2MDpcdCAqIHNjYWxlZF9wcG1fdG9fcHBiKCkgLSBjb252ZXJ0IHNjYWxlZCBwcG0gdG8gcHBiXG4gMjYxOlx0ICpcbiAyNjI6XHQgKiBAcHBtOiAgICBQYXJ0cyBwZXIgbWlsbGlvbiwgYnV0IHdpdGggYSAxNiBiaXQgYmluYXJ5IGZyYWN0aW9uYWwgZmllbGRcbiAyNjM6XHQgKi9cbiAyNjQ6XHRzdGF0aWMgaW5saW5lIGxvbmcgc2NhbGVkX3BwbV90b19wcGIobG9uZyBwcG0pXG4gMjY1Olx0e1xuIDI2NjpcdFx0LypcbiAyNjc6XHRcdCAqIFRoZSAmIzM5O2ZyZXEmIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTtzdHJ1Y3QgdGltZXgmIzM5OyBpcyBpbiBwYXJ0cyBwZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBUUCBDbG9jayBFdmVudCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGB0eXBlYCwgYGluZGV4YCwgYW5kIHRoZW4gdGhpcyB1bmlvbi4gVGhlIGludGVudCBpcyBjbGVhcjsgaXQmIzM5O3MgYSB3YXkgdG8gc3RvcmUgZWl0aGVyIGEgdGltZXN0YW1wLCBhbiBvZmZzZXQsIG9yIHNvbWUgYHBwc19ldmVudF90aW1lYCBkYXRhLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgYHRpbWVzdGFtcGAgd2hpY2ggaXMgYSBgdTY0YC4gSG93ZXZlciwgdGhhdCB1bmlvbiB3aXRoIGBwcHNfZXZlbnRfdGltZWAgaXMgZ2l2aW5nIG1lIHBhdXNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlIHNpemUgaXMgY29ycmVjdC4gSXQmIzM5O3Mgdml0YWwgdGhhdCB0aGUgdW5pb24gaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGxhcmdlc3QgcG9zc2libGUgbWVtYmVyLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBwcHNfZXZlbnRfdGltZWAgcmlnaHQgbm93IHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGdldHRpbmcgdHJ1bmNhdGVkIG9yIGNhdXNpbmcgYSBtZW1vcnkgb3ZlcnJ1bi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oPTIzPXN0cnVjdCBwcHNfc291cmNlX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oLTM0LVxuaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmg6MzU6c3RydWN0IHBwc19ldmVudF90aW1lIHtcbmluY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oLTM2LSNpZmRlZiBDT05GSUdfTlRQX1BQU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3RydWN0IHBwc19ldmVudF90aW1lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGBwcHNfZXZlbnRfdGltZWAgc3RydWN0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGp1c3QgZXhhbWluaW5nIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgc3RydWN0IGxpa2VseSBob2xkcyB0aGUgcmF3IHRpbWVzdGFtcCBpbmZvcm1hdGlvbiBmb3IgUFBTIGV2ZW50cywgcHJvYmFibHkgcmVwcmVzZW50aW5nIGEgc25hcHNob3Qgb2YgdGhlIGhhcmR3YXJlJiMzOTtzIGludGVybmFsIGNvdW50ZXIgb3IgYSB0aW1lIHNvdXJjZSBsaWtlIGEgR1BTIHJlY2VpdmVyLiBJJiMzOTttIGxvb2tpbmcgZm9yIGZpZWxkcyB0aGF0IHJlbGF0ZSB0byBzZWNvbmRzLCBuYW5vc2Vjb25kcywgb3Igb3RoZXIgdGltZS1yZWxhdGVkIGNvbXBvbmVudHMsIGFuZCBob3cgdGhlc2UgYXJlIHJlcHJlc2VudGVkLiBBcmUgdGhleSB1c2luZyBzdGFuZGFyZCB0eXBlcyBsaWtlIGB0aW1lX3RgLCBgc3RydWN0IHRpbWVzcGVjYCwgb3Igc29tZXRoaW5nIGN1c3RvbT8gSXMgdGhlcmUgYW55IGluZm9ybWF0aW9uIG9uIHdoaWNoIHRpbWUgc291cmNlIHRoZSB0aW1lc3RhbXAgY29tZXMgZnJvbSwgb3IgaWYgdGhlIHRpbWVzdGFtcHMgYXJlIHN5bmNocm9uaXplZC4gSSYjMzk7bSBhbHNvIGhvcGluZyB0aGVyZSBhcmUgc29tZSBoaW50cyBhYm91dCB0aGUgdGltZSBzY2FsZSB1c2VkIChVVEMsIFRBSSwgZXRjKSBpZiBhdmFpbGFibGUuIFRoZSB1bmRlcmx5aW5nIGRhdGEgZm9ybWF0IGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhZGF0YSBhcmUgbW9zdCBpbXBvcnRhbnQgdG8gbXkgaW50ZXJlc3QsIGFzIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlIHRpbWUgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3Bwc19rZXJuZWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUge1xuICAzNjpcdCNpZmRlZiBDT05GSUdfTlRQX1BQU1xuICAzNzpcdFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfcmF3O1xuICAzODpcdCNlbmRpZiAvKiBDT05GSUdfTlRQX1BQUyAqL1xuICAzOTpcdFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfcmVhbDtcbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdC8qIFRoZSBtYWluIHN0cnVjdCAqL1xuICA0MzpcdHN0cnVjdCBwcHNfZGV2aWNlIHtcbiAgNDQ6XHRcdHN0cnVjdCBwcHNfc291cmNlX2luZm8gaW5mbztcdFx0LyogUFNTIHNvdXJjZSBpbmZvICovXG4gIDQ1Olx0XG4gIDQ2Olx0XHRzdHJ1Y3QgcHBzX2twYXJhbXMgcGFyYW1zO1x0XHQvKiBQUFMgY3VycmVudCBwYXJhbXMgKi9cbiAgNDc6XHRcbiAgNDg6XHRcdF9fdTMyIGFzc2VydF9zZXF1ZW5jZTtcdFx0XHQvKiBQUFMgYXNzZXJ0IGV2ZW50IHNlcSAjICovXG4gIDQ5Olx0XHRfX3UzMiBjbGVhcl9zZXF1ZW5jZTtcdFx0XHQvKiBQUFMgY2xlYXIgZXZlbnQgc2VxICMgKi9cbiAgNTA6XHRcdHN0cnVjdCBwcHNfa3RpbWUgYXNzZXJ0X3R1O1xuICA1MTpcdFx0c3RydWN0IHBwc19rdGltZSBjbGVhcl90dTtcbiAgNTI6XHRcdGludCBjdXJyZW50X21vZGU7XHRcdFx0LyogUFBTIG1vZGUgYXQgZXZlbnQgdGltZSAqL1xuICA1MzpcdFxuICA1NDpcdFx0dW5zaWduZWQgaW50IGxhc3RfZXY7XHRcdFx0LyogbGFzdCBQUFMgZXZlbnQgaWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg2NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBGb290cHJpbnQgb2YgUFRQIENsb2NrIEV2ZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBwcHNfZXZlbnRfdGltZWAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGl0IGhvbGRzIG9uZSBvciB0d28gYHRpbWVzcGVjNjRgIHN0cnVjdHMuIFNpbmNlIGVhY2ggYHRpbWVzcGVjNjRgIGlzIDE2IGJ5dGVzLCB3aXRoIDggYnl0ZXMgZm9yIHNlY29uZHMgYW5kIDggYnl0ZXMgZm9yIG5hbm9zZWNvbmRzLCB0aGUgYHBwc19ldmVudF90aW1lYCBpcyBnb2luZyB0byBiZSBhdCBsZWFzdCAxNiBieXRlcywgbWF5YmUgdXAgdG8gMzIgYnl0ZXMgaWYgaXQgaG9sZHMgdHdvIG9mIHRob3NlIHRoaW5ncy4gTm93LCBsb29raW5nIGF0IHRoZSBgcHRwX2Nsb2NrX2V2ZW50YCBzdHJ1Y3R1cmUsIHRoZXJlJiMzOTtzIHRoYXQgdW5pb246CgpgYGBjCgkJdW5pb24gewoJCQl1NjQgdGltZXN0YW1wOwoJCQlzNjQgb2Zmc2V0OwoJCQlzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgcHBzX3RpbWVzOwoJCX07CmBgYAoKUmlnaHQsIGEgYHU2NCB0aW1lc3RhbXBgIGlzIGp1c3QgOCBieXRlcy4gSGVyZSYjMzk7cyB0aGUgcG90ZW50aWFsIHByb2JsZW06IGlmIGBldmVudC50aW1lc3RhbXBgIGlzIHVzZWQsIG9ubHkgdGhlIGluaXRpYWwgOCBieXRlcyBvZiB0aGF0IHVuaW9uIGFyZSBhY3R1YWxseSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtZWFucyB0aGUgb3RoZXIgOCB0byAyNCBieXRlcyBpbiB0aGUgdW5pb24gcmVtYWluIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSEKClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIHdoYXQgaGFwcGVucyB3aGVuIGBwdHBfY2xvY2tfZXZlbnQoKWAgaXMgY2FsbGVkPyBEb2VzIGl0IGNvcHkgdGhlICplbnRpcmUqIGBwdHBfY2xvY2tfZXZlbnRgIHN0cnVjdHVyZSwgb3IgZG9lcyBpdCBvbmx5IHJlYWQgc3BlY2lmaWMgZmllbGRzIGJhc2VkIG9uIHRoZSBldmVudCBgdHlwZWA/IElmIGl0IGNvcGllcyB0aGUgd2hvbGUgc3RydWN0dXJlLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWUgaGVyZSwgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCBvbmx5IHJlYWRzIHRoZSByZWxldmFudCBmaWVsZHMsIHdlJiMzOTtyZSBwcm9iYWJseSBva2F5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYHB0cF9jbG9ja19ldmVudCgpYCBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIG9uIHRoZSByZWFkIHNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcHRwX2Nsb2NrX2V2ZW50XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTUzMj1FWFBPUlRfU1lNQk9MKHB0cF9jbG9ja191bnJlZ2lzdGVyKTtcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTUzMy1cbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjUzNDp2b2lkIHB0cF9jbG9ja19ldmVudChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHAsIHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgKmV2ZW50KVxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMtNTM1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD0zNTQ9ZXh0ZXJuIGludCBwdHBfY2xvY2tfdW5yZWdpc3RlcihzdHJ1Y3QgcHRwX2Nsb2NrICpwdHApO1xuLS1cbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTM2Mi1cbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oOjM2MzpleHRlcm4gdm9pZCBwdHBfY2xvY2tfZXZlbnQoc3RydWN0IHB0cF9jbG9jayAqcHRwLFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMzY0LVx0XHRcdCAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudCk7XG4tLVxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg9NDUwPXN0YXRpYyBpbmxpbmUgaW50IHB0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBwdHBfY2xvY2sgKnB0cClcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTQ1MS17IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaDo0NTI6c3RhdGljIGlubGluZSB2b2lkIHB0cF9jbG9ja19ldmVudChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHAsXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaC00NTMtXHRcdFx0XHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFBUUCBDbG9jayBFdmVudCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHB0cF9jbG9ja19ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfY2xvY2suY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIGNsb2NrIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlIGRyaXZlciBpbnRlcnByZXRzIGFuZCByZXNwb25kcyB0byB2YXJpb3VzIHRpbWUgc3luY2hyb25pemF0aW9uIGV2ZW50cywgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRpbWVzdGFtcHMsIGludGVycnVwdHMsIGFuZCBsaWtlbHkgc29tZSBpbnRyaWNhdGUgY2FsY3VsYXRpb25zIHRvIGVuc3VyZSBhY2N1cmF0ZSB0aW1la2VlcGluZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIFBUUCBjbG9jayBhbmQgYW55IGFzc29jaWF0ZWQgbmV0d29yayBpbnRlcmZhY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGUgaW1wbGVtZW50YXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzNDpcdHZvaWQgcHRwX2Nsb2NrX2V2ZW50KHN0cnVjdCBwdHBfY2xvY2sgKnB0cCwgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqZXZlbnQpXG4gNTM1Olx0e1xuIDUzNjpcdFx0c3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqdHNldnE7XG4gNTM3Olx0XHRzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgZXZ0O1xuIDUzODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1Mzk6XHRcbiA1NDA6XHRcdHN3aXRjaCAoZXZlbnQtXHUwMDNldHlwZSkge1xuIDU0MTpcdFxuIDU0MjpcdFx0Y2FzZSBQVFBfQ0xPQ0tfQUxBUk06XG4gNTQzOlx0XHRcdGJyZWFrO1xuIDU0NDpcdFxuIDU0NTpcdFx0Y2FzZSBQVFBfQ0xPQ0tfRVhUVFM6XG4gNTQ2Olx0XHRjYXNlIFBUUF9DTE9DS19FWFRPRkY6XG4gNTQ3Olx0XHRcdC8qIEVucXVldWUgdGltZXN0YW1wIG9uIHNlbGVjdGVkIHF1ZXVlcyAqL1xuIDU0ODpcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdHAtXHUwMDNldHNldnFzX2xvY2ssIGZsYWdzKTtcbiA1NDk6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0c2V2cSwgXHUwMDI2cHRwLVx1MDAzZXRzZXZxcywgcWxpc3QpIHtcbiA1NTA6XHRcdFx0XHRpZiAodGVzdF9iaXQoKHVuc2lnbmVkIGludClldmVudC1cdTAwM2VpbmRleCwgdHNldnEtXHUwMDNlbWFzaykpXG4gNTUxOlx0XHRcdFx0XHRlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcCh0c2V2cSwgZXZlbnQpO1xuIDU1MjpcdFx0XHR9XG4gNTUzOlx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRwLVx1MDAzZXRzZXZxc19sb2NrLCBmbGFncyk7XG4gNTU0Olx0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwdHAtXHUwMDNldHNldl93cSk7XG4gNTU1Olx0XHRcdGJyZWFrO1xuIDU1NjpcdFxuIDU1NzpcdFx0Y2FzZSBQVFBfQ0xPQ0tfUFBTOlxuIDU1ODpcdFx0XHRwcHNfZ2V0X3RzKFx1MDAyNmV2dCk7XG4gNTU5Olx0XHRcdHBwc19ldmVudChwdHAtXHUwMDNlcHBzX3NvdXJjZSwgXHUwMDI2ZXZ0LCBQVFBfUFBTX0VWRU5ULCBOVUxMKTtcbiA1NjA6XHRcdFx0YnJlYWs7XG4gNTYxOlx0XG4gNTYyOlx0XHRjYXNlIFBUUF9DTE9DS19QUFNVU1I6XG4gNTYzOlx0XHRcdHBwc19ldmVudChwdHAtXHUwMDNlcHBzX3NvdXJjZSwgXHUwMDI2ZXZlbnQtXHUwMDNlcHBzX3RpbWVzLFxuIDU2NDpcdFx0XHRcdCAgUFRQX1BQU19FVkVOVCwgTlVMTCk7XG4gNTY1Olx0XHRcdGJyZWFrO1xuIDU2NjpcdFx0fVxuIDU2NzpcdH1cbiA1Njg6XHRFWFBPUlRfU1lNQk9MKHB0cF9jbG9ja19ldmVudCk7XG4gNTY5Olx0XG4gNTcwOlx0aW50IHB0cF9jbG9ja19pbmRleChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHApXG4gNTcxOlx0e1xuIDU3MjpcdFx0cmV0dXJuIHB0cC1cdTAwM2VpbmRleDtcbiA1NzM6XHR9XG4gNTc0Olx0RVhQT1JUX1NZTUJPTChwdHBfY2xvY2tfaW5kZXgpO1xuIDU3NTpcdFxuIDU3NjpcdHN0YXRpYyBpbnQgcHRwX2Nsb2NrX29mX25vZGVfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuIDU3NzpcdHtcbiA1Nzg6XHRcdGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50X25wID0gZGF0YTtcbiA1Nzk6XHRcbiA1ODA6XHRcdHJldHVybiAoZGV2LVx1MDAzZXBhcmVudCBcdTAwMjZcdTAwMjYgZGV2X29mX25vZGUoZGV2LVx1MDAzZXBhcmVudCkgPT0gcGFyZW50X25wKTtcbiA1ODE6XHR9XG4gNTgyOlx0XG4gNTgzOlx0aW50IHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIFBUUCBUaW1lc3RhbXBpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBpbiBgcHRwX2Nsb2NrX2V2ZW50YCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIFJpZ2h0LCB0aGF0JiMzOTtzIGV4dGVybmFsIHRpbWVzdGFtcGluZy4gQW5kIHRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHRzZXZxLCBldmVudClgLiBNeSBicmFpbiBpbW1lZGlhdGVseSB3YW50cyB0byB6b29tIGluIG9uIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW50byBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXh0ZXJuYWwgdGltZXN0YW1wIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCBhbmQgcXVldWVkIGZvciBwcm9jZXNzaW5nLiBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgd2hhdCBkb2VzIGl0IGRvIHdpdGggYHRzZXZxYCBhbmQgYGV2ZW50YD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBjcml0aWNhbCB0aW1lc3RhbXAtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHdpdGhpbiB0aGF0IGNhbGwuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgaW50ZWdyYXRpbmcgZXh0ZXJuYWwgaGFyZHdhcmUgdGltZXN0YW1wcyBpbnRvIHRoZSBQVFAgc3lzdGVtLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLiBUaW1lIHRvIGRlbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTQyPXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2ZyZWUoc3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2suYy00Ni1cbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjQ3OnN0YXRpYyB2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHN0cnVjdCB0aW1lc3RhbXBfZXZlbnRfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMtNDgtXHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqc3JjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggbXkgdXN1YWwgbWV0aG9kaWNhbCBwcm9jZXNzLgoKKipBbmFseXppbmcgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCoqCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGRvLiBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSBzdHJvbmcgaGludCwgYnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBXaGF0JiMzOTtzIHRoZSBzaWduYXR1cmU/IFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXR1cm4gdmFsdWVzIG9yIHNpZGUgZWZmZWN0cz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29tbWVudHMsIGlmIGFueSwgdGhhdCBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgZnVuY3Rpb24uCgpPbmNlIEkgaGF2ZSBhIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGludGVybmFsIGxvZ2ljLiBJIHdpbGwgY2hlY2sgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXMgaXQgcm9idXN0PyBEb2VzIGl0IGNoZWNrIGZvciBpbnZhbGlkIHRpbWVzdGFtcHMsIHF1ZXVlIG92ZXJmbG93LCBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkIGlmIHRoZXkgYXJpc2U/CiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IElzIGl0IHVzaW5nIGEgc2ltcGxlIHF1ZXVlLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYSBwcmlvcml0eSBxdWV1ZSBvciBhIGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmU/CiogICAqKkNvbmN1cnJlbmN5OioqIERvZXMgdGhpcyBmdW5jdGlvbiBkZWFsIHdpdGggbXVsdGl0aHJlYWRpbmcgb3IgYW55IGNvbmN1cnJlbnQgYWNjZXNzPyBJZiBzbywgd2hhdCBtZWNoYW5pc21zIGFyZSB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5PyBUaGlzIGlzIGNydWNpYWwsIHBhcnRpY3VsYXJseSBpZiB0aW1lc3RhbXBzIGFyZSBzaGFyZWQgcmVzb3VyY2VzLgoqICAgKipFZmZpY2llbmN5OioqIEhvdyBkb2VzIGl0IHBlcmZvcm0gdW5kZXIgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB1bm5lY2Vzc2FyeSBjb3B5aW5nIG9yIGxvY2tpbmcuCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBtb2R1bGVzIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlc2UgZGVwZW5kZW5jaWVzIHdlbGwtZGVmaW5lZCBhbmQgZG9jdW1lbnRlZD8KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgbWlnaHQgaW5mbHVlbmNlIHRoZSBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvci4gSSB3aWxsIGFsc28gYmUgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZXN0YW1wIGlzIGJlaW5nIHN0b3JlZCBpbiBhIHByZWRpY3RhYmxlIGFuZCByZWxpYWJsZSBmYXNoaW9uLCBhbmQgaWYgaXQgaXMgYmVpbmcgcGFzc2VkIG9mZiB0byBhbiBleHRlcm5hbCBzeXN0ZW0sIEkgd2lsbCBhbHNvIGFuYWx5emUgYW55IGFzc29jaWF0ZWQgc2VjdXJpdHkgcmlza3MgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIGNvbmNlcm5zLgoKQWZ0ZXIgdGhpcyBpbml0aWFsIGFuYWx5c2lzLCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyBpdCBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gRXNzZW50aWFsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBuZWVkIGF0dGVudGlvbj8gV2hhdCBkb2VzIGl0ICpyZWFsbHkqIG1lYW4gZm9yIGEgdGltZXN0YW1wIHRvIGJlICYjMzQ7ZXh0ZXJuYWwmIzM0Oz8gSXMgaXQganVzdCBjb21pbmcgZnJvbSBhbm90aGVyIHN5c3RlbSwgb3IgZG9lcyBpdCBpbXBseSBzcGVjaWZpYyB0aW1lIHN5bmNocm9uaXphdGlvbiBwcm90b2NvbHMgb3IgcmVxdWlyZW1lbnRzPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBkZXZlbG9wIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0mIzM5O3MgcmVsaWFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIEkmIzM5O2xsIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IHRlc3RpbmcgdG9vLCBjb25zaWRlcmluZyB3aGF0IHRoZSBlZGdlIGNhc2VzIGFyZSwgd2hhdCBmYWlsdXJlIHNjZW5hcmlvcyBhcmUgbGlrZWx5LCBhbmQgaG93IGJlc3QgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQgdW5kZXIgYSB2YXJpZXR5IG9mIGNvbmRpdGlvbnMuIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bnJhdmVsIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9jbG9jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NzpcdHN0YXRpYyB2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHN0cnVjdCB0aW1lc3RhbXBfZXZlbnRfcXVldWUgKnF1ZXVlLFxuICA0ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgKnNyYylcbiAgNDk6XHR7XG4gIDUwOlx0XHRzdHJ1Y3QgcHRwX2V4dHRzX2V2ZW50ICpkc3Q7XG4gIDUxOlx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBvZmZzZXRfdHM7XG4gIDUyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuICA1MzpcdFx0czY0IHNlY29uZHM7XG4gIDU0Olx0XHR1MzIgcmVtYWluZGVyO1xuICA1NTpcdFxuICA1NjpcdFx0aWYgKHNyYy1cdTAwM2V0eXBlID09IFBUUF9DTE9DS19FWFRUUykge1xuICA1NzpcdFx0XHRzZWNvbmRzID0gZGl2X3U2NF9yZW0oc3JjLVx1MDAzZXRpbWVzdGFtcCwgMTAwMDAwMDAwMCwgXHUwMDI2cmVtYWluZGVyKTtcbiAgNTg6XHRcdH0gZWxzZSBpZiAoc3JjLVx1MDAzZXR5cGUgPT0gUFRQX0NMT0NLX0VYVE9GRikge1xuICA1OTpcdFx0XHRvZmZzZXRfdHMgPSBuc190b190aW1lc3BlYzY0KHNyYy1cdTAwM2VvZmZzZXQpO1xuICA2MDpcdFx0XHRzZWNvbmRzID0gb2Zmc2V0X3RzLnR2X3NlYztcbiAgNjE6XHRcdFx0cmVtYWluZGVyID0gb2Zmc2V0X3RzLnR2X25zZWM7XG4gIDYyOlx0XHR9IGVsc2Uge1xuICA2MzpcdFx0XHRXQVJOKDEsIFwmIzM0OyVzOiB1bmtub3duIHR5cGUgJWRcXG5cJiMzNDssIF9fZnVuY19fLCBzcmMtXHUwMDNldHlwZSk7XG4gIDY0Olx0XHRcdHJldHVybjtcbiAgNjU6XHRcdH1cbiAgNjY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZSBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgLCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipEaXZpbmcgaW50byBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIGZyb20gdGhlIG5hbWUgd2hhdCB0aGUgZnVuY3Rpb24gKmludGVuZHMqIHRvIGRvLCBidXQgbGV0JiMzOTtzIHNlZSBob3cgaXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgdGFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhZGRpbmcgYW4gZXh0ZXJuYWwgdGltZXN0YW1wIHRvIHdoYXRldmVyIHF1ZXVlIGl0IHV0aWxpemVzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciB0aW1lIG1hbmFnZW1lbnQgcHJpbWl0aXZlcyBvZiB0aGUgc3lzdGVtLiBJIGFtIGxpa2VseSBjb25jZXJuZWQgd2l0aCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjb25jdXJyZW5jeS4gSSBhbSBhc3N1bWluZyB0aGVyZSBpcyBzb21lIHNvcnQgb2YgZXZlbnQtZHJpdmVuIG1lY2hhbmlzbSBoYXBwZW5pbmcgaGVyZSwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmljaWVudGx5IHRoZSBmdW5jdGlvbiBhY2hpZXZlcyBpdHMgZ29hbHMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgaW5lZmZpY2llbnQsIG9yIHdoZXJlIGl0IGFzc3VtZXMgYSBjZXJ0YWluIGNsb2NrIHNvdXJjZSBpcyBhdmFpbGFibGUuIFRpbWUgc3RhbXBpbmcgaXMgYSB2ZXJ5IGhhcmQgcHJvYmxlbSB0byBzb2x2ZSBnZW5lcmFsbHksIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBjYXJlZnVsbHkgdGhlIGF1dGhvcnMgdGhvdWdodCBhYm91dCBpdC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzY2hlZHVsZXIsIGlmIHRoaXMgaXMgZXZlbiBzb21ldGhpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiBkZWFscyB3aXRoLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3JrcyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY3Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDY4Olx0XG4gIDY5Olx0XHRkc3QgPSBcdTAwMjZxdWV1ZS1cdTAwM2VidWZbcXVldWUtXHUwMDNldGFpbF07XG4gIDcwOlx0XHRkc3QtXHUwMDNlaW5kZXggPSBzcmMtXHUwMDNlaW5kZXg7XG4gIDcxOlx0XHRkc3QtXHUwMDNlZmxhZ3MgPSBQVFBfRVhUVFNfRVZFTlRfVkFMSUQ7XG4gIDcyOlx0XHRkc3QtXHUwMDNldC5zZWMgPSBzZWNvbmRzO1xuICA3MzpcdFx0ZHN0LVx1MDAzZXQubnNlYyA9IHJlbWFpbmRlcjtcbiAgNzQ6XHRcdGlmIChzcmMtXHUwMDNldHlwZSA9PSBQVFBfQ0xPQ0tfRVhUT0ZGKVxuICA3NTpcdFx0XHRkc3QtXHUwMDNlZmxhZ3MgfD0gUFRQX0VYVF9PRkZTRVQ7XG4gIDc2Olx0XG4gIDc3Olx0XHQvKiBCb3RoIFdSSVRFX09OQ0UoKSBhcmUgcGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gcXVldWVfY250KCkgKi9cbiAgNzg6XHRcdGlmICghcXVldWVfZnJlZShxdWV1ZSkpXG4gIDc5Olx0XHRcdFdSSVRFX09OQ0UocXVldWUtXHUwMDNlaGVhZCwgKHF1ZXVlLVx1MDAzZWhlYWQgJiM0MzsgMSkgJSBQVFBfTUFYX1RJTUVTVEFNUFMpO1xuICA4MDpcdFxuICA4MTpcdFx0V1JJVEVfT05DRShxdWV1ZS1cdTAwM2V0YWlsLCAocXVldWUtXHUwMDNldGFpbCAmIzQzOyAxKSAlIFBUUF9NQVhfVElNRVNUQU1QUyk7XG4gIDgyOlx0XG4gIDgzOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0LyogcG9zaXggY2xvY2sgaW1wbGVtZW50YXRpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWtzKioKCk9rYXksIHNvIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCAqb25seSogY2FyZXMgYWJvdXQgYHNyYy0mZ3Q7dHlwZWAsIGBzcmMtJmd0O3RpbWVzdGFtcGAsIGFuZCBgc3JjLSZndDtpbmRleGAuIEV4Y2VsbGVudCEgVGhhdCBtZWFucyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW9uIG1lbWJlcnMgd2l0aGluIHRoZSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgYXJlIGVmZmVjdGl2ZWx5IGlycmVsZXZhbnQuIFRoZXkgYXJlbiYjMzk7dCBjb3BpZWQsIHRoZXkgYXJlbiYjMzk7dCB1c2VkLiBNeSBpbml0aWFsIGNvbmNlcm4gYWJvdXQgYSBsZWFrIHRoZXJlIGlzIHVuZm91bmRlZCwgd2hpY2ggaXMgZ3JlYXQgbmV3cy4KCkJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBXaGVyZSBlbHNlIGlzIHRoaXMgYGV2ZW50YCBzdHJ1Y3R1cmUgdXNlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlOgoKSW4gdGhlIGBwdHBfY2xvY2tfZXZlbnRgIGZ1bmN0aW9uLCBpdCBhbHNvIHVzZXMgYGV2ZW50LSZndDtpbmRleGAgaW4gYSBsb29wIHdpdGggdGhlIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBzYW1lIHNpdHVhdGlvbjsgbm8gb3RoZXIgZmllbGRzIGFyZSB1c2VkLiBTbyBzdGlsbCBzYWZlIHRoZXJlIQoKT2theSwgb25lIG1vcmUgYXJlYSB0byBpbnZlc3RpZ2F0ZSDigJMgd2hhdCBhYm91dCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGA/IEhlcmUsIHRoZXkgY29uc3RydWN0IHRoZSBgZXZlbnRgIHN0cnVjdHVyZSBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSBgZXZlbnQudGltZXN0YW1wYCBjb21lcyBmcm9tIGBzdG1tYWNfZ2V0X3B0cHRpbWVgLiBCdXQgaXMgYHB0cF90aW1lYCAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBhc3NpZ25lZCB0byBgZXZlbnQudGltZXN0YW1wYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSWYgdGhhdCYjMzk7cyBpbml0aWFsaXplZCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgc3RtbWFjX2dldF9wdHB0aW1lXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUaW1pbmcgRnVuY3Rpb24gUXVlcnkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aW1pbmcsIG1vc3QgbGlrZWx5IFByZWNpc2UgVGltZSBQcm90b2NvbCAoUFRQKSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlci4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsOiBgc3RtbWFjX2dldF9wdHB0aW1lYC4gQnV0LCB3YWl0Li4uIGNvdWxkIGl0IGJlIGEgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGV4cGFuZHMgdG8gc29tZXRoaW5nIGVsc2U/IFRoYXQmIzM5O3MgY29tbW9uIGZvciBlZmZpY2llbmN5IG9yIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGVzcGVjaWFsbHkgYXQgdGhpcyBsb3cgbGV2ZWwuCgpUaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5LiBUaGUgYmVzdCBtb3ZlIG5vdyBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIGlzIGEgZnVuY3Rpb24gd2l0aCBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uLCBvciBpZiBpdCYjMzk7cyBhIG1hY3JvIHRoYXQgbWF5IHBlcmZvcm0gb3RoZXIgdGhpbmdzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19nZXRfcHRwdGltZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTM1OD1zdGF0aWMgaW50IGludGVsX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ0Ni1cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NDc6XHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwdHBhZGRyLCBcdTAwMjZwdHBfdGltZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ0OC1cdFx0KmRldmljZSA9IG5zX3RvX2t0aW1lKHB0cF90aW1lKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9Mjk0PXN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTM4MS1cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjM4MjpcdFx0c3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zODMtXHRcdCpkZXZpY2UgPSBuc190b19rdGltZShwdHBfdGltZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MjM9dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NDAtXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmM6NTQxOlx0XHRzdG1tYWNfZ2V0X3B0cHRpbWUocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCBcdTAwMjZwdHBfdGltZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU0Mi1cdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNTc9dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTE4OS1cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjExOTA6XHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTkxLVx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NDk2PXN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC01MjEtXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIHB0cCwgZ2V0X3N5c3RpbWUsIF9fYXJncylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo1MjI6I2RlZmluZSBzdG1tYWNfZ2V0X3B0cHRpbWUoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTIzLVx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBwdHAsIGdldF9wdHB0aW1lLCBfX2FyZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ5CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDI1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBQYXRjaDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIERldGVjdGVkKioKCk15IGFuYWx5c2lzIGJlZ2lucyBieSBleGFtaW5pbmcgdGhlIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIG1hY3JvLCB3aGljaCBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGBwdHBfdGltZWAgdmFyaWFibGUuIEkgdGhlbiBtb3ZlIG9uIHRvIHNjcnV0aW5pemluZyB0aGUgcGF0Y2ggaXRzZWxmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBzbXRnX2Nyb3NzdHN0YW1wYCBmdW5jdGlvbiBhbmQgdGhlIGludGVycnVwdCBtYXNraW5nIGFuZCB1bm1hc2tpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGBYR01BQ19UU0lFYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggaXMgYWJvdXQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBhbiBpbnRlcnJ1cHQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRpbWVzdGFtcCBwb2xsaW5nLgoKTmV4dCwgSSBpZGVudGlmeSB0aGUgY3JpdGljYWwgcGFydCBvZiB0aGUgcGF0Y2g6IHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLiBUaGlzIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgcmVnaXN0ZXJzLCByZXRyaWV2aW5nIGEgdGltZXN0YW1wLCBhbmQgcGFzc2luZyBpdCB0byBgcHRwX2Nsb2NrX2V2ZW50YC4gSSYjMzk7dmUgY2FyZWZ1bGx5IGFuYWx5emVkIGhvdyB0aGUgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnRgIGlzIHVzZWQuICBTcGVjaWZpY2FsbHksIEkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGxvY2FsbHkgb24gdGhlIHN0YWNrLCBhbmQgd2hpbGUgb25seSBhIHN1YnNldCBvZiBpdHMgZmllbGRzICh0eXBlLCBpbmRleCwgdGltZXN0YW1wKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgcHRwX2Nsb2NrX2V2ZW50YCAqb25seSogcmVhZHMgdGhlc2UgaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgcGFkZGluZyBvciBvdGhlciB1bmlvbiBmaWVsZHMgYXJlIG5vdCB1dGlsaXplZC4KCk15IGludmVzdGlnYXRpb24gb2YgdGhlIGNhbGwgdG8gYHB0cF9jbG9ja19ldmVudGAgY29uZmlybXMgdGhpcy4gIFRoZSBjb2RlIGluIGBwdHBfY2xvY2tfZXZlbnRgIG9ubHkgcmVhZHMgYGV2ZW50LSZndDtpbmRleGAuICBUaGUgZnVuY3Rpb24gYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBpcyB0aGVuIGNhbGxlZCBhbmQgcmVhZHMgYHNyYy0mZ3Q7dHlwZWAsIGBzcmMtJmd0O3RpbWVzdGFtcGAsIGFuZCBgc3JjLSZndDtpbmRleGAgYnV0IG5vIG90aGVyIHBhcnRzIG9mIHRoZSBzdHJ1Y3QuICBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBhdCBhbnkgc3RhZ2UuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNhZ2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhpc3RzIGluIHRoZSBjb250cm9sIGZsb3cuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCBoZXJlLgoKRmluYWxseSwgSSByZXZpZXdlZCB0aGUgY2hhbmdlIHRvIHRoZSBgaHd0aW1lc3RhbXBgIG9wZXJhdGlvbnMsIGNoYW5naW5nIHRoZSBwb2ludGVyIHRvIGBkd3hnbWFjMl9wdHBgLiBUaGlzIGFwcGVhcnMgdG8gYmUgc2ltcGx5IHRoZSBhc3NpZ25tZW50IG9mIGEgZnVuY3Rpb24gcG9pbnRlciwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzay4KCkluIGNvbmNsdXNpb24sIGFmdGVyIGEgbWV0aWN1bG91cyBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgdXNhZ2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCB3b3VsZCB3YXJyYW50IGZ1cnRoZXIgS01TQU4gYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgd2hpY2ggYWxsb2NhdGVzIGEgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIG9uIHRoZSBzdGFjay4gV2hpbGUgb25seSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgYHRpbWVzdGFtcGAgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZCAobGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdW5pb24vcGFkZGluZyB1bmluaXRpYWxpemVkKSwgdGhlIGNhbGxlZSBgcHRwX2Nsb2NrX2V2ZW50KClgIG9ubHkgcmVhZHMgdGhlc2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIGZpZWxkcyB3aGVuIHByb2Nlc3NpbmcgYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBJdCBkb2VzIG5vdCBjb3B5IHRoZSBlbnRpcmUgc3RydWN0dXJlIHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgY29udHJvbCBmbG93LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowMzoyOS41NjA5MDA1NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0ODkzNzU0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiLFxuICAgIFwiRFdNQUNfU09DRlBHQVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgd2hpY2ggYWxsb2NhdGVzIGEgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIG9uIHRoZSBzdGFjay4gV2hpbGUgb25seSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgYHRpbWVzdGFtcGAgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZCAobGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdW5pb24vcGFkZGluZyB1bmluaXRpYWxpemVkKSwgdGhlIGNhbGxlZSBgcHRwX2Nsb2NrX2V2ZW50KClgIG9ubHkgcmVhZHMgdGhlc2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIGZpZWxkcyB3aGVuIHByb2Nlc3NpbmcgYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBJdCBkb2VzIG5vdCBjb3B5IHRoZSBlbnRpcmUgc3RydWN0dXJlIHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgY29udHJvbCBmbG93LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXIncyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGxvZ2ljIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKFhHTUFDX1RTSUUpIGR1cmluZyB0aGUgc25hcHNob3QgRklGTyByZWFkIGluIGBzbXRnX2Nyb3NzdHN0YW1wYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIGR3eGdtYWMyL2R3eGxnbWFjMiBNQUNzIHRvIGhhbmRsZSBBVVggc25hcHNob3RzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIFBUUCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjI5LjU2MDkwNTU5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTg1MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZkMmFmNGM2MjI4NGU0MGMxOTA2YzI2YThkZGVmMzdjMjM0ZmNmMmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTY6MDM6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXFxuaW5kZXggMWQ3ZjBhNTdkMjg4OS4uYTRkMDBiZjgxNDIzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG5AQCAtMzEwLDYgKzMxMCwxMyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxcbiBcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbitcXHQvKiBUaGUgWEdNQUMgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBUU0lTIGJ5IHJlYWRpbmdcXG4rXFx0ICogWEdNQUNfVElNRVNUQU1QX1NUQVRVUywgd2hpY2ggd291bGQgcmFjZSB3aXRoIHRoZSBUU0lTIHBvbGxcXG4rXFx0ICogYmVsb3cuICBNYXNrIFhHTUFDX1RTSUUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtdGltZXN0YW1wXFxuK1xcdCAqIHNvIHRoZSBoYW5kbGVyIGRvZXMgbm90IHJ1biB3aGlsZSB3ZSBvd24gdGhlIHNuYXBzaG90IEZJRk8uXFxuK1xcdCAqL1xcbitcXHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgWEdNQUNfVFNJRSwgMCk7XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VhdXhfdHNfbG9jayk7XFxuIFxcdC8qIEVuYWJsZSBJbnRlcm5hbCBzbmFwc2hvdCB0cmlnZ2VyICovXFxuIFxcdGFjcl92YWx1ZSA9IHJlYWRsKHB0cGFkZHIgKyBQVFBfQUNSKTtcXG5AQCAtMzI5LDYgKzMzNiw3IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWF1eF90c19sb2NrKTtcXG4rXFx0XFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHR3cml0ZWwoYWNyX3ZhbHVlLCBwdHBhZGRyICsgUFRQX0FDUik7XFxuQEAgLTM1Myw2ICszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxcbiBcXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlaW9hZGRyICsgWEdNQUNfSU5UX1NUQVRVUywgdixcXG4gXFx0XFx0XFx0XFx0ICh2IFxcdTAwMjYgWEdNQUNfSU5UX1RTSVMpLCAxMDAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldCkge1xcbitcXHRcXHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiJXM6IFdhaXQgZm9yIHRpbWUgc3luYyBvcGVyYXRpb24gdGltZW91dFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0zNzUsNiArMzg0LDggQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcXG4gXFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4rXFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xcbitcXG4gXFx0Z2V0X3NtdGd0aW1lKHByaXYtXFx1MDAzZW1paSwgU01UR19NRElPX0FERFIsIFxcdTAwMjZzbXRnX3RpbWUpO1xcbiBcXHRzeXN0ZW0tXFx1MDAzZWN5Y2xlcyA9IHNtdGdfdGltZTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXFxuaW5kZXggNjFiNmQ0NWEwMmY1ZC4uNzZlMjg2MGE5NTE3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxcbkBAIC04Nyw3ICs4Nyw3IEBAXFxuICNkZWZpbmUgWEdNQUNfVFNJRVxcdFxcdFxcdEJJVCgxMilcXG4gI2RlZmluZSBYR01BQ19MUElJRVxcdFxcdFxcdEJJVCg1KVxcbiAjZGVmaW5lIFhHTUFDX1BNVElFXFx0XFx0XFx0QklUKDQpXFxuLSNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU5cXHRcXHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSlcXG4rI2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlxcdFxcdChYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFIHwgWEdNQUNfVFNJRSlcXG4gI2RlZmluZSBYR01BQ19ReF9UWF9GTE9XX0NUUkwoeClcXHQoMHgwMDAwMDA3MCArICh4KSAqIDQpXFxuICNkZWZpbmUgWEdNQUNfUFRcXHRcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4gI2RlZmluZSBYR01BQ19URkVcXHRcXHRcXHRCSVQoMSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXFxuaW5kZXggZjAyYjQzNGJiZDUwNS4uYjg0OWNlYmY5YjI5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcXG5AQCAtMTE1NCw2ICsxMTU0LDQ5IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZ2V0X21hY190eF90aW1lc3RhbXAoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHU2NCAqdHMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdHUzMiB0c19zdGF0dXMsIHBlbmRpbmdfc25hcHNob3RzLCBhY3JfdmFsdWUsIGNoYW5uZWw7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHU2NCBwdHBfdGltZTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBSZWFkIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMgdG8gZ2V0IHRoZSBBVVggc25hcHNob3RcXG4rXFx0ICogY291bnQuICBUaGlzIHJlYWQgYWxzbyBjbGVhcnMgdGhlIFRTSVMgYml0IGluXFxuK1xcdCAqIFhHTUFDX0lOVF9TVEFUVVMuXFxuK1xcdCAqIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBUU0lTXFxuK1xcdCAqIGFuZCBBVVhUU1RSSUcsIHNvIHJlbHkgb24gQVRTTlMgaW5zdGVhZC5cXG4rXFx0ICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieVxcbitcXHQgKiB0aGlzIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyBubyBjb25mbGljdC5cXG4rXFx0ICovXFxuK1xcdHRzX3N0YXR1cyA9IHJlYWRsKHByaXYtXFx1MDAzZWlvYWRkciArIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMpO1xcbitcXG4rXFx0aWYgKCEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwZW5kaW5nX3NuYXBzaG90cyA9IEZJRUxEX0dFVChYR01BQ19USU1FU1RBTVBfQVRTTlNfTUFTSywgdHNfc3RhdHVzKTtcXG4rXFx0aWYgKCFwZW5kaW5nX3NuYXBzaG90cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YWNyX3ZhbHVlID0gcmVhZGwocHJpdi1cXHUwMDNlcHRwYWRkciArIFBUUF9BQ1IpO1xcbitcXHRjaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTtcXG4rXFx0aWYgKCFjaGFubmVsKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGNoYW5uZWwgPSBpbG9nMihjaGFubmVsKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZW5kaW5nX3NuYXBzaG90czsgaSsrKSB7XFxuK1xcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRzdG1tYWNfZ2V0X3B0cHRpbWUocHJpdiwgcHJpdi1cXHUwMDNlcHRwYWRkciwgXFx1MDAyNnB0cF90aW1lKTtcXG4rXFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdGV2ZW50LnR5cGUgPSBQVFBfQ0xPQ0tfRVhUVFM7XFxuK1xcdFxcdGV2ZW50LmluZGV4ID0gY2hhbm5lbDtcXG4rXFx0XFx0ZXZlbnQudGltZXN0YW1wID0gcHRwX3RpbWU7XFxuK1xcdFxcdHB0cF9jbG9ja19ldmVudChwcml2LVxcdTAwM2VwdHBfY2xvY2ssIFxcdTAwMjZldmVudCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBkd3hnbWFjMl9mbGV4X3Bwc19jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBpbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiBzdWJfc2Vjb25kX2luYywgdTMyIHN5c3RpbWVfZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xcbmluZGV4IDUxMWIwZmQ1ZTgzNDMuLjk3MTg1ODJiODQ4MDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXFxuQEAgLTI1OCw3ICsyNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4gXFx0XFx0LmRtYSA9IFxcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXFxuIFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXFxuIFxcdFxcdC52bGFuID0gXFx1MDAyNmR3eGdtYWMyMTBfdmxhbl9vcHMsXFxuLVxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZzdG1tYWNfcHRwLFxcbitcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2ZHd4Z21hYzJfcHRwLFxcbiBcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiBcXHRcXHQubW9kZSA9IE5VTEwsXFxuIFxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4gXFx0XFx0LmRtYSA9IFxcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXFxuIFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4bGdtYWMyX29wcyxcXG4gXFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxcbi1cXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2c3RtbWFjX3B0cCxcXG4rXFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNmR3eGdtYWMyX3B0cCxcXG4gXFx0XFx0LnB0cCA9IFxcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcXG4gXFx0XFx0Lm1vZGUgPSBOVUxMLFxcbiBcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcXG5pbmRleCBlNjMxN2I5NGZmZjdkLi44MThhYjNkYWE5MWM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbkBAIC02NzEsNiArNjcxLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgbmRlc2Nfb3BzO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cDtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgY2hhaW5fbW9kZV9vcHM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcXG5pbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcXG5AQCAtMjc3LDMgKzI3NywxNSBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3bWFjMTAwMF9wdHAgPSB7XFxuIFxcdC5nZXRfcHRwdGltZSA9IGR3bWFjMTAwMF9nZXRfcHRwdGltZSxcXG4gXFx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdCxcXG4gfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xcbitcXHQuY29uZmlnX2h3X3RzdGFtcGluZyA9IGNvbmZpZ19od190c3RhbXBpbmcsXFxuK1xcdC5pbml0X3N5c3RpbWUgPSBpbml0X3N5c3RpbWUsXFxuK1xcdC5jb25maWdfc3ViX3NlY29uZF9pbmNyZW1lbnQgPSBjb25maWdfc3ViX3NlY29uZF9pbmNyZW1lbnQsXFxuK1xcdC5jb25maWdfYWRkZW5kID0gY29uZmlnX2FkZGVuZCxcXG4rXFx0LmFkanVzdF9zeXN0aW1lID0gYWRqdXN0X3N5c3RpbWUsXFxuK1xcdC5nZXRfc3lzdGltZSA9IGdldF9zeXN0aW1lLFxcbitcXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcXG4rXFx0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxcbitcXHQuaHd0c3RhbXBfY29ycmVjdF9sYXRlbmN5ID0gaHd0c3RhbXBfY29ycmVjdF9sYXRlbmN5LFxcbit9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcXG5pbmRleCAzZmUwZTNhODBlODBhLi5kYWRlMDk2MTQxNjNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxcbkBAIC0xMDMsNiArMTAzLDcgQEAgaW50IGR3bWFjMTAwMF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbiBcXG4gdm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKTtcXG4gdm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gc3RtbWFjX3B0cF9jbG9ja19vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZHdtYWMxMDAwX3B0cF9jbG9ja19vcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjMwLjk4MzUwODcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNjkzMTkyMjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19TT0NGUEdBXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdG1tYWMgZHJpdmVyJ3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDJhZjRjNjIyODRlNDBjMTkwNmMyNmE4ZGRlZjM3YzIzNGZjZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTY6MDM6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbmluZGV4IDFkN2YwYTU3ZDI4ODkuLmE0ZDAwYmY4MTQyMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuQEAgLTMxMCw2ICszMTAsMTMgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTilcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbitcdC8qIFRoZSBYR01BQyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgY2xlYXJzIFRTSVMgYnkgcmVhZGluZ1xuK1x0ICogWEdNQUNfVElNRVNUQU1QX1NUQVRVUywgd2hpY2ggd291bGQgcmFjZSB3aXRoIHRoZSBUU0lTIHBvbGxcbitcdCAqIGJlbG93LiAgTWFzayBYR01BQ19UU0lFIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLXRpbWVzdGFtcFxuK1x0ICogc28gdGhlIGhhbmRsZXIgZG9lcyBub3QgcnVuIHdoaWxlIHdlIG93biB0aGUgc25hcHNob3QgRklGTy5cbitcdCAqL1xuK1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIFhHTUFDX1RTSUUsIDApO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWF1eF90c19sb2NrKTtcbiBcdC8qIEVuYWJsZSBJbnRlcm5hbCBzbmFwc2hvdCB0cmlnZ2VyICovXG4gXHRhY3JfdmFsdWUgPSByZWFkbChwdHBhZGRyICsgUFRQX0FDUik7XG5AQCAtMzI5LDYgKzMzNiw3IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXV4X3RzX2xvY2spO1xuK1x0XHRzdG1tYWNfbWFjX2lycV9tb2RpZnkocHJpdiwgMCwgWEdNQUNfVFNJRSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0d3JpdGVsKGFjcl92YWx1ZSwgcHRwYWRkciArIFBUUF9BQ1IpO1xuQEAgLTM1Myw2ICszNjEsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlaW9hZGRyICsgWEdNQUNfSU5UX1NUQVRVUywgdixcbiBcdFx0XHRcdCAodiBcdTAwMjYgWEdNQUNfSU5UX1RTSVMpLCAxMDAsIDEwMDAwKTtcbiBcdGlmIChyZXQpIHtcbitcdFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcIiVzOiBXYWl0IGZvciB0aW1lIHN5bmMgb3BlcmF0aW9uIHRpbWVvdXRcXG5cIixcbiBcdFx0XHQgICBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzc1LDYgKzM4NCw4IEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuK1x0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuK1xuIFx0Z2V0X3NtdGd0aW1lKHByaXYtXHUwMDNlbWlpLCBTTVRHX01ESU9fQUREUiwgXHUwMDI2c210Z190aW1lKTtcbiBcdHN5c3RlbS1cdTAwM2VjeWNsZXMgPSBzbXRnX3RpbWU7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbmluZGV4IDYxYjZkNDVhMDJmNWQuLjc2ZTI4NjBhOTUxN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5AQCAtODcsNyArODcsNyBAQFxuICNkZWZpbmUgWEdNQUNfVFNJRVx0XHRcdEJJVCgxMilcbiAjZGVmaW5lIFhHTUFDX0xQSUlFXHRcdFx0QklUKDUpXG4gI2RlZmluZSBYR01BQ19QTVRJRVx0XHRcdEJJVCg0KVxuLSNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU5cdFx0KFhHTUFDX0xQSUlFIHwgWEdNQUNfUE1USUUpXG4rI2RlZmluZSBYR01BQ19JTlRfREVGQVVMVF9FTlx0XHQoWEdNQUNfTFBJSUUgfCBYR01BQ19QTVRJRSB8IFhHTUFDX1RTSUUpXG4gI2RlZmluZSBYR01BQ19ReF9UWF9GTE9XX0NUUkwoeClcdCgweDAwMDAwMDcwICsgKHgpICogNClcbiAjZGVmaW5lIFhHTUFDX1BUXHRcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSBYR01BQ19URkVcdFx0XHRCSVQoMSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbmluZGV4IGYwMmI0MzRiYmQ1MDUuLmI4NDljZWJmOWIyOWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuY1xuQEAgLTExNTQsNiArMTE1NCw0OSBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2dldF9tYWNfdHhfdGltZXN0YW1wKHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmh3LCB1NjQgKnRzKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0dTMyIHRzX3N0YXR1cywgcGVuZGluZ19zbmFwc2hvdHMsIGFjcl92YWx1ZSwgY2hhbm5lbDtcbitcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTY0IHB0cF90aW1lO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBSZWFkIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMgdG8gZ2V0IHRoZSBBVVggc25hcHNob3RcbitcdCAqIGNvdW50LiAgVGhpcyByZWFkIGFsc28gY2xlYXJzIHRoZSBUU0lTIGJpdCBpblxuK1x0ICogWEdNQUNfSU5UX1NUQVRVUy5cbitcdCAqIFRYIHRpbWVzdGFtcCBwb2xsaW5nIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBUU0lTXG4rXHQgKiBhbmQgQVVYVFNUUklHLCBzbyByZWx5IG9uIEFUU05TIGluc3RlYWQuXG4rXHQgKiBUWFRTQyBpcyBjbGVhcmVkIGJ5IFhHTUFDX1RYVElNRVNUQU1QX1NFQywgbm90IGJ5XG4rXHQgKiB0aGlzIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyBubyBjb25mbGljdC5cbitcdCAqL1xuK1x0dHNfc3RhdHVzID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgKyBYR01BQ19USU1FU1RBTVBfU1RBVFVTKTtcbitcbitcdGlmICghKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfRVhUX1NOQVBTSE9UX0VOKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGVuZGluZ19zbmFwc2hvdHMgPSBGSUVMRF9HRVQoWEdNQUNfVElNRVNUQU1QX0FUU05TX01BU0ssIHRzX3N0YXR1cyk7XG4rXHRpZiAoIXBlbmRpbmdfc25hcHNob3RzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhY3JfdmFsdWUgPSByZWFkbChwcml2LVx1MDAzZXB0cGFkZHIgKyBQVFBfQUNSKTtcbitcdGNoYW5uZWwgPSBGSUVMRF9HRVQoUFRQX0FDUl9NQVNLLCBhY3JfdmFsdWUpO1xuK1x0aWYgKCFjaGFubmVsKVxuK1x0XHRyZXR1cm47XG4rXHRjaGFubmVsID0gaWxvZzIoY2hhbm5lbCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZW5kaW5nX3NuYXBzaG90czsgaSsrKSB7XG4rXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbitcdFx0c3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHByaXYtXHUwMDNlcHRwYWRkciwgXHUwMDI2cHRwX3RpbWUpO1xuK1x0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbitcbitcdFx0ZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUztcbitcdFx0ZXZlbnQuaW5kZXggPSBjaGFubmVsO1xuK1x0XHRldmVudC50aW1lc3RhbXAgPSBwdHBfdGltZTtcbitcdFx0cHRwX2Nsb2NrX2V2ZW50KHByaXYtXHUwMDNlcHRwX2Nsb2NrLCBcdTAwMjZldmVudCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHd4Z21hYzJfZmxleF9wcHNfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgaW5kZXgsXG4gXHRcdFx0XHQgICAgc3RydWN0IHN0bW1hY19wcHNfY2ZnICpjZmcsIGJvb2wgZW5hYmxlLFxuIFx0XHRcdFx0ICAgIHUzMiBzdWJfc2Vjb25kX2luYywgdTMyIHN5c3RpbWVfZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG5pbmRleCA1MTFiMGZkNWU4MzQzLi45NzE4NTgyYjg0ODA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcbkBAIC0yNTgsNyArMjU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG4gXHRcdC5kbWEgPSBcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXG4gXHRcdC5tYWMgPSBcdTAwMjZkd3hnbWFjMjEwX29wcyxcbiBcdFx0LnZsYW4gPSBcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxuLVx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuK1x0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd3hnbWFjMl9wdHAsXG4gXHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiBcdFx0Lm1vZGUgPSBOVUxMLFxuIFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5AQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuIFx0XHQuZG1hID0gXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxuIFx0XHQubWFjID0gXHUwMDI2ZHd4bGdtYWMyX29wcyxcbiBcdFx0LnZsYW4gPSBcdTAwMjZkd3hsZ21hYzJfdmxhbl9vcHMsXG4tXHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNnN0bW1hY19wdHAsXG4rXHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNmR3eGdtYWMyX3B0cCxcbiBcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuIFx0XHQubW9kZSA9IE5VTEwsXG4gXHRcdC50YyA9IFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbmluZGV4IGU2MzE3Yjk0ZmZmN2QuLjgxOGFiM2RhYTkxYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuQEAgLTY3MSw2ICs2NzEsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBuZGVzY19vcHM7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgc3RtbWFjX3B0cDtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd21hYzEwMDBfcHRwO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cDtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyByaW5nX21vZGVfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX21vZGVfb3BzIGNoYWluX21vZGVfb3BzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbmluZGV4IGI5YTk4NWZhNzcyYzkuLjlkN2QyNDI1OWFiZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbkBAIC0yNzcsMyArMjc3LDE1IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cCA9IHtcbiBcdC5nZXRfcHRwdGltZSA9IGR3bWFjMTAwMF9nZXRfcHRwdGltZSxcbiBcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQsXG4gfTtcbitcbitjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3eGdtYWMyX3B0cCA9IHtcbitcdC5jb25maWdfaHdfdHN0YW1waW5nID0gY29uZmlnX2h3X3RzdGFtcGluZyxcbitcdC5pbml0X3N5c3RpbWUgPSBpbml0X3N5c3RpbWUsXG4rXHQuY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50ID0gY29uZmlnX3N1Yl9zZWNvbmRfaW5jcmVtZW50LFxuK1x0LmNvbmZpZ19hZGRlbmQgPSBjb25maWdfYWRkZW5kLFxuK1x0LmFkanVzdF9zeXN0aW1lID0gYWRqdXN0X3N5c3RpbWUsXG4rXHQuZ2V0X3N5c3RpbWUgPSBnZXRfc3lzdGltZSxcbitcdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxuK1x0LnRpbWVzdGFtcF9pbnRlcnJ1cHQgPSBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0LFxuK1x0Lmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSxcbit9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxuaW5kZXggM2ZlMGUzYTgwZTgwYS4uZGFkZTA5NjE0MTYzYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oXG5AQCAtMTAzLDYgKzEwMyw3IEBAIGludCBkd21hYzEwMDBfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiBcbiB2b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xuIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHN0bW1hY19wdHBfY2xvY2tfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gZHdtYWMxMDAwX3B0cF9jbG9ja19vcHM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowMzozMC45ODM1MTAxMDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcwNTYxMDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYHN0bW1hY2AgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgWEdNQUMgdmFyaWFudCAoZHd4Z21hYzIgYW5kIGR3eGxnbWFjMikgYW5kIHRoZSBoYW5kbGluZyBvZiB0aW1lc3RhbXBzLiAgSXQgYWRkcyBhIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgbW9kaWZpZXMgc29tZSBrZXkgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuICBTcGVjaWZpY2FsbHksIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgd2l0aCBRRU1VP1xuXG5gc3RtbWFjYCBpcyBTVE1pY3JvZWxlY3Ryb25pY3MnIGRyaXZlciwgcmlnaHQ/IENvdmVycyBhIHJhbmdlIG9mIEV0aGVybmV0IGNvbnRyb2xsZXJzLiAgUUVNVSBwcm92aWRlcyBhIHZhcmlldHkgb2YgZW11bGF0ZWQgbmV0d29yayBjYXJkcywgYnV0IGRvZXMgaXQgaW5jbHVkZSBhbiAqYHN0bW1hY2AqIGVtdWxhdGlvbj8gIFRoYXQncyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uXG5cbkxldCBtZSB0aGluay4uLiBJcyB0aGVyZSBhIFBDSSBkcml2ZXIgZm9yIGBzdG1tYWNgPyBZZXAsIHRoZXJlIGlzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jYC4gR29vZCwgdGhhdCdzIGEga2V5IGNsdWUuIElmIHRoZXJlJ3MgYSBQQ0kgZHJpdmVyLCBpdCAqbWlnaHQqIGJlIHByb2JlYWJsZSBpbiBRRU1VLiAgSSBuZWVkIHRvIGNoZWNrIHdoYXQgUENJIElEcyBgc3RtbWFjX3BjaS5jYCBiaW5kcyB0by4gIFRoYXQncyBob3cgSSBjYW4gdGVsbCBpZiBJIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJIGRvbid0IGhhdmUgdGhlIFFFTVUgc291cmNlIGxvY2FsbHksIGJ1dCB0aGUgcGF0Y2ggY29udGV4dCBnaXZlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblFFTVUgaW5jbHVkZXMgYSBidW5jaCBvZiBuZXR3b3JrIGVtdWxhdGlvbjogYGlteF9mZWNgLCBgY2FkZW5jZV9nZW1gLCBgZTEwMDBgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgaWdiYCwgYW5kIHRoZSBsaWtlLiBJdCdzIGdvdCBhbiBgeGdtYWMuY2AhIFdhaXQuIGB4Z21hY2A/IElzIHRoYXQgYHN0bW1hY2A/ICBNaWdodCBiZSBhIHJlbGF0ZWQgdmFyaWFudCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5gc3RtbWFjYCBpcyBjb21tb24gaW4gbWFueSBBUk0gU29Dcy4gUUVNVSBlbXVsYXRlcyBzZXZlcmFsIEFSTSBtYWNoaW5lcy4gSXQncyBhIHBvc3NpYmlsaXR5LiBgYWxsd2lubmVyLXN1bjhpLWVtYWNgPyBOb3BlLCBkaWZmZXJlbnQuIGBpbXhfZmVjYD8gTm8uIGBjYWRlbmNlX2dlbWA/IFN0aWxsIG5vLiBOZWVkIHRvIHNlYXJjaCBmb3IgYHN0bW1hY2AgaW4gdGhlIFFFTVUgY29kZWJhc2UsIGlmIEkgaGFkIGFjY2Vzcy4gQnV0IHRoZSBQQ0kgZHJpdmVyIGlzIG15IGJlc3QgYmV0IHJpZ2h0IG5vdy4gSSd2ZSBnb3QgdG8gY2hlY2sgdGhvc2UgUENJIElEcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjQxLjY4OTEyMzM5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU4MDE2ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENJX0RFVklDRV9JRF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDA6I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcXHRcXHQweDExMDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAxOiNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFxcdFxcdDB4NzEwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjAzOjQyLjQyNDkzNjI2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjY4MjYxMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXNlIGFkZHJlc3NlcywgMHgxMTA4IGFuZCAweDcxMDIsIHdoaWNoIHRoZSB0YXJnZXQgY29kZSBiaW5kcyB0by4gSG1tLCBkb2VzIFFFTVUgaGFuZGxlIHRoZXNlIGJ5IGRlZmF1bHQ/IFByb2JhYmx5IG5vdC4gSSByZWNhbGwgc3l6a2FsbGVyIGhhcyB0aGF0IHZoY2kgUENJIGRldmljZSBpbmplY3Rpb24sIG9yIHBlcmhhcHMgdGhlcmUncyBhbm90aGVyIGZ1enppbmcgZW50cnkgcG9pbnQgYXZhaWxhYmxlLiBCdXQgd2FpdCwgd2Fzbid0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBgc3l6X3BjaV92cGNpYD8gTGV0IG1lIHNlZS4uLiB5ZXMsIHRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgY2FsbHMgb3V0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiLiBBaCwgdGhhdCBpbmNsdWRlcyB0aG9zZSBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnJlYWwqIGhhcmR3YXJlLCBsaWtlIHRob3NlIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuXG5cbkJ1dCBob2xkIG9uLi4uIGBzdG1tYWNgLiBUaGF0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBNQUMgZHJpdmVyLCBzdXBlciBjb21tb24gaW4gdmFyaW91cyBTb0NzLCBhbmQgaXQgaGFzIGEgUENJIHdyYXBwZXIuIEludGVyZXN0aW5nLiBBaCwgdGhlIHBhdGNoIGFjdHVhbGx5IG1vZGlmaWVzIGBkd21hYy1zb2NmcGdhLmNgLiBSaWdodCwgdGhhdCdzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBbHRlcmEgU09DRlBHQS4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBkd21hYy1zb2NmcGdhLmNgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDM6NTQuNjkzMjAwMzUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzE2MDk0NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29jZnBnYV9kd21hY19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjA3OnN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTY5Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2NmcGdhX2R3bWFjX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NjkzOlxcdC5wcm9iZSAgPSBzb2NmcGdhX2R3bWFjX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02OTQtXFx0LmRyaXZlciA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDM6NTkuNzY0ODEzNzQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMzI2NTYyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiB0aGUgYHN0bW1hY2AgRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggaXQuIENhbiBzeXprYWxsZXIgcHJvYmUgcGxhdGZvcm0gZHJpdmVycyBkaXJlY3RseT8gSXQgZGVwZW5kcy4gSWYgdGhlcmUncyBhIGRldmljZSB0cmVlIG5vZGUsIG9yIGlmIHdlIGNhbiBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcywgd2UncmUgaW4gYnVzaW5lc3MuIEkga25vdyBzeXprYWxsZXIgaGFzIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgd2l0aCBwbGF0Zm9ybSBkZXZpY2VzLCBpdOKAmXMgbm90IGFsd2F5cyBzdHJhaWdodGZvcndhcmQgdG8gaW5zdGFudGlhdGUgdGhlbSB1bmxlc3MgdGhleSBhcmUgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBEVC5cblxuSG1tLCB0aGlzIHBhdGNoIGFsc28gaGl0cyBgZHd4Z21hYzJfY29yZS5jYCBhbmQgYHN0bW1hY19od3RzdGFtcC5jYCDigJMgdGhhdCdzIGNvcmUgYHN0bW1hY2AgY29kZS4gU3BlY2lmaWNhbGx5LCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgYmVpbmcgYWRkZWQgdG8gYGR3eGdtYWMyX3B0cGAsIHdoaWNoIGlzIHVzZWQgYnkgYGR3eGdtYWMyMTBfb3BzYCBhbmQgYGR3eGxnbWFjMl9vcHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgZHd4Z21hYzJgIGlzIGV2ZW4gcmVhY2hhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBpcyBhbHJlYWR5IGZ1enppbmcgYHN0bW1hY2AuIEkgY2FuJ3QgZGlyZWN0bHkgc2VhcmNoIHN5emthbGxlcidzIHN5emxhbmcgZGVzY3JpcHRpb25zLCB3aGljaCBJIHdvdWxkIGRvIG5vcm1hbGx5LCBiZWNhdXNlIHRoZSB0b29scyBhdmFpbGFibGUgYXJlIG9ubHkgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIGl0IHdvdWxkIHVzZSB0aGUgdG9vbCBgcmVhZC1zeXotc3BlY2Agb3IgYHN5ei1ncmVwcGVyYCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZS4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCBJIGRvbid0IG5lZWQgdG8gZG8gdGhpcy5cblxuSXMgdGhpcyBgc3RtbWFjYCBkcml2ZXIgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyPyBObywgaXQncyBhIGdlbmVyaWMgRXRoZXJuZXQgTUFDIGRyaXZlciB1c2VkIGluIGEgYnVuY2ggb2YgU29DcyBsaWtlIEludGVsLCBSb2NrY2hpcCwgQWxsd2lubmVyLCBBbWxvZ2ljLCBOWFAsIGV0Yy4gSXQncyBhIGNvcmUgZHJpdmVyLCBubyBxdWVzdGlvbi5cblxuT2theSwgc28gaXMgaXQgcmVhY2hhYmxlIGluIFFFTVU/IFllcy4gUUVNVSBoYXMgYGh3L25ldC94Z21hYy5jYCwgZW11bGF0aW5nIHRoZSBTeW5vcHN5cyBYR01BQywgYW5kIGBzdG1tYWNgICppcyogdGhlIGRyaXZlciBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMuIFFFTVUgZG9lcyBlbXVsYXRlIGB4Z21hY2AgaW4gY2VydGFpbiBtYWNoaW5lcywgbGlrZSBIaWdoYmFuay9NaWR3YXkuIFFFTVUgYWxzbyBoYXMgYGR3bWFjYCBlbXVsYXRpb24uXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMgdmlhIGBzeXpfcGNpX3ZwY2lgIG9yIHNpbWlsYXIsIGFuZCBgc3RtbWFjYCBoYXMgYSBQQ0kgZHJpdmVyLiBTbywgdmlydHVhbCBQQ0kgaW5qZWN0aW9uIGlzIGFuIGF2ZW51ZSBmb3IgZnV6emluZyB0aGlzLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZHdtYWMtc29jZnBnYS5jYCwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBiaXQgbW9yZSBjb21wbGV4LCBidXQgdGhlIGNvcmUgYHN0bW1hY2AgY29kZSBpbiBgZHd4Z21hYzJfY29yZS5jYCBpcyBhbHNvIGFmZmVjdGVkLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIEl0J3MgYXNzaWduZWQgdG8gYGR3eGdtYWMyX3B0cC50aW1lc3RhbXBfaW50ZXJydXB0YCBpbiBgc3RtbWFjX2h3dHN0YW1wLmNgLiBUaGlzIGlzIHRoZW4gdXNlZCBpbiBgaHdpZi5jYCBmb3IgYGR3eGdtYWMyMTBgIGFuZCBgZHd4bGdtYWMyYC4gTm93IEknbGwgc3RhcnQgY2hlY2tpbmcgd2hlcmUgYHRpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpjYWxsZWQqLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjEwLjk5NzQ3Mjc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTQ4NjI0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGltZXN0YW1wX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MTM9dm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYzo1MjM6dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01MjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYy01NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYzo1NTM6c3RhdGljIHZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHRfY2ZnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgYm9vbCBlbilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jPTU2Nz1pbnQgZHdtYWMxMDAwX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTYwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jOjYwMTpcXHRcXHRkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdF9jZmcocHJpdiwgb24pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMtNjAyLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNDM9c3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMTU3OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oPTQ5Nj1zdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC01MDUtXFx0dm9pZCAoKmdldF9wdHB0aW1lKSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTY0ICpwdHBfdGltZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjUwNjpcXHR2b2lkICgqdGltZXN0YW1wX2ludGVycnVwdCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTA3LVxcdHZvaWQgKCpod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTIzLVxcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgcHRwLCBnZXRfcHRwdGltZSwgX19hcmdzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo1MjQ6I2RlZmluZSBzdG1tYWNfdGltZXN0YW1wX2ludGVycnVwdChfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo1MjU6XFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBwdHAsIHRpbWVzdGFtcF9pbnRlcnJ1cHQsIF9fYXJncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNTI2LSNkZWZpbmUgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeShfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjA0PXN0YXRpYyB2b2lkIGdldF9wdHB0aW1lKHZvaWQgX19pb21lbSAqcHRwYWRkciwgdTY0ICpwdHBfdGltZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMTQ6c3RhdGljIHZvaWQgdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jPTI1OD1jb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHN0bW1hY19wdHAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNjUtXFx0LmdldF9wdHB0aW1lID0gZ2V0X3B0cHRpbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MjY2OlxcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gdGltZXN0YW1wX2ludGVycnVwdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNjctXFx0Lmh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSA9IGh3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jPTI3MD1jb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3bWFjMTAwMF9wdHAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yNzctXFx0LmdldF9wdHB0aW1lID0gZHdtYWMxMDAwX2dldF9wdHB0aW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI3ODpcXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTI3OS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjgxPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjg4LVxcdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI4OTpcXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjkwLVxcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYyMTk9c3RhdGljIHZvaWQgc3RtbWFjX2NvbW1vbl9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02MjU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjI1NTpcXHRcXHRzdG1tYWNfdGltZXN0YW1wX2ludGVycnVwdChwcml2LCBwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYyNTYtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oPTEwND12b2lkIGR3bWFjMTAwMF9nZXRfcHRwdGltZSh2b2lkIF9faW9tZW0gKnB0cGFkZHIsIHU2NCAqcHRwX3RpbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaDoxMDU6dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaDoxMDY6dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5oLTEwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MTYuMDEyMzQxNjY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5OTIxOTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTVE1NQUMgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3RtbWFjX3RpbWVzdGFtcF9pbnRlcnJ1cHRgLiBUaGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHN0bW1hY19jb21tb25faW50ZXJydXB0YCwgd2hpY2ggaXMgdGhlIG1haW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBNQUMuIFJpZ2h0LCB0aGF0J3MgdGhlIGNvcmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY2FuIEkgZXZlbiBnZXQgdG8gYHN0bW1hY2A/IEFic29sdXRlbHksIGl0J3MgYSB3aWRlbHkgdXNlZCwgZ2VuZXJpYyBNQUMgZHJpdmVyIOKAkyBnb29kIHRhcmdldC4gQ2FuIHRoaXMgdGhpbmcgYmUgZnV6emVkPyBEZWZpbml0ZWx5LiBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgbmV0d29yayBkcml2ZXJzIGxpa2UgdGhpcy4gSSBjYW4gaW5qZWN0IHBhY2tldHMsIGFuZCBJIGtub3cgSSBjYW4gaGl0IGl0IHdpdGggaW9jdGxzLiBBaGEsIGFuZCB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgaXMgKnNwZWNpZmljYWxseSogYWJvdXQgUFRQIHRpbWVzdGFtcHMgKGBzbXRnX2Nyb3NzdHN0YW1wYCwgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgKS4gQmluZ28hXG5cblBUUCwgSSBrbm93IHRoYXQuIEl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIGAvZGV2L3B0cFhgIGRldmljZXMgYW5kIGBTSU9DU0hXVFNUQU1QYCBpb2N0bHMuIFRoYXQncyBhIGNsZWFyIGF0dGFjayBzdXJmYWNlLiBJcyBgc3RtbWFjYCB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IFllcywgd2l0aG91dCBhIGRvdWJ0LiBJdCdzIGEgY29yZSBuZXR3b3JrIGRyaXZlciwgYW5kIHRob3NlIGFyZSBhbHdheXMgaGlnaC12YWx1ZSB0YXJnZXRzLiBOb3csIHdoYXQncyBteSBuZXh0IHN0ZXA/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBgc3RtbWFjYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG15IGZ1enppbmcgc2V0dXAuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MjEuNjExNTYzMTczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MjEuNjU4MDQxNjM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTI4NzQxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgU1RNTUFDX0VUSGAgbW9kdWxlLiBCZWZvcmUgZGl2aW5nIGludG8gY29kZSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgZmlyc3QuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGFuZCwgb2YgY291cnNlLCB0cm91Ymxlc2hvb3RpbmcgYW55IGZ1dHVyZSBpc3N1ZXMuIFdoZXJlIGRvZXMgaXQgcHVsbCBpdHMgZGF0YSBmcm9tPyBXaGF0IG90aGVyIG1vZHVsZXMgZG9lcyBpdCBuZWVkIHRvIGZ1bmN0aW9uIHByb3Blcmx5PyBBbnkgZXh0ZXJuYWwgbGlicmFyaWVzPyBUaW1lIHRvIG1hcCB0aGlzIG91dCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byBiZSBzdXJlIEknbSB0aGlua2luZyBvZiBldmVyeXRoaW5nIGFuZCBub3QgbWlzc2luZyBzb21ldGhpbmcgc2ltcGxlIHRoYXQgd2lsbCBiaXRlIG1lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjI0Ljc3MDkxOTA3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNUTU1BQ19FVEhcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xcbiAgIDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgIDg6XFx0XFx0c2VsZWN0IFBDU19YUENTXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxMDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxcbiAgMTY6XFx0XFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBTVE1NQUNfRVRIXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXFxuICAyMTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzXFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAyMzpcXHRcXHRkZWZhdWx0IG5cXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNUTU1BQyBTZWxmdGVzdHMgdXNpbmcgZXRodG9vbC4gRW5hYmxlIHRoaXNcXG4gIDI2OlxcdFxcdCAgZmVhdHVyZSBpZiB5b3UgYXJlIGZhY2luZyBwcm9ibGVtcyB3aXRoIHlvdXIgSFcgYW5kIHN1Ym1pdCB0aGUgdGVzdFxcbiAgMjc6XFx0XFx0ICByZXN1bHRzIHRvIHRoZSBuZXRkZXYgTWFpbGluZyBMaXN0LlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgU1RNTUFDX1BMQVRGT1JNXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNDoyNC43NzEwMzYxNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NDk3MDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgRGV2aWNlIERyaXZlciBPcHRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIG5ldyBoYXJkd2FyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGRyaXZlciByb3V0ZS4gSXQgc2VlbXMgd2UgaGF2ZSB0d28gcHJpbWFyeSBvcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZXh0OiBgU1RNTUFDX1BDSWAgZm9yIFBDSS1iYXNlZCBpbnRlZ3JhdGlvbiBhbmQgYERXTUFDX1NPQ0ZQR0FgIGZvciB0aGUgcGxhdGZvcm0gZHJpdmVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRob3NlIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGJvdGgsIGV4YW1pbmUgdGhlIGNvZGUsIGFuZCBkZXRlcm1pbmUgd2hpY2ggYmVzdCBmaXRzIHRoZSBpbnRlbmRlZCBhcmNoaXRlY3R1cmUgYW5kIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIFdoaWNoIG9mIHRob3NlIGRyaXZlcnMsIGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgIGlzIG1vc3QgYXBwcm9wcmlhdGUsIGlzIHRoZSBuZXh0IGNydWNpYWwgc3RlcC4gTGV0IG1lIGdvIG92ZXIgdGhlbSBhbmQgc2VlIHdoaWNoIG9uZSBtYWtlcyB0aGUgbW9zdCBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjMsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjI4LjkyNjAwOTM5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NDI5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChTVE1NQUNfUENJfERXTUFDX1NPQ0ZQR0EpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0xOTE9Y29uZmlnIERXTUFDX1MzMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDM6Y29uZmlnIERXTUFDX1NPQ0ZQR0FcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTIwNC1cXHR0cmlzdGF0ZSBcXFwiU09DRlBHQSBkd21hYyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MjguOTcyNjU4OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5MTkwOTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXM6IGBEV01BQ19TT0NGUEdBYCBhbmQgYFNUTU1BQ19QQ0lgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZGVwZW5kZW5jaWVzIGZvciBgRFdNQUNfU09DRlBHQWAgYW5kIGBTVE1NQUNfUENJYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyDigJMgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGRyaXZlcnMgYXJlIHRoZXkgcmVsaWFudCB1cG9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2hhcmVkIGRlcGVuZGVuY2llcyB0aGF0IGp1bXAgb3V0IGF0IG1lIHJpZ2h0IGF3YXk/IFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMuIEtub3dpbmcgdGhlIFwid2hvIHRhbGtzIHRvIHdob21cIiBwaWN0dXJlIGF0IHRoaXMgbGV2ZWwgaXMgdGhlIGZvdW5kYXRpb24gZm9yIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgYmUgaXQgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGRlYnVnZ2luZywgb3Igb3B0aW1pemluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybXMgdGhlc2UgbW9kdWxlcyBhcmUgZGVzaWduZWQgZm9yLCBwb3RlbnRpYWwgZHJpdmVyIGNvbmZsaWN0cywgb3Igb3Bwb3J0dW5pdGllcyBmb3Igc3RyZWFtbGluaW5nIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGludGVyY29ubmVjdGVkbmVzcywgbm90aW5nIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIG9yIGFyZWFzIHdoZXJlIEkgbWlnaHQgbmVlZCB0byBwYXkgZXh0cmEgYXR0ZW50aW9uIGxhdGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1MSwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjM3Ljc2NDU3MDU1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMzpcXHRjb25maWcgRFdNQUNfU09DRlBHQVxcbiAyMDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlNPQ0ZQR0EgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMjA1OlxcdFxcdGRlZmF1bHQgQVJDSF9JTlRFTF9TT0NGUEdBXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX0lOVEVMX1NPQ0ZQR0EgfHwgQ09NUElMRV9URVNUKVxcbiAyMDc6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMjA4OlxcdFxcdHNlbGVjdCBNRElPX1JFR01BUFxcbiAyMDk6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuIDIxMDpcXHRcXHRzZWxlY3QgUENTX0xZTlhcXG4gMjExOlxcdFxcdGhlbHBcXG4gMjEyOlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBBbHRlcmEgU09DRlBHQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNDozNy43NjQ2NDI5MDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDc6XFx0Y29uZmlnIFNUTU1BQ19QQ0lcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDEwOlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiA0MTE6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDEyOlxcdFxcdGhlbHBcXG4gNDEzOlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDQxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxcbiA0MTU6XFx0XFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXFxuIDQxNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6MzcuNzY0Njc4MjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTI1ODQzNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHBhdGNoLCB0cnlpbmcgdG8gZ2V0IGl0IHJpZ2h0IGZvciBzeXprYWxsZXIuICBMZXQncyBzZWXigKYgYFNUTU1BQ19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIGBDT01NT05fQ0xLYC4gVGhhdCBtYWtlcyBzZW5zZS4gU2luY2Ugc3l6a2FsbGVyICpjYW4qIHByb2JlIFBDSSBkZXZpY2VzLCBlbmFibGluZyBgU1RNTUFDX1BDSWAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGhhcmR3YXJlIGlzIGFjY2Vzc2libGUuXG5cbldhaXQgYSBtaW51dGUsIHRoaXMgcGF0Y2ggKmFsc28qIHRvdWNoZXMgYGR3bWFjLXNvY2ZwZ2EuY2AuICBUaGF0IG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IGVuYWJsZSBgRFdNQUNfU09DRlBHQWAgdG9vLCBqdXN0IHRvIGVuc3VyZSB0aGF0IGNvZGUgZ2V0cyBjb21waWxlZC4gTGV0J3Mgbm90IGFzc3VtZSBldmVyeXRoaW5nIGlzIGJlaW5nIHB1bGxlZCBpbiB0cmFuc2l0aXZlbHkuIEkgbmVlZCB0byBiZSAqc3VyZSouXG5cbk5vdywgYSBxdWljayBjaGVja+KApiB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBEV01BQ19TT0NGUEdBYD8gQWgsIGBPRmAgYW5kIGVpdGhlciBgQVJDSF9JTlRFTF9TT0NGUEdBYCAqb3IqIGBDT01QSUxFX1RFU1RgLiBIbW0uIFN5emthbGxlciBrZXJuZWxzIHVzdWFsbHkgZG9uJ3QgaGF2ZSBgQVJDSF9JTlRFTF9TT0NGUEdBYCBlbmFibGVkLCBidXQgdGhleSAqZG8qIHR5cGljYWxseSBoYXZlIGBDT01QSUxFX1RFU1Q9eWAuIEknbSBwcmV0dHkgc3VyZSB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG5lZWQgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkuXG5cblJpZ2h0LCBzbyB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgcnVuIHRocm91Z2ggYW5kIHdvcmtpbmcgY29ycmVjdGx5LCBJIHNob3VsZCBzZWUgd2hhdCBmdW5jdGlvbnMgYXJlIGNoYW5nZWQuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggYWRkcyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgYW5kIG1vZGlmaWVzIGBzbXRnX2Nyb3NzdHN0YW1wYC4gT2theS4gYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIGRlY2xhcmVkIHN0YXRpYyB3aXRoaW4gYGR3bWFjLXNvY2ZwZ2EuY2AuXG5cbk9rYXkuIExldCdzIHNlZSB3aGVyZSB0aGF0IGBzbXRnX2Nyb3NzdHN0YW1wYCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkIHRvIG1ha2Ugc3VyZSBJIGdldCBjb3ZlcmFnZSwgYW5kIHRoYXQgSSdtIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTI5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6NDguNjkwNTI1MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDExMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtdGdfY3Jvc3N0c3RhbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz0yNzk9c3RhdGljIHZvaWQgZ2V0X3NtdGd0aW1lKHN0cnVjdCBtaWlfYnVzICptaWksIGludCBzbXRnX2FkZHIsIHU2NCAqc210Z190aW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjk0OnN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5NS1cXHRcXHRcXHQgICAgdm9pZCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwMy1cXHRwbGF0X2RhdC1cXHUwMDNlaW50X3NuYXBzaG90X251bSA9IEFVWF9TTkFQU0hPVDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNDpcXHRwbGF0X2RhdC1cXHUwMDNlY3Jvc3N0c3RhbXAgPSBzbXRnX2Nyb3NzdHN0YW1wO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNDo0OC43MzU5NDQ1MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NTgwNjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgY3Jvc3N0c3RhbXBgIEFzc2lnbm1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBzbXRnX2Nyb3NzdHN0YW1wYCB2YXJpYWJsZS4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgYXNzaWduaW5nIGl0cyB2YWx1ZSB0byBgcGxhdF9kYXQtXHUwMDNlY3Jvc3N0c3RhbXBgLiBPa2F5LCBzdGFuZGFyZCBhc3NpZ25tZW50LCBub3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLiBNeSByZWFsIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIGBjcm9zc3RzdGFtcGAgYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZG93bnN0cmVhbSBpbXBhY3QuIEknbSBnb2luZyB0byBuZWVkIHRvIHRyYWNlIGFsbCB0aGUgY2FsbHMgYW5kIHJlZmVyZW5jZXMgdG8gYGNyb3NzdHN0YW1wYCBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gV2hhdCBvcGVyYXRpb25zIGlzIGl0IGludm9sdmVkIGluPyBJcyBpdCBwYXJ0IG9mIGFueSBjcml0aWNhbCBwYXRoPyBJcyB0aGlzIGEgdGltZXN0YW1wIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiBvciBtZWFzdXJlbWVudD8gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgY3J1Y2lhbGx5LCB0byBkZXRlcm1pbmUgaWYgdGhpcyBhc3NpZ25tZW50IGlzIGNvcnJlY3QgYW5kIGlmIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCB0aW1pbmcgb3IgZGF0YSBmbG93LiBEaWdnaW5nIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA0OjU1LjMxMTc1MzE2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1Njg0ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3Jvc3N0c3RhbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MzUzPXN0YXRpYyBpbnQgc3RtbWFjX2Nyb3NzX3RzX2lzcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjM1ODpzdGF0aWMgaW50IGludGVsX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM1OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTU4NT1zdGF0aWMgaW50IGludGVsX21nYmVfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTcxNC1cXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FSVCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3MTU6XFx0XFx0cGxhdC1cXHUwMDNlY3Jvc3N0c3RhbXAgPSBpbnRlbF9jcm9zc3RzdGFtcDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTcxNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYz0yNzk9c3RhdGljIHZvaWQgZ2V0X3NtdGd0aW1lKHN0cnVjdCBtaWlfYnVzICptaWksIGludCBzbXRnX2FkZHIsIHU2NCAqc210Z190aW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjk0OnN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI5NS1cXHRcXHRcXHQgICAgdm9pZCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU4MD1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwMy1cXHRwbGF0X2RhdC1cXHUwMDNlaW50X3NuYXBzaG90X251bSA9IEFVWF9TTkFQU0hPVDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjYwNDpcXHRwbGF0X2RhdC1cXHUwMDNlY3Jvc3N0c3RhbXAgPSBzbXRnX2Nyb3NzdHN0YW1wO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy02MDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jPTI3Nj1zdGF0aWMgaW50IHN0bW1hY19nZXRfc3luY2RldmljZXRpbWUoa3RpbWVfdCAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MjgyOlxcdHJldHVybiBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjcm9zc3RzdGFtcChkZXZpY2UsIHN5c3RlbSwgY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjgzLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODU6c3RhdGljIGludCBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXAoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjI4NjpcXHRcXHRcXHRcXHQgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyOTE6XFx0cmV0dXJuIGdldF9kZXZpY2Vfc3lzdGVtX2Nyb3NzdHN0YW1wKHN0bW1hY19nZXRfc3luY2RldmljZXRpbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI5Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHByaXYsIE5VTEwsIHh0c3RhbXApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jPTMzNT12b2lkIHN0bW1hY19wdHBfcmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MzY1OlxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjcm9zc3RzdGFtcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MzY2OlxcdFxcdHByaXYtXFx1MDAzZXB0cF9jbG9ja19vcHMuZ2V0Y3Jvc3N0c3RhbXAgPSBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDQ6NTUuMzU5MzI3MjI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTk1MzcwMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQsIGFuZCBpdCBsb29rcyBsaWtlIEkndmUgZm91bmQgYSBnb29kIGNhbmRpZGF0ZS4gVGhlIGBjcm9zc3RzdGFtcGAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHZpYSBgc3RtbWFjX2dldGNyb3NzdHN0YW1wYC4gVGhpcyBmdW5jdGlvbiwgaW4gdHVybiwgaXMgYXNzaWduZWQgdG8gdGhlIGBwdHBfY2xvY2tfb3BzLmdldGNyb3NzdHN0YW1wYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCBgcHRwX2Nsb2NrX29wcy5nZXRjcm9zc3RzdGFtcGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIFBUUCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgd2hlbiB1c2Vyc3BhY2UgaXNzdWVzIHRoZSBgUFRQX1NZU19PRkZTRVRfRVhURU5ERURgIGlvY3RsIG9uIGEgYC9kZXYvcHRwWGAgZGV2aWNlLiBUaGF0IG1ha2VzIGl0IGltbWVkaWF0ZWx5IHJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlLCBmdXp6YWJsZS5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzpcbiogICBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAsIHdoaWNoIHdhcyBhZGRlZCBpbiBgZHd4Z21hYzJfY29yZS5jYFxuKiAgIGBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXBgIHdoaWNoIGxpdmVzIGluIGBzdG1tYWNfcHRwLmNgXG4qICAgYHN0bW1hY19nZXRfc3luY2RldmljZXRpbWVgIGFsc28gaW4gYHN0bW1hY19wdHAuY2BcblxuSG9sZCBvbiwgSSByZW1lbWJlciB0aGF0IGBzbXRnX2Nyb3NzdHN0YW1wYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgc28gaXQncyBwcm9iYWJseSBnb2luZyB0byBiZSBpbmxpbmVkLCBhbmQgd29uJ3QgYmUgYSBkaXN0aW5jdCBzeW1ib2wsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBzbyBpdCBzaG91bGRuJ3QgYmUgaW5saW5lZC4gVGhlIHByb21wdCBzYXlzIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gdG8gbWUuXG5cbk9rYXksIGxldCdzIGtlZXAgZ29pbmcuIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBpcyBub24tc3RhdGljLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gYHN0bW1hY19nZXRjcm9zc3RzdGFtcGAgaXMgaW5kZWVkIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0J3MgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIFBUUCwgc28gSSB3aWxsIGhhdmUgdG8ga2VlcCBpdCBpbiBtaW5kLiBJIHdvbmRlciBhYm91dCBgc3RtbWFjX3B0cF9yZWdpc3RlcmAgLSB0aGF0IG9uZSdzIGNhbGxlZCBkdXJpbmcgcHJvYmUuIFRoZW4gdGhlcmUgaXMgYHN0bW1hY19jb21tb25faW50ZXJydXB0YCwgYnV0IHRoYXQncyBhbHNvIHN0YXRpYy5cblxuQWhhISBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgKm5vbi1zdGF0aWMqLCBzbyBJIGNhbiBkZWZpbml0ZWx5IHVzZSB0aGF0LlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgb2J2aW91cyBub24tc3RhdGljIGZ1bmN0aW9ucyBoYW5naW5nIGFyb3VuZCwgc28gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgc3RtbWFjX2h3dHN0YW1wLmNgIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6MDUuOTU0NzAwMDk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM0ODY3MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNDM9c3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMTU3OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTExNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM9MjgxPWNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHd4Z21hYzJfcHRwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjg4LVxcdC5nZXRfcHRwdGltZSA9IGdldF9wdHB0aW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjI4OTpcXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMjkwLVxcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg9MTA1PXZvaWQgZHdtYWMxMDAwX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmg6MTA2OnZvaWQgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaC0xMDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjA2LjA3ODE5MzA5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTUyNzE4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIGdvb2QuIE5vdywgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpb2N0bCBlbnRyeSBwb2ludCByZWxhdGVkIHRvIFBUUC4gV2hlcmUgaXMgdGhhdCBkZWZpbmVkPyBJIHNlZW0gdG8gcmVjYWxsIGBwdHBfY2xvY2tfb3BzYCBoYXZpbmcgYSBgZ2V0Y3Jvc3N0c3RhbXBgIGZ1bmN0aW9uOyB0aGF0J3MgYSBnb29kIGxlYWQuIExldCBtZSBkaWcgaW50byBgZHJpdmVycy9wdHAvcHRwX2NoYXJkZXYuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gZmluZCB0aGUgaW9jdGwuIFdlIGRvbid0IG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzIGhlcmUsIHNvIEknbGwganVzdCBmb2N1cyBvbiBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgZm9yIG5vdywgYXNzdW1pbmcgdGhhdCdzIHRoZSBrZXkuXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2guIFRoaXMgcGF0Y2ggYWxzbyB0b3VjaGVzIGBzbXRnX2Nyb3NzdHN0YW1wYCB3aXRoaW4gYGR3bWFjLXNvY2ZwZ2EuY2AuIElzICp0aGF0KiBzdGF0aWM/IFllcywgaXQgaXMuIFJpZ2h0LiBJcyB0aGVyZSAqYW55dGhpbmcqIG5vbi1zdGF0aWMgSSBjYW4gbGV2ZXJhZ2UgaW4gYGR3bWFjLXNvY2ZwZ2EuY2A/IGBzb2NmcGdhX2R3bWFjX3Byb2JlYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBzaG9vdCwgaXQncyBzdGF0aWMgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29udGVudHMgb2YgYGR3bWFjLXNvY2ZwZ2EuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIHRoYXQgSSBjYW4gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2NCwiT3V0cHV0VG9rZW5zIjo4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNToxMi4wMzA5MTQ3MTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY3MTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccyspK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTYxPXN0cnVjdCBzb2NmcGdhX2R3bWFjIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NzU6c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBzb2NmcGdhX2dldF9wbGF0X3BoeW1vZGUoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy03Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjgwOnN0YXRpYyB2b2lkIHNvY2ZwZ2Ffc2dtaWlfY29uZmlnKHN0cnVjdCBzb2NmcGdhX2R3bWFjICpkd21hYywgYm9vbCBlbmFibGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy04Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6ODc6c3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19maXhfbWFjX3NwZWVkKHZvaWQgKmJzcF9wcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy04OC1cXHRcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoxMjU6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3BhcnNlX2RhdGEoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTEyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzoyNTU6c3RhdGljIGludCBzb2NmcGdhX3NldF9waHlfbW9kZV9jb21tb24oaW50IHBoeW1vZGUsIHUzMiAqdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTI3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6Mjc5OnN0YXRpYyB2b2lkIGdldF9zbXRndGltZShzdHJ1Y3QgbWlpX2J1cyAqbWlpLCBpbnQgc210Z19hZGRyLCB1NjQgKnNtdGdfdGltZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMjgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjI5NDpzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0yOTUtXFx0XFx0XFx0ICAgIHZvaWQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjM5NTpzdGF0aWMgaW50IHNvY2ZwZ2FfZ2VuNV9zZXRfcGh5X21vZGUoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy0zOTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo0NTQ6c3RhdGljIGludCBzb2NmcGdhX2dlbjEwX3NldF9waHlfbW9kZShzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTQ1NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1MDc6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU1MTpzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU1NzpzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpzb2NmcGdhX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1NjM6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jOjU3MDpzdGF0aWMgdm9pZCBzb2NmcGdhX2dlbjVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTgwOnN0YXRpYyB2b2lkIHNvY2ZwZ2FfYWdpbGV4NV9zZXR1cF9wbGF0X2RhdChzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNjA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo2MDc6c3RhdGljIGludCBzb2NmcGdhX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTYwOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjEyLjI4MDU5NDc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNDMxMTgwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRnVuY3Rpb24gVmlzaWJpbGl0eSBpbiB0aGUgRXRoZXJuZXQgRHJpdmVyIENvZGUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHdtYWMtc29jZnBnYS5jYCBmaWxlLCBhbmQgSSdtIG5vdGljaW5nIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgaW4gaXQgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZSwgdXN1YWxseSBpbmRpY2F0aW5nIHRoYXQgdGhleSdyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLCBwcmV2ZW50aW5nIG5hbWluZyBjb25mbGljdHMgYW5kIGVuc3VyaW5nIGEgY2VydGFpbiBsZXZlbCBvZiBlbmNhcHN1bGF0aW9uLiBCdXQgdGhlbiwgYSByZWQgZmxhZyBwb3BwZWQgdXA6IEkgcmVjYWxsIHRoYXQgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzICpub3QqIGBzdGF0aWNgIGFuZCBpdCByZXNpZGVzIGluIGBkd3hnbWFjMl9jb3JlLmNgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdG8gdGhpcyB0aGFuIGEgc3RyYWlnaHRmb3J3YXJkIGZpbGUtbGV2ZWwgc2NvcGUuIFRoaXMgaW50ZXJydXB0cyBteSBjdXJyZW50IHdvcmsuIEkgd29uZGVyIGlmIHRoZXJlIG1pZ2h0IGJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZsb2F0aW5nIGFyb3VuZCBpbiB0aGUgcmVsYXRlZCB0aW1lc3RhbXAgb3IgaGFyZHdhcmUgdGltZXN0YW1wLXJlbGF0ZWQgZmlsZXMsIGBzdG1tYWNfcHRwLmNgIG9yIGBzdG1tYWNfaHd0c3RhbXAuY2AsIHRoYXQgYXJlIHNvbWVob3cgaG9va2VkIGludG8gdGhpcyBQVFAgb3IgdGltZXN0YW1waW5nIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBhIGJpdCBkZWVwZXIgdG8gc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwODIsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNToyMS42MjM3MTU0MzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTgzNzY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccyspK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyNTpzdGF0aWMgaW50IHN0bW1hY19hZGp1c3RfZnJlcShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0yNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtNDgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjQ5OnN0YXRpYyBpbnQgc3RtbWFjX2FkanVzdF90aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0xMjQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjEyNTpzdGF0aWMgaW50IHN0bW1hY19nZXRfdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0xMjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTE0OS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MTUwOnN0YXRpYyBpbnQgc3RtbWFjX3NldF90aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0xNTEtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTE2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MTY0OnN0YXRpYyBpbnQgc3RtbWFjX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMTY1LVxcdFxcdFxcdCBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjc1LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6Mjc2OnN0YXRpYyBpbnQgc3RtbWFjX2dldF9zeW5jZGV2aWNldGltZShrdGltZV90ICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI3Ny1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYzoyODU6c3RhdGljIGludCBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXAoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTI4Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM9MzEzPWNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0zMzQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jOjMzNTp2b2lkIHN0bW1hY19wdHBfcmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuYy0zMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3B0cC5jLTM4OS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmM6MzkwOnZvaWQgc3RtbWFjX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmMtMzkxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6MjEuNzk5NTU5NDY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjcwMTc0NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgU1RNTUFDIFBUUCBmdW5jdGlvbnMsIGBzdG1tYWNfcHRwX3JlZ2lzdGVyYCBhbmQgYHN0bW1hY19wdHBfdW5yZWdpc3RlcmAuIEludGVyZXN0aW5nIHRoYXQgdGhleSdyZSBub3Qgc3RhdGljLCBidXQgdWx0aW1hdGVseSwgdGhleSBzZWVtIHRvIGJlIHNldHVwIGFuZCB0ZWFyZG93biByb3V0aW5lcy4gVGhlIHJlYWwgYWN0aW9uLCB0aGUgY29yZSB0aW1lc3RhbXBpbmcgbG9naWMsIHJlc2lkZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGFuZCBgc210Z19jcm9zc3RzdGFtcGAuIE5vdywgYHNtdGdfY3Jvc3N0c3RhbXBgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciBtZSwgSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmb2N1cyBzeW1ib2wuIEJ1dCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0IGNvdWxkIGJlIHRoZSBrZXkgb25lLlxuXG5IbW0sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3aG9sZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgcHJvY2Vzcz8gSSdsbCBxdWlja2x5IGNoZWNrIGBzdG1tYWNfaHd0c3RhbXAuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODUsIk91dHB1dFRva2VucyI6ODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6MzIuMDY5NzM2Mzk4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg3NDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccyspK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyOTpzdGF0aWMgdm9pZCBjb25maWdfaHdfdHN0YW1waW5nKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0zMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0zOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzozOTpzdGF0aWMgdm9pZCBjb25maWdfc3ViX3NlY29uZF9pbmNyZW1lbnQodm9pZCBfX2lvbWVtICppb2FkZHIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtNDAtXFx0XFx0dTMyIHB0cF9jbG9jaywgaW50IGdtYWM0LCB1MzIgKnNzaW5jKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6NzY6c3RhdGljIHZvaWQgaHd0c3RhbXBfY29ycmVjdF9sYXRlbmN5KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy03Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0xMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTE4OnN0YXRpYyBpbnQgaW5pdF9zeXN0aW1lKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgc2VjLCB1MzIgbnNlYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0xMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jOjEzNTpzdGF0aWMgaW50IGNvbmZpZ19hZGRlbmQodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBhZGRlbmQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTE1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoxNTE6c3RhdGljIGludCBhZGp1c3Rfc3lzdGltZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIHNlYywgdTMyIG5zZWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTUyLVxcdFxcdGludCBhZGRfc3ViLCBpbnQgZ21hYzQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0xODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MTg2OnN0YXRpYyB2b2lkIGdldF9zeXN0aW1lKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1NjQgKnN5c3RpbWUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmMtMTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIwMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYzoyMDQ6c3RhdGljIHZvaWQgZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIwNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYy0yMTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmM6MjE0OnN0YXRpYyB2b2lkIHRpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jLTIxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjMyLjExNjYxNTY1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTcxNTk1MTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU3RtbWFjIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBFdmVyeXRoaW5nIHNlZW1zIHByZXR0eSBzdGF0aWMgZXhjZXB0IGZvciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIFdhaXQsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIGBzdG1tYWNfZ2V0Y3Jvc3N0c3RhbXBgIGlzIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYHB0cF9jbG9ja19vcHMuZ2V0Y3Jvc3N0c3RhbXBgLiBMZXQncyBzZWUgaWYgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbHMgYHNtdGdfY3Jvc3N0c3RhbXBgLi4uIG5vcGUsIGl0J3MgY2FsbGVkIHZpYSB0aGUgZnVuY3Rpb24gcG9pbnRlciBgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNyb3NzdHN0YW1wYC4gU28sIHllYWgsIGl0IGxvb2tzIGxpa2UgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gZGlyZWN0bHkgYWZmZWN0ZWQgb3IgYWRkZWQgdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIG5lZWQgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgRFdNQUNfU09DRlBHQWAuIEhvbGQgb24sIGBEV01BQ19TT0NGUEdBYCBoYXMgZGVwZW5kZW5jaWVzIG9uIGBPRmAgYW5kIGAoQVJDSF9JTlRFTF9TT0NGUEdBIHx8IENPTVBJTEVfVEVTVClgLiBLYnVpbGQgc2hvdWxkIGhhbmRsZSB0aG9zZSBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIHNvIGxpc3RpbmcgYERXTUFDX1NPQ0ZQR0FgIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJJ2xsIGluY2x1ZGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgRFdNQUNfU09DRlBHQWAgaW4gdGhlIGxpc3QsIHRob3VnaC4gQW5kIG9mIGNvdXJzZSwgZm9yIFBUUCBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIGBQVFBfMTU4OF9DTE9DS2AuIExldCBtZSB2ZXJpZnkgaWYgdGhhdCBpcyBzZWxlY3RlZCwgb3IgZGVwZW5kZW50IG9uLiBBaCwgcmlnaHQsIGluIHRoZSBLY29uZmlnIGZvciBzdG1tYWMsIGl0ICpkZXBlbmRzKiBvbiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBTbywgaXQncyBvcHRpb25hbCwgYnV0IHdlIHdhbnQgdG8gdGVzdCBQVFAsIHNvIGxldCdzIGluY2x1ZGUgdGhhdC5cblxuTm93LCByZXZpc2l0aW5nIHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgY2xlYXIuIEl0IG1vZGlmaWVzIGBzbXRnX2Nyb3NzdHN0YW1wYCB0byBtYXNrIGBYR01BQ19UU0lFYCBkdXJpbmcgdGhlIGNyb3NzLXRpbWVzdGFtcCBvcGVyYXRpb24sIHByZXZlbnRpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIGZyb20gcnVubmluZyB3aGlsZSB3ZSdyZSByZWFkaW5nIHRoZSBGSUZPLiBQbHVzLCB0aGUgbmV3IGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBmdW5jdGlvbiBpcyBhZGRlZCB0byByZWFkIHRoZSBgWEdNQUNfVElNRVNUQU1QX1NUQVRVU2AgcmVnaXN0ZXIgYW5kIGNsZWFyIGBUU0lTYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdGhhdCBhaW1zIHRvIHJlc29sdmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlIHBvbGxpbmcgbG9vcCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIERlZmluaXRlbHkgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBpbXBsaWNhdGlvbnMuXG5cblNvLCB0aGUgY29uZmlndXJhdGlvbnMgSSdsbCB1c2UgYXJlOlxuXG4qICAgYFNUTU1BQ19FVEhgXG4qICAgYFNUTU1BQ19QQ0lgXG4qICAgYERXTUFDX1NPQ0ZQR0FgXG4qICAgYFBUUF8xNTg4X0NMT0NLYFxuXG5BbmQgdGhlIGtleSBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcgc2hvdWxkIGJlOlxuXG4qICAgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucy4uLiBgc3RtbWFjX3B0cF9yZWdpc3RlcmAgaXMgbm9uLXN0YXRpYywgYnV0IHRoYXQncyBqdXN0IHNldHVwLiBgc3RtbWFjX2h3dHN0YW1wX2NvcnJlY3RfbGF0ZW5jeWAgaXMgYSBtYWNybywgc28gdGhhdCdzIG5vdCByZWxldmFudC4gWWVzLCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQuXG5cbkxldCBtZSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0bW1hYyBkcml2ZXIncyBQVFAgY3Jvc3MtdGltZXN0YW1waW5nIGJ5IG1hc2tpbmcgdGhlIHRpbWVzdGFtcCBpbnRlcnJ1cHQgKGBYR01BQ19UU0lFYCkgZHVyaW5nIEZJRk8gcmVhZHMgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLCBhbmQgYWRkcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyB0b3VjaCB0aGUgY29yZSBzdG1tYWMgZHJpdmVyIGFuZCB0aGUgU09DRlBHQSBwbGF0Zm9ybSBkcml2ZXIuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBuZXcgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUFRQIG1lY2hhbmlzbXMuXG5cbk9rYXksIGxldCdzIHByb2NlZWQgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDY2LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNTo0Ny44MzI1Njk5OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjg1NzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiLFxuICAgIFwiRFdNQUNfU09DRlBHQVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgc3RtbWFjIGRyaXZlcidzIFBUUCBjcm9zcy10aW1lc3RhbXBpbmcgbG9naWMgYnkgbWFza2luZyB0aGUgdGltZXN0YW1wIGludGVycnVwdCAoWEdNQUNfVFNJRSkgZHVyaW5nIHRoZSBzbmFwc2hvdCBGSUZPIHJlYWQgaW4gYHNtdGdfY3Jvc3N0c3RhbXBgLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCBmb3IgZHd4Z21hYzIvZHd4bGdtYWMyIE1BQ3MgdG8gaGFuZGxlIEFVWCBzbmFwc2hvdHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIHN0bW1hYyBkcml2ZXIgYW5kIHRoZSBTT0NGUEdBIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayBhbmQgUFRQIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgUFRQIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19TT0NGUEdBXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdG1tYWMgZHJpdmVyJ3MgUFRQIGNyb3NzLXRpbWVzdGFtcGluZyBsb2dpYyBieSBtYXNraW5nIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IChYR01BQ19UU0lFKSBkdXJpbmcgdGhlIHNuYXBzaG90IEZJRk8gcmVhZCBpbiBgc210Z19jcm9zc3RzdGFtcGAuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsZXIgYGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHRgIGZvciBkd3hnbWFjMi9kd3hsZ21hYzIgTUFDcyB0byBoYW5kbGUgQVVYIHNuYXBzaG90cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgc3RtbWFjIGRyaXZlciBhbmQgdGhlIFNPQ0ZQR0EgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIGFuZCBQVFAgaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGludGVycnVwdCBoYW5kbGVyIGFuZCBQVFAgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNTo0Ny45MTU0MzQ1OTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDEzNDgyNDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA1OjQ3LjkxNTk0NjExNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTQxMzQzMDgzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQyYWY0YzYyMjg0ZTQwYzE5MDZjMjZhOGRkZWYzN2MyMzRmY2YyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE2OjAzOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5pbmRleCAxZDdmMGE1N2QyODg5Li5hNGQwMGJmODE0MjM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbkBAIC0zMTAsNiArMzEwLDEzIEBAIHN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXG4gXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19FWFRfU05BUFNIT1RfRU4pXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4rXHQvKiBUaGUgWEdNQUMgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBUU0lTIGJ5IHJlYWRpbmdcbitcdCAqIFhHTUFDX1RJTUVTVEFNUF9TVEFUVVMsIHdoaWNoIHdvdWxkIHJhY2Ugd2l0aCB0aGUgVFNJUyBwb2xsXG4rXHQgKiBiZWxvdy4gIE1hc2sgWEdNQUNfVFNJRSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjcm9zcy10aW1lc3RhbXBcbitcdCAqIHNvIHRoZSBoYW5kbGVyIGRvZXMgbm90IHJ1biB3aGlsZSB3ZSBvd24gdGhlIHNuYXBzaG90IEZJRk8uXG4rXHQgKi9cbitcdHN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCBYR01BQ19UU0lFLCAwKTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VhdXhfdHNfbG9jayk7XG4gXHQvKiBFbmFibGUgSW50ZXJuYWwgc25hcHNob3QgdHJpZ2dlciAqL1xuIFx0YWNyX3ZhbHVlID0gcmVhZGwocHRwYWRkciArIFBUUF9BQ1IpO1xuQEAgLTMyOSw2ICszMzYsNyBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWF1eF90c19sb2NrKTtcbitcdFx0c3RtbWFjX21hY19pcnFfbW9kaWZ5KHByaXYsIDAsIFhHTUFDX1RTSUUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHdyaXRlbChhY3JfdmFsdWUsIHB0cGFkZHIgKyBQVFBfQUNSKTtcbkBAIC0zNTMsNiArMzYxLDcgQEAgc3RhdGljIGludCBzbXRnX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSwgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbSxcbiBcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChwcml2LVx1MDAzZWlvYWRkciArIFhHTUFDX0lOVF9TVEFUVVMsIHYsXG4gXHRcdFx0XHQgKHYgXHUwMDI2IFhHTUFDX0lOVF9UU0lTKSwgMTAwLCAxMDAwMCk7XG4gXHRpZiAocmV0KSB7XG4rXHRcdHN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCAwLCBYR01BQ19UU0lFKTtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCIlczogV2FpdCBmb3IgdGltZSBzeW5jIG9wZXJhdGlvbiB0aW1lb3V0XFxuXCIsXG4gXHRcdFx0ICAgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTM3NSw2ICszODQsOCBAQCBzdGF0aWMgaW50IHNtdGdfY3Jvc3N0c3RhbXAoa3RpbWVfdCAqZGV2aWNlLCBzdHJ1Y3Qgc3lzdGVtX2NvdW50ZXJ2YWxfdCAqc3lzdGVtLFxuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcbiBcdH1cbiBcbitcdHN0bW1hY19tYWNfaXJxX21vZGlmeShwcml2LCAwLCBYR01BQ19UU0lFKTtcbitcbiBcdGdldF9zbXRndGltZShwcml2LVx1MDAzZW1paSwgU01UR19NRElPX0FERFIsIFx1MDAyNnNtdGdfdGltZSk7XG4gXHRzeXN0ZW0tXHUwMDNlY3ljbGVzID0gc210Z190aW1lO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5pbmRleCA2MWI2ZDQ1YTAyZjVkLi43NmUyODYwYTk1MTdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuQEAgLTg3LDcgKzg3LDcgQEBcbiAjZGVmaW5lIFhHTUFDX1RTSUVcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBYR01BQ19MUElJRVx0XHRcdEJJVCg1KVxuICNkZWZpbmUgWEdNQUNfUE1USUVcdFx0XHRCSVQoNClcbi0jZGVmaW5lIFhHTUFDX0lOVF9ERUZBVUxUX0VOXHRcdChYR01BQ19MUElJRSB8IFhHTUFDX1BNVElFKVxuKyNkZWZpbmUgWEdNQUNfSU5UX0RFRkFVTFRfRU5cdFx0KFhHTUFDX0xQSUlFIHwgWEdNQUNfUE1USUUgfCBYR01BQ19UU0lFKVxuICNkZWZpbmUgWEdNQUNfUXhfVFhfRkxPV19DVFJMKHgpXHQoMHgwMDAwMDA3MCArICh4KSAqIDQpXG4gI2RlZmluZSBYR01BQ19QVFx0XHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgWEdNQUNfVEZFXHRcdFx0QklUKDEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG5pbmRleCBmMDJiNDM0YmJkNTA1Li5iODQ5Y2ViZjliMjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmNcbkBAIC0xMTU0LDYgKzExNTQsNDkgQEAgc3RhdGljIGludCBkd3hnbWFjMl9nZXRfbWFjX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTY0ICp0cylcbiBcdHJldHVybiAwO1xuIH1cbiBcbit2b2lkIGR3eGdtYWMyX3RpbWVzdGFtcF9pbnRlcnJ1cHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdHUzMiB0c19zdGF0dXMsIHBlbmRpbmdfc25hcHNob3RzLCBhY3JfdmFsdWUsIGNoYW5uZWw7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHU2NCBwdHBfdGltZTtcbitcdGludCBpO1xuK1xuK1x0LyogUmVhZCBYR01BQ19USU1FU1RBTVBfU1RBVFVTIHRvIGdldCB0aGUgQVVYIHNuYXBzaG90XG4rXHQgKiBjb3VudC4gIFRoaXMgcmVhZCBhbHNvIGNsZWFycyB0aGUgVFNJUyBiaXQgaW5cbitcdCAqIFhHTUFDX0lOVF9TVEFUVVMuXG4rXHQgKiBUWCB0aW1lc3RhbXAgcG9sbGluZyBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgVFNJU1xuK1x0ICogYW5kIEFVWFRTVFJJRywgc28gcmVseSBvbiBBVFNOUyBpbnN0ZWFkLlxuK1x0ICogVFhUU0MgaXMgY2xlYXJlZCBieSBYR01BQ19UWFRJTUVTVEFNUF9TRUMsIG5vdCBieVxuK1x0ICogdGhpcyByZWdpc3Rlciwgc28gdGhlcmUgaXMgbm8gY29uZmxpY3QuXG4rXHQgKi9cbitcdHRzX3N0YXR1cyA9IHJlYWRsKHByaXYtXHUwMDNlaW9hZGRyICsgWEdNQUNfVElNRVNUQU1QX1NUQVRVUyk7XG4rXG4rXHRpZiAoIShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VYVF9TTkFQU0hPVF9FTikpXG4rXHRcdHJldHVybjtcbitcbitcdHBlbmRpbmdfc25hcHNob3RzID0gRklFTERfR0VUKFhHTUFDX1RJTUVTVEFNUF9BVFNOU19NQVNLLCB0c19zdGF0dXMpO1xuK1x0aWYgKCFwZW5kaW5nX3NuYXBzaG90cylcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWNyX3ZhbHVlID0gcmVhZGwocHJpdi1cdTAwM2VwdHBhZGRyICsgUFRQX0FDUik7XG4rXHRjaGFubmVsID0gRklFTERfR0VUKFBUUF9BQ1JfTUFTSywgYWNyX3ZhbHVlKTtcbitcdGlmICghY2hhbm5lbClcbitcdFx0cmV0dXJuO1xuK1x0Y2hhbm5lbCA9IGlsb2cyKGNoYW5uZWwpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGVuZGluZ19zbmFwc2hvdHM7IGkrKykge1xuK1x0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4rXHRcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIFx1MDAyNnB0cF90aW1lKTtcbitcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XG4rXG4rXHRcdGV2ZW50LnR5cGUgPSBQVFBfQ0xPQ0tfRVhUVFM7XG4rXHRcdGV2ZW50LmluZGV4ID0gY2hhbm5lbDtcbitcdFx0ZXZlbnQudGltZXN0YW1wID0gcHRwX3RpbWU7XG4rXHRcdHB0cF9jbG9ja19ldmVudChwcml2LVx1MDAzZXB0cF9jbG9jaywgXHUwMDI2ZXZlbnQpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGR3eGdtYWMyX2ZsZXhfcHBzX2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGluZGV4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzdG1tYWNfcHBzX2NmZyAqY2ZnLCBib29sIGVuYWJsZSxcbiBcdFx0XHRcdCAgICB1MzIgc3ViX3NlY29uZF9pbmMsIHUzMiBzeXN0aW1lX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuaW5kZXggNTExYjBmZDVlODM0My4uOTcxODU4MmI4NDgwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXG5AQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuIFx0XHQuZG1hID0gXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxuIFx0XHQubWFjID0gXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXG4gXHRcdC52bGFuID0gXHUwMDI2ZHd4Z21hYzIxMF92bGFuX29wcyxcbi1cdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbitcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHd4Z21hYzJfcHRwLFxuIFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gXHRcdC5tb2RlID0gTlVMTCxcbiBcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbiBcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiBcdFx0Lm1hYyA9IFx1MDAyNmR3eGxnbWFjMl9vcHMsXG4gXHRcdC52bGFuID0gXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxuLVx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuK1x0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd3hnbWFjMl9wdHAsXG4gXHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiBcdFx0Lm1vZGUgPSBOVUxMLFxuIFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5pbmRleCBlNjMxN2I5NGZmZjdkLi44MThhYjNkYWE5MWM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbkBAIC02NzEsNiArNjcxLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgbmRlc2Nfb3BzO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIHN0bW1hY19wdHA7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgZHdtYWMxMDAwX3B0cDtcbitleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHA7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfbW9kZV9vcHMgcmluZ19tb2RlX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19tb2RlX29wcyBjaGFpbl9tb2RlX29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfaHd0c3RhbXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5pbmRleCBiOWE5ODVmYTc3MmM5Li45ZDdkMjQyNTlhYmQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2h3dHN0YW1wLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19od3RzdGFtcC5jXG5AQCAtMjc3LDMgKzI3NywxNSBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3dGltZXN0YW1wIGR3bWFjMTAwMF9wdHAgPSB7XG4gXHQuZ2V0X3B0cHRpbWUgPSBkd21hYzEwMDBfZ2V0X3B0cHRpbWUsXG4gXHQudGltZXN0YW1wX2ludGVycnVwdCA9IGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0LFxuIH07XG4rXG4rY29uc3Qgc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCBkd3hnbWFjMl9wdHAgPSB7XG4rXHQuY29uZmlnX2h3X3RzdGFtcGluZyA9IGNvbmZpZ19od190c3RhbXBpbmcsXG4rXHQuaW5pdF9zeXN0aW1lID0gaW5pdF9zeXN0aW1lLFxuK1x0LmNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCA9IGNvbmZpZ19zdWJfc2Vjb25kX2luY3JlbWVudCxcbitcdC5jb25maWdfYWRkZW5kID0gY29uZmlnX2FkZGVuZCxcbitcdC5hZGp1c3Rfc3lzdGltZSA9IGFkanVzdF9zeXN0aW1lLFxuK1x0LmdldF9zeXN0aW1lID0gZ2V0X3N5c3RpbWUsXG4rXHQuZ2V0X3B0cHRpbWUgPSBnZXRfcHRwdGltZSxcbitcdC50aW1lc3RhbXBfaW50ZXJydXB0ID0gZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdCxcbitcdC5od3RzdGFtcF9jb3JyZWN0X2xhdGVuY3kgPSBod3RzdGFtcF9jb3JyZWN0X2xhdGVuY3ksXG4rfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcbmluZGV4IDNmZTBlM2E4MGU4MGEuLmRhZGUwOTYxNDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wdHAuaFxuQEAgLTEwMyw2ICsxMDMsNyBAQCBpbnQgZHdtYWMxMDAwX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4gXG4gdm9pZCBkd21hYzEwMDBfZ2V0X3B0cHRpbWUodm9pZCBfX2lvbWVtICpwdHBhZGRyLCB1NjQgKnB0cF90aW1lKTtcbiB2b2lkIGR3bWFjMTAwMF90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4rdm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBzdG1tYWNfcHRwX2Nsb2NrX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIGR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6NDcuOTE1OTQ2ODc1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxOTg2NzM2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdGhlcm5ldCBEcml2ZXIgVGltZXN0YW1wIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgdGhlIGBzdG1tYWNgIEV0aGVybmV0IGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIGZ1bmN0aW9uLCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSB0aW1lc3RhbXAgaW50ZXJydXB0IGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXNzZWN0IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGFzIGl0J3MgdGhlIG5ldyBsb2dpYy5cblxuRmlyc3QsIGl0IHJlYWRzIHRoZSBgWEdNQUNfVElNRVNUQU1QX1NUQVRVU2AgcmVnaXN0ZXIuIFRoaXMgaXMga2V5OyB0aGlzIHJlYWQgKmFsc28qIGNsZWFycyB0aGUgYFRTSVNgIGJpdCBpbiBgWEdNQUNfSU5UX1NUQVRVU2AuLi5idXQgaXQgbWVudGlvbnMgVFggdGltZXN0YW1wIHBvbGxpbmcgbWlnaHQgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgdGhlc2UgYml0cywgc28gaXQgcmVsaWVzIG9uIGBBVFNOU2AgaW5zdGVhZCwgd2hpY2ggaXMgZ29vZC4gV2UncmUgbG9va2luZyBhdCB0aGUgQVVYIHNuYXBzaG90IGNvdW50IGFuZCBjaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcgc25hcHNob3RzIHZpYSB0aGUgYEFUU05TYCBmaWVsZC4gSXQgdGhlbiByZWFkcyB0aGUgYFBUUF9BQ1JgIHJlZ2lzdGVyLCBleHRyYWN0cyB0aGUgYGNoYW5uZWxgIGZpZWxkIHVzaW5nIGEgbWFzayBhbmQgYGlsb2cyKClgLCBwcmVzdW1hYmx5IHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgUFRQIGNoYW5uZWwuXG5cblRoZSBjb3JlIG9mIHRoZSBsb2dpYyBpcyB3aXRoaW4gdGhhdCBgZm9yYCBsb29wLCBpdGVyYXRpbmcgdGhyb3VnaCBgcGVuZGluZ19zbmFwc2hvdHNgLiBJbnNpZGUgdGhlIGxvb3AsIGEgcmVhZCBsb2NrIGlzIGFjcXVpcmVkLCBwcm90ZWN0aW5nIHRoZSBgcHRwX3RpbWVgIHJlYWQuIFRoZW4sIGl0IHVzZXMgYHN0bW1hY19nZXRfcHRwdGltZWAgdG8gYWN0dWFsbHkgZ2V0IHRoZSBQVFAgdGltZXN0YW1wLiAgQSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgaXMgc2V0IHVwOiB0aGUgYHR5cGVgIGlzIGBQVFBfQ0xPQ0tfRVhUVFNgLCB0aGUgYGluZGV4YCBpcyBgY2hhbm5lbGAsIGFuZCBgdGltZXN0YW1wYCBpcyBzZXQuIEZpbmFsbHksIGBwdHBfY2xvY2tfZXZlbnRgIGlzIGNhbGxlZCB3aXRoIHRoaXMgYGV2ZW50YCBzdHJ1Y3R1cmUuXG5cbk5vdywgYSBiaXQgb2YgYSBjb2RlIHNtZWxsLi4uYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7YCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiBUaGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgYnViYmxpbmcgdXAgaXM6IHdoYXQgKmVsc2UqIGlzIGluIHRoYXQgYHB0cF9jbG9ja19ldmVudGAgc3RydWN0PyBBcmUgdGhlcmUgb3RoZXIgZmllbGRzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCBkYXRhIGl0IGNvbnRhaW5zLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCBvciB3ZSBtYXkgaGF2ZSBhIGRhdGEgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6NTYuMTE0NjI0MDc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUwMDUzMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg9MjMxPWVudW0gcHRwX2Nsb2NrX2V2ZW50cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaC0yNDgtXFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6MjQ5OnN0cnVjdCBwdHBfY2xvY2tfZXZlbnQge1xcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTI1MC1cXHRpbnQgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDU6NTguNDY0NjgzNTU1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM5NTY3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCB3aXRoIGFuIGV4cGVydCdzIGV5ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBmdWxsIGRlZmluaXRpb24gb2YgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCwgc2hhbGwgd2U/IEtub3dpbmcgdGhlIGRlZmluaXRpb24gaW4gZGV0YWlsIHdpbGwgYWxsb3cgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgdGltZSBzeW5jaHJvbml6YXRpb24gZXZlbnQgaXMgc3RydWN0dXJlZCBhbmQgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGV2ZW50cyBhcmUgcmVwcmVzZW50ZWQgYXQgdGhlIGhhcmR3YXJlIGxldmVsLCB3aGF0IGluZm9ybWF0aW9uIGlzIHBhc3NlZCwgYW5kIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIGl0LiBUaGVyZSBhcmUgcHJvYmFibHkga2V5IGZpZWxkcyByZWxhdGVkIHRvIHRoZSBldmVudCB0eXBlICh3aGV0aGVyIGl04oCZcyBhIHRpbWVzdGFtcCwgYSBkZWxheSByZXF1ZXN0LCBhIHN5bmMgZXZlbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5KSwgdGhlIHRpbWVzdGFtcCBpdHNlbGYgKG9mIGNvdXJzZSEpLCBhbmQgYW55IGFzc29jaWF0ZWQgZmxhZ3Mgb3Igc3RhdHVzIGNvZGVzLiBJJ20gYWxzbyBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGlkZW50aWZpZXIgZm9yIHRoZSBQVFAgY2xvY2sgaW52b2x2ZWQgYW5kIGRldGFpbHMgcmVsYXRpbmcgdG8gYW55IGhhcmR3YXJlLXNwZWNpZmljIGNoYXJhY3RlcmlzdGljcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgc3RydWN0dXJlIGlzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZSBoYXJkd2FyZSB0aW1lciwgdGhlIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBQVFAtc3BlY2lmaWMgZHJpdmVycy4gSXQncyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgUFRQIHRpbWVrZWVwaW5nLiBMZXQncyBzZWUgaG93IHdlbGwgaXQncyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjAxLjk2ODY0MzI2N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ4OlxcdFxcbiAyNDk6XFx0c3RydWN0IHB0cF9jbG9ja19ldmVudCB7XFxuIDI1MDpcXHRcXHRpbnQgdHlwZTtcXG4gMjUxOlxcdFxcdGludCBpbmRleDtcXG4gMjUyOlxcdFxcdHVuaW9uIHtcXG4gMjUzOlxcdFxcdFxcdHU2NCB0aW1lc3RhbXA7XFxuIDI1NDpcXHRcXHRcXHRzNjQgb2Zmc2V0O1xcbiAyNTU6XFx0XFx0XFx0c3RydWN0IHBwc19ldmVudF90aW1lIHBwc190aW1lcztcXG4gMjU2OlxcdFxcdH07XFxuIDI1NzpcXHR9O1xcbiAyNTg6XFx0XFxuIDI1OTpcXHQvKipcXG4gMjYwOlxcdCAqIHNjYWxlZF9wcG1fdG9fcHBiKCkgLSBjb252ZXJ0IHNjYWxlZCBwcG0gdG8gcHBiXFxuIDI2MTpcXHQgKlxcbiAyNjI6XFx0ICogQHBwbTogICAgUGFydHMgcGVyIG1pbGxpb24sIGJ1dCB3aXRoIGEgMTYgYml0IGJpbmFyeSBmcmFjdGlvbmFsIGZpZWxkXFxuIDI2MzpcXHQgKi9cXG4gMjY0OlxcdHN0YXRpYyBpbmxpbmUgbG9uZyBzY2FsZWRfcHBtX3RvX3BwYihsb25nIHBwbSlcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdC8qXFxuIDI2NzpcXHRcXHQgKiBUaGUgJ2ZyZXEnIGZpZWxkIGluIHRoZSAnc3RydWN0IHRpbWV4JyBpcyBpbiBwYXJ0cyBwZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MDEuOTY4NzY3NTE3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODUwNDYyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQVFAgQ2xvY2sgRXZlbnQgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgdGhlbiB0aGlzIHVuaW9uLiBUaGUgaW50ZW50IGlzIGNsZWFyOyBpdCdzIGEgd2F5IHRvIHN0b3JlIGVpdGhlciBhIHRpbWVzdGFtcCwgYW4gb2Zmc2V0LCBvciBzb21lIGBwcHNfZXZlbnRfdGltZWAgZGF0YS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYHRpbWVzdGFtcGAgd2hpY2ggaXMgYSBgdTY0YC4gSG93ZXZlciwgdGhhdCB1bmlvbiB3aXRoIGBwcHNfZXZlbnRfdGltZWAgaXMgZ2l2aW5nIG1lIHBhdXNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlIHNpemUgaXMgY29ycmVjdC4gSXQncyB2aXRhbCB0aGF0IHRoZSB1bmlvbiBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBtZW1iZXIuIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHBwc19ldmVudF90aW1lYCByaWdodCBub3cgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgZ2V0dGluZyB0cnVuY2F0ZWQgb3IgY2F1c2luZyBhIG1lbW9yeSBvdmVycnVuLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjowNi4yNTM4MTY2OTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTA0MTQzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHBwc19ldmVudF90aW1lIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oPTIzPXN0cnVjdCBwcHNfc291cmNlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmgtMzQtXFxuaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmg6MzU6c3RydWN0IHBwc19ldmVudF90aW1lIHtcXG5pbmNsdWRlL2xpbnV4L3Bwc19rZXJuZWwuaC0zNi0jaWZkZWYgQ09ORklHX05UUF9QUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MDguNzY0MjU4MTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNjk2MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IHBwc19ldmVudF90aW1lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBgcHBzX2V2ZW50X3RpbWVgIHN0cnVjdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGp1c3QgZXhhbWluaW5nIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgc3RydWN0IGxpa2VseSBob2xkcyB0aGUgcmF3IHRpbWVzdGFtcCBpbmZvcm1hdGlvbiBmb3IgUFBTIGV2ZW50cywgcHJvYmFibHkgcmVwcmVzZW50aW5nIGEgc25hcHNob3Qgb2YgdGhlIGhhcmR3YXJlJ3MgaW50ZXJuYWwgY291bnRlciBvciBhIHRpbWUgc291cmNlIGxpa2UgYSBHUFMgcmVjZWl2ZXIuIEknbSBsb29raW5nIGZvciBmaWVsZHMgdGhhdCByZWxhdGUgdG8gc2Vjb25kcywgbmFub3NlY29uZHMsIG9yIG90aGVyIHRpbWUtcmVsYXRlZCBjb21wb25lbnRzLCBhbmQgaG93IHRoZXNlIGFyZSByZXByZXNlbnRlZC4gQXJlIHRoZXkgdXNpbmcgc3RhbmRhcmQgdHlwZXMgbGlrZSBgdGltZV90YCwgYHN0cnVjdCB0aW1lc3BlY2AsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGFueSBpbmZvcm1hdGlvbiBvbiB3aGljaCB0aW1lIHNvdXJjZSB0aGUgdGltZXN0YW1wIGNvbWVzIGZyb20sIG9yIGlmIHRoZSB0aW1lc3RhbXBzIGFyZSBzeW5jaHJvbml6ZWQuIEknbSBhbHNvIGhvcGluZyB0aGVyZSBhcmUgc29tZSBoaW50cyBhYm91dCB0aGUgdGltZSBzY2FsZSB1c2VkIChVVEMsIFRBSSwgZXRjKSBpZiBhdmFpbGFibGUuIFRoZSB1bmRlcmx5aW5nIGRhdGEgZm9ybWF0IGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhZGF0YSBhcmUgbW9zdCBpbXBvcnRhbnQgdG8gbXkgaW50ZXJlc3QsIGFzIEknbGwgbmVlZCB0byBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGUgdGltZSB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MTMuNjgxMjIxNjdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wcHNfa2VybmVsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0c3RydWN0IHBwc19ldmVudF90aW1lIHtcXG4gIDM2OlxcdCNpZmRlZiBDT05GSUdfTlRQX1BQU1xcbiAgMzc6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfcmF3O1xcbiAgMzg6XFx0I2VuZGlmIC8qIENPTkZJR19OVFBfUFBTICovXFxuICAzOTpcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19yZWFsO1xcbiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0LyogVGhlIG1haW4gc3RydWN0ICovXFxuICA0MzpcXHRzdHJ1Y3QgcHBzX2RldmljZSB7XFxuICA0NDpcXHRcXHRzdHJ1Y3QgcHBzX3NvdXJjZV9pbmZvIGluZm87XFx0XFx0LyogUFNTIHNvdXJjZSBpbmZvICovXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdHN0cnVjdCBwcHNfa3BhcmFtcyBwYXJhbXM7XFx0XFx0LyogUFBTIGN1cnJlbnQgcGFyYW1zICovXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdF9fdTMyIGFzc2VydF9zZXF1ZW5jZTtcXHRcXHRcXHQvKiBQUFMgYXNzZXJ0IGV2ZW50IHNlcSAjICovXFxuICA0OTpcXHRcXHRfX3UzMiBjbGVhcl9zZXF1ZW5jZTtcXHRcXHRcXHQvKiBQUFMgY2xlYXIgZXZlbnQgc2VxICMgKi9cXG4gIDUwOlxcdFxcdHN0cnVjdCBwcHNfa3RpbWUgYXNzZXJ0X3R1O1xcbiAgNTE6XFx0XFx0c3RydWN0IHBwc19rdGltZSBjbGVhcl90dTtcXG4gIDUyOlxcdFxcdGludCBjdXJyZW50X21vZGU7XFx0XFx0XFx0LyogUFBTIG1vZGUgYXQgZXZlbnQgdGltZSAqL1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHR1bnNpZ25lZCBpbnQgbGFzdF9ldjtcXHRcXHRcXHQvKiBsYXN0IFBQUyBldmVudCBpZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjoxMy42ODEzMTY5NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM1NTQxMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEZvb3RwcmludCBvZiBQVFAgQ2xvY2sgRXZlbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBwcHNfZXZlbnRfdGltZWAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGl0IGhvbGRzIG9uZSBvciB0d28gYHRpbWVzcGVjNjRgIHN0cnVjdHMuIFNpbmNlIGVhY2ggYHRpbWVzcGVjNjRgIGlzIDE2IGJ5dGVzLCB3aXRoIDggYnl0ZXMgZm9yIHNlY29uZHMgYW5kIDggYnl0ZXMgZm9yIG5hbm9zZWNvbmRzLCB0aGUgYHBwc19ldmVudF90aW1lYCBpcyBnb2luZyB0byBiZSBhdCBsZWFzdCAxNiBieXRlcywgbWF5YmUgdXAgdG8gMzIgYnl0ZXMgaWYgaXQgaG9sZHMgdHdvIG9mIHRob3NlIHRoaW5ncy4gTm93LCBsb29raW5nIGF0IHRoZSBgcHRwX2Nsb2NrX2V2ZW50YCBzdHJ1Y3R1cmUsIHRoZXJlJ3MgdGhhdCB1bmlvbjpcblxuYGBgY1xuXHRcdHVuaW9uIHtcblx0XHRcdHU2NCB0aW1lc3RhbXA7XG5cdFx0XHRzNjQgb2Zmc2V0O1xuXHRcdFx0c3RydWN0IHBwc19ldmVudF90aW1lIHBwc190aW1lcztcblx0XHR9O1xuYGBgXG5cblJpZ2h0LCBhIGB1NjQgdGltZXN0YW1wYCBpcyBqdXN0IDggYnl0ZXMuIEhlcmUncyB0aGUgcG90ZW50aWFsIHByb2JsZW06IGlmIGBldmVudC50aW1lc3RhbXBgIGlzIHVzZWQsIG9ubHkgdGhlIGluaXRpYWwgOCBieXRlcyBvZiB0aGF0IHVuaW9uIGFyZSBhY3R1YWxseSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtZWFucyB0aGUgb3RoZXIgOCB0byAyNCBieXRlcyBpbiB0aGUgdW5pb24gcmVtYWluIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZSFcblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBoYXBwZW5zIHdoZW4gYHB0cF9jbG9ja19ldmVudCgpYCBpcyBjYWxsZWQ/IERvZXMgaXQgY29weSB0aGUgKmVudGlyZSogYHB0cF9jbG9ja19ldmVudGAgc3RydWN0dXJlLCBvciBkb2VzIGl0IG9ubHkgcmVhZCBzcGVjaWZpYyBmaWVsZHMgYmFzZWQgb24gdGhlIGV2ZW50IGB0eXBlYD8gSWYgaXQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUsIHdlJ3ZlIGdvdCBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlIGhlcmUsIHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgaXQgb25seSByZWFkcyB0aGUgcmVsZXZhbnQgZmllbGRzLCB3ZSdyZSBwcm9iYWJseSBva2F5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYHB0cF9jbG9ja19ldmVudCgpYCBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgb24gdGhlIHJlYWQgc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjIxLjgxNjg2MTIxNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwODI0MzY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHB0cF9jbG9ja19ldmVudFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTUzMj1FWFBPUlRfU1lNQk9MKHB0cF9jbG9ja191bnJlZ2lzdGVyKTtcXG5kcml2ZXJzL3B0cC9wdHBfY2xvY2suYy01MzMtXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmM6NTM0OnZvaWQgcHRwX2Nsb2NrX2V2ZW50KHN0cnVjdCBwdHBfY2xvY2sgKnB0cCwgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqZXZlbnQpXFxuZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmMtNTM1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oPTM1ND1leHRlcm4gaW50IHB0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBwdHBfY2xvY2sgKnB0cCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaC0zNjItXFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6MzYzOmV4dGVybiB2b2lkIHB0cF9jbG9ja19ldmVudChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHAsXFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmgtMzY0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD00NTA9c3RhdGljIGlubGluZSBpbnQgcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IHB0cF9jbG9jayAqcHRwKVxcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTQ1MS17IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9wdHBfY2xvY2tfa2VybmVsLmg6NDUyOnN0YXRpYyBpbmxpbmUgdm9pZCBwdHBfY2xvY2tfZXZlbnQoc3RydWN0IHB0cF9jbG9jayAqcHRwLFxcbmluY2x1ZGUvbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oLTQ1My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpldmVudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MjQuNzI1MTEyMzA3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDMyNTg0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUCBDbG9jayBFdmVudCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHB0cF9jbG9ja19ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfY2xvY2suY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIGNsb2NrIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIHJlc2lkZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGludGVycHJldHMgYW5kIHJlc3BvbmRzIHRvIHZhcmlvdXMgdGltZSBzeW5jaHJvbml6YXRpb24gZXZlbnRzLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGltZXN0YW1wcywgaW50ZXJydXB0cywgYW5kIGxpa2VseSBzb21lIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgdG8gZW5zdXJlIGFjY3VyYXRlIHRpbWVrZWVwaW5nLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIFBUUCBjbG9jayBhbmQgYW55IGFzc29jaWF0ZWQgbmV0d29yayBpbnRlcmZhY2VzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZSBpbXBsZW1lbnRhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjMwLjY2ODM3MzYxNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTM0OlxcdHZvaWQgcHRwX2Nsb2NrX2V2ZW50KHN0cnVjdCBwdHBfY2xvY2sgKnB0cCwgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqZXZlbnQpXFxuIDUzNTpcXHR7XFxuIDUzNjpcXHRcXHRzdHJ1Y3QgdGltZXN0YW1wX2V2ZW50X3F1ZXVlICp0c2V2cTtcXG4gNTM3OlxcdFxcdHN0cnVjdCBwcHNfZXZlbnRfdGltZSBldnQ7XFxuIDUzODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA1Mzk6XFx0XFxuIDU0MDpcXHRcXHRzd2l0Y2ggKGV2ZW50LVxcdTAwM2V0eXBlKSB7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdGNhc2UgUFRQX0NMT0NLX0FMQVJNOlxcbiA1NDM6XFx0XFx0XFx0YnJlYWs7XFxuIDU0NDpcXHRcXG4gNTQ1OlxcdFxcdGNhc2UgUFRQX0NMT0NLX0VYVFRTOlxcbiA1NDY6XFx0XFx0Y2FzZSBQVFBfQ0xPQ0tfRVhUT0ZGOlxcbiA1NDc6XFx0XFx0XFx0LyogRW5xdWV1ZSB0aW1lc3RhbXAgb24gc2VsZWN0ZWQgcXVldWVzICovXFxuIDU0ODpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHRwLVxcdTAwM2V0c2V2cXNfbG9jaywgZmxhZ3MpO1xcbiA1NDk6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0c2V2cSwgXFx1MDAyNnB0cC1cXHUwMDNldHNldnFzLCBxbGlzdCkge1xcbiA1NTA6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYml0KCh1bnNpZ25lZCBpbnQpZXZlbnQtXFx1MDAzZWluZGV4LCB0c2V2cS1cXHUwMDNlbWFzaykpXFxuIDU1MTpcXHRcXHRcXHRcXHRcXHRlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcCh0c2V2cSwgZXZlbnQpO1xcbiA1NTI6XFx0XFx0XFx0fVxcbiA1NTM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRwLVxcdTAwM2V0c2V2cXNfbG9jaywgZmxhZ3MpO1xcbiA1NTQ6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwdHAtXFx1MDAzZXRzZXZfd3EpO1xcbiA1NTU6XFx0XFx0XFx0YnJlYWs7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGNhc2UgUFRQX0NMT0NLX1BQUzpcXG4gNTU4OlxcdFxcdFxcdHBwc19nZXRfdHMoXFx1MDAyNmV2dCk7XFxuIDU1OTpcXHRcXHRcXHRwcHNfZXZlbnQocHRwLVxcdTAwM2VwcHNfc291cmNlLCBcXHUwMDI2ZXZ0LCBQVFBfUFBTX0VWRU5ULCBOVUxMKTtcXG4gNTYwOlxcdFxcdFxcdGJyZWFrO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRjYXNlIFBUUF9DTE9DS19QUFNVU1I6XFxuIDU2MzpcXHRcXHRcXHRwcHNfZXZlbnQocHRwLVxcdTAwM2VwcHNfc291cmNlLCBcXHUwMDI2ZXZlbnQtXFx1MDAzZXBwc190aW1lcyxcXG4gNTY0OlxcdFxcdFxcdFxcdCAgUFRQX1BQU19FVkVOVCwgTlVMTCk7XFxuIDU2NTpcXHRcXHRcXHRicmVhaztcXG4gNTY2OlxcdFxcdH1cXG4gNTY3OlxcdH1cXG4gNTY4OlxcdEVYUE9SVF9TWU1CT0wocHRwX2Nsb2NrX2V2ZW50KTtcXG4gNTY5OlxcdFxcbiA1NzA6XFx0aW50IHB0cF9jbG9ja19pbmRleChzdHJ1Y3QgcHRwX2Nsb2NrICpwdHApXFxuIDU3MTpcXHR7XFxuIDU3MjpcXHRcXHRyZXR1cm4gcHRwLVxcdTAwM2VpbmRleDtcXG4gNTczOlxcdH1cXG4gNTc0OlxcdEVYUE9SVF9TWU1CT0wocHRwX2Nsb2NrX2luZGV4KTtcXG4gNTc1OlxcdFxcbiA1NzY6XFx0c3RhdGljIGludCBwdHBfY2xvY2tfb2Zfbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpXFxuIDU3NzpcXHR7XFxuIDU3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudF9ucCA9IGRhdGE7XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdHJldHVybiAoZGV2LVxcdTAwM2VwYXJlbnQgXFx1MDAyNlxcdTAwMjYgZGV2X29mX25vZGUoZGV2LVxcdTAwM2VwYXJlbnQpID09IHBhcmVudF9ucCk7XFxuIDU4MTpcXHR9XFxuIDU4MjpcXHRcXG4gNTgzOlxcdGludCBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjozMC42Njg0Nzc4OTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDYwOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUCBUaW1lc3RhbXBpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gaW4gYHB0cF9jbG9ja19ldmVudGAsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBSaWdodCwgdGhhdCdzIGV4dGVybmFsIHRpbWVzdGFtcGluZy4gQW5kIHRoZSBjb2RlJ3MgY2FsbGluZyBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXAodHNldnEsIGV2ZW50KWAuIE15IGJyYWluIGltbWVkaWF0ZWx5IHdhbnRzIHRvIHpvb20gaW4gb24gdGhhdCBmdW5jdGlvbi4gTGV0J3MgZGlnIGludG8gYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCDigJMgdGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXh0ZXJuYWwgdGltZXN0YW1wIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCBhbmQgcXVldWVkIGZvciBwcm9jZXNzaW5nLiBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgd2hhdCBkb2VzIGl0IGRvIHdpdGggYHRzZXZxYCBhbmQgYGV2ZW50YD8gSSdtIGFudGljaXBhdGluZyBzb21lIGNyaXRpY2FsIHRpbWVzdGFtcC1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgd2l0aGluIHRoYXQgY2FsbC4gSXQncyB0aGUgbHluY2hwaW4gZm9yIGludGVncmF0aW5nIGV4dGVybmFsIGhhcmR3YXJlIHRpbWVzdGFtcHMgaW50byB0aGUgUFRQIHN5c3RlbSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgcmVzaWRlcy4gVGltZSB0byBkZWx2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6MzQuMDk5MDkzNjFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDcwNjM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF9jbG9jay5jPTQyPXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2ZyZWUoc3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTQ2LVxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jOjQ3OnN0YXRpYyB2b2lkIGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wKHN0cnVjdCB0aW1lc3RhbXBfZXZlbnRfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvcHRwL3B0cF9jbG9jay5jLTQ4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50ICpzcmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE2OjA2OjM1Ljk0NjE2MTcyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjA5MTkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggbXkgdXN1YWwgbWV0aG9kaWNhbCBwcm9jZXNzLlxuXG4qKkFuYWx5emluZyBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgKipcblxuRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBkby4gVGhlIG5hbWUgaXRzZWxmIGdpdmVzIGEgc3Ryb25nIGhpbnQsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVtcCB0byBjb25jbHVzaW9ucy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBXaGF0J3MgdGhlIHNpZ25hdHVyZT8gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHJldHVybiB2YWx1ZXMgb3Igc2lkZSBlZmZlY3RzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbW1lbnRzLCBpZiBhbnksIHRoYXQgYXJlIGluY2x1ZGVkIHdpdGggdGhlIGZ1bmN0aW9uLlxuXG5PbmNlIEkgaGF2ZSBhIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSwgSSdsbCBleGFtaW5lIHRoZSBpbnRlcm5hbCBsb2dpYy4gSSB3aWxsIGNoZWNrIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXMgaXQgcm9idXN0PyBEb2VzIGl0IGNoZWNrIGZvciBpbnZhbGlkIHRpbWVzdGFtcHMsIHF1ZXVlIG92ZXJmbG93LCBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkIGlmIHRoZXkgYXJpc2U/XG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBJcyBpdCB1c2luZyBhIHNpbXBsZSBxdWV1ZSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgcHJpb3JpdHkgcXVldWUgb3IgYSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlP1xuKiAgICoqQ29uY3VycmVuY3k6KiogRG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBtdWx0aXRocmVhZGluZyBvciBhbnkgY29uY3VycmVudCBhY2Nlc3M/IElmIHNvLCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHk/IFRoaXMgaXMgY3J1Y2lhbCwgcGFydGljdWxhcmx5IGlmIHRpbWVzdGFtcHMgYXJlIHNoYXJlZCByZXNvdXJjZXMuXG4qICAgKipFZmZpY2llbmN5OioqIEhvdyBkb2VzIGl0IHBlcmZvcm0gdW5kZXIgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHVubmVjZXNzYXJ5IGNvcHlpbmcgb3IgbG9ja2luZy5cbiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBtb2R1bGVzIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlc2UgZGVwZW5kZW5jaWVzIHdlbGwtZGVmaW5lZCBhbmQgZG9jdW1lbnRlZD9cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IG1pZ2h0IGluZmx1ZW5jZSB0aGUgZnVuY3Rpb24ncyBiZWhhdmlvci4gSSB3aWxsIGFsc28gYmUgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGltZXN0YW1wIGlzIGJlaW5nIHN0b3JlZCBpbiBhIHByZWRpY3RhYmxlIGFuZCByZWxpYWJsZSBmYXNoaW9uLCBhbmQgaWYgaXQgaXMgYmVpbmcgcGFzc2VkIG9mZiB0byBhbiBleHRlcm5hbCBzeXN0ZW0sIEkgd2lsbCBhbHNvIGFuYWx5emUgYW55IGFzc29jaWF0ZWQgc2VjdXJpdHkgcmlza3MgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIGNvbmNlcm5zLlxuXG5BZnRlciB0aGlzIGluaXRpYWwgYW5hbHlzaXMsIEknbGwgYmUgbG9va2luZyBhdCBob3cgaXQgaXMgdXNlZCB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IG5lZWQgYXR0ZW50aW9uPyBXaGF0IGRvZXMgaXQgKnJlYWxseSogbWVhbiBmb3IgYSB0aW1lc3RhbXAgdG8gYmUgXCJleHRlcm5hbFwiPyBJcyBpdCBqdXN0IGNvbWluZyBmcm9tIGFub3RoZXIgc3lzdGVtLCBvciBkb2VzIGl0IGltcGx5IHNwZWNpZmljIHRpbWUgc3luY2hyb25pemF0aW9uIHByb3RvY29scyBvciByZXF1aXJlbWVudHM/XG5cblVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgc3lzdGVtJ3MgcmVsaWFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIEknbGwgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgdGVzdGluZyB0b28sIGNvbnNpZGVyaW5nIHdoYXQgdGhlIGVkZ2UgY2FzZXMgYXJlLCB3aGF0IGZhaWx1cmUgc2NlbmFyaW9zIGFyZSBsaWtlbHksIGFuZCBob3cgYmVzdCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZCB1bmRlciBhIHZhcmlldHkgb2YgY29uZGl0aW9ucy4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjo0My4wNjcwODM0ODNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDc6XFx0c3RhdGljIHZvaWQgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXAoc3RydWN0IHRpbWVzdGFtcF9ldmVudF9xdWV1ZSAqcXVldWUsXFxuICA0ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0cF9jbG9ja19ldmVudCAqc3JjKVxcbiAgNDk6XFx0e1xcbiAgNTA6XFx0XFx0c3RydWN0IHB0cF9leHR0c19ldmVudCAqZHN0O1xcbiAgNTE6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgb2Zmc2V0X3RzO1xcbiAgNTI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDUzOlxcdFxcdHM2NCBzZWNvbmRzO1xcbiAgNTQ6XFx0XFx0dTMyIHJlbWFpbmRlcjtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0aWYgKHNyYy1cXHUwMDNldHlwZSA9PSBQVFBfQ0xPQ0tfRVhUVFMpIHtcXG4gIDU3OlxcdFxcdFxcdHNlY29uZHMgPSBkaXZfdTY0X3JlbShzcmMtXFx1MDAzZXRpbWVzdGFtcCwgMTAwMDAwMDAwMCwgXFx1MDAyNnJlbWFpbmRlcik7XFxuICA1ODpcXHRcXHR9IGVsc2UgaWYgKHNyYy1cXHUwMDNldHlwZSA9PSBQVFBfQ0xPQ0tfRVhUT0ZGKSB7XFxuICA1OTpcXHRcXHRcXHRvZmZzZXRfdHMgPSBuc190b190aW1lc3BlYzY0KHNyYy1cXHUwMDNlb2Zmc2V0KTtcXG4gIDYwOlxcdFxcdFxcdHNlY29uZHMgPSBvZmZzZXRfdHMudHZfc2VjO1xcbiAgNjE6XFx0XFx0XFx0cmVtYWluZGVyID0gb2Zmc2V0X3RzLnR2X25zZWM7XFxuICA2MjpcXHRcXHR9IGVsc2Uge1xcbiAgNjM6XFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IHVua25vd24gdHlwZSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHNyYy1cXHUwMDNldHlwZSk7XFxuICA2NDpcXHRcXHRcXHRyZXR1cm47XFxuICA2NTpcXHRcXHR9XFxuICA2NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6NDMuMDY3MTczMDUzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDE3NDc2OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGUgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCwgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipEaXZpbmcgaW50byBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBlbnF1ZXVlX2V4dGVybmFsX3RpbWVzdGFtcGAuIEl0J3MgcHJldHR5IGNsZWFyIGZyb20gdGhlIG5hbWUgd2hhdCB0aGUgZnVuY3Rpb24gKmludGVuZHMqIHRvIGRvLCBidXQgbGV0J3Mgc2VlIGhvdyBpdCBhY3R1YWxseSBoYW5kbGVzIHRoZSB0YXNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFkZGluZyBhbiBleHRlcm5hbCB0aW1lc3RhbXAgdG8gd2hhdGV2ZXIgcXVldWUgaXQgdXRpbGl6ZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5IGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIG90aGVyIHRpbWUgbWFuYWdlbWVudCBwcmltaXRpdmVzIG9mIHRoZSBzeXN0ZW0uIEkgYW0gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbmN5LiBJIGFtIGFzc3VtaW5nIHRoZXJlIGlzIHNvbWUgc29ydCBvZiBldmVudC1kcml2ZW4gbWVjaGFuaXNtIGhhcHBlbmluZyBoZXJlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBob3cgZWZmaWNpZW50bHkgdGhlIGZ1bmN0aW9uIGFjaGlldmVzIGl0cyBnb2Fscy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHdoZXJlIGl0IG1pZ2h0IGJlIGluZWZmaWNpZW50LCBvciB3aGVyZSBpdCBhc3N1bWVzIGEgY2VydGFpbiBjbG9jayBzb3VyY2UgaXMgYXZhaWxhYmxlLiBUaW1lIHN0YW1waW5nIGlzIGEgdmVyeSBoYXJkIHByb2JsZW0gdG8gc29sdmUgZ2VuZXJhbGx5LCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgY2FyZWZ1bGx5IHRoZSBhdXRob3JzIHRob3VnaHQgYWJvdXQgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgc2NoZWR1bGVyLCBpZiB0aGlzIGlzIGV2ZW4gc29tZXRoaW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYgZGVhbHMgd2l0aC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3JrcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNjo1NC4wODQ2NTMwNDZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX2Nsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjc6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnF1ZXVlLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGRzdCA9IFxcdTAwMjZxdWV1ZS1cXHUwMDNlYnVmW3F1ZXVlLVxcdTAwM2V0YWlsXTtcXG4gIDcwOlxcdFxcdGRzdC1cXHUwMDNlaW5kZXggPSBzcmMtXFx1MDAzZWluZGV4O1xcbiAgNzE6XFx0XFx0ZHN0LVxcdTAwM2VmbGFncyA9IFBUUF9FWFRUU19FVkVOVF9WQUxJRDtcXG4gIDcyOlxcdFxcdGRzdC1cXHUwMDNldC5zZWMgPSBzZWNvbmRzO1xcbiAgNzM6XFx0XFx0ZHN0LVxcdTAwM2V0Lm5zZWMgPSByZW1haW5kZXI7XFxuICA3NDpcXHRcXHRpZiAoc3JjLVxcdTAwM2V0eXBlID09IFBUUF9DTE9DS19FWFRPRkYpXFxuICA3NTpcXHRcXHRcXHRkc3QtXFx1MDAzZWZsYWdzIHw9IFBUUF9FWFRfT0ZGU0VUO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQvKiBCb3RoIFdSSVRFX09OQ0UoKSBhcmUgcGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gcXVldWVfY250KCkgKi9cXG4gIDc4OlxcdFxcdGlmICghcXVldWVfZnJlZShxdWV1ZSkpXFxuICA3OTpcXHRcXHRcXHRXUklURV9PTkNFKHF1ZXVlLVxcdTAwM2VoZWFkLCAocXVldWUtXFx1MDAzZWhlYWQgKyAxKSAlIFBUUF9NQVhfVElNRVNUQU1QUyk7XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdFdSSVRFX09OQ0UocXVldWUtXFx1MDAzZXRhaWwsIChxdWV1ZS1cXHUwMDNldGFpbCArIDEpICUgUFRQX01BWF9USU1FU1RBTVBTKTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cXVldWUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gIDg0OlxcdH1cXG4gIDg1OlxcdFxcbiAgODY6XFx0LyogcG9zaXggY2xvY2sgaW1wbGVtZW50YXRpb24gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDY6NTQuMDg0NzI5OTE2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MTUxNTk3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWtzKipcblxuT2theSwgc28gYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0ICpvbmx5KiBjYXJlcyBhYm91dCBgc3JjLVx1MDAzZXR5cGVgLCBgc3JjLVx1MDAzZXRpbWVzdGFtcGAsIGFuZCBgc3JjLVx1MDAzZWluZGV4YC4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pb24gbWVtYmVycyB3aXRoaW4gdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50YCBhcmUgZWZmZWN0aXZlbHkgaXJyZWxldmFudC4gVGhleSBhcmVuJ3QgY29waWVkLCB0aGV5IGFyZW4ndCB1c2VkLiBNeSBpbml0aWFsIGNvbmNlcm4gYWJvdXQgYSBsZWFrIHRoZXJlIGlzIHVuZm91bmRlZCwgd2hpY2ggaXMgZ3JlYXQgbmV3cy5cblxuQnV0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFdoZXJlIGVsc2UgaXMgdGhpcyBgZXZlbnRgIHN0cnVjdHVyZSB1c2VkPyBMZXQncyBjaGVjayB0aGUgY29kZTpcblxuSW4gdGhlIGBwdHBfY2xvY2tfZXZlbnRgIGZ1bmN0aW9uLCBpdCBhbHNvIHVzZXMgYGV2ZW50LVx1MDAzZWluZGV4YCBpbiBhIGxvb3Agd2l0aCB0aGUgYGVucXVldWVfZXh0ZXJuYWxfdGltZXN0YW1wYCBmdW5jdGlvbi4gSXQncyB0aGUgc2FtZSBzaXR1YXRpb247IG5vIG90aGVyIGZpZWxkcyBhcmUgdXNlZC4gU28gc3RpbGwgc2FmZSB0aGVyZSFcblxuT2theSwgb25lIG1vcmUgYXJlYSB0byBpbnZlc3RpZ2F0ZSDigJMgd2hhdCBhYm91dCBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGA/IEhlcmUsIHRoZXkgY29uc3RydWN0IHRoZSBgZXZlbnRgIHN0cnVjdHVyZSBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSBgZXZlbnQudGltZXN0YW1wYCBjb21lcyBmcm9tIGBzdG1tYWNfZ2V0X3B0cHRpbWVgLiBCdXQgaXMgYHB0cF90aW1lYCAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBhc3NpZ25lZCB0byBgZXZlbnQudGltZXN0YW1wYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSWYgdGhhdCdzIGluaXRpYWxpemVkLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODg4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6MDMuNDk5ODkyNjgyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3MTAzMDgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHN0bW1hY19nZXRfcHRwdGltZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNjowNzowNS45NTcwMDQyNjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ0MDc2MjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUaW1pbmcgRnVuY3Rpb24gUXVlcnkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGltaW5nLCBtb3N0IGxpa2VseSBQcmVjaXNlIFRpbWUgUHJvdG9jb2wgKFBUUCkgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbDogYHN0bW1hY19nZXRfcHRwdGltZWAuIEJ1dCwgd2FpdC4uLiBjb3VsZCBpdCBiZSBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCBleHBhbmRzIHRvIHNvbWV0aGluZyBlbHNlPyBUaGF0J3MgY29tbW9uIGZvciBlZmZpY2llbmN5IG9yIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGVzcGVjaWFsbHkgYXQgdGhpcyBsb3cgbGV2ZWwuXG5cblRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkuIFRoZSBiZXN0IG1vdmUgbm93IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHN0bW1hY19nZXRfcHRwdGltZWAgaXMgYSBmdW5jdGlvbiB3aXRoIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24sIG9yIGlmIGl0J3MgYSBtYWNybyB0aGF0IG1heSBwZXJmb3JtIG90aGVyIHRoaW5ncy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjb21wbGV4aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODM2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6MTIuMzk3NzY5Mjk5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkzODYyNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19nZXRfcHRwdGltZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTM1OD1zdGF0aWMgaW50IGludGVsX2Nyb3NzdHN0YW1wKGt0aW1lX3QgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQ2LVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDQ3OlxcdFxcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwdHBhZGRyLCBcXHUwMDI2cHRwX3RpbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQ4LVxcdFxcdCpkZXZpY2UgPSBuc190b19rdGltZShwdHBfdGltZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9Mjk0PXN0YXRpYyBpbnQgc210Z19jcm9zc3RzdGFtcChrdGltZV90ICpkZXZpY2UsIHN0cnVjdCBzeXN0ZW1fY291bnRlcnZhbF90ICpzeXN0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtMzgxLVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzozODI6XFx0XFx0c3RtbWFjX2dldF9wdHB0aW1lKHByaXYsIHB0cGFkZHIsIFxcdTAwMjZwdHBfdGltZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTM4My1cXHRcXHQqZGV2aWNlID0gbnNfdG9fa3RpbWUocHRwX3RpbWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYz01MjM9dm9pZCBkd21hYzEwMDBfdGltZXN0YW1wX2ludGVycnVwdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU0MC1cXHRcXHRyZWFkX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jOjU0MTpcXHRcXHRzdG1tYWNfZ2V0X3B0cHRpbWUocHJpdiwgcHJpdi1cXHUwMDNlcHRwYWRkciwgXFx1MDAyNnB0cF90aW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYzEwMDBfY29yZS5jLTU0Mi1cXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTExNTc9dm9pZCBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTg5LVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMTkwOlxcdFxcdHN0bW1hY19nZXRfcHRwdGltZShwcml2LCBwcml2LVxcdTAwM2VwdHBhZGRyLCBcXHUwMDI2cHRwX3RpbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMTkxLVxcdFxcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9sb2NrLCBmbGFncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NDk2PXN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUyMS1cXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIHB0cCwgZ2V0X3N5c3RpbWUsIF9fYXJncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6NTIyOiNkZWZpbmUgc3RtbWFjX2dldF9wdHB0aW1lKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTUyMy1cXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIHB0cCwgZ2V0X3B0cHRpbWUsIF9fYXJncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6MTQuNTkxNjM3MzMzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDU4NTg3MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTVE1NQUMgUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBEZXRlY3RlZCoqXG5cbk15IGFuYWx5c2lzIGJlZ2lucyBieSBleGFtaW5pbmcgdGhlIGBzdG1tYWNfZ2V0X3B0cHRpbWVgIG1hY3JvLCB3aGljaCBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGBwdHBfdGltZWAgdmFyaWFibGUuIEkgdGhlbiBtb3ZlIG9uIHRvIHNjcnV0aW5pemluZyB0aGUgcGF0Y2ggaXRzZWxmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBzbXRnX2Nyb3NzdHN0YW1wYCBmdW5jdGlvbiBhbmQgdGhlIGludGVycnVwdCBtYXNraW5nIGFuZCB1bm1hc2tpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGBYR01BQ19UU0lFYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggaXMgYWJvdXQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBhbiBpbnRlcnJ1cHQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRpbWVzdGFtcCBwb2xsaW5nLlxuXG5OZXh0LCBJIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBwYXRjaDogdGhlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAuIFRoaXMgaGFuZGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVhZGluZyByZWdpc3RlcnMsIHJldHJpZXZpbmcgYSB0aW1lc3RhbXAsIGFuZCBwYXNzaW5nIGl0IHRvIGBwdHBfY2xvY2tfZXZlbnRgLiBJJ3ZlIGNhcmVmdWxseSBhbmFseXplZCBob3cgdGhlIGBzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50YCBpcyB1c2VkLiAgU3BlY2lmaWNhbGx5LCBJIG5vdGUgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBsb2NhbGx5IG9uIHRoZSBzdGFjaywgYW5kIHdoaWxlIG9ubHkgYSBzdWJzZXQgb2YgaXRzIGZpZWxkcyAodHlwZSwgaW5kZXgsIHRpbWVzdGFtcCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYHB0cF9jbG9ja19ldmVudGAgKm9ubHkqIHJlYWRzIHRoZXNlIGluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHBhZGRpbmcgb3Igb3RoZXIgdW5pb24gZmllbGRzIGFyZSBub3QgdXRpbGl6ZWQuXG5cbk15IGludmVzdGlnYXRpb24gb2YgdGhlIGNhbGwgdG8gYHB0cF9jbG9ja19ldmVudGAgY29uZmlybXMgdGhpcy4gIFRoZSBjb2RlIGluIGBwdHBfY2xvY2tfZXZlbnRgIG9ubHkgcmVhZHMgYGV2ZW50LVx1MDAzZWluZGV4YC4gIFRoZSBmdW5jdGlvbiBgZW5xdWV1ZV9leHRlcm5hbF90aW1lc3RhbXBgIGlzIHRoZW4gY2FsbGVkIGFuZCByZWFkcyBgc3JjLVx1MDAzZXR5cGVgLCBgc3JjLVx1MDAzZXRpbWVzdGFtcGAsIGFuZCBgc3JjLVx1MDAzZWluZGV4YCBidXQgbm8gb3RoZXIgcGFydHMgb2YgdGhlIHN0cnVjdC4gIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIGF0IGFueSBzdGFnZS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBvciB1c2FnZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleGlzdHMgaW4gdGhlIGNvbnRyb2wgZmxvdy4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgbmVlZGVkIGhlcmUuXG5cbkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIGNoYW5nZSB0byB0aGUgYGh3dGltZXN0YW1wYCBvcGVyYXRpb25zLCBjaGFuZ2luZyB0aGUgcG9pbnRlciB0byBgZHd4Z21hYzJfcHRwYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHNpbXBseSB0aGUgYXNzaWdubWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2suXG5cbkluIGNvbmNsdXNpb24sIGFmdGVyIGEgbWV0aWN1bG91cyBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgdXNhZ2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCB3b3VsZCB3YXJyYW50IGZ1cnRoZXIgS01TQU4gYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ5LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTY6MDc6NDIuMDUwMjI3OTY4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHQgaGFuZGxlciBgZHd4Z21hYzJfdGltZXN0YW1wX2ludGVycnVwdGAgd2hpY2ggYWxsb2NhdGVzIGEgYHN0cnVjdCBwdHBfY2xvY2tfZXZlbnRgIG9uIHRoZSBzdGFjay4gV2hpbGUgb25seSB0aGUgYHR5cGVgLCBgaW5kZXhgLCBhbmQgYHRpbWVzdGFtcGAgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbml0aWFsaXplZCAobGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdW5pb24vcGFkZGluZyB1bmluaXRpYWxpemVkKSwgdGhlIGNhbGxlZSBgcHRwX2Nsb2NrX2V2ZW50KClgIG9ubHkgcmVhZHMgdGhlc2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIGZpZWxkcyB3aGVuIHByb2Nlc3NpbmcgYFBUUF9DTE9DS19FWFRUU2AgZXZlbnRzLiBJdCBkb2VzIG5vdCBjb3B5IHRoZSBlbnRpcmUgc3RydWN0dXJlIHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgY29udHJvbCBmbG93LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGltZXN0YW1wIGludGVycnVwdCBoYW5kbGVyIGBkd3hnbWFjMl90aW1lc3RhbXBfaW50ZXJydXB0YCB3aGljaCBhbGxvY2F0ZXMgYSBgc3RydWN0IHB0cF9jbG9ja19ldmVudGAgb24gdGhlIHN0YWNrLiBXaGlsZSBvbmx5IHRoZSBgdHlwZWAsIGBpbmRleGAsIGFuZCBgdGltZXN0YW1wYCBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluaXRpYWxpemVkIChsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB1bmlvbi9wYWRkaW5nIHVuaW5pdGlhbGl6ZWQpLCB0aGUgY2FsbGVlIGBwdHBfY2xvY2tfZXZlbnQoKWAgb25seSByZWFkcyB0aGVzZSBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgZmllbGRzIHdoZW4gcHJvY2Vzc2luZyBgUFRQX0NMT0NLX0VYVFRTYCBldmVudHMuIEl0IGRvZXMgbm90IGNvcHkgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgdG8gdXNlciBzcGFjZSBvciB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBjb250cm9sIGZsb3cuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBkZWFscyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[1] Phase: Succeeded StartedAt: 2026-08-18 16:07:54 +0000 UTC FinishedAt: 2026-08-18 16:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 16:07:54 +0000 UTC FinishedAt: 2026-08-18 16:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2] Phase: Succeeded StartedAt: 2026-08-18 16:07:54 +0000 UTC FinishedAt: 2026-08-18 16:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 16:07:54 +0000 UTC FinishedAt: 2026-08-18 16:50:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 16:07:54 +0000 UTC FinishedAt: 2026-08-18 16:08:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 16:07:54 +0000 UTC FinishedAt: 2026-08-18 16:08:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1050960608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 16:08:04 +0000 UTC FinishedAt: 2026-08-18 16:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 16:08:04 +0000 UTC FinishedAt: 2026-08-18 16:28:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbc0cdb4-6ea9-49a0-b32f-8bad6cfc9a38,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1050960608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b520068f-bb42-4cbf-a479-cdcb0b207933", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-1116524966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 16:08:04 +0000 UTC FinishedAt: 2026-08-18 16:28:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbc0cdb4-6ea9-49a0-b32f-8bad6cfc9a38,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1050960608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b520068f-bb42-4cbf-a479-cdcb0b207933", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-1116524966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 16:28:21 +0000 UTC FinishedAt: 2026-08-18 16:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 16:28:21 +0000 UTC FinishedAt: 2026-08-18 16:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 16:28:21 +0000 UTC FinishedAt: 2026-08-18 16:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 16:28:21 +0000 UTC FinishedAt: 2026-08-18 16:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1431100423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 16:28:31 +0000 UTC FinishedAt: 2026-08-18 16:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 16:28:31 +0000 UTC FinishedAt: 2026-08-18 16:30:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b520068f-bb42-4cbf-a479-cdcb0b207933,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-1116524966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 16:30:43 +0000 UTC FinishedAt: 2026-08-18 16:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 16:30:43 +0000 UTC FinishedAt: 2026-08-18 16:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 16:30:43 +0000 UTC FinishedAt: 2026-08-18 16:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 16:30:43 +0000 UTC FinishedAt: 2026-08-18 16:47:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbc0cdb4-6ea9-49a0-b32f-8bad6cfc9a38,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1431100423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d24f50ae-eeb5-4a5c-ba79-c9f0a5a8fa12", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-3823553931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 16:30:43 +0000 UTC FinishedAt: 2026-08-18 16:47:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbc0cdb4-6ea9-49a0-b32f-8bad6cfc9a38,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1431100423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d24f50ae-eeb5-4a5c-ba79-c9f0a5a8fa12", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-3823553931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 16:47:24 +0000 UTC FinishedAt: 2026-08-18 16:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 16:47:24 +0000 UTC FinishedAt: 2026-08-18 16:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 16:47:24 +0000 UTC FinishedAt: 2026-08-18 16:49:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 16:47:24 +0000 UTC FinishedAt: 2026-08-18 16:49:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d24f50ae-eeb5-4a5c-ba79-c9f0a5a8fa12,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-3823553931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:50:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b520068f-bb42-4cbf-a479-cdcb0b207933,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d24f50ae-eeb5-4a5c-ba79-c9f0a5a8fa12,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-1116524966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-3823553931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:49:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1742223840/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:49:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:49:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 16:49:41 +0000 UTC FinishedAt: 2026-08-18 16:49:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 16:49:51 +0000 UTC FinishedAt: 2026-08-18 16:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8x2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dwxgmac2_timestamp_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dcacab904fe78d60840ba947a104993ee9ded887","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_SOCFPGA","PTP_1588_CLOCK"],"series_id":"5c376e7d-1623-4dc9-b93c-66883d90083d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 16:49:51 +0000 UTC FinishedAt: 2026-08-18 16:50:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b520068f-bb42-4cbf-a479-cdcb0b207933,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d24f50ae-eeb5-4a5c-ba79-c9f0a5a8fa12,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-1116524966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-build-action-3823553931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8x2h/series-workflowc8x2h-convert-artifact-1742223840/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}