Name: series-workflowzzwxw Phase: Succeeded StartedAt: 2026-08-13 06:24:20 +0000 UTC FinishedAt: 2026-08-13 10:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[0] Phase: Succeeded StartedAt: 2026-08-13 06:24:20 +0000 UTC FinishedAt: 2026-08-13 06:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 06:24:20 +0000 UTC FinishedAt: 2026-08-13 06:51:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "00e9637c-9388-4544-8ade-2ad3ff5a8a82" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "folio_referenced" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19yZWZlcmVuY2VkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgd2hlcmUgdGhlIGB5b3VuZ2AgdmFyaWFibGUgd2FzIGluaXRpYWxpemVkIHRvIDEgaW5zdGVhZCBvZiBgbnJgLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiB5b3VuZyBwYWdlcyBhbmQgdXBkYXRlIHRoZSBibG9vbSBmaWx0ZXIgdmlhIGBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludm9sdmVkLCBub3IgYW55IHJpc2sgb2YgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmZWZlNTNmMzE2NWRlOGNmNDYwZjU0ZGVjZDA4ZjExZjE0M2I5ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1MDozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiYzMyNGUzN2M1ZjFmLi4yNjQwMTc4NTBhNTVhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDE5Miw3ICYjNDM7NDE5Miw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG4tXHRpbnQgeW91bmcgPSAxO1xuJiM0MztcdGludCB5b3VuZyA9IG5yO1xuIFx0cHRlX3QgKnB0ZSA9IHB2bXctXHUwMDNlcHRlO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcHZtdy1cdTAwM2VhZGRyZXNzO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGZlZmU1M2YzMTY1ZGU4Y2Y0NjBmNTRkZWNkMDhmMTFmMTQzYjlkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA2OjUwOjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiYzMyNGUzN2M1ZjFmLi4yNjQwMTc4NTBhNTVhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDE5Miw3ICYjNDM7NDE5Miw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOwogCXN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7Ci0JaW50IHlvdW5nID0gMTsKJiM0MzsJaW50IHlvdW5nID0gbnI7CiAJcHRlX3QgKnB0ZSA9IHB2bXctJmd0O3B0ZTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBwdm13LSZndDthZGRyZXNzOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy0mZ3Q7dm1hOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBMb29rLUFyb3VuZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCwgb2YgY291cnNlLCBtZWFucyB3ZSYjMzk7cmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHR3ZWFraW5nIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZS4gQ2hhbmdpbmcgYGludCB5b3VuZyA9IDE7YCB0byBgaW50IHlvdW5nID0gbnI7YOKApnRoYXTigJlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBiZSBpbml0aWFsaXppbmcgYSAmIzM0O3lvdW5nJiMzNDsgY291bnRlciB0byAxLCBwcmVzdW1hYmx5IGZvciBpbmRpY2F0aW5nIHBhZ2VzIGNvbnNpZGVyZWQgeW91bmcgaW4gdGhlIGxvb2stYXJvdW5kIHByb2Nlc3MuIE5vdywgd2UmIzM5O3JlIG1ha2luZyBpdCBlcXVhbCB0byBgbnJgLiAmIzM0O25yJiMzNDsgbGlrZWx5IHJlcHJlc2VudHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiBwYWdlcyBiZWluZyBjb25zaWRlcmVkIG9yIHNjYW5uZWQuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIG1vZGlmaWNhdGlvbi4gSSByZWFsbHkgbmVlZCB0byBkcmlsbCBpbnRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3Ztc2Nhbi5jYCB0byBmdWxseSBncmFzcCB0aGUgY29uc2VxdWVuY2VzIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyAmIzM5O25yJiMzOTsgdmFyaWFibGUgcmVwcmVzZW50cyBhbmQgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgTFJVIGFnaW5nIGFuZCBwcm9tb3Rpb24gbG9naWMsIHBhcnRpY3VsYXJseSBob3cgaXQgaW5mbHVlbmNlcyB0aGUgbG9vay1hcm91bmQgZGVjaXNpb25zIGFuZCBzdWJzZXF1ZW50IHBhZ2UgcmVjbGFpbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjcyND1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NTMtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXG5tbS92bXNjYW4uYzoyNzU0OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cbm1tL3Ztc2Nhbi5jLTI3NTUtICpcbi0tXG5tbS92bXNjYW4uYz00MDAxPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwMjAtXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcbm1tL3Ztc2Nhbi5jOjQwMjE6XHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxubW0vdm1zY2FuLmMtNDAyMi1cdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxuLS1cbm1tL3Ztc2Nhbi5jPTQxNDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTg2LSAqL1xubW0vdm1zY2FuLmM6NDE4Nzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkFuYWx5emluZyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAqKgoKT2theSwgc28gYGxydV9nZW5fbG9va19hcm91bmRgLi4uIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBwb3RlbnRpYWxseSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBhdCBsZWFzdCB1c2VkIG91dHNpZGUgb2YgYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBpbiBgbW0vdm1zY2FuLmNgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIHBlcmhhcHMgdXNlZCBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbD8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBjaGVjayBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IG9mIGB2bXNjYW4uY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTE4OC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoyMDE6SW4gdGhlIGV2aWN0aW9uIHBhdGgsIHNwZWNpZmljYWxseSwgaW4gYGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCwgaWYgYVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4MS1cdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcdTAwMjZcdTAwMjYgcHZtdy5wdGUpIHtcbm1tL3JtYXAuYzo5ODI6XHRcdFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXHUwMDI2cHZtdywgbnIpKVxubW0vcm1hcC5jLTk4My1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuLS1cbm1tL3Ztc2Nhbi5jPTI3MjQ9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6Mjc1NDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yNzU1LSAqXG4tLVxubW0vdm1zY2FuLmM9NDAwMT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDIwLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDIxOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwMjItXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4Ni0gKi9cbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGxydV9nZW5fbG9va19hcm91bmRgKioKCk9rYXksIHNvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGluIGBtbS9ybWFwLmNgLiBUaGF0IHBsYWNlcyBpdCBzcXVhcmVseSB3aXRoaW4gdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGUgaW50cmljYWNpZXMgb2YgbXVsdGktZ2VuIExSVSBhcmUgY3JpdGljYWwgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgb3Igc2lnbmlmaWNhbnRseSBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IHJ1bGUgb3V0IGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gcm9hZGJsb2NrcyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlJiMzOTtzIHNwZWNpZmljcy4gS25vd2luZyB0aGUgcmlnaHQgY29uZmlncyB3aWxsIHF1aWNrbHkgYWxsb3cgbWUgdG8gZ2F1Z2UgdGhlIHN5c3RlbSYjMzk7cyBiYXNlbGluZSBiZWhhdmlvciwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQwOD1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xNDEwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MTE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQxMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOS1cbm1tL0tjb25maWc6MTQyMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MjEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI1LVxubW0vS2NvbmZpZzoxNDI2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzNC1cbm1tL0tjb25maWc6MTQzNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQzNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZXNlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgY29uZmlndXJhdGlvbnMuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZW0gYXMgcHJvYmFibHkgYmVpbmcgcmVsYXRlZCB0byB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBwYWdlIHJlcGxhY2VtZW50IG1lY2hhbmlzbSwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBMUlVfR0VOYCBzaG91bGQgYmUgZG9jdW1lbnRlZCB0aGVyZSDigJMgcHJvdmlkaW5nIHRoZSBjcnVjaWFsIGRldGFpbHMgb24gaXRzIHB1cnBvc2UsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgb3V0bGluZSBpZiB0aGVyZSYjMzk7cyBhbnkgcGFydGljdWxhciBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIG9yIHBvc3NpYmxlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDExOlx0Y29uZmlnIExSVV9HRU5cbjE0MTI6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQxMzpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MTQ6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQxNTpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDE2Olx0XHRoZWxwXG4xNDE3Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQxODpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDE5Olx0XG4xNDIwOlx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQyMTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQyMjpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDIzOlx0XHRoZWxwXG4xNDI0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MjU6XHRcbjE0MjY6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQyNzpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0Mjg6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQyOTpcdFx0aGVscFxuMTQzMDpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MzE6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MzI6XHRcbjE0MzM6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDM0Olx0XG4xNDM1Olx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDM2Olx0XHRkZWZfYm9vbCB5XG4xNDM3Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQzODpcdCMgfVxuMTQzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBrZXkgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudC4gSXQgbG9va3MgbGlrZSB0aGUgY29uZmlncyBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUgb25lcyB0byBlbmFibGUgdG8gYWN0aXZhdGUgdGhpcyBmZWF0dXJlLiBUaGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aGUgYWx0ZXJhdGlvbiBmcm9tIGBpbnQgeW91bmcgPSAxO2AgdG8gYGludCB5b3VuZyA9IG5yO2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSBpbXBhY3RpbmcgaG93IHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGdlbmVyYXRpb24gYmVoYXZlcy4gR2l2ZW4gaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgdGhpcyBhcmVhIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrOyBJIG5lZWQgdG8ga25vdyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIEFoLCBpdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2Q7IGl0JiMzOTtzIGFjY2Vzc2libGUuIEl0cyBzaWduYXR1cmUgaXMgYGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilgLgoKTGV0JiMzOTtzIHNlZSwgYXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgdGhhdCB3YXJyYW50IGludmVzdGlnYXRpb24/IE9rYXksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQgYnkgYGZvbGlvX3JlZmVyZW5jZWRfb25lYC4gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCAqaXMqIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgbWFrZXMgbm8gc2Vuc2UgdG8gdGFyZ2V0IHRoYXQgZGlyZWN0bHksIHNvLCBJIHdhbnQgdG8gY29uc2lkZXIgdGhlIGVudHJ5IHBvaW50LCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBgZm9saW9fcmVmZXJlbmNlZGAuIFBlcmhhcHMgdGhhdCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZnV6emluZyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9ODgzPXBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL3JtYXAuYy05MDYtXG5tbS9ybWFwLmM6OTA3OnN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XG5tbS9ybWFwLmMtOTA4LVx0aW50IG1hcGNvdW50O1xuLS1cbm1tL3JtYXAuYy05MTQtLypcbm1tL3JtYXAuYzo5MTU6ICogYXJnOiBmb2xpb19yZWZlcmVuY2VkX2FyZyB3aWxsIGJlIHBhc3NlZFxubW0vcm1hcC5jLTkxNi0gKi9cbm1tL3JtYXAuYzo5MTc6c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYy05MTgtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbm1tL3JtYXAuYy05MTkte1xubW0vcm1hcC5jOjkyMDpcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyAqcHJhID0gYXJnO1xubW0vcm1hcC5jLTkyMS1cdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCAwKTtcbi0tXG5tbS9ybWFwLmMtMTAyNy1cbm1tL3JtYXAuYzoxMDI4OnN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbm1tL3JtYXAuYy0xMDI5LXtcbm1tL3JtYXAuYzoxMDMwOlx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnICpwcmEgPSBhcmc7XG5tbS9ybWFwLmMtMTAzMS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHByYS1cdTAwM2VtZW1jZztcbi0tXG5tbS9ybWFwLmMtMTA1Mi0vKipcbm1tL3JtYXAuYzoxMDUzOiAqIGZvbGlvX3JlZmVyZW5jZWQoKSAtIFRlc3QgaWYgdGhlIGZvbGlvIHdhcyByZWZlcmVuY2VkLlxubW0vcm1hcC5jLTEwNTQtICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbi0tXG5tbS9ybWFwLmMtMTA2My0gKi9cbm1tL3JtYXAuYzoxMDY0OmludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG5tbS9ybWFwLmMtMTA2NS1cdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuLS1cbm1tL3JtYXAuYy0xMDY3LVx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbm1tL3JtYXAuYzoxMDY4Olx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcbm1tL3JtYXAuYy0xMDY5LVx0XHQubWFwY291bnQgPSBmb2xpb19tYXBjb3VudChmb2xpbyksXG4tLVxubW0vcm1hcC5jLTEwNzItXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xubW0vcm1hcC5jOjEwNzM6XHRcdC5ybWFwX29uZSA9IGZvbGlvX3JlZmVyZW5jZWRfb25lLFxubW0vcm1hcC5jLTEwNzQtXHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNnByYSxcbi0tXG5tbS9ybWFwLmMtMTA3Ni1cdFx0LnRyeV9sb2NrID0gdHJ1ZSxcbm1tL3JtYXAuYzoxMDc3Olx0XHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hLFxubW0vcm1hcC5jLTEwNzgtXHR9O1xuLS1cbm1tL3JtYXAuYz0xNDQwPXZvaWQgZm9saW9fbW92ZV9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTE0NDktXHQgKiBFbnN1cmUgdGhhdCBhbm9uX3ZtYSBhbmQgdGhlIEZPTElPX01BUFBJTkdfQU5PTiBiaXQgYXJlIHdyaXR0ZW5cbm1tL3JtYXAuYzoxNDUwOlx0ICogc2ltdWx0YW5lb3VzbHksIHNvIGEgY29uY3VycmVudCByZWFkZXIgKGVnIGZvbGlvX3JlZmVyZW5jZWQoKSYjMzk7c1xubW0vcm1hcC5jLTE0NTEtXHQgKiBmb2xpb190ZXN0X2Fub24oKSkgd2lsbCBub3Qgc2VlIG9uZSB3aXRob3V0IHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGUgY29kZSwgYGZvbGlvX3JlZmVyZW5jZWRgIGp1bXBzIG91dCBhcyBhIHN0cm9uZyBjb250ZW5kZXIgZm9yIHNvbWUgZnV6emluZyBhdHRlbnRpb24uIEl0JiMzOTtzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlLiBBbHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB0b28uIFRoYXQgb25lIGNvdWxkIGJlIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYGxydV9nZW5fbG9va19hcm91bmRgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcmV2aXNpdCB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGNvbnNpZGVyIHBvdGVudGlhbCBlZGdlIGNhc2VzIEkgbWF5IGhhdmUgbWlzc2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZXZpZXcuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvcHBvcnR1bml0aWVzIGZvciBnZW5lcmF0aW5nIHVuZXhwZWN0ZWQgaW5wdXQgYW5kIHVuY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzIGluIHRoYXQgZnVuY3Rpb24sIG9yIGluIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxscyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI3MjQ9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6Mjc1NDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yNzU1LSAqXG4tLVxubW0vdm1zY2FuLmM9NDAwMT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDIwLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDIxOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwMjItXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4Ni0gKi9cbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjUKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLCBub3QganVzdCBidXJpZWQgYXdheSBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBJIGNhbiB3b3JrIHdpdGggaXQgZGlyZWN0bHkuIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIGFsc28gYGZvbGlvX3JlZmVyZW5jZWRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaG9zZSBzZWVtIHRvIGJlIGtleSB0byB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2hhbmdlLgoKQW5kLCBvZiBjb3Vyc2UsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaG9zZSB3aWxsIGJlIHRoZSBnYXRlcyBmb3IgYWN0dWFsbHkgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLgoKTm93LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpc24mIzM5O3QgYSAqbWFzc2l2ZSogcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gQWZ0ZXIgYWxsLCBjaGFuZ2VzIGhlcmUgY291bGQgaGF2ZSBicm9hZCBpbXBsaWNhdGlvbnMuIEkgcmVjYWxsIGl0JiMzOTtzIHVzZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltIGFuZCB3aGVuIHdhbGtpbmcgdGhlIHJtYXAsIGFuZCB0aGF0IHB1dHMgaXQgcmlnaHQgaW50byB0aGUgZXZpY3Rpb24gcGF0aC4gT2theSwgaXQgKmNhbiogYmUgYSBob3QgcGF0aCwgYnV0IHRoYXTigJlzIHByZXR0eSBtdWNoIHRoZSBwb2ludDsgdGhpcyBpcyBNR0xSVS1zcGVjaWZpYy4gV2UmIzM5O3JlICp0cnlpbmcqIHRvIHRlc3QgaXRzIGJlaGF2aW9yIHVuZGVyIHByZXNzdXJlLiBTbywgaW5jbHVkaW5nIGl0IGlzIGNvbXBsZXRlbHkganVzdGlmaWVkLgoKQWxyaWdodCwgdGltZSB0byBmb3JtYWxpemUgdGhpcy4KClRoZSBwYXRjaCBpcyBhICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY2FuZGlkYXRlLCBubyBxdWVzdGlvbi4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogaXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSBmZWF0dXJlLiBUaGUgbW9kaWZpY2F0aW9uIGlzIGNoYW5naW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3aXRoaW4gYGxydV9nZW5fbG9va19hcm91bmRgLCBzbyBpdCYjMzk7cyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gaG93IGFjY2VzcyBiaXRzIGFyZSBldmFsdWF0ZWQgd2hlbiByZWNsYWltaW5nIG1lbW9yeS4gVGhhdCYjMzk7cyBwZXJmZWN0IGZ1enppbmcgbWF0ZXJpYWwuCgpIZXJlJiMzOTtzIG15IHJlc3VsdCwgcmVhZHkgZm9yIHRoZSBuZXh0IHN0YWdlOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWyYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7XWAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19yZWZlcmVuY2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZmVmZTUzZjMxNjVkZThjZjQ2MGY1NGRlY2QwOGYxMWYxNDNiOWRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDY6NTA6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJjMzI0ZTM3YzVmMWYuLjI2NDAxNzg1MGE1NWEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00MTkyLDcgJiM0Mzs0MTkyLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXVuc2lnbmVkIGxvbmcgZW5kOwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJc3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDsKLQlpbnQgeW91bmcgPSAxOwomIzQzOwlpbnQgeW91bmcgPSBucjsKIAlwdGVfdCAqcHRlID0gcHZtdy0mZ3Q7cHRlOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IHB2bXctJmd0O2FkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LSZndDt2bWE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgd2hldGhlciB0aGlzIHNlZW1pbmdseSBpbm5vY3VvdXMgY2hhbmdlIGluIGBtbS92bXNjYW4uY2Ag4oCTIHNwZWNpZmljYWxseSB0aGUgYWx0ZXJhdGlvbiBvZiBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtgIHdpdGhpbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIOKAkyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuYWx5c2lzLiBUaGlzIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgZXZlbiBzdWJ0bGUgc2hpZnRzIGNhbiBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLgoKSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBjb250ZXh0IG9mIGB5b3VuZ2AgbmVlZHMgdG8gYmUgZnVsbHkgdW5kZXJzdG9vZCwgd2hpY2ggbWVhbnMgdHJhY2luZyB0aGUgZGF0YSBmbG93IGFyb3VuZCBgbnJgIHRvIGRldGVybWluZSBpdHMgdmFsdWUgd2hlbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgd2hlcmUgaXRzIHZhbHVlIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi4gVGhlbiBhc3Nlc3MgaWYgdGhlIHZhcmlhYmxlIGB5b3VuZ2AgaXMgcmVhZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCwgb3IgaWYgaXRzIHZhbHVlIG1pZ2h0IGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgY291bGQgc3Vic2VxdWVudGx5IHVzZSBpdCBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBhbmQgaXRzIHN1YnNlcXVlbnQgdXNhZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsLCBvciBhIHN1YnRsZSBtZW1vcnkgYnVnLCBpcyBtb3N0IGxpa2VseSB0byByZXNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjc1My0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjc1NS0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDAyMC1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDAyMTpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDIyLVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDE0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxODYtICovXG5tbS92bXNjYW4uYzo0MTg3OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQxODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAqKgoKT2theSwgdGltZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGdlbmVyYWxpemVkIExSVSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmF0aW9uYWwgTFJVIHN5c3RlbSwgYW5kIEkgd2FudCB0byBzZWUgaG93IGl0IG1ha2VzIGRlY2lzaW9ucyBhYm91dCB3aGljaCBwYWdlcyB0byByZWNsYWltLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhldXJpc3RpY3MgaXQgdXNlcyBmb3Igc2Nhbm5pbmcgYW5kIGhvdyBpdCBiYWxhbmNlcyBtZW1vcnkgcmVjbGFpbSBhZ2FpbnN0IG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgcmVsYXRlZCB0byByZWNsYWltIHRhcmdldHMsIHpvbmUgY29uc2lkZXJhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSwgaG93IGl0IGhhbmRsZXMgZGlydHkgcGFnZXMgYW5kIGFub255bW91cyBtZW1vcnkuIFVsdGltYXRlbHksIEkmIzM5O20gYWltaW5nIHRvIGdhaW4gaW5zaWdodCBpbnRvIGhvdyB0aGUga2VybmVsIHByaW9yaXRpemVzIHBhZ2VzIGZvciByZWNsYWltIGFuZCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyB1c2VkIHRvIG9wdGltaXplIHRoaXMgaW1wb3J0YW50IGFyZWEgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTg3Olx0Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuNDE4ODpcdHtcbjQxODk6XHRcdGludCBpO1xuNDE5MDpcdFx0Ym9vbCBkaXJ0eTtcbjQxOTE6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG40MTkyOlx0XHR1bnNpZ25lZCBsb25nIGVuZDtcbjQxOTM6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG40MTk0Olx0XHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuNDE5NTpcdFx0aW50IHlvdW5nID0gbnI7XG40MTk2Olx0XHRwdGVfdCAqcHRlID0gcHZtdy1cdTAwM2VwdGU7XG40MTk3Olx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSBwdm13LVx1MDAzZWFkZHJlc3M7XG40MTk4Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuNDE5OTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdm13LVx1MDAzZXBmbik7XG40MjAwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40MjAxOlx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuNDIwMjpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuNDIwMzpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuNDIwNDpcdFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuNDIwNTpcdFx0aW50IGdlbjtcbjQyMDY6XHRcbjQyMDc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuNDIwODpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuNDIwOTpcdFxuNDIxMDpcdFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl95b3VuZ19wdGVzX25vdGlmeSh2bWEsIGFkZHIsIHB0ZSwgbnIpKVxuNDIxMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG40MjEyOlx0XG40MjEzOlx0XHRpZiAoc3Bpbl9pc19jb250ZW5kZWQocHZtdy1cdTAwM2VwdGwpKVxuNDIxNDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQyMTU6XHRcbjQyMTY6XHRcdC8qIGV4Y2x1ZGUgc3BlY2lhbCBWTUFzIGNvbnRhaW5pbmcgYW5vbiBwYWdlcyBmcm9tIENPVyAqL1xuNDIxNzpcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU1BFQ0lBTClcbjQyMTg6XHRcdFx0cmV0dXJuIHRydWU7XG40MjE5Olx0XG40MjIwOlx0XHQvKiBhdm9pZCB0YWtpbmcgdGhlIExSVSBsb2NrIHVuZGVyIHRoZSBQVEwgd2hlbiBwb3NzaWJsZSAqL1xuNDIyMTpcdFx0d2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZSA/IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrIDogTlVMTDtcbjQyMjI6XHRcbjQyMjM6XHRcdHN0YXJ0ID0gbWF4KGFkZHIgXHUwMDI2IFBNRF9NQVNLLCB2bWEtXHUwMDNldm1fc3RhcnQpO1xuNDIyNDpcdFx0ZW5kID0gbWluKGFkZHIgfCB+UE1EX01BU0ssIHZtYS1cdTAwM2V2bV9lbmQgLSAxKSAmIzQzOyAxO1xuNDIyNTpcdFxuNDIyNjpcdFx0aWYgKGVuZCAtIHN0YXJ0ID09IFBBR0VfU0laRSlcbjQyMjc6XHRcdFx0cmV0dXJuIHRydWU7XG40MjI4Olx0XG40MjI5Olx0XHRpZiAoZW5kIC0gc3RhcnQgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUpIHtcbjQyMzA6XHRcdFx0aWYgKGFkZHIgLSBzdGFydCBcdTAwM2MgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRSAvIDIpXG40MjMxOlx0XHRcdFx0ZW5kID0gc3RhcnQgJiM0MzsgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRTtcbjQyMzI6XHRcdFx0ZWxzZSBpZiAoZW5kIC0gYWRkciBcdTAwM2MgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRSAvIDIpXG40MjMzOlx0XHRcdFx0c3RhcnQgPSBlbmQgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFO1xuNDIzNDpcdFx0XHRlbHNlIHtcbjQyMzU6XHRcdFx0XHRzdGFydCA9IGFkZHIgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFIC8gMjtcbjQyMzY6XHRcdFx0XHRlbmQgPSBhZGRyICYjNDM7IE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUgLyAyO1xuNDIzNzpcdFx0XHR9XG40MjM4Olx0XHR9XG40MjM5Olx0XG40MjQwOlx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuNDI0MTpcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbjQyNDI6XHRcdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuNDI0MzpcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbjQyNDQ6XHRcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG40MjQ1Olx0XG40MjQ2Olx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuNDI0NzpcdFxuNDI0ODpcdFx0cHRlIC09IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xuNDI0OTpcdFxuNDI1MDpcdFx0Zm9yIChpID0gMCwgYWRkciA9IHN0YXJ0OyBhZGRyICE9IGVuZDtcbjQyNTE6XHRcdCAgICAgaSAmIzQzOz0gbnIsIHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG40MjUyOlx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuNDI1MzpcdFx0XHRwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG40MjU0Olx0XG40MjU1Olx0XHRcdG5yID0gMTtcbjQyNTY6XHRcdFx0cGZuID0gZ2V0X3B0ZV9wZm4ocHRlbnQsIHZtYSwgYWRkciwgcGdkYXQpO1xuNDI1NzpcdFx0XHRpZiAocGZuID09IC0xKVxuNDI1ODpcdFx0XHRcdGNvbnRpbnVlO1xuNDI1OTpcdFxuNDI2MDpcdFx0XHRmb2xpbyA9IGdldF9wZm5fZm9saW8ocGZuLCBtZW1jZywgcGdkYXQpO1xuNDI2MTpcdFx0XHRpZiAoIWZvbGlvKVxuNDI2MjpcdFx0XHRcdGNvbnRpbnVlO1xuNDI2MzpcdFxuNDI2NDpcdFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbjQyNjU6XHRcdFx0XHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X25yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuNDI2NjpcdFxuNDI2NzpcdFx0XHRcdG5yID0gZm9saW9fcHRlX2JhdGNoX2ZsYWdzKGZvbGlvLCBOVUxMLCBwdGUsIFx1MDAyNnB0ZW50LFxuNDI2ODpcdFx0XHRcdFx0XHRcdCAgIG1heF9uciwgRlBCX01FUkdFX1lPVU5HX0RJUlRZKTtcbjQyNjk6XHRcdFx0fVxuNDI3MDpcdFxuNDI3MTpcdFx0XHRpZiAoIXRlc3RfYW5kX2NsZWFyX3lvdW5nX3B0ZXNfbm90aWZ5KHZtYSwgYWRkciwgcHRlLCBucikpXG40MjcyOlx0XHRcdFx0Y29udGludWU7XG40MjczOlx0XG40Mjc0Olx0XHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG40Mjc1Olx0XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG40Mjc2Olx0XG40Mjc3Olx0XHRcdFx0bGFzdCA9IGZvbGlvO1xuNDI3ODpcdFx0XHRcdGRpcnR5ID0gZmFsc2U7XG40Mjc5Olx0XHRcdH1cbjQyODA6XHRcbjQyODE6XHRcdFx0aWYgKHB0ZV9kaXJ0eShwdGVudCkpXG40MjgyOlx0XHRcdFx0ZGlydHkgPSB0cnVlO1xuNDI4MzpcdFxuNDI4NDpcdFx0XHR5b3VuZyAmIzQzOz0gbnI7XG40Mjg1Olx0XHR9XG40Mjg2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgQ29kZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlOiBgaW50IHlvdW5nID0gMTtgIGhhcyBiZWNvbWUgYGludCB5b3VuZyA9IG5yO2AuIEhtbSwgdGhpcyBpcyBjbGVhcmx5IGEgYnVnIGZpeC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGluY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgdmFyaWFibGUgYHlvdW5nYCB0byAxLCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgdG8gdGhlIHZhbHVlIG9mIGBucmAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9mZi1ieS1vbmUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4uIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBgeW91bmdgIGlzIHVzZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGFuZCB3aGF0IGltcGFjdCB0aGlzIGluaXRpYWxpemF0aW9uIGNoYW5nZSBoYXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0byBjb25maWRlbnRseSBhc3Nlc3MgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyODc6XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuNDI4ODpcdFxuNDI4OTpcdFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG40MjkwOlx0XG40MjkxOlx0XHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbjQyOTI6XHRcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG40MjkzOlx0XHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbjQyOTQ6XHRcbjQyOTU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjQyOTY6XHRcbjQyOTc6XHRcdHJldHVybiB0cnVlO1xuNDI5ODpcdH1cbjQyOTk6XHRcbjQzMDA6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG40MzAxOlx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNnIExSVVxuNDMwMjpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG40MzAzOlx0XG40MzA0Olx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi9cbjQzMDU6XHRlbnVtIHtcbjQzMDY6XHRcdE1FTUNHX0xSVV9OT1AsXG40MzA3Olx0XHRNRU1DR19MUlVfSEVBRCxcbjQzMDg6XHRcdE1FTUNHX0xSVV9UQUlMLFxuNDMwOTpcdFx0TUVNQ0dfTFJVX09MRCxcbjQzMTA6XHRcdE1FTUNHX0xSVV9ZT1VORyxcbjQzMTE6XHR9O1xuNDMxMjpcdFxuNDMxMzpcdHN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuNDMxNDpcdHtcbjQzMTU6XHRcdGludCBzZWc7XG40MzE2Olx0XHRpbnQgb2xkLCBuZXc7XG40MzE3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNDMxODpcdFx0aW50IGJpbiA9IGdldF9yYW5kb21fdTMyX2JlbG93KE1FTUNHX05SX0JJTlMpO1xuNDMxOTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuNDMyMDpcdFxuNDMyMTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGdkYXQtXHUwMDNlbWVtY2dfbHJ1LmxvY2ssIGZsYWdzKTtcbjQzMjI6XHRcbjQzMjM6XHRcdFZNX1dBUk5fT05fT05DRShobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QpKTtcbjQzMjQ6XHRcbjQzMjU6XHRcdHNlZyA9IDA7XG40MzI2Olx0XHRuZXcgPSBvbGQgPSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbjtcbjQzMjc6XHRcbjQzMjg6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG40MzI5Olx0XHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQpXG40MzMwOlx0XHRcdHNlZyA9IE1FTUNHX0xSVV9IRUFEO1xuNDMzMTpcdFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG40MzMyOlx0XHRcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xuNDMzMzpcdFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcbjQzMzQ6XHRcdFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cdTAwM2VtZW1jZ19scnUuc2VxKTtcbjQzMzU6XHRcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9ZT1VORylcbjQzMzY6XHRcdFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cdTAwM2VtZW1jZ19scnUuc2VxICYjNDM7IDEpO1xuNDMzNzpcdFx0ZWxzZVxuNDMzODpcdFx0XHRWTV9XQVJOX09OX09OQ0UodHJ1ZSk7XG40MzM5Olx0XG40MzQwOlx0XHRXUklURV9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnLCBzZWcpO1xuNDM0MTpcdFx0V1JJVEVfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbiwgbmV3KTtcbjQzNDI6XHRcbjQzNDM6XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0KTtcbjQzNDQ6XHRcbjQzNDU6XHRcdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCB8fCBvcCA9PSBNRU1DR19MUlVfT0xEKVxuNDM0NjpcdFx0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuNDM0NzpcdFx0ZWxzZVxuNDM0ODpcdFx0XHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuNDM0OTpcdFxuNDM1MDpcdFx0cGdkYXQtXHUwMDNlbWVtY2dfbHJ1Lm5yX21lbWNnc1tvbGRdLS07XG40MzUxOlx0XHRwZ2RhdC1cdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW25ld10mIzQzOyYjNDM7O1xuNDM1MjpcdFxuNDM1MzpcdFx0aWYgKCFwZ2RhdC1cdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW29sZF0gXHUwMDI2XHUwMDI2IG9sZCA9PSBnZXRfbWVtY2dfZ2VuKHBnZGF0LVx1MDAzZW1lbWNnX2xydS5zZXEpKVxuNDM1NDpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZW1lbWNnX2xydS5zZXEsIHBnZGF0LVx1MDAzZW1lbWNnX2xydS5zZXEgJiM0MzsgMSk7XG40MzU1Olx0XG40MzU2Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5sb2NrLCBmbGFncyk7XG40MzU3Olx0fVxuNDM1ODpcdFxuNDM1OTpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbjQzNjA6XHRcbjQzNjE6XHR2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjQzNjI6XHR7XG40MzYzOlx0XHRpbnQgZ2VuO1xuNDM2NDpcdFx0aW50IG5pZDtcbjQzNjU6XHRcdGludCBiaW4gPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhNRU1DR19OUl9CSU5TKTtcbjQzNjY6XHRcbjQzNjc6XHRcdGZvcl9lYWNoX25vZGUobmlkKSB7XG40MzY4Olx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbjQzNjk6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjQzNzA6XHRcbjQzNzE6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUubG9jayk7XG40MzcyOlx0XG40MzczOlx0XHRcdFZNX1dBUk5fT05fT05DRSghaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0KSk7XG40Mzc0Olx0XG40Mzc1Olx0XHRcdGdlbiA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXHUwMDNlbWVtY2dfbHJ1LnNlcSk7XG40Mzc2Olx0XG40Mzc3Olx0XHRcdGxydXZlYy1cdTAwM2VscnVnZW4uZ2VuID0gZ2VuO1xuNDM3ODpcdFxuNDM3OTpcdFx0XHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tnZW5dW2Jpbl0pO1xuNDM4MDpcdFx0XHRwZ2RhdC1cdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW2dlbl0mIzQzOyYjNDM7O1xuNDM4MTpcdFxuNDM4MjpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cGdkYXQtXHUwMDNlbWVtY2dfbHJ1LmxvY2spO1xuNDM4MzpcdFx0fVxuNDM4NDpcdH1cbjQzODU6XHRcbjQzODY6XHR2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODUKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSAmIzM5O3lvdW5nJiMzOTsgVmFyaWFibGUgaW4gdGhlIExSVSBCbG9vbSBGaWx0ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb2RlIHNuaXBwZXQuIFRoZSBgeW91bmdgIHZhcmlhYmxlLCBhcyB1c2VkIHdpdGhpbiBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLCBpcyBjbGVhcmx5IGEgaGV1cmlzdGljIOKAkyBhIHF1aWNrIGFuZCBkaXJ0eSBlc3RpbWF0ZSDigJMgZm9yIG91ciBMUlUgQmxvb20gZmlsdGVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMsIGJ1dCBpbiB0aGlzIGNhc2UsIEkgc2VlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2FnZS4gVGhlIHN5c3RlbSYjMzk7cyBkZXNpZ25lZCB0byBlbnN1cmUgdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLiBUaGUgY29yZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gYSBsb2dpY2FsIGZsYXcgaW4gaG93IHdlJiMzOTtyZSAqY291bnRpbmcqIHRoZXNlICYjMzk7eW91bmcmIzM5OyBwYWdlcywgbm90IGluIHRoZSB1c2Ugb2YgdGhlIHZhcmlhYmxlIGl0c2VsZi4gVGhpcyBpcyBhIHN1YnRsZSBlcnJvciwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UuIEdpdmVuIHRoaXMgYW5hbHlzaXMsIGNsYXNzaWZ5aW5nIHRoaXMgYXMgYSBgTmVlZHNLTVNBTmAgaXNzdWUgaXMgaW5jb3JyZWN0LiBUaGUgcm9vdCBjYXVzZSBpcyBhIHNpbXBsZSBsb2dpY2FsIGVycm9yIGluIGNvdW50aW5nOyB0aGVyZWZvcmUsIG5vIG5lZWQgZm9yIGtlcm5lbCBtZW1vcnkgc2FuaXRpemVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB3aGVyZSB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgdG8gMSBpbnN0ZWFkIG9mIGBucmAuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHlvdW5nIHBhZ2VzIGFuZCB1cGRhdGUgdGhlIGJsb29tIGZpbHRlciB2aWEgYHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQsIG5vciBhbnkgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MDozMS41MTIyMzMzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDI0NTQ1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcImZvbGlvX3JlZmVyZW5jZWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTA6MzEuNTEyMjM3NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MjczNzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhmZWZlNTNmMzE2NWRlOGNmNDYwZjU0ZGVjZDA4ZjExZjE0M2I5ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NTA6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjI2NDAxNzg1MGE1NWEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00MTkyLDcgKzQxOTIsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbi1cXHRpbnQgeW91bmcgPSAxO1xcbitcXHRpbnQgeW91bmcgPSBucjtcXG4gXFx0cHRlX3QgKnB0ZSA9IHB2bXctXFx1MDAzZXB0ZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcHZtdy1cXHUwMDNlYWRkcmVzcztcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVxcdTAwM2V2bWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUwOjMxLjg5NTgxMDIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjYxNzgzNTY5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fcmVmZXJlbmNlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGZlZmU1M2YzMTY1ZGU4Y2Y0NjBmNTRkZWNkMDhmMTFmMTQzYjlkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA2OjUwOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmMzMjRlMzdjNWYxZi4uMjY0MDE3ODUwYTU1YSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQxOTIsNyArNDE5Miw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG4tXHRpbnQgeW91bmcgPSAxO1xuK1x0aW50IHlvdW5nID0gbnI7XG4gXHRwdGVfdCAqcHRlID0gcHZtdy1cdTAwM2VwdGU7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBwdm13LVx1MDAzZWFkZHJlc3M7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTA6MzEuODk1ODExNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODY5OTQ4MzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIExvb2stQXJvdW5kIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgd2UncmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgYGxydV9nZW5fbG9va19hcm91bmRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lLiBDaGFuZ2luZyBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtg4oCmdGhhdOKAmXMgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZSBvcmlnaW5hbCBjb2RlIHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBhIFwieW91bmdcIiBjb3VudGVyIHRvIDEsIHByZXN1bWFibHkgZm9yIGluZGljYXRpbmcgcGFnZXMgY29uc2lkZXJlZCB5b3VuZyBpbiB0aGUgbG9vay1hcm91bmQgcHJvY2Vzcy4gTm93LCB3ZSdyZSBtYWtpbmcgaXQgZXF1YWwgdG8gYG5yYC4gXCJuclwiIGxpa2VseSByZXByZXNlbnRzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgcGFnZXMgYmVpbmcgY29uc2lkZXJlZCBvciBzY2FubmVkLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBtb2RpZmljYXRpb24uIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgaW50byBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bXNjYW4uY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnNlcXVlbmNlcyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgJ25yJyB2YXJpYWJsZSByZXByZXNlbnRzIGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBMUlUgYWdpbmcgYW5kIHByb21vdGlvbiBsb2dpYywgcGFydGljdWxhcmx5IGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBsb29rLWFyb3VuZCBkZWNpc2lvbnMgYW5kIHN1YnNlcXVlbnQgcGFnZSByZWNsYWltLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MDo1MC41OTUyOTgzMThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTg2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NTUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDIwLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAyMTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMjItXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTg2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MDo1MC42NDE2MjM4OTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ4MTAwOTI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqQW5hbHl6aW5nIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4uLiBpdCdzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIHBvdGVudGlhbGx5IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIG9yIGF0IGxlYXN0IHVzZWQgb3V0c2lkZSBvZiBgbW0vdm1zY2FuLmNgLiBJdCdzIGRlZmluaXRlbHkgaW4gYG1tL3Ztc2Nhbi5jYCwgYnV0IHRoYXQgZG9lc24ndCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIHBlcmhhcHMgdXNlZCBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbD8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBjaGVjayBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IG9mIGB2bXNjYW4uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTowMS4xMjI2MzY0NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTM2NDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njg5PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4MS1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgyOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4My1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NTUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDIwLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAyMTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMjItXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTg2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTowMi45NTIwMDU3MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE5MzM4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGxydV9nZW5fbG9va19hcm91bmRgKipcblxuT2theSwgc28gYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgaW4gYG1tL3JtYXAuY2AuIFRoYXQgcGxhY2VzIGl0IHNxdWFyZWx5IHdpdGhpbiB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoZSBpbnRyaWNhY2llcyBvZiBtdWx0aS1nZW4gTFJVIGFyZSBjcml0aWNhbCBmb3IgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgYGxydV9nZW5fbG9va19hcm91bmRgLiBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgcnVsZSBvdXQgYW55IG9idmlvdXMgY29uZmlndXJhdGlvbiByb2FkYmxvY2tzIG9yIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUncyBzcGVjaWZpY3MuIEtub3dpbmcgdGhlIHJpZ2h0IGNvbmZpZ3Mgd2lsbCBxdWlja2x5IGFsbG93IG1lIHRvIGdhdWdlIHRoZSBzeXN0ZW0ncyBiYXNlbGluZSBiZWhhdmlvciwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6MDUuOTcxMzQ2NTkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODc0MDk4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQwOD1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTE0MTAtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MTE6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MTItXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOS1cXG5tbS9LY29uZmlnOjE0MjA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQyMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNS1cXG5tbS9LY29uZmlnOjE0MjY6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjctXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDM0LVxcbm1tL0tjb25maWc6MTQzNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MzYtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTowNy44NTg3NjE3MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM1MDQ0NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgY29uZmlndXJhdGlvbnMuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZW0gYXMgcHJvYmFibHkgYmVpbmcgcmVsYXRlZCB0byB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBwYWdlIHJlcGxhY2VtZW50IG1lY2hhbmlzbSwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTFJVX0dFTmAgc2hvdWxkIGJlIGRvY3VtZW50ZWQgdGhlcmUg4oCTIHByb3ZpZGluZyB0aGUgY3J1Y2lhbCBkZXRhaWxzIG9uIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBvcHRpb25zLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgY29uZmlndXJlZC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgb3V0bGluZSBpZiB0aGVyZSdzIGFueSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgb3IgcG9zc2libGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjE0LjM5MzgwOTEyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQxMTpcXHRjb25maWcgTFJVX0dFTlxcbjE0MTI6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDEzOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQxNDpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxODpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDE5OlxcdFxcbjE0MjA6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MjE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQyMjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDIzOlxcdFxcdGhlbHBcXG4xNDI0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MjU6XFx0XFxuMTQyNjpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0Mjc6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0Mjg6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQyOTpcXHRcXHRoZWxwXFxuMTQzMDpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MzE6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MzI6XFx0XFxuMTQzMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MzQ6XFx0XFxuMTQzNTpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDM2OlxcdFxcdGRlZl9ib29sIHlcXG4xNDM3OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDM4OlxcdCMgfVxcbjE0Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjE0LjM5MzkyNjQ4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAyMTcyMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvbmZpZ3MgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIG9uZXMgdG8gZW5hYmxlIHRvIGFjdGl2YXRlIHRoaXMgZmVhdHVyZS4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFsdGVyYXRpb24gZnJvbSBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBsaWtlbHkgaW1wYWN0aW5nIGhvdyB0aGUgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBnZW5lcmF0aW9uIGJlaGF2ZXMuIEdpdmVuIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gTm93LCBsZXQncyBkb3VibGUtY2hlY2s7IEkgbmVlZCB0byBrbm93IHRoZSBmdW5jdGlvbidzIHNjb3BlLiBBaCwgaXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2Q7IGl0J3MgYWNjZXNzaWJsZS4gSXRzIHNpZ25hdHVyZSBpcyBgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKWAuXG5cbkxldCdzIHNlZSwgYXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgdGhhdCB3YXJyYW50IGludmVzdGlnYXRpb24/IE9rYXksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQgYnkgYGZvbGlvX3JlZmVyZW5jZWRfb25lYC4gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCAqaXMqIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgbWFrZXMgbm8gc2Vuc2UgdG8gdGFyZ2V0IHRoYXQgZGlyZWN0bHksIHNvLCBJIHdhbnQgdG8gY29uc2lkZXIgdGhlIGVudHJ5IHBvaW50LCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBgZm9saW9fcmVmZXJlbmNlZGAuIFBlcmhhcHMgdGhhdCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjE5LjY5NjEwMTUyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA3NDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19yZWZlcmVuY2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9ODgzPXBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubW0vcm1hcC5jLTkwNi1cXG5tbS9ybWFwLmM6OTA3OnN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XFxubW0vcm1hcC5jLTkwOC1cXHRpbnQgbWFwY291bnQ7XFxuLS1cXG5tbS9ybWFwLmMtOTE0LS8qXFxubW0vcm1hcC5jOjkxNTogKiBhcmc6IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHdpbGwgYmUgcGFzc2VkXFxubW0vcm1hcC5jLTkxNi0gKi9cXG5tbS9ybWFwLmM6OTE3OnN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jLTkxOC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXFxubW0vcm1hcC5jLTkxOS17XFxubW0vcm1hcC5jOjkyMDpcXHRzdHJ1Y3QgZm9saW9fcmVmZXJlbmNlZF9hcmcgKnByYSA9IGFyZztcXG5tbS9ybWFwLmMtOTIxLVxcdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCAwKTtcXG4tLVxcbm1tL3JtYXAuYy0xMDI3LVxcbm1tL3JtYXAuYzoxMDI4OnN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcXG5tbS9ybWFwLmMtMTAyOS17XFxubW0vcm1hcC5jOjEwMzA6XFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnICpwcmEgPSBhcmc7XFxubW0vcm1hcC5jLTEwMzEtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcHJhLVxcdTAwM2VtZW1jZztcXG4tLVxcbm1tL3JtYXAuYy0xMDUyLS8qKlxcbm1tL3JtYXAuYzoxMDUzOiAqIGZvbGlvX3JlZmVyZW5jZWQoKSAtIFRlc3QgaWYgdGhlIGZvbGlvIHdhcyByZWZlcmVuY2VkLlxcbm1tL3JtYXAuYy0xMDU0LSAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuLS1cXG5tbS9ybWFwLmMtMTA2My0gKi9cXG5tbS9ybWFwLmM6MTA2NDppbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbm1tL3JtYXAuYy0xMDY1LVxcdFxcdCAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncylcXG4tLVxcbm1tL3JtYXAuYy0xMDY3LVxcdGJvb2wgd2VfbG9ja2VkID0gZmFsc2U7XFxubW0vcm1hcC5jOjEwNjg6XFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcXG5tbS9ybWFwLmMtMTA2OS1cXHRcXHQubWFwY291bnQgPSBmb2xpb19tYXBjb3VudChmb2xpbyksXFxuLS1cXG5tbS9ybWFwLmMtMTA3Mi1cXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbm1tL3JtYXAuYzoxMDczOlxcdFxcdC5ybWFwX29uZSA9IGZvbGlvX3JlZmVyZW5jZWRfb25lLFxcbm1tL3JtYXAuYy0xMDc0LVxcdFxcdC5hcmcgPSAodm9pZCAqKVxcdTAwMjZwcmEsXFxuLS1cXG5tbS9ybWFwLmMtMTA3Ni1cXHRcXHQudHJ5X2xvY2sgPSB0cnVlLFxcbm1tL3JtYXAuYzoxMDc3OlxcdFxcdC5pbnZhbGlkX3ZtYSA9IGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEsXFxubW0vcm1hcC5jLTEwNzgtXFx0fTtcXG4tLVxcbm1tL3JtYXAuYz0xNDQwPXZvaWQgZm9saW9fbW92ZV9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMTQ0OS1cXHQgKiBFbnN1cmUgdGhhdCBhbm9uX3ZtYSBhbmQgdGhlIEZPTElPX01BUFBJTkdfQU5PTiBiaXQgYXJlIHdyaXR0ZW5cXG5tbS9ybWFwLmM6MTQ1MDpcXHQgKiBzaW11bHRhbmVvdXNseSwgc28gYSBjb25jdXJyZW50IHJlYWRlciAoZWcgZm9saW9fcmVmZXJlbmNlZCgpJ3NcXG5tbS9ybWFwLmMtMTQ1MS1cXHQgKiBmb2xpb190ZXN0X2Fub24oKSkgd2lsbCBub3Qgc2VlIG9uZSB3aXRob3V0IHRoZSBvdGhlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6MTkuNzQyMTg0NjI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzk1NTk3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBjb2RlLCBgZm9saW9fcmVmZXJlbmNlZGAganVtcHMgb3V0IGFzIGEgc3Ryb25nIGNvbnRlbmRlciBmb3Igc29tZSBmdXp6aW5nIGF0dGVudGlvbi4gSXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdnVsbmVyYWJsZS4gQWxzbywgSSdtIHRoaW5raW5nIGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB0b28uIFRoYXQgb25lIGNvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5MZXQncyBnbyBiYWNrIGFuZCBleGFtaW5lIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIHJldmlzaXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgZWRnZSBjYXNlcyBJIG1heSBoYXZlIG1pc3NlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmV2aWV3LiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBvcHBvcnR1bml0aWVzIGZvciBnZW5lcmF0aW5nIHVuZXhwZWN0ZWQgaW5wdXQgYW5kIHVuY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzIGluIHRoYXQgZnVuY3Rpb24sIG9yIGluIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxscyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjIyLjcyMTc0NzA2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTMwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NTUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDIwLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAyMTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMjItXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTg2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MToyMi43NjczNDcyNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyMjgzNzk4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgbm90IGp1c3QgYnVyaWVkIGF3YXkgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kOyBpdCBtZWFucyBJIGNhbiB3b3JrIHdpdGggaXQgZGlyZWN0bHkuIEknbGwgZGVmaW5pdGVseSBpbmNsdWRlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgYWxzbyBgZm9saW9fcmVmZXJlbmNlZGAgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRob3NlIHNlZW0gdG8gYmUga2V5IHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGFuZ2UuXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhvc2Ugd2lsbCBiZSB0aGUgZ2F0ZXMgZm9yIGFjdHVhbGx5IGVuYWJsaW5nIHRoaXMgZmVhdHVyZS5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpc24ndCBhICptYXNzaXZlKiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBBZnRlciBhbGwsIGNoYW5nZXMgaGVyZSBjb3VsZCBoYXZlIGJyb2FkIGltcGxpY2F0aW9ucy4gSSByZWNhbGwgaXQncyB1c2VkIGR1cmluZyBtZW1vcnkgcmVjbGFpbSBhbmQgd2hlbiB3YWxraW5nIHRoZSBybWFwLCBhbmQgdGhhdCBwdXRzIGl0IHJpZ2h0IGludG8gdGhlIGV2aWN0aW9uIHBhdGguIE9rYXksIGl0ICpjYW4qIGJlIGEgaG90IHBhdGgsIGJ1dCB0aGF04oCZcyBwcmV0dHkgbXVjaCB0aGUgcG9pbnQ7IHRoaXMgaXMgTUdMUlUtc3BlY2lmaWMuIFdlJ3JlICp0cnlpbmcqIHRvIHRlc3QgaXRzIGJlaGF2aW9yIHVuZGVyIHByZXNzdXJlLiBTbywgaW5jbHVkaW5nIGl0IGlzIGNvbXBsZXRlbHkganVzdGlmaWVkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGZvcm1hbGl6ZSB0aGlzLlxuXG5UaGUgcGF0Y2ggaXMgYSBcIldvcnRoRnV6emluZ1wiIGNhbmRpZGF0ZSwgbm8gcXVlc3Rpb24uIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IGl0J3MgdG91Y2hpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSBmZWF0dXJlLiBUaGUgbW9kaWZpY2F0aW9uIGlzIGNoYW5naW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3aXRoaW4gYGxydV9nZW5fbG9va19hcm91bmRgLCBzbyBpdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiBob3cgYWNjZXNzIGJpdHMgYXJlIGV2YWx1YXRlZCB3aGVuIHJlY2xhaW1pbmcgbWVtb3J5LiBUaGF0J3MgcGVyZmVjdCBmdXp6aW5nIG1hdGVyaWFsLlxuXG5IZXJlJ3MgbXkgcmVzdWx0LCByZWFkeSBmb3IgdGhlIG5leHQgc3RhZ2U6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWBcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsIFwiZm9saW9fcmVmZXJlbmNlZFwiXWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkxSVV9HRU5cIiwgXCJMUlVfR0VOX0VOQUJMRURcIl1gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjUsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjM3Ljk5NTczMDAwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDMzMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19yZWZlcmVuY2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcImZvbGlvX3JlZmVyZW5jZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGZlYXR1cmUsIGJ5IGNoYW5naW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBgeW91bmdgIHZhcmlhYmxlIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBwYWdlIGFjY2Vzc2VkIGJpdHMgYXJlIGV2YWx1YXRlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjM4LjA3NDE3MDYxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjI1OTg5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTozOC4wNzQ4NTY2NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc0NjE5MDg0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhmZWZlNTNmMzE2NWRlOGNmNDYwZjU0ZGVjZDA4ZjExZjE0M2I5ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1MDozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjI2NDAxNzg1MGE1NWEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC00MTkyLDcgKzQxOTIsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHR1bnNpZ25lZCBsb25nIGVuZDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4gXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuLVx0aW50IHlvdW5nID0gMTtcbitcdGludCB5b3VuZyA9IG5yO1xuIFx0cHRlX3QgKnB0ZSA9IHB2bXctXHUwMDNlcHRlO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcHZtdy1cdTAwM2VhZGRyZXNzO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjM4LjA3NDg1ODAyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY0NjYzNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgd2hldGhlciB0aGlzIHNlZW1pbmdseSBpbm5vY3VvdXMgY2hhbmdlIGluIGBtbS92bXNjYW4uY2Ag4oCTIHNwZWNpZmljYWxseSB0aGUgYWx0ZXJhdGlvbiBvZiBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtgIHdpdGhpbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIOKAkyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuYWx5c2lzLiBUaGlzIGlzIGNyaXRpY2FsLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBldmVuIHN1YnRsZSBzaGlmdHMgY2FuIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMuXG5cbkknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBjb250ZXh0IG9mIGB5b3VuZ2AgbmVlZHMgdG8gYmUgZnVsbHkgdW5kZXJzdG9vZCwgd2hpY2ggbWVhbnMgdHJhY2luZyB0aGUgZGF0YSBmbG93IGFyb3VuZCBgbnJgIHRvIGRldGVybWluZSBpdHMgdmFsdWUgd2hlbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgd2hlcmUgaXRzIHZhbHVlIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi4gVGhlbiBhc3Nlc3MgaWYgdGhlIHZhcmlhYmxlIGB5b3VuZ2AgaXMgcmVhZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCwgb3IgaWYgaXRzIHZhbHVlIG1pZ2h0IGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgY291bGQgc3Vic2VxdWVudGx5IHVzZSBpdCBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgeW91bmdgIHZhcmlhYmxlIGFuZCBpdHMgc3Vic2VxdWVudCB1c2FnZS4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwsIG9yIGEgc3VidGxlIG1lbW9yeSBidWcsIGlzIG1vc3QgbGlrZWx5IHRvIHJlc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6NDIuMTM5NTI1MTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU0MzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI3MjQ9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NTMtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXFxubW0vdm1zY2FuLmM6Mjc1NDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXFxubW0vdm1zY2FuLmMtMjc1NS0gKlxcbi0tXFxubW0vdm1zY2FuLmM9NDAwMT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMjAtXFx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcXG5tbS92bXNjYW4uYzo0MDIxOlxcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXFxubW0vdm1zY2FuLmMtNDAyMi1cXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxNDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxODYtICovXFxubW0vdm1zY2FuLmM6NDE4Nzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDE4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjQyLjE4NjA4MzgzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQyOTMzNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gYGxydV9nZW5fbG9va19hcm91bmRgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBnZW5lcmFsaXplZCBMUlUgc2Nhbm5pbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmF0aW9uYWwgTFJVIHN5c3RlbSwgYW5kIEkgd2FudCB0byBzZWUgaG93IGl0IG1ha2VzIGRlY2lzaW9ucyBhYm91dCB3aGljaCBwYWdlcyB0byByZWNsYWltLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGV1cmlzdGljcyBpdCB1c2VzIGZvciBzY2FubmluZyBhbmQgaG93IGl0IGJhbGFuY2VzIG1lbW9yeSByZWNsYWltIGFnYWluc3Qgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBsb2dpYyByZWxhdGVkIHRvIHJlY2xhaW0gdGFyZ2V0cywgem9uZSBjb25zaWRlcmF0aW9ucywgYW5kIHBvdGVudGlhbGx5LCBob3cgaXQgaGFuZGxlcyBkaXJ0eSBwYWdlcyBhbmQgYW5vbnltb3VzIG1lbW9yeS4gVWx0aW1hdGVseSwgSSdtIGFpbWluZyB0byBnYWluIGluc2lnaHQgaW50byBob3cgdGhlIGtlcm5lbCBwcmlvcml0aXplcyBwYWdlcyBmb3IgcmVjbGFpbSBhbmQgdGhlIHNwZWNpZmljIG1lY2hhbmlzbXMgdXNlZCB0byBvcHRpbWl6ZSB0aGlzIGltcG9ydGFudCBhcmVhIG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6NDYuODI5MDE5Nzk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTg3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDE4NzpcXHRib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuNDE4ODpcXHR7XFxuNDE4OTpcXHRcXHRpbnQgaTtcXG40MTkwOlxcdFxcdGJvb2wgZGlydHk7XFxuNDE5MTpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xcbjQxOTI6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuNDE5MzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbjQxOTQ6XFx0XFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG40MTk1OlxcdFxcdGludCB5b3VuZyA9IG5yO1xcbjQxOTY6XFx0XFx0cHRlX3QgKnB0ZSA9IHB2bXctXFx1MDAzZXB0ZTtcXG40MTk3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHB2bXctXFx1MDAzZWFkZHJlc3M7XFxuNDE5ODpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXFx1MDAzZXZtYTtcXG40MTk5OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHZtdy1cXHUwMDNlcGZuKTtcXG40MjAwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40MjAxOlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuNDIwMjpcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNDIwMzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XFxuNDIwNDpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuNDIwNTpcXHRcXHRpbnQgZ2VuO1xcbjQyMDY6XFx0XFxuNDIwNzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuNDIwODpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuNDIwOTpcXHRcXG40MjEwOlxcdFxcdGlmICghdGVzdF9hbmRfY2xlYXJfeW91bmdfcHRlc19ub3RpZnkodm1hLCBhZGRyLCBwdGUsIG5yKSlcXG40MjExOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40MjEyOlxcdFxcbjQyMTM6XFx0XFx0aWYgKHNwaW5faXNfY29udGVuZGVkKHB2bXctXFx1MDAzZXB0bCkpXFxuNDIxNDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MjE1OlxcdFxcbjQyMTY6XFx0XFx0LyogZXhjbHVkZSBzcGVjaWFsIFZNQXMgY29udGFpbmluZyBhbm9uIHBhZ2VzIGZyb20gQ09XICovXFxuNDIxNzpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpXFxuNDIxODpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MjE5OlxcdFxcbjQyMjA6XFx0XFx0LyogYXZvaWQgdGFraW5nIHRoZSBMUlUgbG9jayB1bmRlciB0aGUgUFRMIHdoZW4gcG9zc2libGUgKi9cXG40MjIxOlxcdFxcdHdhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlID8gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsayA6IE5VTEw7XFxuNDIyMjpcXHRcXG40MjIzOlxcdFxcdHN0YXJ0ID0gbWF4KGFkZHIgXFx1MDAyNiBQTURfTUFTSywgdm1hLVxcdTAwM2V2bV9zdGFydCk7XFxuNDIyNDpcXHRcXHRlbmQgPSBtaW4oYWRkciB8IH5QTURfTUFTSywgdm1hLVxcdTAwM2V2bV9lbmQgLSAxKSArIDE7XFxuNDIyNTpcXHRcXG40MjI2OlxcdFxcdGlmIChlbmQgLSBzdGFydCA9PSBQQUdFX1NJWkUpXFxuNDIyNzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0aWYgKGVuZCAtIHN0YXJ0IFxcdTAwM2UgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRSkge1xcbjQyMzA6XFx0XFx0XFx0aWYgKGFkZHIgLSBzdGFydCBcXHUwMDNjIE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUgLyAyKVxcbjQyMzE6XFx0XFx0XFx0XFx0ZW5kID0gc3RhcnQgKyBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFO1xcbjQyMzI6XFx0XFx0XFx0ZWxzZSBpZiAoZW5kIC0gYWRkciBcXHUwMDNjIE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUgLyAyKVxcbjQyMzM6XFx0XFx0XFx0XFx0c3RhcnQgPSBlbmQgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFO1xcbjQyMzQ6XFx0XFx0XFx0ZWxzZSB7XFxuNDIzNTpcXHRcXHRcXHRcXHRzdGFydCA9IGFkZHIgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFIC8gMjtcXG40MjM2OlxcdFxcdFxcdFxcdGVuZCA9IGFkZHIgKyBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFIC8gMjtcXG40MjM3OlxcdFxcdFxcdH1cXG40MjM4OlxcdFxcdH1cXG40MjM5OlxcdFxcbjQyNDA6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG40MjQxOlxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuNDI0MjpcXHRcXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWF4X3NlcSk7XFxuNDI0MzpcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbjQyNDQ6XFx0XFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG40MjQ1OlxcdFxcbjQyNDY6XFx0XFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG40MjQ3OlxcdFxcbjQyNDg6XFx0XFx0cHRlIC09IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xcbjQyNDk6XFx0XFxuNDI1MDpcXHRcXHRmb3IgKGkgPSAwLCBhZGRyID0gc3RhcnQ7IGFkZHIgIT0gZW5kO1xcbjQyNTE6XFx0XFx0ICAgICBpICs9IG5yLCBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG40MjUyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbjQyNTM6XFx0XFx0XFx0cHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdGUpO1xcbjQyNTQ6XFx0XFxuNDI1NTpcXHRcXHRcXHRuciA9IDE7XFxuNDI1NjpcXHRcXHRcXHRwZm4gPSBnZXRfcHRlX3BmbihwdGVudCwgdm1hLCBhZGRyLCBwZ2RhdCk7XFxuNDI1NzpcXHRcXHRcXHRpZiAocGZuID09IC0xKVxcbjQyNTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDI1OTpcXHRcXG40MjYwOlxcdFxcdFxcdGZvbGlvID0gZ2V0X3Bmbl9mb2xpbyhwZm4sIG1lbWNnLCBwZ2RhdCk7XFxuNDI2MTpcXHRcXHRcXHRpZiAoIWZvbGlvKVxcbjQyNjI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDI2MzpcXHRcXG40MjY0OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbjQyNjU6XFx0XFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9uciA9IChlbmQgLSBhZGRyKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjQyNjY6XFx0XFxuNDI2NzpcXHRcXHRcXHRcXHRuciA9IGZvbGlvX3B0ZV9iYXRjaF9mbGFncyhmb2xpbywgTlVMTCwgcHRlLCBcXHUwMDI2cHRlbnQsXFxuNDI2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtYXhfbnIsIEZQQl9NRVJHRV9ZT1VOR19ESVJUWSk7XFxuNDI2OTpcXHRcXHRcXHR9XFxuNDI3MDpcXHRcXG40MjcxOlxcdFxcdFxcdGlmICghdGVzdF9hbmRfY2xlYXJfeW91bmdfcHRlc19ub3RpZnkodm1hLCBhZGRyLCBwdGUsIG5yKSlcXG40MjcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQyNzM6XFx0XFxuNDI3NDpcXHRcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbjQyNzU6XFx0XFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuNDI3NjpcXHRcXG40Mjc3OlxcdFxcdFxcdFxcdGxhc3QgPSBmb2xpbztcXG40Mjc4OlxcdFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuNDI3OTpcXHRcXHRcXHR9XFxuNDI4MDpcXHRcXG40MjgxOlxcdFxcdFxcdGlmIChwdGVfZGlydHkocHRlbnQpKVxcbjQyODI6XFx0XFx0XFx0XFx0ZGlydHkgPSB0cnVlO1xcbjQyODM6XFx0XFxuNDI4NDpcXHRcXHRcXHR5b3VuZyArPSBucjtcXG40Mjg1OlxcdFxcdH1cXG40Mjg2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTo0Ni44Mjk0NTE4NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5ODQ0NTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgQ29kZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZTogYGludCB5b3VuZyA9IDE7YCBoYXMgYmVjb21lIGBpbnQgeW91bmcgPSBucjtgLiBIbW0sIHRoaXMgaXMgY2xlYXJseSBhIGJ1ZyBmaXguIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNvcnJlY3RseSBpbml0aWFsaXppbmcgdGhlIHZhcmlhYmxlIGB5b3VuZ2AgdG8gMSwgaW5zdGVhZCBvZiBzZXR0aW5nIGl0IHRvIHRoZSB2YWx1ZSBvZiBgbnJgLiBUaGF0J3MgYSBjbGFzc2ljIG9mZi1ieS1vbmUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4uIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIGB5b3VuZ2AgaXMgdXNlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCBhbmQgd2hhdCBpbXBhY3QgdGhpcyBpbml0aWFsaXphdGlvbiBjaGFuZ2UgaGFzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0byBjb25maWRlbnRseSBhc3Nlc3MgdGhpcyBwYXRjaC4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTo1MC44Mjc5MDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Mjg3OlxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbjQyODg6XFx0XFxuNDI4OTpcXHRcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuNDI5MjpcXHRcXHRpZiAobW1fc3RhdGUgXFx1MDAyNlxcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXFxuNDI5MzpcXHRcXHRcXHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVxcdTAwM2VwbWQpO1xcbjQyOTQ6XFx0XFxuNDI5NTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuNDI5NjpcXHRcXG40Mjk3OlxcdFxcdHJldHVybiB0cnVlO1xcbjQyOTg6XFx0fVxcbjQyOTk6XFx0XFxuNDMwMDpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuNDMwMTpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY2cgTFJVXFxuNDMwMjpcXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjQzMDM6XFx0XFxuNDMwNDpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xcbjQzMDU6XFx0ZW51bSB7XFxuNDMwNjpcXHRcXHRNRU1DR19MUlVfTk9QLFxcbjQzMDc6XFx0XFx0TUVNQ0dfTFJVX0hFQUQsXFxuNDMwODpcXHRcXHRNRU1DR19MUlVfVEFJTCxcXG40MzA5OlxcdFxcdE1FTUNHX0xSVV9PTEQsXFxuNDMxMDpcXHRcXHRNRU1DR19MUlVfWU9VTkcsXFxuNDMxMTpcXHR9O1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG40MzE0OlxcdHtcXG40MzE1OlxcdFxcdGludCBzZWc7XFxuNDMxNjpcXHRcXHRpbnQgb2xkLCBuZXc7XFxuNDMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQzMTg6XFx0XFx0aW50IGJpbiA9IGdldF9yYW5kb21fdTMyX2JlbG93KE1FTUNHX05SX0JJTlMpO1xcbjQzMTk6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbjQzMjA6XFx0XFxuNDMyMTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5sb2NrLCBmbGFncyk7XFxuNDMyMjpcXHRcXG40MzIzOlxcdFxcdFZNX1dBUk5fT05fT05DRShobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdCkpO1xcbjQzMjQ6XFx0XFxuNDMyNTpcXHRcXHRzZWcgPSAwO1xcbjQzMjY6XFx0XFx0bmV3ID0gb2xkID0gbHJ1dmVjLVxcdTAwM2VscnVnZW4uZ2VuO1xcbjQzMjc6XFx0XFxuNDMyODpcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xcbjQzMjk6XFx0XFx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEKVxcbjQzMzA6XFx0XFx0XFx0c2VnID0gTUVNQ0dfTFJVX0hFQUQ7XFxuNDMzMTpcXHRcXHRlbHNlIGlmIChvcCA9PSBNRU1DR19MUlVfVEFJTClcXG40MzMyOlxcdFxcdFxcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xcbjQzMzM6XFx0XFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcXG40MzM0OlxcdFxcdFxcdG5ldyA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXFx1MDAzZW1lbWNnX2xydS5zZXEpO1xcbjQzMzU6XFx0XFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1lPVU5HKVxcbjQzMzY6XFx0XFx0XFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LnNlcSArIDEpO1xcbjQzMzc6XFx0XFx0ZWxzZVxcbjQzMzg6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHRydWUpO1xcbjQzMzk6XFx0XFxuNDM0MDpcXHRcXHRXUklURV9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnNlZywgc2VnKTtcXG40MzQxOlxcdFxcdFdSSVRFX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uZ2VuLCBuZXcpO1xcbjQzNDI6XFx0XFxuNDM0MzpcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0KTtcXG40MzQ0OlxcdFxcbjQzNDU6XFx0XFx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEIHx8IG9wID09IE1FTUNHX0xSVV9PTEQpXFxuNDM0NjpcXHRcXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuLmxpc3QsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmZpZm9bbmV3XVtiaW5dKTtcXG40MzQ3OlxcdFxcdGVsc2VcXG40MzQ4OlxcdFxcdFxcdGhsaXN0X251bGxzX2FkZF90YWlsX3JjdShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xcbjQzNDk6XFx0XFxuNDM1MDpcXHRcXHRwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1Lm5yX21lbWNnc1tvbGRdLS07XFxuNDM1MTpcXHRcXHRwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1Lm5yX21lbWNnc1tuZXddKys7XFxuNDM1MjpcXHRcXG40MzUzOlxcdFxcdGlmICghcGdkYXQtXFx1MDAzZW1lbWNnX2xydS5ucl9tZW1jZ3Nbb2xkXSBcXHUwMDI2XFx1MDAyNiBvbGQgPT0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LnNlcSkpXFxuNDM1NDpcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2VtZW1jZ19scnUuc2VxLCBwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LnNlcSArIDEpO1xcbjQzNTU6XFx0XFxuNDM1NjpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmxvY2ssIGZsYWdzKTtcXG40MzU3OlxcdH1cXG40MzU4OlxcdFxcbjQzNTk6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbjQzNjA6XFx0XFxuNDM2MTpcXHR2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG40MzYyOlxcdHtcXG40MzYzOlxcdFxcdGludCBnZW47XFxuNDM2NDpcXHRcXHRpbnQgbmlkO1xcbjQzNjU6XFx0XFx0aW50IGJpbiA9IGdldF9yYW5kb21fdTMyX2JlbG93KE1FTUNHX05SX0JJTlMpO1xcbjQzNjY6XFx0XFxuNDM2NzpcXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbjQzNjg6XFx0XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcbjQzNjk6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG40MzcwOlxcdFxcbjQzNzE6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5sb2NrKTtcXG40MzcyOlxcdFxcbjQzNzM6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdCkpO1xcbjQzNzQ6XFx0XFxuNDM3NTpcXHRcXHRcXHRnZW4gPSBnZXRfbWVtY2dfZ2VuKHBnZGF0LVxcdTAwM2VtZW1jZ19scnUuc2VxKTtcXG40Mzc2OlxcdFxcbjQzNzc6XFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2VscnVnZW4uZ2VuID0gZ2VuO1xcbjQzNzg6XFx0XFxuNDM3OTpcXHRcXHRcXHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuLmxpc3QsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmZpZm9bZ2VuXVtiaW5dKTtcXG40MzgwOlxcdFxcdFxcdHBnZGF0LVxcdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW2dlbl0rKztcXG40MzgxOlxcdFxcbjQzODI6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmxvY2spO1xcbjQzODM6XFx0XFx0fVxcbjQzODQ6XFx0fVxcbjQzODU6XFx0XFxuNDM4NjpcXHR2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjUwLjgyODQ1ODgyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDgyNzA5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSAneW91bmcnIFZhcmlhYmxlIGluIHRoZSBMUlUgQmxvb20gRmlsdGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgc25pcHBldC4gVGhlIGB5b3VuZ2AgdmFyaWFibGUsIGFzIHVzZWQgd2l0aGluIGBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKWAsIGlzIGNsZWFybHkgYSBoZXVyaXN0aWMg4oCTIGEgcXVpY2sgYW5kIGRpcnR5IGVzdGltYXRlIOKAkyBmb3Igb3VyIExSVSBCbG9vbSBmaWx0ZXIuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcywgYnV0IGluIHRoaXMgY2FzZSwgSSBzZWUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBhc3NvY2lhdGVkIHdpdGggaXRzIHVzYWdlLiBUaGUgc3lzdGVtJ3MgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQncyBub3QgYSBjb25jZXJuLiBUaGUgY29yZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gYSBsb2dpY2FsIGZsYXcgaW4gaG93IHdlJ3JlICpjb3VudGluZyogdGhlc2UgJ3lvdW5nJyBwYWdlcywgbm90IGluIHRoZSB1c2Ugb2YgdGhlIHZhcmlhYmxlIGl0c2VsZi4gVGhpcyBpcyBhIHN1YnRsZSBlcnJvciwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UuIEdpdmVuIHRoaXMgYW5hbHlzaXMsIGNsYXNzaWZ5aW5nIHRoaXMgYXMgYSBgTmVlZHNLTVNBTmAgaXNzdWUgaXMgaW5jb3JyZWN0LiBUaGUgcm9vdCBjYXVzZSBpcyBhIHNpbXBsZSBsb2dpY2FsIGVycm9yIGluIGNvdW50aW5nOyB0aGVyZWZvcmUsIG5vIG5lZWQgZm9yIGtlcm5lbCBtZW1vcnkgc2FuaXRpemVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg1LCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6NTUuNTM2NzMyMjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB3aGVyZSB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgdG8gMSBpbnN0ZWFkIG9mIGBucmAuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHlvdW5nIHBhZ2VzIGFuZCB1cGRhdGUgdGhlIGJsb29tIGZpbHRlciB2aWEgYHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQsIG5vciBhbnkgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB3aGVyZSB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgdG8gMSBpbnN0ZWFkIG9mIGBucmAuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHlvdW5nIHBhZ2VzIGFuZCB1cGRhdGUgdGhlIGJsb29tIGZpbHRlciB2aWEgYHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQsIG5vciBhbnkgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzzwxw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 06:24:20 +0000 UTC FinishedAt: 2026-08-13 06:51:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "00e9637c-9388-4544-8ade-2ad3ff5a8a82" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "folio_referenced" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19yZWZlcmVuY2VkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgd2hlcmUgdGhlIGB5b3VuZ2AgdmFyaWFibGUgd2FzIGluaXRpYWxpemVkIHRvIDEgaW5zdGVhZCBvZiBgbnJgLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiB5b3VuZyBwYWdlcyBhbmQgdXBkYXRlIHRoZSBibG9vbSBmaWx0ZXIgdmlhIGBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludm9sdmVkLCBub3IgYW55IHJpc2sgb2YgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmZWZlNTNmMzE2NWRlOGNmNDYwZjU0ZGVjZDA4ZjExZjE0M2I5ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1MDozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiYzMyNGUzN2M1ZjFmLi4yNjQwMTc4NTBhNTVhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDE5Miw3ICYjNDM7NDE5Miw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG4tXHRpbnQgeW91bmcgPSAxO1xuJiM0MztcdGludCB5b3VuZyA9IG5yO1xuIFx0cHRlX3QgKnB0ZSA9IHB2bXctXHUwMDNlcHRlO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcHZtdy1cdTAwM2VhZGRyZXNzO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGZlZmU1M2YzMTY1ZGU4Y2Y0NjBmNTRkZWNkMDhmMTFmMTQzYjlkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA2OjUwOjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiYzMyNGUzN2M1ZjFmLi4yNjQwMTc4NTBhNTVhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDE5Miw3ICYjNDM7NDE5Miw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOwogCXN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7Ci0JaW50IHlvdW5nID0gMTsKJiM0MzsJaW50IHlvdW5nID0gbnI7CiAJcHRlX3QgKnB0ZSA9IHB2bXctJmd0O3B0ZTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBwdm13LSZndDthZGRyZXNzOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy0mZ3Q7dm1hOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBMb29rLUFyb3VuZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCwgb2YgY291cnNlLCBtZWFucyB3ZSYjMzk7cmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHR3ZWFraW5nIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZS4gQ2hhbmdpbmcgYGludCB5b3VuZyA9IDE7YCB0byBgaW50IHlvdW5nID0gbnI7YOKApnRoYXTigJlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBiZSBpbml0aWFsaXppbmcgYSAmIzM0O3lvdW5nJiMzNDsgY291bnRlciB0byAxLCBwcmVzdW1hYmx5IGZvciBpbmRpY2F0aW5nIHBhZ2VzIGNvbnNpZGVyZWQgeW91bmcgaW4gdGhlIGxvb2stYXJvdW5kIHByb2Nlc3MuIE5vdywgd2UmIzM5O3JlIG1ha2luZyBpdCBlcXVhbCB0byBgbnJgLiAmIzM0O25yJiMzNDsgbGlrZWx5IHJlcHJlc2VudHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiBwYWdlcyBiZWluZyBjb25zaWRlcmVkIG9yIHNjYW5uZWQuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIG1vZGlmaWNhdGlvbi4gSSByZWFsbHkgbmVlZCB0byBkcmlsbCBpbnRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3Ztc2Nhbi5jYCB0byBmdWxseSBncmFzcCB0aGUgY29uc2VxdWVuY2VzIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyAmIzM5O25yJiMzOTsgdmFyaWFibGUgcmVwcmVzZW50cyBhbmQgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgTFJVIGFnaW5nIGFuZCBwcm9tb3Rpb24gbG9naWMsIHBhcnRpY3VsYXJseSBob3cgaXQgaW5mbHVlbmNlcyB0aGUgbG9vay1hcm91bmQgZGVjaXNpb25zIGFuZCBzdWJzZXF1ZW50IHBhZ2UgcmVjbGFpbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjcyND1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NTMtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXG5tbS92bXNjYW4uYzoyNzU0OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cbm1tL3Ztc2Nhbi5jLTI3NTUtICpcbi0tXG5tbS92bXNjYW4uYz00MDAxPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwMjAtXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcbm1tL3Ztc2Nhbi5jOjQwMjE6XHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxubW0vdm1zY2FuLmMtNDAyMi1cdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxuLS1cbm1tL3Ztc2Nhbi5jPTQxNDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTg2LSAqL1xubW0vdm1zY2FuLmM6NDE4Nzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkFuYWx5emluZyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAqKgoKT2theSwgc28gYGxydV9nZW5fbG9va19hcm91bmRgLi4uIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBwb3RlbnRpYWxseSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBhdCBsZWFzdCB1c2VkIG91dHNpZGUgb2YgYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBpbiBgbW0vdm1zY2FuLmNgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIHBlcmhhcHMgdXNlZCBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbD8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBjaGVjayBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IG9mIGB2bXNjYW4uY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTE4OC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoyMDE6SW4gdGhlIGV2aWN0aW9uIHBhdGgsIHNwZWNpZmljYWxseSwgaW4gYGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCwgaWYgYVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4MS1cdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcdTAwMjZcdTAwMjYgcHZtdy5wdGUpIHtcbm1tL3JtYXAuYzo5ODI6XHRcdFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXHUwMDI2cHZtdywgbnIpKVxubW0vcm1hcC5jLTk4My1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuLS1cbm1tL3Ztc2Nhbi5jPTI3MjQ9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6Mjc1NDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yNzU1LSAqXG4tLVxubW0vdm1zY2FuLmM9NDAwMT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDIwLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDIxOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwMjItXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4Ni0gKi9cbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGxydV9nZW5fbG9va19hcm91bmRgKioKCk9rYXksIHNvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGluIGBtbS9ybWFwLmNgLiBUaGF0IHBsYWNlcyBpdCBzcXVhcmVseSB3aXRoaW4gdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGUgaW50cmljYWNpZXMgb2YgbXVsdGktZ2VuIExSVSBhcmUgY3JpdGljYWwgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgb3Igc2lnbmlmaWNhbnRseSBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IHJ1bGUgb3V0IGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gcm9hZGJsb2NrcyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlJiMzOTtzIHNwZWNpZmljcy4gS25vd2luZyB0aGUgcmlnaHQgY29uZmlncyB3aWxsIHF1aWNrbHkgYWxsb3cgbWUgdG8gZ2F1Z2UgdGhlIHN5c3RlbSYjMzk7cyBiYXNlbGluZSBiZWhhdmlvciwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQwOD1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xNDEwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MTE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQxMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOS1cbm1tL0tjb25maWc6MTQyMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MjEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI1LVxubW0vS2NvbmZpZzoxNDI2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzNC1cbm1tL0tjb25maWc6MTQzNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQzNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZXNlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgY29uZmlndXJhdGlvbnMuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZW0gYXMgcHJvYmFibHkgYmVpbmcgcmVsYXRlZCB0byB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBwYWdlIHJlcGxhY2VtZW50IG1lY2hhbmlzbSwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBMUlVfR0VOYCBzaG91bGQgYmUgZG9jdW1lbnRlZCB0aGVyZSDigJMgcHJvdmlkaW5nIHRoZSBjcnVjaWFsIGRldGFpbHMgb24gaXRzIHB1cnBvc2UsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgb3V0bGluZSBpZiB0aGVyZSYjMzk7cyBhbnkgcGFydGljdWxhciBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIG9yIHBvc3NpYmxlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDExOlx0Y29uZmlnIExSVV9HRU5cbjE0MTI6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQxMzpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MTQ6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQxNTpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDE2Olx0XHRoZWxwXG4xNDE3Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQxODpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDE5Olx0XG4xNDIwOlx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQyMTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQyMjpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDIzOlx0XHRoZWxwXG4xNDI0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MjU6XHRcbjE0MjY6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQyNzpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0Mjg6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQyOTpcdFx0aGVscFxuMTQzMDpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MzE6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MzI6XHRcbjE0MzM6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDM0Olx0XG4xNDM1Olx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDM2Olx0XHRkZWZfYm9vbCB5XG4xNDM3Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQzODpcdCMgfVxuMTQzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBrZXkgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudC4gSXQgbG9va3MgbGlrZSB0aGUgY29uZmlncyBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUgb25lcyB0byBlbmFibGUgdG8gYWN0aXZhdGUgdGhpcyBmZWF0dXJlLiBUaGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aGUgYWx0ZXJhdGlvbiBmcm9tIGBpbnQgeW91bmcgPSAxO2AgdG8gYGludCB5b3VuZyA9IG5yO2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSBpbXBhY3RpbmcgaG93IHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGdlbmVyYXRpb24gYmVoYXZlcy4gR2l2ZW4gaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgdGhpcyBhcmVhIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrOyBJIG5lZWQgdG8ga25vdyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIEFoLCBpdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2Q7IGl0JiMzOTtzIGFjY2Vzc2libGUuIEl0cyBzaWduYXR1cmUgaXMgYGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilgLgoKTGV0JiMzOTtzIHNlZSwgYXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgdGhhdCB3YXJyYW50IGludmVzdGlnYXRpb24/IE9rYXksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQgYnkgYGZvbGlvX3JlZmVyZW5jZWRfb25lYC4gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCAqaXMqIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgbWFrZXMgbm8gc2Vuc2UgdG8gdGFyZ2V0IHRoYXQgZGlyZWN0bHksIHNvLCBJIHdhbnQgdG8gY29uc2lkZXIgdGhlIGVudHJ5IHBvaW50LCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBgZm9saW9fcmVmZXJlbmNlZGAuIFBlcmhhcHMgdGhhdCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZnV6emluZyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9ODgzPXBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL3JtYXAuYy05MDYtXG5tbS9ybWFwLmM6OTA3OnN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XG5tbS9ybWFwLmMtOTA4LVx0aW50IG1hcGNvdW50O1xuLS1cbm1tL3JtYXAuYy05MTQtLypcbm1tL3JtYXAuYzo5MTU6ICogYXJnOiBmb2xpb19yZWZlcmVuY2VkX2FyZyB3aWxsIGJlIHBhc3NlZFxubW0vcm1hcC5jLTkxNi0gKi9cbm1tL3JtYXAuYzo5MTc6c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYy05MTgtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbm1tL3JtYXAuYy05MTkte1xubW0vcm1hcC5jOjkyMDpcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyAqcHJhID0gYXJnO1xubW0vcm1hcC5jLTkyMS1cdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCAwKTtcbi0tXG5tbS9ybWFwLmMtMTAyNy1cbm1tL3JtYXAuYzoxMDI4OnN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbm1tL3JtYXAuYy0xMDI5LXtcbm1tL3JtYXAuYzoxMDMwOlx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnICpwcmEgPSBhcmc7XG5tbS9ybWFwLmMtMTAzMS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHByYS1cdTAwM2VtZW1jZztcbi0tXG5tbS9ybWFwLmMtMTA1Mi0vKipcbm1tL3JtYXAuYzoxMDUzOiAqIGZvbGlvX3JlZmVyZW5jZWQoKSAtIFRlc3QgaWYgdGhlIGZvbGlvIHdhcyByZWZlcmVuY2VkLlxubW0vcm1hcC5jLTEwNTQtICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbi0tXG5tbS9ybWFwLmMtMTA2My0gKi9cbm1tL3JtYXAuYzoxMDY0OmludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG5tbS9ybWFwLmMtMTA2NS1cdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuLS1cbm1tL3JtYXAuYy0xMDY3LVx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbm1tL3JtYXAuYzoxMDY4Olx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcbm1tL3JtYXAuYy0xMDY5LVx0XHQubWFwY291bnQgPSBmb2xpb19tYXBjb3VudChmb2xpbyksXG4tLVxubW0vcm1hcC5jLTEwNzItXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xubW0vcm1hcC5jOjEwNzM6XHRcdC5ybWFwX29uZSA9IGZvbGlvX3JlZmVyZW5jZWRfb25lLFxubW0vcm1hcC5jLTEwNzQtXHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNnByYSxcbi0tXG5tbS9ybWFwLmMtMTA3Ni1cdFx0LnRyeV9sb2NrID0gdHJ1ZSxcbm1tL3JtYXAuYzoxMDc3Olx0XHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hLFxubW0vcm1hcC5jLTEwNzgtXHR9O1xuLS1cbm1tL3JtYXAuYz0xNDQwPXZvaWQgZm9saW9fbW92ZV9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTE0NDktXHQgKiBFbnN1cmUgdGhhdCBhbm9uX3ZtYSBhbmQgdGhlIEZPTElPX01BUFBJTkdfQU5PTiBiaXQgYXJlIHdyaXR0ZW5cbm1tL3JtYXAuYzoxNDUwOlx0ICogc2ltdWx0YW5lb3VzbHksIHNvIGEgY29uY3VycmVudCByZWFkZXIgKGVnIGZvbGlvX3JlZmVyZW5jZWQoKSYjMzk7c1xubW0vcm1hcC5jLTE0NTEtXHQgKiBmb2xpb190ZXN0X2Fub24oKSkgd2lsbCBub3Qgc2VlIG9uZSB3aXRob3V0IHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGUgY29kZSwgYGZvbGlvX3JlZmVyZW5jZWRgIGp1bXBzIG91dCBhcyBhIHN0cm9uZyBjb250ZW5kZXIgZm9yIHNvbWUgZnV6emluZyBhdHRlbnRpb24uIEl0JiMzOTtzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlLiBBbHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB0b28uIFRoYXQgb25lIGNvdWxkIGJlIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYGxydV9nZW5fbG9va19hcm91bmRgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcmV2aXNpdCB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGNvbnNpZGVyIHBvdGVudGlhbCBlZGdlIGNhc2VzIEkgbWF5IGhhdmUgbWlzc2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZXZpZXcuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvcHBvcnR1bml0aWVzIGZvciBnZW5lcmF0aW5nIHVuZXhwZWN0ZWQgaW5wdXQgYW5kIHVuY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzIGluIHRoYXQgZnVuY3Rpb24sIG9yIGluIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxscyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI3MjQ9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6Mjc1NDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yNzU1LSAqXG4tLVxubW0vdm1zY2FuLmM9NDAwMT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDIwLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDIxOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwMjItXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4Ni0gKi9cbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjUKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLCBub3QganVzdCBidXJpZWQgYXdheSBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBJIGNhbiB3b3JrIHdpdGggaXQgZGlyZWN0bHkuIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIGFsc28gYGZvbGlvX3JlZmVyZW5jZWRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaG9zZSBzZWVtIHRvIGJlIGtleSB0byB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2hhbmdlLgoKQW5kLCBvZiBjb3Vyc2UsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaG9zZSB3aWxsIGJlIHRoZSBnYXRlcyBmb3IgYWN0dWFsbHkgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLgoKTm93LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpc24mIzM5O3QgYSAqbWFzc2l2ZSogcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gQWZ0ZXIgYWxsLCBjaGFuZ2VzIGhlcmUgY291bGQgaGF2ZSBicm9hZCBpbXBsaWNhdGlvbnMuIEkgcmVjYWxsIGl0JiMzOTtzIHVzZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltIGFuZCB3aGVuIHdhbGtpbmcgdGhlIHJtYXAsIGFuZCB0aGF0IHB1dHMgaXQgcmlnaHQgaW50byB0aGUgZXZpY3Rpb24gcGF0aC4gT2theSwgaXQgKmNhbiogYmUgYSBob3QgcGF0aCwgYnV0IHRoYXTigJlzIHByZXR0eSBtdWNoIHRoZSBwb2ludDsgdGhpcyBpcyBNR0xSVS1zcGVjaWZpYy4gV2UmIzM5O3JlICp0cnlpbmcqIHRvIHRlc3QgaXRzIGJlaGF2aW9yIHVuZGVyIHByZXNzdXJlLiBTbywgaW5jbHVkaW5nIGl0IGlzIGNvbXBsZXRlbHkganVzdGlmaWVkLgoKQWxyaWdodCwgdGltZSB0byBmb3JtYWxpemUgdGhpcy4KClRoZSBwYXRjaCBpcyBhICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY2FuZGlkYXRlLCBubyBxdWVzdGlvbi4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogaXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSBmZWF0dXJlLiBUaGUgbW9kaWZpY2F0aW9uIGlzIGNoYW5naW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3aXRoaW4gYGxydV9nZW5fbG9va19hcm91bmRgLCBzbyBpdCYjMzk7cyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gaG93IGFjY2VzcyBiaXRzIGFyZSBldmFsdWF0ZWQgd2hlbiByZWNsYWltaW5nIG1lbW9yeS4gVGhhdCYjMzk7cyBwZXJmZWN0IGZ1enppbmcgbWF0ZXJpYWwuCgpIZXJlJiMzOTtzIG15IHJlc3VsdCwgcmVhZHkgZm9yIHRoZSBuZXh0IHN0YWdlOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWyYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7XWAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19yZWZlcmVuY2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZmVmZTUzZjMxNjVkZThjZjQ2MGY1NGRlY2QwOGYxMWYxNDNiOWRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDY6NTA6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJjMzI0ZTM3YzVmMWYuLjI2NDAxNzg1MGE1NWEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00MTkyLDcgJiM0Mzs0MTkyLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXVuc2lnbmVkIGxvbmcgZW5kOwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJc3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDsKLQlpbnQgeW91bmcgPSAxOwomIzQzOwlpbnQgeW91bmcgPSBucjsKIAlwdGVfdCAqcHRlID0gcHZtdy0mZ3Q7cHRlOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IHB2bXctJmd0O2FkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LSZndDt2bWE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgd2hldGhlciB0aGlzIHNlZW1pbmdseSBpbm5vY3VvdXMgY2hhbmdlIGluIGBtbS92bXNjYW4uY2Ag4oCTIHNwZWNpZmljYWxseSB0aGUgYWx0ZXJhdGlvbiBvZiBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtgIHdpdGhpbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIOKAkyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuYWx5c2lzLiBUaGlzIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgZXZlbiBzdWJ0bGUgc2hpZnRzIGNhbiBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLgoKSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBjb250ZXh0IG9mIGB5b3VuZ2AgbmVlZHMgdG8gYmUgZnVsbHkgdW5kZXJzdG9vZCwgd2hpY2ggbWVhbnMgdHJhY2luZyB0aGUgZGF0YSBmbG93IGFyb3VuZCBgbnJgIHRvIGRldGVybWluZSBpdHMgdmFsdWUgd2hlbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgd2hlcmUgaXRzIHZhbHVlIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi4gVGhlbiBhc3Nlc3MgaWYgdGhlIHZhcmlhYmxlIGB5b3VuZ2AgaXMgcmVhZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCwgb3IgaWYgaXRzIHZhbHVlIG1pZ2h0IGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgY291bGQgc3Vic2VxdWVudGx5IHVzZSBpdCBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBhbmQgaXRzIHN1YnNlcXVlbnQgdXNhZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsLCBvciBhIHN1YnRsZSBtZW1vcnkgYnVnLCBpcyBtb3N0IGxpa2VseSB0byByZXNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjc1My0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjc1NS0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDAyMC1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDAyMTpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDIyLVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDE0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxODYtICovXG5tbS92bXNjYW4uYzo0MTg3OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQxODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAqKgoKT2theSwgdGltZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGdlbmVyYWxpemVkIExSVSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmF0aW9uYWwgTFJVIHN5c3RlbSwgYW5kIEkgd2FudCB0byBzZWUgaG93IGl0IG1ha2VzIGRlY2lzaW9ucyBhYm91dCB3aGljaCBwYWdlcyB0byByZWNsYWltLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhldXJpc3RpY3MgaXQgdXNlcyBmb3Igc2Nhbm5pbmcgYW5kIGhvdyBpdCBiYWxhbmNlcyBtZW1vcnkgcmVjbGFpbSBhZ2FpbnN0IG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgcmVsYXRlZCB0byByZWNsYWltIHRhcmdldHMsIHpvbmUgY29uc2lkZXJhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSwgaG93IGl0IGhhbmRsZXMgZGlydHkgcGFnZXMgYW5kIGFub255bW91cyBtZW1vcnkuIFVsdGltYXRlbHksIEkmIzM5O20gYWltaW5nIHRvIGdhaW4gaW5zaWdodCBpbnRvIGhvdyB0aGUga2VybmVsIHByaW9yaXRpemVzIHBhZ2VzIGZvciByZWNsYWltIGFuZCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyB1c2VkIHRvIG9wdGltaXplIHRoaXMgaW1wb3J0YW50IGFyZWEgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTg3Olx0Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuNDE4ODpcdHtcbjQxODk6XHRcdGludCBpO1xuNDE5MDpcdFx0Ym9vbCBkaXJ0eTtcbjQxOTE6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG40MTkyOlx0XHR1bnNpZ25lZCBsb25nIGVuZDtcbjQxOTM6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG40MTk0Olx0XHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuNDE5NTpcdFx0aW50IHlvdW5nID0gbnI7XG40MTk2Olx0XHRwdGVfdCAqcHRlID0gcHZtdy1cdTAwM2VwdGU7XG40MTk3Olx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSBwdm13LVx1MDAzZWFkZHJlc3M7XG40MTk4Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuNDE5OTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdm13LVx1MDAzZXBmbik7XG40MjAwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40MjAxOlx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuNDIwMjpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuNDIwMzpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuNDIwNDpcdFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuNDIwNTpcdFx0aW50IGdlbjtcbjQyMDY6XHRcbjQyMDc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuNDIwODpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuNDIwOTpcdFxuNDIxMDpcdFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl95b3VuZ19wdGVzX25vdGlmeSh2bWEsIGFkZHIsIHB0ZSwgbnIpKVxuNDIxMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG40MjEyOlx0XG40MjEzOlx0XHRpZiAoc3Bpbl9pc19jb250ZW5kZWQocHZtdy1cdTAwM2VwdGwpKVxuNDIxNDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQyMTU6XHRcbjQyMTY6XHRcdC8qIGV4Y2x1ZGUgc3BlY2lhbCBWTUFzIGNvbnRhaW5pbmcgYW5vbiBwYWdlcyBmcm9tIENPVyAqL1xuNDIxNzpcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU1BFQ0lBTClcbjQyMTg6XHRcdFx0cmV0dXJuIHRydWU7XG40MjE5Olx0XG40MjIwOlx0XHQvKiBhdm9pZCB0YWtpbmcgdGhlIExSVSBsb2NrIHVuZGVyIHRoZSBQVEwgd2hlbiBwb3NzaWJsZSAqL1xuNDIyMTpcdFx0d2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZSA/IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrIDogTlVMTDtcbjQyMjI6XHRcbjQyMjM6XHRcdHN0YXJ0ID0gbWF4KGFkZHIgXHUwMDI2IFBNRF9NQVNLLCB2bWEtXHUwMDNldm1fc3RhcnQpO1xuNDIyNDpcdFx0ZW5kID0gbWluKGFkZHIgfCB+UE1EX01BU0ssIHZtYS1cdTAwM2V2bV9lbmQgLSAxKSAmIzQzOyAxO1xuNDIyNTpcdFxuNDIyNjpcdFx0aWYgKGVuZCAtIHN0YXJ0ID09IFBBR0VfU0laRSlcbjQyMjc6XHRcdFx0cmV0dXJuIHRydWU7XG40MjI4Olx0XG40MjI5Olx0XHRpZiAoZW5kIC0gc3RhcnQgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUpIHtcbjQyMzA6XHRcdFx0aWYgKGFkZHIgLSBzdGFydCBcdTAwM2MgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRSAvIDIpXG40MjMxOlx0XHRcdFx0ZW5kID0gc3RhcnQgJiM0MzsgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRTtcbjQyMzI6XHRcdFx0ZWxzZSBpZiAoZW5kIC0gYWRkciBcdTAwM2MgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRSAvIDIpXG40MjMzOlx0XHRcdFx0c3RhcnQgPSBlbmQgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFO1xuNDIzNDpcdFx0XHRlbHNlIHtcbjQyMzU6XHRcdFx0XHRzdGFydCA9IGFkZHIgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFIC8gMjtcbjQyMzY6XHRcdFx0XHRlbmQgPSBhZGRyICYjNDM7IE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUgLyAyO1xuNDIzNzpcdFx0XHR9XG40MjM4Olx0XHR9XG40MjM5Olx0XG40MjQwOlx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuNDI0MTpcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbjQyNDI6XHRcdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuNDI0MzpcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbjQyNDQ6XHRcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG40MjQ1Olx0XG40MjQ2Olx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuNDI0NzpcdFxuNDI0ODpcdFx0cHRlIC09IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xuNDI0OTpcdFxuNDI1MDpcdFx0Zm9yIChpID0gMCwgYWRkciA9IHN0YXJ0OyBhZGRyICE9IGVuZDtcbjQyNTE6XHRcdCAgICAgaSAmIzQzOz0gbnIsIHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG40MjUyOlx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuNDI1MzpcdFx0XHRwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG40MjU0Olx0XG40MjU1Olx0XHRcdG5yID0gMTtcbjQyNTY6XHRcdFx0cGZuID0gZ2V0X3B0ZV9wZm4ocHRlbnQsIHZtYSwgYWRkciwgcGdkYXQpO1xuNDI1NzpcdFx0XHRpZiAocGZuID09IC0xKVxuNDI1ODpcdFx0XHRcdGNvbnRpbnVlO1xuNDI1OTpcdFxuNDI2MDpcdFx0XHRmb2xpbyA9IGdldF9wZm5fZm9saW8ocGZuLCBtZW1jZywgcGdkYXQpO1xuNDI2MTpcdFx0XHRpZiAoIWZvbGlvKVxuNDI2MjpcdFx0XHRcdGNvbnRpbnVlO1xuNDI2MzpcdFxuNDI2NDpcdFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbjQyNjU6XHRcdFx0XHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X25yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuNDI2NjpcdFxuNDI2NzpcdFx0XHRcdG5yID0gZm9saW9fcHRlX2JhdGNoX2ZsYWdzKGZvbGlvLCBOVUxMLCBwdGUsIFx1MDAyNnB0ZW50LFxuNDI2ODpcdFx0XHRcdFx0XHRcdCAgIG1heF9uciwgRlBCX01FUkdFX1lPVU5HX0RJUlRZKTtcbjQyNjk6XHRcdFx0fVxuNDI3MDpcdFxuNDI3MTpcdFx0XHRpZiAoIXRlc3RfYW5kX2NsZWFyX3lvdW5nX3B0ZXNfbm90aWZ5KHZtYSwgYWRkciwgcHRlLCBucikpXG40MjcyOlx0XHRcdFx0Y29udGludWU7XG40MjczOlx0XG40Mjc0Olx0XHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG40Mjc1Olx0XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG40Mjc2Olx0XG40Mjc3Olx0XHRcdFx0bGFzdCA9IGZvbGlvO1xuNDI3ODpcdFx0XHRcdGRpcnR5ID0gZmFsc2U7XG40Mjc5Olx0XHRcdH1cbjQyODA6XHRcbjQyODE6XHRcdFx0aWYgKHB0ZV9kaXJ0eShwdGVudCkpXG40MjgyOlx0XHRcdFx0ZGlydHkgPSB0cnVlO1xuNDI4MzpcdFxuNDI4NDpcdFx0XHR5b3VuZyAmIzQzOz0gbnI7XG40Mjg1Olx0XHR9XG40Mjg2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgQ29kZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlOiBgaW50IHlvdW5nID0gMTtgIGhhcyBiZWNvbWUgYGludCB5b3VuZyA9IG5yO2AuIEhtbSwgdGhpcyBpcyBjbGVhcmx5IGEgYnVnIGZpeC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGluY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgdmFyaWFibGUgYHlvdW5nYCB0byAxLCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgdG8gdGhlIHZhbHVlIG9mIGBucmAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9mZi1ieS1vbmUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4uIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBgeW91bmdgIGlzIHVzZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGFuZCB3aGF0IGltcGFjdCB0aGlzIGluaXRpYWxpemF0aW9uIGNoYW5nZSBoYXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0byBjb25maWRlbnRseSBhc3Nlc3MgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyODc6XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuNDI4ODpcdFxuNDI4OTpcdFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG40MjkwOlx0XG40MjkxOlx0XHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbjQyOTI6XHRcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG40MjkzOlx0XHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbjQyOTQ6XHRcbjQyOTU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjQyOTY6XHRcbjQyOTc6XHRcdHJldHVybiB0cnVlO1xuNDI5ODpcdH1cbjQyOTk6XHRcbjQzMDA6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG40MzAxOlx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNnIExSVVxuNDMwMjpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG40MzAzOlx0XG40MzA0Olx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi9cbjQzMDU6XHRlbnVtIHtcbjQzMDY6XHRcdE1FTUNHX0xSVV9OT1AsXG40MzA3Olx0XHRNRU1DR19MUlVfSEVBRCxcbjQzMDg6XHRcdE1FTUNHX0xSVV9UQUlMLFxuNDMwOTpcdFx0TUVNQ0dfTFJVX09MRCxcbjQzMTA6XHRcdE1FTUNHX0xSVV9ZT1VORyxcbjQzMTE6XHR9O1xuNDMxMjpcdFxuNDMxMzpcdHN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuNDMxNDpcdHtcbjQzMTU6XHRcdGludCBzZWc7XG40MzE2Olx0XHRpbnQgb2xkLCBuZXc7XG40MzE3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNDMxODpcdFx0aW50IGJpbiA9IGdldF9yYW5kb21fdTMyX2JlbG93KE1FTUNHX05SX0JJTlMpO1xuNDMxOTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuNDMyMDpcdFxuNDMyMTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGdkYXQtXHUwMDNlbWVtY2dfbHJ1LmxvY2ssIGZsYWdzKTtcbjQzMjI6XHRcbjQzMjM6XHRcdFZNX1dBUk5fT05fT05DRShobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QpKTtcbjQzMjQ6XHRcbjQzMjU6XHRcdHNlZyA9IDA7XG40MzI2Olx0XHRuZXcgPSBvbGQgPSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbjtcbjQzMjc6XHRcbjQzMjg6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG40MzI5Olx0XHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQpXG40MzMwOlx0XHRcdHNlZyA9IE1FTUNHX0xSVV9IRUFEO1xuNDMzMTpcdFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG40MzMyOlx0XHRcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xuNDMzMzpcdFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcbjQzMzQ6XHRcdFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cdTAwM2VtZW1jZ19scnUuc2VxKTtcbjQzMzU6XHRcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9ZT1VORylcbjQzMzY6XHRcdFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cdTAwM2VtZW1jZ19scnUuc2VxICYjNDM7IDEpO1xuNDMzNzpcdFx0ZWxzZVxuNDMzODpcdFx0XHRWTV9XQVJOX09OX09OQ0UodHJ1ZSk7XG40MzM5Olx0XG40MzQwOlx0XHRXUklURV9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnLCBzZWcpO1xuNDM0MTpcdFx0V1JJVEVfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbiwgbmV3KTtcbjQzNDI6XHRcbjQzNDM6XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0KTtcbjQzNDQ6XHRcbjQzNDU6XHRcdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCB8fCBvcCA9PSBNRU1DR19MUlVfT0xEKVxuNDM0NjpcdFx0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuNDM0NzpcdFx0ZWxzZVxuNDM0ODpcdFx0XHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuNDM0OTpcdFxuNDM1MDpcdFx0cGdkYXQtXHUwMDNlbWVtY2dfbHJ1Lm5yX21lbWNnc1tvbGRdLS07XG40MzUxOlx0XHRwZ2RhdC1cdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW25ld10mIzQzOyYjNDM7O1xuNDM1MjpcdFxuNDM1MzpcdFx0aWYgKCFwZ2RhdC1cdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW29sZF0gXHUwMDI2XHUwMDI2IG9sZCA9PSBnZXRfbWVtY2dfZ2VuKHBnZGF0LVx1MDAzZW1lbWNnX2xydS5zZXEpKVxuNDM1NDpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZW1lbWNnX2xydS5zZXEsIHBnZGF0LVx1MDAzZW1lbWNnX2xydS5zZXEgJiM0MzsgMSk7XG40MzU1Olx0XG40MzU2Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5sb2NrLCBmbGFncyk7XG40MzU3Olx0fVxuNDM1ODpcdFxuNDM1OTpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbjQzNjA6XHRcbjQzNjE6XHR2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjQzNjI6XHR7XG40MzYzOlx0XHRpbnQgZ2VuO1xuNDM2NDpcdFx0aW50IG5pZDtcbjQzNjU6XHRcdGludCBiaW4gPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhNRU1DR19OUl9CSU5TKTtcbjQzNjY6XHRcbjQzNjc6XHRcdGZvcl9lYWNoX25vZGUobmlkKSB7XG40MzY4Olx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbjQzNjk6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjQzNzA6XHRcbjQzNzE6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUubG9jayk7XG40MzcyOlx0XG40MzczOlx0XHRcdFZNX1dBUk5fT05fT05DRSghaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0KSk7XG40Mzc0Olx0XG40Mzc1Olx0XHRcdGdlbiA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXHUwMDNlbWVtY2dfbHJ1LnNlcSk7XG40Mzc2Olx0XG40Mzc3Olx0XHRcdGxydXZlYy1cdTAwM2VscnVnZW4uZ2VuID0gZ2VuO1xuNDM3ODpcdFxuNDM3OTpcdFx0XHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tnZW5dW2Jpbl0pO1xuNDM4MDpcdFx0XHRwZ2RhdC1cdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW2dlbl0mIzQzOyYjNDM7O1xuNDM4MTpcdFxuNDM4MjpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cGdkYXQtXHUwMDNlbWVtY2dfbHJ1LmxvY2spO1xuNDM4MzpcdFx0fVxuNDM4NDpcdH1cbjQzODU6XHRcbjQzODY6XHR2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODUKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSAmIzM5O3lvdW5nJiMzOTsgVmFyaWFibGUgaW4gdGhlIExSVSBCbG9vbSBGaWx0ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb2RlIHNuaXBwZXQuIFRoZSBgeW91bmdgIHZhcmlhYmxlLCBhcyB1c2VkIHdpdGhpbiBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLCBpcyBjbGVhcmx5IGEgaGV1cmlzdGljIOKAkyBhIHF1aWNrIGFuZCBkaXJ0eSBlc3RpbWF0ZSDigJMgZm9yIG91ciBMUlUgQmxvb20gZmlsdGVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMsIGJ1dCBpbiB0aGlzIGNhc2UsIEkgc2VlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2FnZS4gVGhlIHN5c3RlbSYjMzk7cyBkZXNpZ25lZCB0byBlbnN1cmUgdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLiBUaGUgY29yZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gYSBsb2dpY2FsIGZsYXcgaW4gaG93IHdlJiMzOTtyZSAqY291bnRpbmcqIHRoZXNlICYjMzk7eW91bmcmIzM5OyBwYWdlcywgbm90IGluIHRoZSB1c2Ugb2YgdGhlIHZhcmlhYmxlIGl0c2VsZi4gVGhpcyBpcyBhIHN1YnRsZSBlcnJvciwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UuIEdpdmVuIHRoaXMgYW5hbHlzaXMsIGNsYXNzaWZ5aW5nIHRoaXMgYXMgYSBgTmVlZHNLTVNBTmAgaXNzdWUgaXMgaW5jb3JyZWN0LiBUaGUgcm9vdCBjYXVzZSBpcyBhIHNpbXBsZSBsb2dpY2FsIGVycm9yIGluIGNvdW50aW5nOyB0aGVyZWZvcmUsIG5vIG5lZWQgZm9yIGtlcm5lbCBtZW1vcnkgc2FuaXRpemVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB3aGVyZSB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgdG8gMSBpbnN0ZWFkIG9mIGBucmAuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHlvdW5nIHBhZ2VzIGFuZCB1cGRhdGUgdGhlIGJsb29tIGZpbHRlciB2aWEgYHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQsIG5vciBhbnkgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MDozMS41MTIyMzMzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDI0NTQ1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcImZvbGlvX3JlZmVyZW5jZWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTA6MzEuNTEyMjM3NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MjczNzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhmZWZlNTNmMzE2NWRlOGNmNDYwZjU0ZGVjZDA4ZjExZjE0M2I5ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NTA6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjI2NDAxNzg1MGE1NWEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00MTkyLDcgKzQxOTIsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbi1cXHRpbnQgeW91bmcgPSAxO1xcbitcXHRpbnQgeW91bmcgPSBucjtcXG4gXFx0cHRlX3QgKnB0ZSA9IHB2bXctXFx1MDAzZXB0ZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcHZtdy1cXHUwMDNlYWRkcmVzcztcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVxcdTAwM2V2bWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUwOjMxLjg5NTgxMDIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjYxNzgzNTY5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fcmVmZXJlbmNlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZmVhdHVyZSwgYnkgY2hhbmdpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGB5b3VuZ2AgdmFyaWFibGUgaW4gYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHBhZ2UgYWNjZXNzZWQgYml0cyBhcmUgZXZhbHVhdGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGZlZmU1M2YzMTY1ZGU4Y2Y0NjBmNTRkZWNkMDhmMTFmMTQzYjlkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA2OjUwOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmMzMjRlMzdjNWYxZi4uMjY0MDE3ODUwYTU1YSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQxOTIsNyArNDE5Miw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG4tXHRpbnQgeW91bmcgPSAxO1xuK1x0aW50IHlvdW5nID0gbnI7XG4gXHRwdGVfdCAqcHRlID0gcHZtdy1cdTAwM2VwdGU7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBwdm13LVx1MDAzZWFkZHJlc3M7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTA6MzEuODk1ODExNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODY5OTQ4MzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIExvb2stQXJvdW5kIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgd2UncmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgYGxydV9nZW5fbG9va19hcm91bmRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lLiBDaGFuZ2luZyBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtg4oCmdGhhdOKAmXMgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZSBvcmlnaW5hbCBjb2RlIHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBhIFwieW91bmdcIiBjb3VudGVyIHRvIDEsIHByZXN1bWFibHkgZm9yIGluZGljYXRpbmcgcGFnZXMgY29uc2lkZXJlZCB5b3VuZyBpbiB0aGUgbG9vay1hcm91bmQgcHJvY2Vzcy4gTm93LCB3ZSdyZSBtYWtpbmcgaXQgZXF1YWwgdG8gYG5yYC4gXCJuclwiIGxpa2VseSByZXByZXNlbnRzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgcGFnZXMgYmVpbmcgY29uc2lkZXJlZCBvciBzY2FubmVkLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBtb2RpZmljYXRpb24uIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgaW50byBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bXNjYW4uY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnNlcXVlbmNlcyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgJ25yJyB2YXJpYWJsZSByZXByZXNlbnRzIGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBMUlUgYWdpbmcgYW5kIHByb21vdGlvbiBsb2dpYywgcGFydGljdWxhcmx5IGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBsb29rLWFyb3VuZCBkZWNpc2lvbnMgYW5kIHN1YnNlcXVlbnQgcGFnZSByZWNsYWltLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MDo1MC41OTUyOTgzMThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTg2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NTUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDIwLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAyMTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMjItXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTg2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MDo1MC42NDE2MjM4OTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ4MTAwOTI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqQW5hbHl6aW5nIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4uLiBpdCdzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIHBvdGVudGlhbGx5IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIG9yIGF0IGxlYXN0IHVzZWQgb3V0c2lkZSBvZiBgbW0vdm1zY2FuLmNgLiBJdCdzIGRlZmluaXRlbHkgaW4gYG1tL3Ztc2Nhbi5jYCwgYnV0IHRoYXQgZG9lc24ndCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIHBlcmhhcHMgdXNlZCBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbD8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBjaGVjayBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IG9mIGB2bXNjYW4uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTowMS4xMjI2MzY0NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTM2NDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njg5PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4MS1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgyOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4My1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NTUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDIwLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAyMTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMjItXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTg2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTowMi45NTIwMDU3MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE5MzM4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGxydV9nZW5fbG9va19hcm91bmRgKipcblxuT2theSwgc28gYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgaW4gYG1tL3JtYXAuY2AuIFRoYXQgcGxhY2VzIGl0IHNxdWFyZWx5IHdpdGhpbiB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoZSBpbnRyaWNhY2llcyBvZiBtdWx0aS1nZW4gTFJVIGFyZSBjcml0aWNhbCBmb3IgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgYGxydV9nZW5fbG9va19hcm91bmRgLiBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgcnVsZSBvdXQgYW55IG9idmlvdXMgY29uZmlndXJhdGlvbiByb2FkYmxvY2tzIG9yIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUncyBzcGVjaWZpY3MuIEtub3dpbmcgdGhlIHJpZ2h0IGNvbmZpZ3Mgd2lsbCBxdWlja2x5IGFsbG93IG1lIHRvIGdhdWdlIHRoZSBzeXN0ZW0ncyBiYXNlbGluZSBiZWhhdmlvciwgYW5kIGZyb20gdGhlcmUgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6MDUuOTcxMzQ2NTkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODc0MDk4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQwOD1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTE0MTAtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MTE6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MTItXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOS1cXG5tbS9LY29uZmlnOjE0MjA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQyMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNS1cXG5tbS9LY29uZmlnOjE0MjY6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjctXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDM0LVxcbm1tL0tjb25maWc6MTQzNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MzYtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTowNy44NTg3NjE3MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM1MDQ0NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgY29uZmlndXJhdGlvbnMuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZW0gYXMgcHJvYmFibHkgYmVpbmcgcmVsYXRlZCB0byB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBwYWdlIHJlcGxhY2VtZW50IG1lY2hhbmlzbSwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTFJVX0dFTmAgc2hvdWxkIGJlIGRvY3VtZW50ZWQgdGhlcmUg4oCTIHByb3ZpZGluZyB0aGUgY3J1Y2lhbCBkZXRhaWxzIG9uIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBvcHRpb25zLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgY29uZmlndXJlZC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgb3V0bGluZSBpZiB0aGVyZSdzIGFueSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgb3IgcG9zc2libGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjE0LjM5MzgwOTEyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQxMTpcXHRjb25maWcgTFJVX0dFTlxcbjE0MTI6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDEzOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQxNDpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxODpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDE5OlxcdFxcbjE0MjA6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MjE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQyMjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDIzOlxcdFxcdGhlbHBcXG4xNDI0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MjU6XFx0XFxuMTQyNjpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0Mjc6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0Mjg6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQyOTpcXHRcXHRoZWxwXFxuMTQzMDpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MzE6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MzI6XFx0XFxuMTQzMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MzQ6XFx0XFxuMTQzNTpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDM2OlxcdFxcdGRlZl9ib29sIHlcXG4xNDM3OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDM4OlxcdCMgfVxcbjE0Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjE0LjM5MzkyNjQ4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAyMTcyMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvbmZpZ3MgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIG9uZXMgdG8gZW5hYmxlIHRvIGFjdGl2YXRlIHRoaXMgZmVhdHVyZS4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFsdGVyYXRpb24gZnJvbSBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBsaWtlbHkgaW1wYWN0aW5nIGhvdyB0aGUgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBnZW5lcmF0aW9uIGJlaGF2ZXMuIEdpdmVuIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gTm93LCBsZXQncyBkb3VibGUtY2hlY2s7IEkgbmVlZCB0byBrbm93IHRoZSBmdW5jdGlvbidzIHNjb3BlLiBBaCwgaXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2Q7IGl0J3MgYWNjZXNzaWJsZS4gSXRzIHNpZ25hdHVyZSBpcyBgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKWAuXG5cbkxldCdzIHNlZSwgYXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgdGhhdCB3YXJyYW50IGludmVzdGlnYXRpb24/IE9rYXksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQgYnkgYGZvbGlvX3JlZmVyZW5jZWRfb25lYC4gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCAqaXMqIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgbWFrZXMgbm8gc2Vuc2UgdG8gdGFyZ2V0IHRoYXQgZGlyZWN0bHksIHNvLCBJIHdhbnQgdG8gY29uc2lkZXIgdGhlIGVudHJ5IHBvaW50LCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBgZm9saW9fcmVmZXJlbmNlZGAuIFBlcmhhcHMgdGhhdCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjE5LjY5NjEwMTUyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA3NDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19yZWZlcmVuY2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9ODgzPXBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubW0vcm1hcC5jLTkwNi1cXG5tbS9ybWFwLmM6OTA3OnN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XFxubW0vcm1hcC5jLTkwOC1cXHRpbnQgbWFwY291bnQ7XFxuLS1cXG5tbS9ybWFwLmMtOTE0LS8qXFxubW0vcm1hcC5jOjkxNTogKiBhcmc6IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHdpbGwgYmUgcGFzc2VkXFxubW0vcm1hcC5jLTkxNi0gKi9cXG5tbS9ybWFwLmM6OTE3OnN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jLTkxOC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXFxubW0vcm1hcC5jLTkxOS17XFxubW0vcm1hcC5jOjkyMDpcXHRzdHJ1Y3QgZm9saW9fcmVmZXJlbmNlZF9hcmcgKnByYSA9IGFyZztcXG5tbS9ybWFwLmMtOTIxLVxcdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCAwKTtcXG4tLVxcbm1tL3JtYXAuYy0xMDI3LVxcbm1tL3JtYXAuYzoxMDI4OnN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcXG5tbS9ybWFwLmMtMTAyOS17XFxubW0vcm1hcC5jOjEwMzA6XFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnICpwcmEgPSBhcmc7XFxubW0vcm1hcC5jLTEwMzEtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcHJhLVxcdTAwM2VtZW1jZztcXG4tLVxcbm1tL3JtYXAuYy0xMDUyLS8qKlxcbm1tL3JtYXAuYzoxMDUzOiAqIGZvbGlvX3JlZmVyZW5jZWQoKSAtIFRlc3QgaWYgdGhlIGZvbGlvIHdhcyByZWZlcmVuY2VkLlxcbm1tL3JtYXAuYy0xMDU0LSAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuLS1cXG5tbS9ybWFwLmMtMTA2My0gKi9cXG5tbS9ybWFwLmM6MTA2NDppbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbm1tL3JtYXAuYy0xMDY1LVxcdFxcdCAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncylcXG4tLVxcbm1tL3JtYXAuYy0xMDY3LVxcdGJvb2wgd2VfbG9ja2VkID0gZmFsc2U7XFxubW0vcm1hcC5jOjEwNjg6XFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcXG5tbS9ybWFwLmMtMTA2OS1cXHRcXHQubWFwY291bnQgPSBmb2xpb19tYXBjb3VudChmb2xpbyksXFxuLS1cXG5tbS9ybWFwLmMtMTA3Mi1cXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbm1tL3JtYXAuYzoxMDczOlxcdFxcdC5ybWFwX29uZSA9IGZvbGlvX3JlZmVyZW5jZWRfb25lLFxcbm1tL3JtYXAuYy0xMDc0LVxcdFxcdC5hcmcgPSAodm9pZCAqKVxcdTAwMjZwcmEsXFxuLS1cXG5tbS9ybWFwLmMtMTA3Ni1cXHRcXHQudHJ5X2xvY2sgPSB0cnVlLFxcbm1tL3JtYXAuYzoxMDc3OlxcdFxcdC5pbnZhbGlkX3ZtYSA9IGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEsXFxubW0vcm1hcC5jLTEwNzgtXFx0fTtcXG4tLVxcbm1tL3JtYXAuYz0xNDQwPXZvaWQgZm9saW9fbW92ZV9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMTQ0OS1cXHQgKiBFbnN1cmUgdGhhdCBhbm9uX3ZtYSBhbmQgdGhlIEZPTElPX01BUFBJTkdfQU5PTiBiaXQgYXJlIHdyaXR0ZW5cXG5tbS9ybWFwLmM6MTQ1MDpcXHQgKiBzaW11bHRhbmVvdXNseSwgc28gYSBjb25jdXJyZW50IHJlYWRlciAoZWcgZm9saW9fcmVmZXJlbmNlZCgpJ3NcXG5tbS9ybWFwLmMtMTQ1MS1cXHQgKiBmb2xpb190ZXN0X2Fub24oKSkgd2lsbCBub3Qgc2VlIG9uZSB3aXRob3V0IHRoZSBvdGhlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6MTkuNzQyMTg0NjI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzk1NTk3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBjb2RlLCBgZm9saW9fcmVmZXJlbmNlZGAganVtcHMgb3V0IGFzIGEgc3Ryb25nIGNvbnRlbmRlciBmb3Igc29tZSBmdXp6aW5nIGF0dGVudGlvbi4gSXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdnVsbmVyYWJsZS4gQWxzbywgSSdtIHRoaW5raW5nIGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB0b28uIFRoYXQgb25lIGNvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5MZXQncyBnbyBiYWNrIGFuZCBleGFtaW5lIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIHJldmlzaXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgZWRnZSBjYXNlcyBJIG1heSBoYXZlIG1pc3NlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmV2aWV3LiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBvcHBvcnR1bml0aWVzIGZvciBnZW5lcmF0aW5nIHVuZXhwZWN0ZWQgaW5wdXQgYW5kIHVuY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzIGluIHRoYXQgZnVuY3Rpb24sIG9yIGluIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxscyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjIyLjcyMTc0NzA2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTMwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNzI0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzUzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NTQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NTUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDE9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDIwLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAyMTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMjItXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTQwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTg2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODc6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MToyMi43NjczNDcyNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyMjgzNzk4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgbm90IGp1c3QgYnVyaWVkIGF3YXkgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kOyBpdCBtZWFucyBJIGNhbiB3b3JrIHdpdGggaXQgZGlyZWN0bHkuIEknbGwgZGVmaW5pdGVseSBpbmNsdWRlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgYWxzbyBgZm9saW9fcmVmZXJlbmNlZGAgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRob3NlIHNlZW0gdG8gYmUga2V5IHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGFuZ2UuXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhvc2Ugd2lsbCBiZSB0aGUgZ2F0ZXMgZm9yIGFjdHVhbGx5IGVuYWJsaW5nIHRoaXMgZmVhdHVyZS5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpc24ndCBhICptYXNzaXZlKiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBBZnRlciBhbGwsIGNoYW5nZXMgaGVyZSBjb3VsZCBoYXZlIGJyb2FkIGltcGxpY2F0aW9ucy4gSSByZWNhbGwgaXQncyB1c2VkIGR1cmluZyBtZW1vcnkgcmVjbGFpbSBhbmQgd2hlbiB3YWxraW5nIHRoZSBybWFwLCBhbmQgdGhhdCBwdXRzIGl0IHJpZ2h0IGludG8gdGhlIGV2aWN0aW9uIHBhdGguIE9rYXksIGl0ICpjYW4qIGJlIGEgaG90IHBhdGgsIGJ1dCB0aGF04oCZcyBwcmV0dHkgbXVjaCB0aGUgcG9pbnQ7IHRoaXMgaXMgTUdMUlUtc3BlY2lmaWMuIFdlJ3JlICp0cnlpbmcqIHRvIHRlc3QgaXRzIGJlaGF2aW9yIHVuZGVyIHByZXNzdXJlLiBTbywgaW5jbHVkaW5nIGl0IGlzIGNvbXBsZXRlbHkganVzdGlmaWVkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGZvcm1hbGl6ZSB0aGlzLlxuXG5UaGUgcGF0Y2ggaXMgYSBcIldvcnRoRnV6emluZ1wiIGNhbmRpZGF0ZSwgbm8gcXVlc3Rpb24uIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IGl0J3MgdG91Y2hpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSBmZWF0dXJlLiBUaGUgbW9kaWZpY2F0aW9uIGlzIGNoYW5naW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3aXRoaW4gYGxydV9nZW5fbG9va19hcm91bmRgLCBzbyBpdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiBob3cgYWNjZXNzIGJpdHMgYXJlIGV2YWx1YXRlZCB3aGVuIHJlY2xhaW1pbmcgbWVtb3J5LiBUaGF0J3MgcGVyZmVjdCBmdXp6aW5nIG1hdGVyaWFsLlxuXG5IZXJlJ3MgbXkgcmVzdWx0LCByZWFkeSBmb3IgdGhlIG5leHQgc3RhZ2U6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWBcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsIFwiZm9saW9fcmVmZXJlbmNlZFwiXWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkxSVV9HRU5cIiwgXCJMUlVfR0VOX0VOQUJMRURcIl1gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjUsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjM3Ljk5NTczMDAwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDMzMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19yZWZlcmVuY2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmZWF0dXJlLCBieSBjaGFuZ2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYHlvdW5nYCB2YXJpYWJsZSBpbiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgcGFnZSBhY2Nlc3NlZCBiaXRzIGFyZSBldmFsdWF0ZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcImZvbGlvX3JlZmVyZW5jZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGZlYXR1cmUsIGJ5IGNoYW5naW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBgeW91bmdgIHZhcmlhYmxlIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBwYWdlIGFjY2Vzc2VkIGJpdHMgYXJlIGV2YWx1YXRlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjM4LjA3NDE3MDYxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjI1OTg5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTozOC4wNzQ4NTY2NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc0NjE5MDg0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGxydV9nZW5fbG9va19hcm91bmRgIHdoZXJlIHRoZSBgeW91bmdgIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCB0byAxIGluc3RlYWQgb2YgYG5yYC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgeW91bmcgcGFnZXMgYW5kIHVwZGF0ZSB0aGUgYmxvb20gZmlsdGVyIHZpYSBgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZylgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCwgbm9yIGFueSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhmZWZlNTNmMzE2NWRlOGNmNDYwZjU0ZGVjZDA4ZjExZjE0M2I5ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1MDozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjI2NDAxNzg1MGE1NWEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC00MTkyLDcgKzQxOTIsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHR1bnNpZ25lZCBsb25nIGVuZDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4gXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuLVx0aW50IHlvdW5nID0gMTtcbitcdGludCB5b3VuZyA9IG5yO1xuIFx0cHRlX3QgKnB0ZSA9IHB2bXctXHUwMDNlcHRlO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcHZtdy1cdTAwM2VhZGRyZXNzO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjM4LjA3NDg1ODAyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY0NjYzNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgd2hldGhlciB0aGlzIHNlZW1pbmdseSBpbm5vY3VvdXMgY2hhbmdlIGluIGBtbS92bXNjYW4uY2Ag4oCTIHNwZWNpZmljYWxseSB0aGUgYWx0ZXJhdGlvbiBvZiBgaW50IHlvdW5nID0gMTtgIHRvIGBpbnQgeW91bmcgPSBucjtgIHdpdGhpbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIOKAkyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuYWx5c2lzLiBUaGlzIGlzIGNyaXRpY2FsLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBldmVuIHN1YnRsZSBzaGlmdHMgY2FuIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMuXG5cbkknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBjb250ZXh0IG9mIGB5b3VuZ2AgbmVlZHMgdG8gYmUgZnVsbHkgdW5kZXJzdG9vZCwgd2hpY2ggbWVhbnMgdHJhY2luZyB0aGUgZGF0YSBmbG93IGFyb3VuZCBgbnJgIHRvIGRldGVybWluZSBpdHMgdmFsdWUgd2hlbiB0aGUgYGxydV9nZW5fbG9va19hcm91bmRgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgd2hlcmUgaXRzIHZhbHVlIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi4gVGhlbiBhc3Nlc3MgaWYgdGhlIHZhcmlhYmxlIGB5b3VuZ2AgaXMgcmVhZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCwgb3IgaWYgaXRzIHZhbHVlIG1pZ2h0IGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgY291bGQgc3Vic2VxdWVudGx5IHVzZSBpdCBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgeW91bmdgIHZhcmlhYmxlIGFuZCBpdHMgc3Vic2VxdWVudCB1c2FnZS4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwsIG9yIGEgc3VidGxlIG1lbW9yeSBidWcsIGlzIG1vc3QgbGlrZWx5IHRvIHJlc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6NDIuMTM5NTI1MTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU0MzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI3MjQ9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NTMtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXFxubW0vdm1zY2FuLmM6Mjc1NDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXFxubW0vdm1zY2FuLmMtMjc1NS0gKlxcbi0tXFxubW0vdm1zY2FuLmM9NDAwMT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMjAtXFx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcXG5tbS92bXNjYW4uYzo0MDIxOlxcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXFxubW0vdm1zY2FuLmMtNDAyMi1cXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxNDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxODYtICovXFxubW0vdm1zY2FuLmM6NDE4Nzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDE4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjQyLjE4NjA4MzgzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQyOTMzNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gYGxydV9nZW5fbG9va19hcm91bmRgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBnZW5lcmFsaXplZCBMUlUgc2Nhbm5pbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmF0aW9uYWwgTFJVIHN5c3RlbSwgYW5kIEkgd2FudCB0byBzZWUgaG93IGl0IG1ha2VzIGRlY2lzaW9ucyBhYm91dCB3aGljaCBwYWdlcyB0byByZWNsYWltLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGV1cmlzdGljcyBpdCB1c2VzIGZvciBzY2FubmluZyBhbmQgaG93IGl0IGJhbGFuY2VzIG1lbW9yeSByZWNsYWltIGFnYWluc3Qgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBsb2dpYyByZWxhdGVkIHRvIHJlY2xhaW0gdGFyZ2V0cywgem9uZSBjb25zaWRlcmF0aW9ucywgYW5kIHBvdGVudGlhbGx5LCBob3cgaXQgaGFuZGxlcyBkaXJ0eSBwYWdlcyBhbmQgYW5vbnltb3VzIG1lbW9yeS4gVWx0aW1hdGVseSwgSSdtIGFpbWluZyB0byBnYWluIGluc2lnaHQgaW50byBob3cgdGhlIGtlcm5lbCBwcmlvcml0aXplcyBwYWdlcyBmb3IgcmVjbGFpbSBhbmQgdGhlIHNwZWNpZmljIG1lY2hhbmlzbXMgdXNlZCB0byBvcHRpbWl6ZSB0aGlzIGltcG9ydGFudCBhcmVhIG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6NDYuODI5MDE5Nzk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTg3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDE4NzpcXHRib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuNDE4ODpcXHR7XFxuNDE4OTpcXHRcXHRpbnQgaTtcXG40MTkwOlxcdFxcdGJvb2wgZGlydHk7XFxuNDE5MTpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xcbjQxOTI6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuNDE5MzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbjQxOTQ6XFx0XFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG40MTk1OlxcdFxcdGludCB5b3VuZyA9IG5yO1xcbjQxOTY6XFx0XFx0cHRlX3QgKnB0ZSA9IHB2bXctXFx1MDAzZXB0ZTtcXG40MTk3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHB2bXctXFx1MDAzZWFkZHJlc3M7XFxuNDE5ODpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXFx1MDAzZXZtYTtcXG40MTk5OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHZtdy1cXHUwMDNlcGZuKTtcXG40MjAwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40MjAxOlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuNDIwMjpcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNDIwMzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XFxuNDIwNDpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuNDIwNTpcXHRcXHRpbnQgZ2VuO1xcbjQyMDY6XFx0XFxuNDIwNzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuNDIwODpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuNDIwOTpcXHRcXG40MjEwOlxcdFxcdGlmICghdGVzdF9hbmRfY2xlYXJfeW91bmdfcHRlc19ub3RpZnkodm1hLCBhZGRyLCBwdGUsIG5yKSlcXG40MjExOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40MjEyOlxcdFxcbjQyMTM6XFx0XFx0aWYgKHNwaW5faXNfY29udGVuZGVkKHB2bXctXFx1MDAzZXB0bCkpXFxuNDIxNDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MjE1OlxcdFxcbjQyMTY6XFx0XFx0LyogZXhjbHVkZSBzcGVjaWFsIFZNQXMgY29udGFpbmluZyBhbm9uIHBhZ2VzIGZyb20gQ09XICovXFxuNDIxNzpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpXFxuNDIxODpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MjE5OlxcdFxcbjQyMjA6XFx0XFx0LyogYXZvaWQgdGFraW5nIHRoZSBMUlUgbG9jayB1bmRlciB0aGUgUFRMIHdoZW4gcG9zc2libGUgKi9cXG40MjIxOlxcdFxcdHdhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlID8gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsayA6IE5VTEw7XFxuNDIyMjpcXHRcXG40MjIzOlxcdFxcdHN0YXJ0ID0gbWF4KGFkZHIgXFx1MDAyNiBQTURfTUFTSywgdm1hLVxcdTAwM2V2bV9zdGFydCk7XFxuNDIyNDpcXHRcXHRlbmQgPSBtaW4oYWRkciB8IH5QTURfTUFTSywgdm1hLVxcdTAwM2V2bV9lbmQgLSAxKSArIDE7XFxuNDIyNTpcXHRcXG40MjI2OlxcdFxcdGlmIChlbmQgLSBzdGFydCA9PSBQQUdFX1NJWkUpXFxuNDIyNzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0aWYgKGVuZCAtIHN0YXJ0IFxcdTAwM2UgTUlOX0xSVV9CQVRDSCAqIFBBR0VfU0laRSkge1xcbjQyMzA6XFx0XFx0XFx0aWYgKGFkZHIgLSBzdGFydCBcXHUwMDNjIE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUgLyAyKVxcbjQyMzE6XFx0XFx0XFx0XFx0ZW5kID0gc3RhcnQgKyBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFO1xcbjQyMzI6XFx0XFx0XFx0ZWxzZSBpZiAoZW5kIC0gYWRkciBcXHUwMDNjIE1JTl9MUlVfQkFUQ0ggKiBQQUdFX1NJWkUgLyAyKVxcbjQyMzM6XFx0XFx0XFx0XFx0c3RhcnQgPSBlbmQgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFO1xcbjQyMzQ6XFx0XFx0XFx0ZWxzZSB7XFxuNDIzNTpcXHRcXHRcXHRcXHRzdGFydCA9IGFkZHIgLSBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFIC8gMjtcXG40MjM2OlxcdFxcdFxcdFxcdGVuZCA9IGFkZHIgKyBNSU5fTFJVX0JBVENIICogUEFHRV9TSVpFIC8gMjtcXG40MjM3OlxcdFxcdFxcdH1cXG40MjM4OlxcdFxcdH1cXG40MjM5OlxcdFxcbjQyNDA6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG40MjQxOlxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuNDI0MjpcXHRcXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWF4X3NlcSk7XFxuNDI0MzpcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbjQyNDQ6XFx0XFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG40MjQ1OlxcdFxcbjQyNDY6XFx0XFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG40MjQ3OlxcdFxcbjQyNDg6XFx0XFx0cHRlIC09IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xcbjQyNDk6XFx0XFxuNDI1MDpcXHRcXHRmb3IgKGkgPSAwLCBhZGRyID0gc3RhcnQ7IGFkZHIgIT0gZW5kO1xcbjQyNTE6XFx0XFx0ICAgICBpICs9IG5yLCBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG40MjUyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbjQyNTM6XFx0XFx0XFx0cHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdGUpO1xcbjQyNTQ6XFx0XFxuNDI1NTpcXHRcXHRcXHRuciA9IDE7XFxuNDI1NjpcXHRcXHRcXHRwZm4gPSBnZXRfcHRlX3BmbihwdGVudCwgdm1hLCBhZGRyLCBwZ2RhdCk7XFxuNDI1NzpcXHRcXHRcXHRpZiAocGZuID09IC0xKVxcbjQyNTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDI1OTpcXHRcXG40MjYwOlxcdFxcdFxcdGZvbGlvID0gZ2V0X3Bmbl9mb2xpbyhwZm4sIG1lbWNnLCBwZ2RhdCk7XFxuNDI2MTpcXHRcXHRcXHRpZiAoIWZvbGlvKVxcbjQyNjI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDI2MzpcXHRcXG40MjY0OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbjQyNjU6XFx0XFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9uciA9IChlbmQgLSBhZGRyKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjQyNjY6XFx0XFxuNDI2NzpcXHRcXHRcXHRcXHRuciA9IGZvbGlvX3B0ZV9iYXRjaF9mbGFncyhmb2xpbywgTlVMTCwgcHRlLCBcXHUwMDI2cHRlbnQsXFxuNDI2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtYXhfbnIsIEZQQl9NRVJHRV9ZT1VOR19ESVJUWSk7XFxuNDI2OTpcXHRcXHRcXHR9XFxuNDI3MDpcXHRcXG40MjcxOlxcdFxcdFxcdGlmICghdGVzdF9hbmRfY2xlYXJfeW91bmdfcHRlc19ub3RpZnkodm1hLCBhZGRyLCBwdGUsIG5yKSlcXG40MjcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQyNzM6XFx0XFxuNDI3NDpcXHRcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbjQyNzU6XFx0XFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuNDI3NjpcXHRcXG40Mjc3OlxcdFxcdFxcdFxcdGxhc3QgPSBmb2xpbztcXG40Mjc4OlxcdFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuNDI3OTpcXHRcXHRcXHR9XFxuNDI4MDpcXHRcXG40MjgxOlxcdFxcdFxcdGlmIChwdGVfZGlydHkocHRlbnQpKVxcbjQyODI6XFx0XFx0XFx0XFx0ZGlydHkgPSB0cnVlO1xcbjQyODM6XFx0XFxuNDI4NDpcXHRcXHRcXHR5b3VuZyArPSBucjtcXG40Mjg1OlxcdFxcdH1cXG40Mjg2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTo0Ni44Mjk0NTE4NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5ODQ0NTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgQ29kZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZTogYGludCB5b3VuZyA9IDE7YCBoYXMgYmVjb21lIGBpbnQgeW91bmcgPSBucjtgLiBIbW0sIHRoaXMgaXMgY2xlYXJseSBhIGJ1ZyBmaXguIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNvcnJlY3RseSBpbml0aWFsaXppbmcgdGhlIHZhcmlhYmxlIGB5b3VuZ2AgdG8gMSwgaW5zdGVhZCBvZiBzZXR0aW5nIGl0IHRvIHRoZSB2YWx1ZSBvZiBgbnJgLiBUaGF0J3MgYSBjbGFzc2ljIG9mZi1ieS1vbmUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4uIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIGB5b3VuZ2AgaXMgdXNlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCBhbmQgd2hhdCBpbXBhY3QgdGhpcyBpbml0aWFsaXphdGlvbiBjaGFuZ2UgaGFzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0byBjb25maWRlbnRseSBhc3Nlc3MgdGhpcyBwYXRjaC4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1MTo1MC44Mjc5MDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Mjg3OlxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbjQyODg6XFx0XFxuNDI4OTpcXHRcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuNDI5MjpcXHRcXHRpZiAobW1fc3RhdGUgXFx1MDAyNlxcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXFxuNDI5MzpcXHRcXHRcXHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVxcdTAwM2VwbWQpO1xcbjQyOTQ6XFx0XFxuNDI5NTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuNDI5NjpcXHRcXG40Mjk3OlxcdFxcdHJldHVybiB0cnVlO1xcbjQyOTg6XFx0fVxcbjQyOTk6XFx0XFxuNDMwMDpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuNDMwMTpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY2cgTFJVXFxuNDMwMjpcXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjQzMDM6XFx0XFxuNDMwNDpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xcbjQzMDU6XFx0ZW51bSB7XFxuNDMwNjpcXHRcXHRNRU1DR19MUlVfTk9QLFxcbjQzMDc6XFx0XFx0TUVNQ0dfTFJVX0hFQUQsXFxuNDMwODpcXHRcXHRNRU1DR19MUlVfVEFJTCxcXG40MzA5OlxcdFxcdE1FTUNHX0xSVV9PTEQsXFxuNDMxMDpcXHRcXHRNRU1DR19MUlVfWU9VTkcsXFxuNDMxMTpcXHR9O1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG40MzE0OlxcdHtcXG40MzE1OlxcdFxcdGludCBzZWc7XFxuNDMxNjpcXHRcXHRpbnQgb2xkLCBuZXc7XFxuNDMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQzMTg6XFx0XFx0aW50IGJpbiA9IGdldF9yYW5kb21fdTMyX2JlbG93KE1FTUNHX05SX0JJTlMpO1xcbjQzMTk6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbjQzMjA6XFx0XFxuNDMyMTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5sb2NrLCBmbGFncyk7XFxuNDMyMjpcXHRcXG40MzIzOlxcdFxcdFZNX1dBUk5fT05fT05DRShobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdCkpO1xcbjQzMjQ6XFx0XFxuNDMyNTpcXHRcXHRzZWcgPSAwO1xcbjQzMjY6XFx0XFx0bmV3ID0gb2xkID0gbHJ1dmVjLVxcdTAwM2VscnVnZW4uZ2VuO1xcbjQzMjc6XFx0XFxuNDMyODpcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xcbjQzMjk6XFx0XFx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEKVxcbjQzMzA6XFx0XFx0XFx0c2VnID0gTUVNQ0dfTFJVX0hFQUQ7XFxuNDMzMTpcXHRcXHRlbHNlIGlmIChvcCA9PSBNRU1DR19MUlVfVEFJTClcXG40MzMyOlxcdFxcdFxcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xcbjQzMzM6XFx0XFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcXG40MzM0OlxcdFxcdFxcdG5ldyA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXFx1MDAzZW1lbWNnX2xydS5zZXEpO1xcbjQzMzU6XFx0XFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1lPVU5HKVxcbjQzMzY6XFx0XFx0XFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LnNlcSArIDEpO1xcbjQzMzc6XFx0XFx0ZWxzZVxcbjQzMzg6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHRydWUpO1xcbjQzMzk6XFx0XFxuNDM0MDpcXHRcXHRXUklURV9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnNlZywgc2VnKTtcXG40MzQxOlxcdFxcdFdSSVRFX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uZ2VuLCBuZXcpO1xcbjQzNDI6XFx0XFxuNDM0MzpcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0KTtcXG40MzQ0OlxcdFxcbjQzNDU6XFx0XFx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEIHx8IG9wID09IE1FTUNHX0xSVV9PTEQpXFxuNDM0NjpcXHRcXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuLmxpc3QsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmZpZm9bbmV3XVtiaW5dKTtcXG40MzQ3OlxcdFxcdGVsc2VcXG40MzQ4OlxcdFxcdFxcdGhsaXN0X251bGxzX2FkZF90YWlsX3JjdShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xcbjQzNDk6XFx0XFxuNDM1MDpcXHRcXHRwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1Lm5yX21lbWNnc1tvbGRdLS07XFxuNDM1MTpcXHRcXHRwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1Lm5yX21lbWNnc1tuZXddKys7XFxuNDM1MjpcXHRcXG40MzUzOlxcdFxcdGlmICghcGdkYXQtXFx1MDAzZW1lbWNnX2xydS5ucl9tZW1jZ3Nbb2xkXSBcXHUwMDI2XFx1MDAyNiBvbGQgPT0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LnNlcSkpXFxuNDM1NDpcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2VtZW1jZ19scnUuc2VxLCBwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LnNlcSArIDEpO1xcbjQzNTU6XFx0XFxuNDM1NjpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmxvY2ssIGZsYWdzKTtcXG40MzU3OlxcdH1cXG40MzU4OlxcdFxcbjQzNTk6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbjQzNjA6XFx0XFxuNDM2MTpcXHR2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG40MzYyOlxcdHtcXG40MzYzOlxcdFxcdGludCBnZW47XFxuNDM2NDpcXHRcXHRpbnQgbmlkO1xcbjQzNjU6XFx0XFx0aW50IGJpbiA9IGdldF9yYW5kb21fdTMyX2JlbG93KE1FTUNHX05SX0JJTlMpO1xcbjQzNjY6XFx0XFxuNDM2NzpcXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbjQzNjg6XFx0XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcbjQzNjk6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG40MzcwOlxcdFxcbjQzNzE6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5sb2NrKTtcXG40MzcyOlxcdFxcbjQzNzM6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdCkpO1xcbjQzNzQ6XFx0XFxuNDM3NTpcXHRcXHRcXHRnZW4gPSBnZXRfbWVtY2dfZ2VuKHBnZGF0LVxcdTAwM2VtZW1jZ19scnUuc2VxKTtcXG40Mzc2OlxcdFxcbjQzNzc6XFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2VscnVnZW4uZ2VuID0gZ2VuO1xcbjQzNzg6XFx0XFxuNDM3OTpcXHRcXHRcXHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuLmxpc3QsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmZpZm9bZ2VuXVtiaW5dKTtcXG40MzgwOlxcdFxcdFxcdHBnZGF0LVxcdTAwM2VtZW1jZ19scnUubnJfbWVtY2dzW2dlbl0rKztcXG40MzgxOlxcdFxcbjQzODI6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwZ2RhdC1cXHUwMDNlbWVtY2dfbHJ1LmxvY2spO1xcbjQzODM6XFx0XFx0fVxcbjQzODQ6XFx0fVxcbjQzODU6XFx0XFxuNDM4NjpcXHR2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjUxOjUwLjgyODQ1ODgyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDgyNzA5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSAneW91bmcnIFZhcmlhYmxlIGluIHRoZSBMUlUgQmxvb20gRmlsdGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgc25pcHBldC4gVGhlIGB5b3VuZ2AgdmFyaWFibGUsIGFzIHVzZWQgd2l0aGluIGBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKWAsIGlzIGNsZWFybHkgYSBoZXVyaXN0aWMg4oCTIGEgcXVpY2sgYW5kIGRpcnR5IGVzdGltYXRlIOKAkyBmb3Igb3VyIExSVSBCbG9vbSBmaWx0ZXIuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcywgYnV0IGluIHRoaXMgY2FzZSwgSSBzZWUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBhc3NvY2lhdGVkIHdpdGggaXRzIHVzYWdlLiBUaGUgc3lzdGVtJ3MgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQncyBub3QgYSBjb25jZXJuLiBUaGUgY29yZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gYSBsb2dpY2FsIGZsYXcgaW4gaG93IHdlJ3JlICpjb3VudGluZyogdGhlc2UgJ3lvdW5nJyBwYWdlcywgbm90IGluIHRoZSB1c2Ugb2YgdGhlIHZhcmlhYmxlIGl0c2VsZi4gVGhpcyBpcyBhIHN1YnRsZSBlcnJvciwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UuIEdpdmVuIHRoaXMgYW5hbHlzaXMsIGNsYXNzaWZ5aW5nIHRoaXMgYXMgYSBgTmVlZHNLTVNBTmAgaXNzdWUgaXMgaW5jb3JyZWN0LiBUaGUgcm9vdCBjYXVzZSBpcyBhIHNpbXBsZSBsb2dpY2FsIGVycm9yIGluIGNvdW50aW5nOyB0aGVyZWZvcmUsIG5vIG5lZWQgZm9yIGtlcm5lbCBtZW1vcnkgc2FuaXRpemVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg1LCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTE6NTUuNTM2NzMyMjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB3aGVyZSB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgdG8gMSBpbnN0ZWFkIG9mIGBucmAuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHlvdW5nIHBhZ2VzIGFuZCB1cGRhdGUgdGhlIGJsb29tIGZpbHRlciB2aWEgYHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQsIG5vciBhbnkgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCB3aGVyZSB0aGUgYHlvdW5nYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgdG8gMSBpbnN0ZWFkIG9mIGBucmAuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHlvdW5nIHBhZ2VzIGFuZCB1cGRhdGUgdGhlIGJsb29tIGZpbHRlciB2aWEgYHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQsIG5vciBhbnkgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzzwxw[1] Phase: Succeeded StartedAt: 2026-08-13 06:51:59 +0000 UTC FinishedAt: 2026-08-13 06:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 06:51:59 +0000 UTC FinishedAt: 2026-08-13 06:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2] Phase: Succeeded StartedAt: 2026-08-13 06:51:59 +0000 UTC FinishedAt: 2026-08-13 10:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 06:51:59 +0000 UTC FinishedAt: 2026-08-13 10:41:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 06:51:59 +0000 UTC FinishedAt: 2026-08-13 06:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 06:51:59 +0000 UTC FinishedAt: 2026-08-13 06:52:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},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-workflowzzwxw/series-workflowzzwxw-convert-artifact-259821479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 06:52:09 +0000 UTC FinishedAt: 2026-08-13 07:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 06:52:09 +0000 UTC FinishedAt: 2026-08-13 07:10:03 +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:*48f9208c-e515-40a4-8f5b-606b62b4d989,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-workflowzzwxw/series-workflowzzwxw-convert-artifact-259821479/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": "91ed52bb-d98a-43f8-a3c7-b8547a54d339", "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-workflowzzwxw/series-workflowzzwxw-build-action-3732201277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 06:52:09 +0000 UTC FinishedAt: 2026-08-13 07:09:53 +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:*48f9208c-e515-40a4-8f5b-606b62b4d989,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-workflowzzwxw/series-workflowzzwxw-convert-artifact-259821479/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": "91ed52bb-d98a-43f8-a3c7-b8547a54d339", "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-workflowzzwxw/series-workflowzzwxw-build-action-3732201277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 07:10:03 +0000 UTC FinishedAt: 2026-08-13 07:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 07:10:03 +0000 UTC FinishedAt: 2026-08-13 07:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 07:10:03 +0000 UTC FinishedAt: 2026-08-13 07:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 07:10:03 +0000 UTC FinishedAt: 2026-08-13 07:10:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},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-workflowzzwxw/series-workflowzzwxw-convert-artifact-2868156502/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 07:10:13 +0000 UTC FinishedAt: 2026-08-13 07:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 07:10:13 +0000 UTC FinishedAt: 2026-08-13 07:12:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91ed52bb-d98a-43f8-a3c7-b8547a54d339,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-workflowzzwxw/series-workflowzzwxw-build-action-3732201277/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-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 07:12:21 +0000 UTC FinishedAt: 2026-08-13 07:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 07:12:21 +0000 UTC FinishedAt: 2026-08-13 07:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 07:12:21 +0000 UTC FinishedAt: 2026-08-13 07:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 07:12:21 +0000 UTC FinishedAt: 2026-08-13 07:31:30 +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:*48f9208c-e515-40a4-8f5b-606b62b4d989,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-workflowzzwxw/series-workflowzzwxw-convert-artifact-2868156502/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": "1ae1d2b2-bdb1-450e-beaa-a6ecda9df999", "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-workflowzzwxw/series-workflowzzwxw-build-action-3685301850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 07:12:21 +0000 UTC FinishedAt: 2026-08-13 07:31:20 +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:*48f9208c-e515-40a4-8f5b-606b62b4d989,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-workflowzzwxw/series-workflowzzwxw-convert-artifact-2868156502/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": "1ae1d2b2-bdb1-450e-beaa-a6ecda9df999", "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-workflowzzwxw/series-workflowzzwxw-build-action-3685301850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 07:31:30 +0000 UTC FinishedAt: 2026-08-13 07:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 07:31:30 +0000 UTC FinishedAt: 2026-08-13 07:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 07:31:30 +0000 UTC FinishedAt: 2026-08-13 07:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 07:31:30 +0000 UTC FinishedAt: 2026-08-13 07:33:30 +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:*1ae1d2b2-bdb1-450e-beaa-a6ecda9df999,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-workflowzzwxw/series-workflowzzwxw-build-action-3685301850/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-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 10:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 10:41:42 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},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:*91ed52bb-d98a-43f8-a3c7-b8547a54d339,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1ae1d2b2-bdb1-450e-beaa-a6ecda9df999,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-workflowzzwxw/series-workflowzzwxw-build-action-3732201277/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-workflowzzwxw/series-workflowzzwxw-build-action-3685301850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 07:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 07:33:45 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},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-workflowzzwxw/series-workflowzzwxw-convert-artifact-4120459003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 07:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 07:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 07:33:40 +0000 UTC FinishedAt: 2026-08-13 07:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 07:33:50 +0000 UTC FinishedAt: 2026-08-13 10:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzwxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_referenced"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"00e9637c-9388-4544-8ade-2ad3ff5a8a82","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 07:33:50 +0000 UTC FinishedAt: 2026-08-13 10:41:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91ed52bb-d98a-43f8-a3c7-b8547a54d339,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1ae1d2b2-bdb1-450e-beaa-a6ecda9df999,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-workflowzzwxw/series-workflowzzwxw-build-action-3732201277/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-workflowzzwxw/series-workflowzzwxw-build-action-3685301850/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-workflowzzwxw/series-workflowzzwxw-convert-artifact-4120459003/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,}