Name: series-workflowdtl54 Phase: Succeeded StartedAt: 2026-07-28 03:34:50 +0000 UTC FinishedAt: 2026-07-28 08:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[0] Phase: Succeeded StartedAt: 2026-07-28 03:34:50 +0000 UTC FinishedAt: 2026-07-28 03:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 03:34:50 +0000 UTC FinishedAt: 2026-07-28 03:59:33 +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": "7b25c83e4711038989b5b08a8977fb68468c854e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "COMPACTION" ], "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": "7b25c83e4711038989b5b08a8977fb68468c854e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "COMPACTION" ], "series_id": "09101dc4-3910-4a4e-b63e-e5918f862a7a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_pages", "do_migrate_pages" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG9fbWlncmF0ZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmZGYwZTFiYTc2YWI4MTRiYjRhM2Q4MmQxNzAxYzgxZWY1YWVhMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMzo1Nzo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGFiMTVhNGRkZGQwNDcxLi5iOTM3Y2JkNzY0ODA4NyAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTg0Myw3ICYjNDM7MTg0Myw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRcdGlzX3RocCA9IGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKTtcbiBcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhlIHJhcmUgZm9saW8gb24gdGhlIGRlZmVycmVkIHNwbGl0IGxpc3Qgc2hvdWxkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG9fbWlncmF0ZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmZGYwZTFiYTc2YWI4MTRiYjRhM2Q4MmQxNzAxYzgxZWY1YWVhMzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAwMzo1Nzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhYjE1YTRkZGRkMDQ3MS4uYjkzN2NiZDc2NDgwODcgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTE4NDMsNyAmIzQzOzE4NDMsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwKIAkJCWlzX3RocCA9IGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKTsKIAkJCW5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0JCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCQljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiAKIAkJCS8qCiAJCQkgKiBUaGUgcmFyZSBmb2xpbyBvbiB0aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCBzaG91bGQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGUuY2AuIEl0JiMzOTtzIGEgc2luZ2xlLWxpbmUgZGlmZiwgcmVhbGx5IHF1aXRlIG1pbm9yLiBXZSYjMzk7cmUgcmVwbGFjaW5nIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGEgc2NoZWR1bGluZyB0d2Vhay4gSXQmIzM5O3MgYSBzbWFsbCBjaGFuZ2UsIGJ1dCBsZXQgbWUgdGhpbmsuLi4gYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLi4uIHRoYXQmIzM5O3MgYSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIFJpZ2h0LCBzbyBldmVuIGEgdGlueSBzY2hlZHVsaW5nIGNoYW5nZSBpbiBhIGZ1bmN0aW9uIGxpa2UgdGhhdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWlncmF0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSBwcnVkZW50IHN0ZXAuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGl0c2VsZiwgb3IgbWF5YmUgZXZlbiBpdHMgcmVsYXRlZCBmdW5jdGlvbiBgbWlncmF0ZV9wYWdlc2AuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byBgbW0vbWlncmF0ZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9wYWdlc19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTc4Mj1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jLTE4MDUtLypcbm1tL21pZ3JhdGUuYzoxODA2OiAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSBmaXJzdCB1bm1hcHMgZm9saW9zIGluIHRoZSBmcm9tIGxpc3QgYXMgbWFueSBhc1xubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxuLS1cbm1tL21pZ3JhdGUuYy0xODEzLSAqL1xubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG5tbS9taWdyYXRlLmMtMTgxNS1cdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE4NTYtXHRcdFx0ICogb3RoZXJ3aXNlIHN0YXRzIGluY29uc2lzdGVuY3kgd2lsbCBoYXBwZW4gd2hlblxubW0vbWlncmF0ZS5jOjE4NTc6XHRcdFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxubW0vbWlncmF0ZS5jLTE4NTgtXHRcdFx0ICogd2l0aCBNSUdSQVRFX1NZTkMgYW5kIE1JR1JBVEVfQVNZTkMuXG4tLVxubW0vbWlncmF0ZS5jPTIwMjY9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjAzNy1cdC8qIFRyeSB0byBtaWdyYXRlIGluIGJhdGNoIHdpdGggTUlHUkFURV9BU1lOQyBtb2RlIGZpcnN0bHkgKi9cbm1tL21pZ3JhdGUuYzoyMDM4Olx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXG5tbS9taWdyYXRlLmMtMjAzOS1cdFx0XHRcdCByZWFzb24sIFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcdTAwMjZhc3RhdHMsXG4tLVxubW0vbWlncmF0ZS5jLTIwNjQtXHRcdGxpc3RfbW92ZShmcm9tLVx1MDAzZW5leHQsIFx1MDAyNmZvbGlvcyk7XG5tbS9taWdyYXRlLmM6MjA2NTpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMDY2LVx0XHRcdFx0XHQgcHJpdmF0ZSwgbW9kZSwgcmVhc29uLCByZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYz0yMTAzPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTIxNDEtXHRpZiAobW9kZSA9PSBNSUdSQVRFX0FTWU5DKVxubW0vbWlncmF0ZS5jOjIxNDI6XHRcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE0My1cdFx0XHRcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXHUwMDI2cmV0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMjE2MS1cdFx0ICovXG5tbS9taWdyYXRlLmM6MjE2MjpcdFx0bWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE2My1cdFx0XHRcdHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsIHJlYXNvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBNaWdyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYWdlIG1pZ3JhdGlvbiBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIGBtaWdyYXRlX3BhZ2VzX2JhdGNoYCBpcyB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgYW5kIGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgb25lIHdlIGV4cG9ydCwgcmlnaHQ/IEdvdCBpdC4gTm93LCB0aGF0IGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGNhbGwuLi4gaG1tbSwgdGhhdCYjMzk7cyBqdXN0IGEgc2NoZWR1bGluZyBwb2ludCwgaXNuJiMzOTt0IGl0PyBJdCBkb2VzbiYjMzk7dCAqZnVuZGFtZW50YWxseSogYWx0ZXIgdGhlIGFsZ29yaXRobSwgYnV0IGl0IGRvZXMgaW5mbHVlbmNlIHRoZSBSQ1UgcXVpZXNjZW50IHN0YXRlcywgd2hpY2ggaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LiBJIHRoaW5rLgoKVGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcgdGhpcyBhcmVhLiBZZXMsIGFic29sdXRlbHkuIElmIHRoYXQgc2NoZWR1bGluZyBwb2ludCAqd2FzKiBtaXNzaW5nLCBpdCBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gUkNVIHN0YWxscy4gU28gZnV6emluZyBpcyBhIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyBhbmQgY29uZmlybSB0aGUgaW50ZW5kZWQgZnVuY3Rpb24uCgpMZXQgbWUgZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzLCBzcGVjaWZpY2FsbHkgYG1pZ3JhdGVfcGFnZXNgLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01JR1JBVElPTmAgaXMgcHJvYmFibHkgcmVxdWlyZWQsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBieSBsb29raW5nIGluIGBtbS9LY29uZmlnYCBvciBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT05Nz1vYmotJChDT05GSUdfTUVNVEVTVClcdFx0JiM0Mzs9IG1lbXRlc3Qub1xubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUub1xubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBtaWdyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGBDT05GSUdfTUlHUkFUSU9OYCBpbiBteSBtaW5kLiBXaGVyZSB3b3VsZCB0aGF0IGNvbmZpZ3VyYXRpb24gYmUgZGVmaW5lZD8gQWgsIHllcywgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2QgZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBJdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGFueXRoaW5nIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmluaXRpb24sIGFueSBkZXBlbmRlbmNpZXMsIG1heWJlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgaXRzIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgbWVtb3J5IGFyY2hpdGVjdHVyZSwgc28gSSBjYW4gYWNjdXJhdGVseSBpbnRlcnByZXQgaXRzIHJvbGUgaW4gd2hhdGV2ZXIgc3lzdGVtIG9yIHNjZW5hcmlvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIExldCYjMzk7cyBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NzE9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODEtXG5tbS9LY29uZmlnOjY4Mjpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWx2aW5nIGludG8gdGhlIGBNSUdSQVRJT05gIEZsYWcmIzM5O3MgT3JpZ2lucyoqCgpSaWdodCwgc28gYE1JR1JBVElPTmAgaXMgYSBib29sZWFuIGZsYWcsIGFuZCBpdHMgc3RhdGUgaXMgdXN1YWxseSB0cmlnZ2VyZWQgYnkgYE5VTUFgLCBgQ09NUEFDVElPTmAsIG9yIGBNRU1PUllfSE9UUExVR2Agb3BlcmF0aW9ucy4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBvZiB0aG9zZSBjb21wb25lbnRzIGlzIHRoZSBvbmUgY3VycmVudGx5IHNldHRpbmcgaXQsIG9yIHdoYXQgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBhcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBgTUlHUkFUSU9OYCBmbGFnIHRvIHVuZGVyc3RhbmQgaXRzIGFjdHVhbCB0cmlnZ2VyLCBhcyBJIGtub3cgdGhlc2UgYXJlIHJlbGF0ZWQgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmFjdHVhbGx5KiBkcml2aW5nIHRoZSBjdXJyZW50IHN0YXRlLiBOZWVkIHRvIGNoZWNrIHdoYXQgbG9naWMgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTgwPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU4MS1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG5tbS9LY29uZmlnOjU4MjpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNTgzLVxuLS1cbm1tL0tjb25maWc9NjQwPWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NDItXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjQzOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NDQtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjc0LVx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbm1tL0tjb25maWc6Njc1Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NzYtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDUzPWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNTUtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDU2Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDU3LVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2VzdGluZyB0aGUgSW1wbGljYXRpb25zIG9mIENPTVBBQ1RJT04gYW5kIE1JR1JBVElPTioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgYENPTVBBQ1RJT05gIGlzIGEgZ29vZCB3YXkgdG8gdHJpZ2dlciwgb3IgYXNzaXN0IHdpdGgsIGBNSUdSQVRJT05gLiBUaGF0IG1ha2VzIGludHVpdGl2ZSBzZW5zZSwgdGhleSYjMzk7cmUgb2Z0ZW4gbGlua2VkLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09NUEFDVElPTmAgYWxyZWFkeSBpbXBsaWVzIGBNSUdSQVRJT05gLiBZZXAsIGxvb2tpbmcgYXQgdGhlIGNvbmZpZywgYE1JR1JBVElPTmAgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTsgd2hlbiBgQ09NUEFDVElPTmAgaXMgZW5hYmxlZC4gT2theSwgZ29vZCB0byBrbm93IEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGNvbmNlcHR1YWxseSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIG1lY2hhbmljcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbWlncmF0ZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiptaWdyYXRlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV9wYWdlc2AgRXhwb3J0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCBzYXcgYSByZWZlcmVuY2UgdG8gYG1pZ3JhdGVfcGFnZXNgIGJlaW5nIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBUaGF0IHNlZW1z4oCmIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhpcyBpcywgaW4gZmFjdCwgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5IGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoaXMgY291bGQgb3BlbiB0aGUgZG9vciB0byBhIGxvdCBvZiB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBlbmNhcHN1bGF0ZWQgd2l0aGluIGBtaWdyYXRlX3BhZ2VzYC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgc2NvcGUgYW5kIGludGVuZGVkIHVzZS4gVGhlIGRvY3VtZW50YXRpb24gc2hvdWxkIGNsYXJpZnkgdGhhdCwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlIGl0c2VsZiB0byBiZSBzdXJlLiBJZiBpdCAqaXMqIGV4cG9ydGVkLCBpdCYjMzk7cyB3b3J0aCBkaWdnaW5nIGEgYml0IGRlZXBlciB0byBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTE1OTQ9c3RhdGljIGlubGluZSBpbnQgdHJ5X3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMTYyMi1cbm1tL21pZ3JhdGUuYzoxNjIzOnN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbm1tL21pZ3JhdGUuYy0xNjI0LVx0aW50IG5yX3N1Y2NlZWRlZDtcdC8qIE5vcm1hbCBhbmQgbGFyZ2UgZm9saW9zIG1pZ3JhdGVkIHN1Y2Nlc3NmdWxseSwgaW5cbi0tXG5tbS9taWdyYXRlLmM9MTY0MT1zdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTY0My1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG5tbS9taWdyYXRlLmM6MTY0NDpcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxubW0vbWlncmF0ZS5jLTE2NDUtXHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXG4tLVxubW0vbWlncmF0ZS5jPTE3MzA9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0xNzM0LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxubW0vbWlncmF0ZS5jOjE3MzU6XHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcbm1tL21pZ3JhdGUuYy0xNzM2LVx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG4tLVxubW0vbWlncmF0ZS5jPTE3ODI9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0xODA1LS8qXG5tbS9taWdyYXRlLmM6MTgwNjogKiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCkgZmlyc3QgdW5tYXBzIGZvbGlvcyBpbiB0aGUgZnJvbSBsaXN0IGFzIG1hbnkgYXNcbm1tL21pZ3JhdGUuYy0xODA3LSAqIHBvc3NpYmxlLCB0aGVuIG1vdmUgdGhlIHVubWFwcGVkIGZvbGlvcy5cbi0tXG5tbS9taWdyYXRlLmMtMTgxMy0gKi9cbm1tL21pZ3JhdGUuYzoxODE0OnN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxubW0vbWlncmF0ZS5jLTE4MTUtXHRcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xODE3LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG5tbS9taWdyYXRlLmM6MTgxODpcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbm1tL21pZ3JhdGUuYy0xODE5LXtcbi0tXG5tbS9taWdyYXRlLmMtMTg1MS1cdFx0XHQgKiBidXQgaW5jcmVtZW50IG5yX2ZhaWxlZCBiZWNhdXNlLCB3aXRob3V0IGRvaW5nIHNvLFxubW0vbWlncmF0ZS5jOjE4NTI6XHRcdFx0ICogbWlncmF0ZV9wYWdlcygpIG1heSByZXBvcnQgc3VjY2VzcyB3aXRoIChzcGxpdCBidXRcbm1tL21pZ3JhdGUuYy0xODUzLVx0XHRcdCAqIHVubWlncmF0ZWQpIHBhZ2VzIHN0aWxsIG9uIGl0cyBmcm9tbGlzdDsgd2hlcmVhcyBpdFxuLS1cbm1tL21pZ3JhdGUuYy0xODU2LVx0XHRcdCAqIG90aGVyd2lzZSBzdGF0cyBpbmNvbnNpc3RlbmN5IHdpbGwgaGFwcGVuIHdoZW5cbm1tL21pZ3JhdGUuYzoxODU3Olx0XHRcdCAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2ggaXMgY2FsbGVkIHZpYSBtaWdyYXRlX3BhZ2VzKClcbm1tL21pZ3JhdGUuYy0xODU4LVx0XHRcdCAqIHdpdGggTUlHUkFURV9TWU5DIGFuZCBNSUdSQVRFX0FTWU5DLlxuLS1cbm1tL21pZ3JhdGUuYy0yMDI1LVxubW0vbWlncmF0ZS5jOjIwMjY6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMDI3LVx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0yMDI5LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG5tbS9taWdyYXRlLmM6MjAzMDpcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxubW0vbWlncmF0ZS5jLTIwMzEte1xuLS1cbm1tL21pZ3JhdGUuYy0yMDMzLVx0TElTVF9IRUFEKGZvbGlvcyk7XG5tbS9taWdyYXRlLmM6MjAzNDpcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIGFzdGF0cztcbm1tL21pZ3JhdGUuYy0yMDM1LVxuLS1cbm1tL21pZ3JhdGUuYy0yMDM3LVx0LyogVHJ5IHRvIG1pZ3JhdGUgaW4gYmF0Y2ggd2l0aCBNSUdSQVRFX0FTWU5DIG1vZGUgZmlyc3RseSAqL1xubW0vbWlncmF0ZS5jOjIwMzg6XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQyxcbm1tL21pZ3JhdGUuYy0yMDM5LVx0XHRcdFx0IHJlYXNvbiwgXHUwMDI2Zm9saW9zLCBzcGxpdF9mb2xpb3MsIFx1MDAyNmFzdGF0cyxcbi0tXG5tbS9taWdyYXRlLmMtMjA2NC1cdFx0bGlzdF9tb3ZlKGZyb20tXHUwMDNlbmV4dCwgXHUwMDI2Zm9saW9zKTtcbm1tL21pZ3JhdGUuYzoyMDY1Olx0XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxubW0vbWlncmF0ZS5jLTIwNjYtXHRcdFx0XHRcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jLTIwNzctLypcbm1tL21pZ3JhdGUuYzoyMDc4OiAqIG1pZ3JhdGVfcGFnZXMgLSBtaWdyYXRlIHRoZSBmb2xpb3Mgc3BlY2lmaWVkIGluIGEgbGlzdCwgdG8gdGhlIGZyZWUgZm9saW9zXG5tbS9taWdyYXRlLmMtMjA3OS0gKlx0XHQgICBzdXBwbGllZCBhcyB0aGUgdGFyZ2V0IGZvciB0aGUgcGFnZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlLmMtMjEwMi0gKi9cbm1tL21pZ3JhdGUuYzoyMTAzOmludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjEwNC1cdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmMtMjExMi1cdExJU1RfSEVBRChzcGxpdF9mb2xpb3MpO1xubW0vbWlncmF0ZS5jOjIxMTM6XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyBzdGF0cztcbm1tL21pZ3JhdGUuYy0yMTE0LVxubW0vbWlncmF0ZS5jOjIxMTU6XHR0cmFjZV9tbV9taWdyYXRlX3BhZ2VzX3N0YXJ0KG1vZGUsIHJlYXNvbik7XG5tbS9taWdyYXRlLmMtMjExNi1cbi0tXG5tbS9taWdyYXRlLmMtMjE0MS1cdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXG5tbS9taWdyYXRlLmM6MjE0MjpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTQzLVx0XHRcdFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcdTAwMjZyZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTQ2LVx0ZWxzZVxubW0vbWlncmF0ZS5jOjIxNDc6XHRcdHJjID0gbWlncmF0ZV9wYWdlc19zeW5jKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTQ4LVx0XHRcdFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcdTAwMjZyZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTYxLVx0XHQgKi9cbm1tL21pZ3JhdGUuYzoyMTYyOlx0XHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNnNwbGl0X2ZvbGlvcywgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTYzLVx0XHRcdFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTg4LVx0Y291bnRfdm1fZXZlbnRzKFRIUF9NSUdSQVRJT05fU1BMSVQsIHN0YXRzLm5yX3RocF9zcGxpdCk7XG5tbS9taWdyYXRlLmM6MjE4OTpcdHRyYWNlX21tX21pZ3JhdGVfcGFnZXMoc3RhdHMubnJfc3VjY2VlZGVkLCBzdGF0cy5ucl9mYWlsZWRfcGFnZXMsXG5tbS9taWdyYXRlLmMtMjE5MC1cdFx0XHQgICAgICAgc3RhdHMubnJfdGhwX3N1Y2NlZWRlZCwgc3RhdHMubnJfdGhwX2ZhaWxlZCxcbi0tXG5tbS9taWdyYXRlLmM9MjI1MT1zdGF0aWMgaW50IGRvX21vdmVfcGFnZXNfdG9fbm9kZShzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgaW50IG5vZGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyNTktXG5tbS9taWdyYXRlLmM6MjI2MDpcdGVyciA9IG1pZ3JhdGVfcGFnZXMocGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXG5tbS9taWdyYXRlLmMtMjI2MS1cdFx0KHVuc2lnbmVkIGxvbmcpXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX1NZU0NBTEwsIE5VTEwpO1xuLS1cbm1tL21pZ3JhdGUuYz0yNjUwPXN0YXRpYyBib29sIG1pZ3JhdGVfYmFsYW5jZWRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL21pZ3JhdGUuYzoyNjUxOlx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9taWdyYXRlX3BhZ2VzKVxubW0vbWlncmF0ZS5jLTI2NTIte1xuLS1cbm1tL21pZ3JhdGUuYy0yNjYzLVx0XHRcdFx0ICAgICAgIGhpZ2hfd21hcmtfcGFnZXMoem9uZSkgJiM0Mztcbm1tL21pZ3JhdGUuYzoyNjY0Olx0XHRcdFx0ICAgICAgIG5yX21pZ3JhdGVfcGFnZXMsXG5tbS9taWdyYXRlLmMtMjY2NS1cdFx0XHRcdCAgICAgICBaT05FX01PVkFCTEUsIEFMTE9DX0NNQSkpXG4tLVxubW0vbWlncmF0ZS5jPTI3NTg9aW50IG1pZ3JhdGVfbWlzcGxhY2VkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBub2RlKVxuLS1cbm1tL21pZ3JhdGUuYy0yNzY3LVx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZtaWdyYXRlcGFnZXMpO1xubW0vbWlncmF0ZS5jOjI3Njg6XHRucl9yZW1haW5pbmcgPSBtaWdyYXRlX3BhZ2VzKFx1MDAyNm1pZ3JhdGVwYWdlcywgYWxsb2NfbWlzcGxhY2VkX2RzdF9mb2xpbyxcbm1tL21pZ3JhdGUuYy0yNzY5LVx0XHRcdFx0ICAgICBOVUxMLCBub2RlLCBNSUdSQVRFX0FTWU5DLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBtaWdyYXRlX3BhZ2VzYCYjMzk7cyBBY2Nlc3NpYmlsaXR5KioKCkFscmlnaHQsIHNvIGBtaWdyYXRlX3BhZ2VzYC4uLiBpdCYjMzk7cyBleHBvcnRlZCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyAqaW50ZW5kZWQqIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIHNjb3BlLCByaWdodD8gQnV0IGludGVudGlvbiBhbmQgcmVhbGl0eSBjYW4gYmUgdHdvIGRpZmZlcmVudCB0aGluZ3MuIEJlc3QgdG8gYmUgc3VyZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBleHBvcnRlZCBhcyB0aGUgY29kZSBzdWdnZXN0cywganVzdCB0byBjb25maXJtLiBHb3R0YSBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1pZ3JhdGVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG1pZ3JhdGVfcGFnZXNgIEZ1bmN0aW9uKioKCkhtbSwgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBtaWdyYXRlX3BhZ2VzYCB0byBiZSByZWFkaWx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIG15IG1vZHVsZSwgYnV0IGl0IHNlZW1zIGxpa2UgdGhlIGNvbXBpbGVyIGlzbiYjMzk7dCByZWNvZ25pemluZyBpdC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBUaGUgbW9zdCBsaWtlbHkgY3VscHJpdCBpcyB0aGF0IGl0JiMzOTtzIG5vdCBiZWluZyBleHBvcnRlZCBhcyBhIHN5bWJvbC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBgbWlncmF0ZV9wYWdlc2AgaXMgYWN0dWFsbHkgYmVpbmcgbWFkZSBhdmFpbGFibGUgZm9yIG1vZHVsZXMgdG8gdXNlLCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIGBtbS9taWdyYXRlLmNgLiBJJiMzOTtsbCBpbW1lZGlhdGVseSBjaGVjayBmb3IgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybyYjMzk7cyBhcHBsaWNhdGlvbiB0byB0aGF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiBUaGlzIHdpbGwgcXVpY2tseSB0ZWxsIG1lIGlmIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBpbnRlbmRlZCBmb3IgaXQgdG8gYmUgY2FsbGFibGUgb3V0c2lkZSBvZiB0aGUgY29yZSBrZXJuZWwgY29kZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTU4PWludCBzZXRfbW92YWJsZV9vcHMoY29uc3Qgc3RydWN0IG1vdmFibGVfb3BlcmF0aW9ucyAqb3BzLCBlbnVtIHBhZ2V0eXBlIHR5cGUpXG4tLVxubW0vbWlncmF0ZS5jLTc5LX1cbm1tL21pZ3JhdGUuYzo4MDpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbW92YWJsZV9vcHMpO1xubW0vbWlncmF0ZS5jLTgxLVxuLS1cbm1tL21pZ3JhdGUuYz03MjY9aW50IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzM1LX1cbm1tL21pZ3JhdGUuYzo3MzY6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX21hcHBpbmcpO1xubW0vbWlncmF0ZS5jLTczNy1cbi0tXG5tbS9taWdyYXRlLmM9Nzc4PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGUuYy04NjYtfVxubW0vbWlncmF0ZS5jOjg2NzpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2OC1cbi0tXG5tbS9taWdyYXRlLmM9OTEwPWludCBtaWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtOTE1LX1cbm1tL21pZ3JhdGUuYzo5MTY6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2ZvbGlvKTtcbm1tL21pZ3JhdGUuYy05MTctXG4tLVxubW0vbWlncmF0ZS5jPTEwMzg9aW50IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy0xMDQyLX1cbm1tL21pZ3JhdGUuYzoxMDQzOkVYUE9SVF9TWU1CT0woYnVmZmVyX21pZ3JhdGVfZm9saW8pO1xubW0vbWlncmF0ZS5jLTEwNDQtXG4tLVxubW0vbWlncmF0ZS5jPTEwNTk9aW50IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvX25vcmVmcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtMTA2My19XG5tbS9taWdyYXRlLmM6MTA2NDpFWFBPUlRfU1lNQk9MX0dQTChidWZmZXJfbWlncmF0ZV9mb2xpb19ub3JlZnMpO1xubW0vbWlncmF0ZS5jLTEwNjUtI2VuZGlmIC8qIENPTkZJR19CVUZGRVJfSEVBRCAqL1xuLS1cbm1tL21pZ3JhdGUuYz0xMDY3PWludCBmaWxlbWFwX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vbWlncmF0ZS5jLTEwNzEtfVxubW0vbWlncmF0ZS5jOjEwNzI6RVhQT1JUX1NZTUJPTF9HUEwoZmlsZW1hcF9taWdyYXRlX2ZvbGlvKTtcbm1tL21pZ3JhdGUuYy0xMDczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTA2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1pZ3JhdGVfcGFnZXNgIFBhdGNoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhhdCBgbWlncmF0ZV9wYWdlc2AgaXNuJiMzOTt0IGRpcmVjdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGNsZWFybHkgYSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiwgZGVlcGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLgoKVGhlIGNvcmUgY2hhbmdlIGhlcmUgaXMgdGhlIHN1YnN0aXR1dGlvbiBvZiBgY29uZF9yZXNjaGVkKClgIHdpdGggYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIHNoaWZ0OyBpdCYjMzk7cyBtZXNzaW5nIHdpdGggUkNVIHF1aWVzY2VudCBzdGF0ZXMsIHNvIHRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7bSBhc2tpbmcgaXM6IGRvIHdlIG5lZWQgdG8gZnV6eiB0aGlzPyBZZXMsIHByb2JhYmx5LgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbWlncmF0ZV9wYWdlc2AuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MgdGhhdCBpbXBhY3QgaXQuIEkgc2VlIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIChvciBgQ09ORklHX0NPTVBBQ1RJT05gLCB3aGljaCBpbmRpcmVjdGx5IGVuYWJsZXMgaXQpIGlzIHRoZSBrZXkuIEFuZCwgc2luY2UgYENPTkZJR19NSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgSSBjYW4gYWRkIGl0IHRvIGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGl0IGluIHRoZSBmdXp6aW5nLgoKTm93LCBob2xkIG9uLiBJcyBgbWlncmF0ZV9wYWdlc2AgdGhlICpiZXN0KiBmb2N1cyBzeW1ib2w/IEkgc2hvdWxkIHByb2JhYmx5IGludmVzdGlnYXRlIGZ1cnRoZXIuIEkgc2VlIHRoYXQgYG1pZ3JhdGVfcGFnZXNgIHNlcnZlcyBhcyBhbiBlbnRyeSBwb2ludCBmb3IgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9wYWdlc19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTc4Mj1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jLTE4MDUtLypcbm1tL21pZ3JhdGUuYzoxODA2OiAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSBmaXJzdCB1bm1hcHMgZm9saW9zIGluIHRoZSBmcm9tIGxpc3QgYXMgbWFueSBhc1xubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxuLS1cbm1tL21pZ3JhdGUuYy0xODEzLSAqL1xubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG5tbS9taWdyYXRlLmMtMTgxNS1cdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE4NTYtXHRcdFx0ICogb3RoZXJ3aXNlIHN0YXRzIGluY29uc2lzdGVuY3kgd2lsbCBoYXBwZW4gd2hlblxubW0vbWlncmF0ZS5jOjE4NTc6XHRcdFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxubW0vbWlncmF0ZS5jLTE4NTgtXHRcdFx0ICogd2l0aCBNSUdSQVRFX1NZTkMgYW5kIE1JR1JBVEVfQVNZTkMuXG4tLVxubW0vbWlncmF0ZS5jPTIwMjY9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjAzNy1cdC8qIFRyeSB0byBtaWdyYXRlIGluIGJhdGNoIHdpdGggTUlHUkFURV9BU1lOQyBtb2RlIGZpcnN0bHkgKi9cbm1tL21pZ3JhdGUuYzoyMDM4Olx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXG5tbS9taWdyYXRlLmMtMjAzOS1cdFx0XHRcdCByZWFzb24sIFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcdTAwMjZhc3RhdHMsXG4tLVxubW0vbWlncmF0ZS5jLTIwNjQtXHRcdGxpc3RfbW92ZShmcm9tLVx1MDAzZW5leHQsIFx1MDAyNmZvbGlvcyk7XG5tbS9taWdyYXRlLmM6MjA2NTpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMDY2LVx0XHRcdFx0XHQgcHJpdmF0ZSwgbW9kZSwgcmVhc29uLCByZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYz0yMTAzPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTIxNDEtXHRpZiAobW9kZSA9PSBNSUdSQVRFX0FTWU5DKVxubW0vbWlncmF0ZS5jOjIxNDI6XHRcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE0My1cdFx0XHRcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXHUwMDI2cmV0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMjE2MS1cdFx0ICovXG5tbS9taWdyYXRlLmM6MjE2MjpcdFx0bWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE2My1cdFx0XHRcdHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsIHJlYXNvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgbWlncmF0ZV9wYWdlc2AgRnVuY3Rpb24gQ2FsbCBIaWVyYXJjaHkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHByZXR0eSBjbGVhciBwYXR0ZXJuIGluIGhvdyB0aGVzZSBwYWdlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0IGxvb2tzIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGBtaWdyYXRlX3BhZ2VzX3N5bmNgIGFuZCBgbWlncmF0ZV9wYWdlc2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3MgaXRzZWxmLiBOb3csIGBtaWdyYXRlX3BhZ2VzX3N5bmNgIGlzIGFsc28gY2FsbGVkIGJ5IGBtaWdyYXRlX3BhZ2VzYC4gVGhpcyBnaXZlcyBtZSB0aGUgZmVlbGluZyB0aGF0IGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBtaWdyYXRpb24gb3BlcmF0aW9uLiBTZWVtcyBsaWtlIGEgdG9wLWxldmVsIGZ1bmN0aW9uIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRoZSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBob3cgaXMgdGhlIHN5c3RlbSBjYWxsaW5nIHRoaXMuIEkgd2FudCB0byBzZWUgaWYgYG1pZ3JhdGVfcGFnZXNgIGlzIGludm9rZWQgYnkgYW55IHN5c3RlbSBjYWxscyBvciBub3QuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIgZm9yIHRoZXNlIG1pZ3JhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03NDYtXHRcdFx0ICpcbm1tL21lbXBvbGljeS5jOjc0NzpcdFx0XHQgKiBtaWdyYXRlX3BhZ2VzKFx1MDAyNnBhZ2VsaXN0KSByZXR1cm5zIG5yX2ZhaWxlZCBmb2xpb3MsIHNvXG5tbS9tZW1wb2xpY3kuYy03NDgtXHRcdFx0ICogY2hlY2sgXCYjMzQ7bGFyZ2VcJiMzNDsgbm93IHNvIHRoYXQgcXVldWVfcGFnZXNfcmFuZ2UoKSByZXR1cm5zXG4tLVxubW0vbWVtcG9saWN5LmM9MTI4NT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxuLS1cbm1tL21lbXBvbGljeS5jLTEzMjEtXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cGFnZWxpc3QpKSB7XG5tbS9tZW1wb2xpY3kuYzoxMzIyOlx0XHRlcnIgPSBtaWdyYXRlX3BhZ2VzKFx1MDAyNnBhZ2VsaXN0LCBhbGxvY19taWdyYXRpb25fdGFyZ2V0LCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMTMyMy1cdFx0XHQodW5zaWduZWQgbG9uZylcdTAwMjZtdGMsIE1JR1JBVEVfU1lOQywgTVJfU1lTQ0FMTCwgTlVMTCk7XG4tLVxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cbm1tL21lbXBvbGljeS5jOjEzMzk6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xMzQwLVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmMtMTM4Ny1cdFx0XHQvKlxubW0vbWVtcG9saWN5LmM6MTM4ODpcdFx0XHQgKiBkb19taWdyYXRlX3BhZ2VzKCkgdHJpZXMgdG8gbWFpbnRhaW4gdGhlIHJlbGF0aXZlXG5tbS9tZW1wb2xpY3kuYy0xMzg5LVx0XHRcdCAqIG5vZGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYWdlcyBlc3RhYmxpc2hlZCBiZXR3ZWVuXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ3MD1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTQ3NS1cbm1tL21lbXBvbGljeS5jOjE0NzY6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xNDc3LVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ4OT1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNjE2LVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSkge1xubW0vbWVtcG9saWN5LmM6MTYxNzpcdFx0bnJfZmFpbGVkIHw9IG1pZ3JhdGVfcGFnZXMoXHUwMDI2cGFnZWxpc3QsXG5tbS9tZW1wb2xpY3kuYy0xNjE4LVx0XHRcdFx0YWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jPTE4NTc9U1lTQ0FMTF9ERUZJTkUzKHNldF9tZW1wb2xpY3ksIGludCwgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiwgbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTg2Mi1cbm1tL21lbXBvbGljeS5jOjE4NjM6c3RhdGljIGludCBrZXJuZWxfbWlncmF0ZV9wYWdlcyhwaWRfdCBwaWQsIHVuc2lnbmVkIGxvbmcgbWF4bm9kZSxcbm1tL21lbXBvbGljeS5jLTE4NjQtXHRcdFx0XHRjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqb2xkX25vZGVzLFxuLS1cbm1tL21lbXBvbGljeS5jLTE5MzQtXG5tbS9tZW1wb2xpY3kuYzoxOTM1Olx0ZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgb2xkLCBuZXcsXG5tbS9tZW1wb2xpY3kuYy0xOTM2LVx0XHRjYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0xOTQ4LVxubW0vbWVtcG9saWN5LmM6MTk0OTpTWVNDQUxMX0RFRklORTQobWlncmF0ZV9wYWdlcywgcGlkX3QsIHBpZCwgdW5zaWduZWQgbG9uZywgbWF4bm9kZSxcbm1tL21lbXBvbGljeS5jLTE5NTAtXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG9sZF9ub2Rlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xOTUyLXtcbm1tL21lbXBvbGljeS5jOjE5NTM6XHRyZXR1cm4ga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkLCBtYXhub2RlLCBvbGRfbm9kZXMsIG5ld19ub2Rlcyk7XG5tbS9tZW1wb2xpY3kuYy0xOTU0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtaWdyYXRlX3BhZ2VzYCBTeXN0ZW0gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwuIFRoZSBmYWN0IHRoYXQgYFNZU0NBTExfREVGSU5FNChtaWdyYXRlX3BhZ2VzLCAuLi4pYCBleGlzdHMgY29uZmlybXMgaXQmIzM5O3MgYSByZWFsIGVudHJ5IHBvaW50LCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBjYW4gdGFyZ2V0IGFuZCBmdXp6LiBUaGlzIGlzIHByb21pc2luZy4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scywgc28gbGV0JiMzOTtzIGFkZCBgbWlncmF0ZV9wYWdlc2AgaXRzZWxmLCBuYXR1cmFsbHkuIEFsc28sIEkgbmVlZCB0byBpbmNsdWRlIGBkb19taWdyYXRlX3BhZ2VzYCBhbmQgYGtlcm5lbF9taWdyYXRlX3BhZ2VzYCwgd2hpY2ggSSBleHBlY3Qgd2lsbCBiZSBjcnVjaWFsIGluIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gcGF0aC4gTG9va3MgbGlrZSBgbWlncmF0ZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGUuY2AgaXMgdGhlIGNvcmUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BYCBhbmQgYENPTkZJR19NSUdSQVRJT05gIGFyZSBlbmFibGVkLiBUaGVzZSBjb25maWd1cmF0aW9ucyB3aWxsIGxpa2VseSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIGFuZCBhdmFpbGFiaWxpdHkgb2YgYG1pZ3JhdGVfcGFnZXNgIHN1YnN0YW50aWFsbHkuIFdlIG5lZWQgdG8ga25vdyBpZiB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IHNldCB1cCB0byBkbyBwYWdlIG1pZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NzE9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODEtXG5tbS9LY29uZmlnOjY4Mjpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBNaWdyYXRpb24gU3RhdHVzIHdpdGggTlVNQSoqCgpSaWdodCwgc28gd2UgaGF2ZSB0aGlzIGJvb2xlYW4gdmFyaWFibGUsIGBNSUdSQVRJT05gLiBDbGVhcmx5LCBpdCBpbmRpY2F0ZXMgd2hldGhlciBzb21lIHNvcnQgb2YgbWlncmF0aW9uIHByb2Nlc3MgaXMgZW5hYmxlZCBvciByZXF1aXJlZC4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6ICp3aGF0IGlzIGluZmx1ZW5jaW5nIHRoaXMgc3RhdGUqPyBNb3JlIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IGBOVU1BYCBmYWN0b3JzIGludG8gdGhpcy4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykgaXMgZHJpdmluZyB0aGUgc2V0dGluZyBvZiB0aGUgYE1JR1JBVElPTmAgZmxhZy4gVGhpcyBjb3VsZCBiZSBmb3IgYSBmZXcgcmVhc29ucy4gUGVyaGFwcyBOVU1BIGlzIGJlaW5nIHVzZWQgdG8gKmVuYWJsZSogbWlncmF0aW9uLCBvciBwb3NzaWJseSBkaXNhYmxlIGl0IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gTWF5YmUgTlVNQSBub2RlIGF3YXJlbmVzcyBpcyBhIHRyaWdnZXIsIG9yIHJlbGF0ZWQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHJlc291cmNlcyBhcmUgcGxhY2VkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0LiBUaGUgY29kZSBhbmQvb3IgdGhlIGRlc2lnbiBkb2N1bWVudGF0aW9uIG91Z2h0IHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4MD1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODEtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xubW0vS2NvbmZpZzo1ODI6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTU4My1cbi0tXG5tbS9LY29uZmlnPTY0MD1jb25maWcgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWctNjQyLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjY0MzpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjQ0LVx0ZGVwZW5kcyBvbiBNTVVcbi0tXG5tbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY3NC1cdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnOjY3NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjc2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTA1Mz1jb25maWcgQ01BXG4tLVxubW0vS2NvbmZpZy0xMDU1LVx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWc6MTA1NjpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctMTA1Ny1cdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIE1lbW9yeSBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgZGVjaXNpb24gcHJvY2VzcyBpcyBwcmV0dHkgY2xlYXIuIFdoZW4gaXQgY29tZXMgdG8gbW92aW5nIHBhZ2VzIGFyb3VuZCwgdGhlIGBDT01QQUNUSU9OYCBtZWNoYW5pc20gaXMgc2V0IHRvIHRyaWdnZXIgYSBgTUlHUkFUSU9OYCBldmVudC4gU2ltaWxhcmx5LCBgTlVNQV9NSUdSQVRJT05gIGFsc28gY2FsbHMgdXBvbiBgTUlHUkFUSU9OYC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgeW91JiMzOTtyZSB0cnlpbmcgdG8gb3B0aW1pemUgbWVtb3J5IGxheW91dCwgeW91JiMzOTtsbCBpbmV2aXRhYmx5IG5lZWQgdG8gbWlncmF0ZSBwYWdlcy4KCk5vdywgYE5VTUFfTUlHUkFUSU9OYCBoYXMgYSBoYXJkIGRlcGVuZGVuY3k6IGl0IGFic29sdXRlbHkgcmVxdWlyZXMgYm90aCBgTlVNQWAgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpIGFuZCBgTU1VYCAoTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCkgdG8gYmUgZW5hYmxlZC4gVGhhdCYjMzk7cyBmdW5kYW1lbnRhbDsgd2l0aG91dCB0aG9zZSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIGluIHBsYWNlLCBOVU1BLWF3YXJlIG1pZ3JhdGlvbiBpcyBzaW1wbHkgaW1wb3NzaWJsZS4KCkdpdmVuIGFsbCB0aGlzLCBhIHNlbnNpYmxlIGZvbGxvdy11cCBxdWVzdGlvbiBhcmlzZXM6IElzIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwgZW5hYmxlZCB0aHJvdWdoIHRoZSBgTlVNQWAgY29uZmlndXJhdGlvbj8gSWYgTlVNQSBpcyBhY3RpdmUsIHRoZW4gdGhpcyBzeXNjYWxsIGlzIHByb2JhYmx5IGFsc28gYXZhaWxhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBjb25maXJtIHRoYXQsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBhbnkga2luZCBvZiBwYWdlIG1pZ3JhdGlvbiB0aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkU0XFwobWlncmF0ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTE4NjM9c3RhdGljIGludCBrZXJuZWxfbWlncmF0ZV9wYWdlcyhwaWRfdCBwaWQsIHVuc2lnbmVkIGxvbmcgbWF4bm9kZSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xOTQ4LVxubW0vbWVtcG9saWN5LmM6MTk0OTpTWVNDQUxMX0RFRklORTQobWlncmF0ZV9wYWdlcywgcGlkX3QsIHBpZCwgdW5zaWduZWQgbG9uZywgbWF4bm9kZSxcbm1tL21lbXBvbGljeS5jLTE5NTAtXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG9sZF9ub2RlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIENvbnRleHQgb2YgYG1tL21lbXBvbGljeS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWVtcG9saWN5LmNgIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBhIGtleSBxdWVzdGlvbjogKklzIHRoaXMgZmlsZSwgdGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gZGVwZW5kIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24/KiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19OVU1BYCBpcyB0aGUga2V5LiBHaXZlbiB0aGUgdmVyeSBuYXR1cmUgb2YgbWVtb3J5IHBvbGljaWVzLCBhbmQgTlVNQSBhcmNoaXRlY3R1cmUgdGhhdCBkZWZpbmVzIHdoZXJlIG1lbW9yeSB3aWxsIGJlIGxvY2F0ZWQgZm9yIHByb2Nlc3NlcywgaXQgc2VlbXMgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSB3aWxsIGJlIGRlZmluZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgQ09ORklHX05VTUFgLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBJZiBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHVuaXQsIEkgbmVlZCB0byBrbm93IHRoZSBleGFjdCBidWlsZCBmbGFncyBzbyBJIGRvbiYjMzk7dCB3YXN0ZSB0aW1lIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzbiYjMzk7dCBldmVuIGluIG15IHRhcmdldCBrZXJuZWwgYnVpbGQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlIGJ1aWxkIHN5c3RlbSB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIFRlc3RpbmcgYG1pZ3JhdGVfcGFnZXNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGBtZW1wb2xpY3kub2AgaXMgZGVmaW5pdGVseSBidWlsdCBvbmx5IGlmIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlIHdob2xlIE5VTUEgYXJjaGl0ZWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIGl0cyBwdXJwb3NlLiAgVGhlcmVmb3JlLCBJJiMzOTtkIGluaXRpYWxseSBhc3N1bWUgdGhhdCBgQ09ORklHX05VTUFgIGlzICpyZXF1aXJlZCogdG8gYWN0dWFsbHkgaGl0IHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwuICAKCkJ1dCBoYW5nIG9u4oCmIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gIFRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgcGF0aCBpbiBgbW0vbWlncmF0ZS5jYCwgYG1pZ3JhdGVfcGFnZXNgIG1pZ2h0IGFsc28gYmUgcmVhY2hlZCB0aHJvdWdoIGBDTUFgIG9yIGBDT01QQUNUSU9OYC4gIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gIEhvd2V2ZXIsIGZvciAqc3BlY2lmaWNhbGx5KiB0ZXN0aW5nIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwsIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19OVU1BYCBpcyBzdGlsbCB0aGUgYmVzdCBiZXQuICBTbywgbGV0JiMzOTtzIGFkZCBgTlVNQWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSBhbmQgdGFyZ2V0IHRoZSBzeXNjYWxsIGV4cGxpY2l0bHkuCgpXYWl0LCBJIGFsc28gbmVlZCBgTUlHUkFUSU9OYCBkZWZpbmVkIGFzIHRoaXMgaXMgaW52b2x2ZWQgaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBCdXQgbG9va2luZyBpbnRvIGl0LCBgTUlHUkFUSU9OYCBpcyBzZWxlY3RlZCB2aWEgYENPTVBBQ1RJT05gLCBhbmQgdGhhdCYjMzk7cyAqYWxyZWFkeSogc2V0IHRvIGBkZWZhdWx0IHlgIC4gT2theSwgdGhhdCYjMzk7cyBnb29kLgoKU28sIGxldCYjMzk7cyBhZGQgYE5VTUFgIGFuZCBgTUlHUkFUSU9OYCB0byBgRW5hYmxlQ29uZmlnc2AuIE9oIHdhaXQsIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgKG5vIGBwcm9tcHRgKS4gU28sIGlmIGBDT01QQUNUSU9OYCBlbmFibGVzIGBNSUdSQVRJT05gLCBJIGNhbiBqdXN0IHNwZWNpZnkgYENPTVBBQ1RJT05gLiBTbyBsZXQmIzM5O3MgYWRkIGBOVU1BYCBhbmQgYENPTVBBQ1RJT05gLiBMZXQmIzM5O3MgYWxzbyBjaGVjayBgQ09NUEFDVElPTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTYyOD1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTYzOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBjb21wYWN0aW9uXG5tbS9LY29uZmlnOjY0MDpjb25maWcgQ09NUEFDVElPTlxubW0vS2NvbmZpZy02NDEtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGF0IGBDT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGUgdXNlciBjYW4gdG9nZ2xlIG9uIG9yIG9mZiDigJMgdGhhdCYjMzk7cyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgaW5jbHVkZSByZWxhdGVkIGZlYXR1cmVzLCBzbyBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGluY29ycG9yYXRpbmcgYE5VTUFgIGFsb25nc2lkZSBgQ09NUEFDVElPTmAgYW5kIGBNSUdSQVRJT05gLgoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gIGBNSUdSQVRJT05gIGRvZXNuJiMzOTt0IGhhdmUgYSBkaXJlY3QgYC5jb25maWdgIHByb21wdCwgbWVhbmluZyBpdCYjMzk7cyBkZXBlbmRlbnQgb24gb3RoZXIgc2VsZWN0aW9ucy4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBpdCYjMzk7cyBzZWxlY3RlZCBpbiB0aGUgY29ycmVjdCB3YXkuICBTbywgSSYjMzk7bGwgcmV2aXNlIHRoYXQgYW5kIGp1c3QgaW5jbHVkZSBgTlVNQWAgYW5kIGBDT01QQUNUSU9OYCBhdCB0aGlzIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IG1pZ3JhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlLiAgTXkgZm9jdXMgc2hpZnRzIHRvIGBtaWdyYXRlX3BhZ2VzYCwgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiAgV2FpdCBhIG1vbWVudC4uLiBpc24mIzM5O3QgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIHN0YXRpYz8gIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gWWVzLCBzdGF0aWMuCgpUaGF0IG1lYW5zIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgIGFyZSBteSBwcmltYXJ5IHRhcmdldCBzeW1ib2xzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIGlubGluZWQsIGJ1dCBJJiMzOTttIGNvbmZpZGVudCBub3cgdGhhdCBJIGhhdmUgdGhlIGltcG9ydGFudCBwaWVjZXMgaW4gbXkgc2NvcGUuIEkmIzM5O2xsIGNoZWNrIGl0LCBiZWNhdXNlIEkgd2FudCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGNvcnJlY3Qgc3RhdHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3BhZ2VzX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz0xNzgyPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMTgwNS0vKlxubW0vbWlncmF0ZS5jOjE4MDY6ICogbWlncmF0ZV9wYWdlc19iYXRjaCgpIGZpcnN0IHVubWFwcyBmb2xpb3MgaW4gdGhlIGZyb20gbGlzdCBhcyBtYW55IGFzXG5tbS9taWdyYXRlLmMtMTgwNy0gKiBwb3NzaWJsZSwgdGhlbiBtb3ZlIHRoZSB1bm1hcHBlZCBmb2xpb3MuXG4tLVxubW0vbWlncmF0ZS5jLTE4MTMtICovXG5tbS9taWdyYXRlLmM6MTgxNDpzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbm1tL21pZ3JhdGUuYy0xODE1LVx0XHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTg1Ni1cdFx0XHQgKiBvdGhlcndpc2Ugc3RhdHMgaW5jb25zaXN0ZW5jeSB3aWxsIGhhcHBlbiB3aGVuXG5tbS9taWdyYXRlLmM6MTg1NzpcdFx0XHQgKiBtaWdyYXRlX3BhZ2VzX2JhdGNoIGlzIGNhbGxlZCB2aWEgbWlncmF0ZV9wYWdlcygpXG5tbS9taWdyYXRlLmMtMTg1OC1cdFx0XHQgKiB3aXRoIE1JR1JBVEVfU1lOQyBhbmQgTUlHUkFURV9BU1lOQy5cbi0tXG5tbS9taWdyYXRlLmM9MjAyNj1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0yMDM3LVx0LyogVHJ5IHRvIG1pZ3JhdGUgaW4gYmF0Y2ggd2l0aCBNSUdSQVRFX0FTWU5DIG1vZGUgZmlyc3RseSAqL1xubW0vbWlncmF0ZS5jOjIwMzg6XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQyxcbm1tL21pZ3JhdGUuYy0yMDM5LVx0XHRcdFx0IHJlYXNvbiwgXHUwMDI2Zm9saW9zLCBzcGxpdF9mb2xpb3MsIFx1MDAyNmFzdGF0cyxcbi0tXG5tbS9taWdyYXRlLmMtMjA2NC1cdFx0bGlzdF9tb3ZlKGZyb20tXHUwMDNlbmV4dCwgXHUwMDI2Zm9saW9zKTtcbm1tL21pZ3JhdGUuYzoyMDY1Olx0XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxubW0vbWlncmF0ZS5jLTIwNjYtXHRcdFx0XHRcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jPTIxMDM9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjE0MS1cdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXG5tbS9taWdyYXRlLmM6MjE0MjpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTQzLVx0XHRcdFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcdTAwMjZyZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTYxLVx0XHQgKi9cbm1tL21pZ3JhdGUuYzoyMTYyOlx0XHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNnNwbGl0X2ZvbGlvcywgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTYzLVx0XHRcdFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbWlncmF0ZV9wYWdlc19iYXRjaGAgaXNuJiMzOTt0IGRlY2xhcmVkIGBpbmxpbmVgLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciBwcm9iYWJseSBpc24mIzM5O3QgaW5saW5pbmcgaXQsIHRob3VnaCBpdCAqY291bGQqIGJlLiBCdXQgdGhlIG1vcmUgZmFtaWxpYXIgZnVuY3Rpb25zIGhlcmUsIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLCBhcmUgd2hhdCBJJiMzOTtsbCBmb2N1cyBvbi4KClRoZSBkaWZmIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCByZXBsYWNlcyBgY29uZF9yZXNjaGVkKClgIHdpdGggYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAuIEFoYSEgVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbmV3IGZ1bmN0aW9uIGFsc28gc2lnbmFscyBhbiBSQ1UgcXVpZXNjZW50IHN0YXRlIGFsb25nIHdpdGggdGhlIG5vcm1hbCByZXNjaGVkdWxpbmcuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhZGp1c3RtZW50LCBzcGVjaWZpY2FsbHkgZm9yIGF2b2lkaW5nIFJDVSBzdGFsbHMgZHVyaW5nIHBvdGVudGlhbGx5IGxlbmd0aHkgbGFyZ2UgcGFnZSBtaWdyYXRpb25zLiBJJiMzOTt2ZSBzZWVuIHRoYXQgYmVoYXZpb3IgYmVmb3JlLiBUaGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQgcHJldmVudGluZyB0aGUgc3lzdGVtIGZyb20gbG9ja2luZyB1cCBkdXJpbmcgdGhvc2Ugb3BlcmF0aW9ucywgd2hpY2ggaXMgd2h5IGl0IGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuCgpNeSBwcmltYXJ5IGludGVyZXN0IHJpZ2h0IG5vdyBsaWVzIHdpdGggYE5VTUFgIGFuZCBgQ09NUEFDVElPTmAgY29uZmlncyDigJMgdGhvc2UgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHRzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBgbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19taWdyYXRlX3BhZ2VzYCB0byBjb25maXJtIGhvdyB0aGlzIG5ldyByZXNjaGVkdWxpbmcgYmVoYXZpb3IgaW50ZXJhY3RzIHdpdGggdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGF0IGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzYCBpcyBhY3R1YWxseSBkZWZpbmVkLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqVHJhY2luZyB0aGUgU291cmNlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoaXMgY29uY2VwdCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggaXRzIG9yaWdpbi4gKldoZXJlKiBleGFjdGx5IGlzIHRoaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGdvIGJhY2sgdG8gdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cywgdGhlIGJlZHJvY2sgYXNzdW1wdGlvbnMgdXBvbiB3aGljaCB0aGlzIHJlc3RzLiBKdW1waW5nIGluIHdpdGhvdXQgdGhhdCBjbGFyaXR5IGlzIGp1c3QgYXNraW5nIGZvciBhIHBvdGVudGlhbCBtaXNpbnRlcnByZXRhdGlvbiBvciB3YXN0ZWQgZWZmb3J0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGRlZmluaXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBJIGFtIGNsZWFyIG9uIHdoYXQgaXQgaXMgd2UgYXJlIGRpc2N1c3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MjA1PXN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3Rhc2tzX3JjdV9maW5pc2godm9pZCkgeyB9XG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTIwOC0vKipcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoyMDk6ICogY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcyAtIFJlcG9ydCBwb3RlbnRpYWwgcXVpZXNjZW50IHN0YXRlcyB0byBSQ1VcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMTAtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMjE0LSAqL1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjIxNTojZGVmaW5lIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTIxNi1kbyB7IFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTM0CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJDVSBRdWllc2NlbnQgU3RhdGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZGVmaW5pdGlvbiDigJMgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGluY2x1ZGUvbGludXgvcmN1cGRhdGUuaGAuIFRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFsdGVyaW5nIGhvdyB0aGUgUkNVIHF1aWVzY2VudCBzdGF0ZSBpcyByZXBvcnRlZCB3aGlsZSBwYWdlcyBhcmUgYmVpbmcgbWlncmF0ZWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgY2hhbmdlOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBpbXByb3ZlIHRoZSBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIGdldCB0aGUgbmVjZXNzYXJ5IHJlc3VsdHMgcHJlcHBlZC4gRm9yIHRoaXMgcGF0Y2gsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGB0cnVlYC4gVGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBjbGVhcmx5IGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiBXZSBzaG91bGQgZW5hYmxlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIE5VTUEgYXJjaGl0ZWN0dXJlIGFuZCBtZW1vcnkgQ09NUEFDVElPTiwgYXMgdGhlc2UgYXJlIGxpa2VseSB0byBiZSBpbnZvbHZlZCBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIE15IHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggcmVwbGFjZXMgYGNvbmRfcmVzY2hlZCgpYCB3aXRoIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGluc2lkZSBgbWlncmF0ZV9wYWdlc19iYXRjaCgpYC4gVGhpcyBmdW5kYW1lbnRhbGx5IGFsdGVycyBSQ1UgcXVpZXNjZW50IHN0YXRlIHJlcG9ydGluZywgZXNwZWNpYWxseSBkdXJpbmcgbGFyZ2UtcGFnZSBtaWdyYXRpb25zLCB3aXRoIHRoZSBleHBsaWNpdCBnb2FsIG9mIHByZXZlbnRpbmcgcG90ZW50aWFsIFJDVSBzdGFsbHMuIENydWNpYWxseSwgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRod2F5cywgbWFraW5nIGl0IGEgY3JpdGljYWwgYXJlYSB0byBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNvbmRfcmVzY2hlZCgpIHdpdGggY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGluIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSwgd2hpY2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgaG93IFJDVSBxdWllc2NlbnQgc3RhdGVzIGFyZSByZXBvcnRlZCBkdXJpbmcgbGFyZ2UgcGFnZSBtaWdyYXRpb25zIHRvIHByZXZlbnQgUkNVIHN0YWxscy4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG1pZ3JhdGVfcGFnZXMgc3lzY2FsbCBhbmQgb3RoZXIgbWlncmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RvX21pZ3JhdGVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgY29uZF9yZXNjaGVkKCkgd2l0aCBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCkgaW4gbWlncmF0ZV9wYWdlc19iYXRjaCgpLCB3aGljaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBob3cgUkNVIHF1aWVzY2VudCBzdGF0ZXMgYXJlIHJlcG9ydGVkIGR1cmluZyBsYXJnZSBwYWdlIG1pZ3JhdGlvbnMgdG8gcHJldmVudCBSQ1Ugc3RhbGxzLiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbWlncmF0ZV9wYWdlcyBzeXNjYWxsIGFuZCBvdGhlciBtaWdyYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1Nzo1Ny44NzU1Njc4MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzg4NTg5OTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9wYWdlc1wiLFxuICAgIFwiZG9fbWlncmF0ZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNvbmRfcmVzY2hlZCgpIHdpdGggY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGluIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSwgd2hpY2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgaG93IFJDVSBxdWllc2NlbnQgc3RhdGVzIGFyZSByZXBvcnRlZCBkdXJpbmcgbGFyZ2UgcGFnZSBtaWdyYXRpb25zIHRvIHByZXZlbnQgUkNVIHN0YWxscy4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG1pZ3JhdGVfcGFnZXMgc3lzY2FsbCBhbmQgb3RoZXIgbWlncmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1Nzo1Ny44NzU1NzY5MjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDg2OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRmZGYwZTFiYTc2YWI4MTRiYjRhM2Q4MmQxNzAxYzgxZWY1YWVhMzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDM6NTc6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggYWIxNWE0ZGRkZDA0NzEuLmI5MzdjYmQ3NjQ4MDg3IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0xODQzLDcgKzE4NDMsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4gXFx0XFx0XFx0aXNfdGhwID0gZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pO1xcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBUaGUgcmFyZSBmb2xpbyBvbiB0aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCBzaG91bGRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTc6NTguNTg3MDQyNTAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODMxNzQ0MTI5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiQ09NUEFDVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfcGFnZXNcIixcbiAgICBcImRvX21pZ3JhdGVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZkZjBlMWJhNzZhYjgxNGJiNGEzZDgyZDE3MDFjODFlZjVhZWEzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAzOjU3OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCBhYjE1YTRkZGRkMDQ3MS4uYjkzN2NiZDc2NDgwODcgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTE4NDMsNyArMTg0Myw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRcdGlzX3RocCA9IGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKTtcbiBcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbitcdFx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGUgcmFyZSBmb2xpbyBvbiB0aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCBzaG91bGRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU3OjU4LjU4NzA0NDAyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzU2MDQwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbWlncmF0ZS5jYC4gSXQncyBhIHNpbmdsZS1saW5lIGRpZmYsIHJlYWxseSBxdWl0ZSBtaW5vci4gV2UncmUgcmVwbGFjaW5nIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLiBGdW5jdGlvbmFsbHksIGl0J3MgYSBzY2hlZHVsaW5nIHR3ZWFrLiBJdCdzIGEgc21hbGwgY2hhbmdlLCBidXQgbGV0IG1lIHRoaW5rLi4uIGBtaWdyYXRlX3BhZ2VzX2JhdGNoYC4uLiB0aGF0J3MgYSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIFJpZ2h0LCBzbyBldmVuIGEgdGlueSBzY2hlZHVsaW5nIGNoYW5nZSBpbiBhIGZ1bmN0aW9uIGxpa2UgdGhhdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWlncmF0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGZ1enppbmcgc2VlbXMgbGlrZSBhIHBydWRlbnQgc3RlcC4gVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWlncmF0ZV9wYWdlc19iYXRjaGAgaXRzZWxmLCBvciBtYXliZSBldmVuIGl0cyByZWxhdGVkIGZ1bmN0aW9uIGBtaWdyYXRlX3BhZ2VzYC4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBtbS9taWdyYXRlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgbWlncmF0ZV9wYWdlc19iYXRjaGAgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjAzLjQyMjY1MjQyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgwNDA4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9wYWdlc19iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTE3ODI9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE4MDUtLypcXG5tbS9taWdyYXRlLmM6MTgwNjogKiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCkgZmlyc3QgdW5tYXBzIGZvbGlvcyBpbiB0aGUgZnJvbSBsaXN0IGFzIG1hbnkgYXNcXG5tbS9taWdyYXRlLmMtMTgwNy0gKiBwb3NzaWJsZSwgdGhlbiBtb3ZlIHRoZSB1bm1hcHBlZCBmb2xpb3MuXFxuLS1cXG5tbS9taWdyYXRlLmMtMTgxMy0gKi9cXG5tbS9taWdyYXRlLmM6MTgxNDpzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG5tbS9taWdyYXRlLmMtMTgxNS1cXHRcXHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODU2LVxcdFxcdFxcdCAqIG90aGVyd2lzZSBzdGF0cyBpbmNvbnNpc3RlbmN5IHdpbGwgaGFwcGVuIHdoZW5cXG5tbS9taWdyYXRlLmM6MTg1NzpcXHRcXHRcXHQgKiBtaWdyYXRlX3BhZ2VzX2JhdGNoIGlzIGNhbGxlZCB2aWEgbWlncmF0ZV9wYWdlcygpXFxubW0vbWlncmF0ZS5jLTE4NTgtXFx0XFx0XFx0ICogd2l0aCBNSUdSQVRFX1NZTkMgYW5kIE1JR1JBVEVfQVNZTkMuXFxuLS1cXG5tbS9taWdyYXRlLmM9MjAyNj1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwMzctXFx0LyogVHJ5IHRvIG1pZ3JhdGUgaW4gYmF0Y2ggd2l0aCBNSUdSQVRFX0FTWU5DIG1vZGUgZmlyc3RseSAqL1xcbm1tL21pZ3JhdGUuYzoyMDM4OlxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChmcm9tLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLCBNSUdSQVRFX0FTWU5DLFxcbm1tL21pZ3JhdGUuYy0yMDM5LVxcdFxcdFxcdFxcdCByZWFzb24sIFxcdTAwMjZmb2xpb3MsIHNwbGl0X2ZvbGlvcywgXFx1MDAyNmFzdGF0cyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMDY0LVxcdFxcdGxpc3RfbW92ZShmcm9tLVxcdTAwM2VuZXh0LCBcXHUwMDI2Zm9saW9zKTtcXG5tbS9taWdyYXRlLmM6MjA2NTpcXHRcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjA2Ni1cXHRcXHRcXHRcXHRcXHQgcHJpdmF0ZSwgbW9kZSwgcmVhc29uLCByZXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jPTIxMDM9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTQxLVxcdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXFxubW0vbWlncmF0ZS5jOjIxNDI6XFx0XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNDMtXFx0XFx0XFx0XFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcXHUwMDI2cmV0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTYxLVxcdFxcdCAqL1xcbm1tL21pZ3JhdGUuYzoyMTYyOlxcdFxcdG1pZ3JhdGVfcGFnZXNfYmF0Y2goXFx1MDAyNnNwbGl0X2ZvbGlvcywgZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjE2My1cXHRcXHRcXHRcXHRwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLCBNSUdSQVRFX0FTWU5DLCByZWFzb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjAzLjU3MDcwNDc3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDAxODM0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIE1pZ3JhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYWdlIG1pZ3JhdGlvbiBjb2RlLiBMZXQncyBzZWUuLi4gYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIHRoZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uLCBhbmQgYG1pZ3JhdGVfcGFnZXNgIGlzIHRoZSBvbmUgd2UgZXhwb3J0LCByaWdodD8gR290IGl0LiBOb3csIHRoYXQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgY2FsbC4uLiBobW1tLCB0aGF0J3MganVzdCBhIHNjaGVkdWxpbmcgcG9pbnQsIGlzbid0IGl0PyBJdCBkb2Vzbid0ICpmdW5kYW1lbnRhbGx5KiBhbHRlciB0aGUgYWxnb3JpdGhtLCBidXQgaXQgZG9lcyBpbmZsdWVuY2UgdGhlIFJDVSBxdWllc2NlbnQgc3RhdGVzLCB3aGljaCBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIEkgdGhpbmsuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBpdCdzIHdvcnRoIGZ1enppbmcgdGhpcyBhcmVhLiBZZXMsIGFic29sdXRlbHkuIElmIHRoYXQgc2NoZWR1bGluZyBwb2ludCAqd2FzKiBtaXNzaW5nLCBpdCBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gUkNVIHN0YWxscy4gU28gZnV6emluZyBpcyBhIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIGFuZCBjb25maXJtIHRoZSBpbnRlbmRlZCBmdW5jdGlvbi5cblxuTGV0IG1lIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scywgc3BlY2lmaWNhbGx5IGBtaWdyYXRlX3BhZ2VzYC4gSSdsbCBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01JR1JBVElPTmAgaXMgcHJvYmFibHkgcmVxdWlyZWQsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBieSBsb29raW5nIGluIGBtbS9LY29uZmlnYCBvciBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODowNy4zNzA4OTEyOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODgzMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05Nz1vYmotJChDT05GSUdfTUVNVEVTVClcXHRcXHQrPSBtZW10ZXN0Lm9cXG5tbS9NYWtlZmlsZTo5ODpvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm9cXG5tbS9NYWtlZmlsZS05OS1vYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MDcuNTAxNzc5OTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODMzMTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBtaWdyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGBDT05GSUdfTUlHUkFUSU9OYCBpbiBteSBtaW5kLiBXaGVyZSB3b3VsZCB0aGF0IGNvbmZpZ3VyYXRpb24gYmUgZGVmaW5lZD8gQWgsIHllcywgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknZCBnbyBzdHJhaWdodCB0byBgbW0vS2NvbmZpZ2AuIEl0J3MgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciBhbnl0aGluZyBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIHdoYXQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiwgYW55IGRlcGVuZGVuY2llcywgbWF5YmUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBpdHMgcHVycG9zZSwgYW5kIHBvdGVudGlhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBtZW1vcnkgYXJjaGl0ZWN0dXJlLCBzbyBJIGNhbiBhY2N1cmF0ZWx5IGludGVycHJldCBpdHMgcm9sZSBpbiB3aGF0ZXZlciBzeXN0ZW0gb3Igc2NlbmFyaW8gd2UncmUgZGVhbGluZyB3aXRoLiBMZXQncyBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoxMC41MzAxMTQ3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNDc4MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgxLVxcbm1tL0tjb25maWc6NjgyOmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjEwLjY2MTYwNzYxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjQyNjI1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIGBNSUdSQVRJT05gIEZsYWcncyBPcmlnaW5zKipcblxuUmlnaHQsIHNvIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiBmbGFnLCBhbmQgaXRzIHN0YXRlIGlzIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGBOVU1BYCwgYENPTVBBQ1RJT05gLCBvciBgTUVNT1JZX0hPVFBMVUdgIG9wZXJhdGlvbnMuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0ICp3aGljaCogb2YgdGhvc2UgY29tcG9uZW50cyBpcyB0aGUgb25lIGN1cnJlbnRseSBzZXR0aW5nIGl0LCBvciB3aGF0IHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgYXJlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgYE1JR1JBVElPTmAgZmxhZyB0byB1bmRlcnN0YW5kIGl0cyBhY3R1YWwgdHJpZ2dlciwgYXMgSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkIGJ1dCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmFjdHVhbGx5KiBkcml2aW5nIHRoZSBjdXJyZW50IHN0YXRlLiBOZWVkIHRvIGNoZWNrIHdoYXQgbG9naWMgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MTMuNjI1ODczMjc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA0MzQ0NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgwPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbm1tL0tjb25maWc6NTgyOlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTU4My1cXG4tLVxcbm1tL0tjb25maWc9NjQwPWNvbmZpZyBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY0Mi1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NDQtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbm1tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NzQtXFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWc6Njc1OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3Ni1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwNTM9Y29uZmlnIENNQVxcbi0tXFxubW0vS2NvbmZpZy0xMDU1LVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzoxMDU2OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTEwNTctXFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MTYuMDMwMjI1OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NDU3NTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZXN0aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgQ09NUEFDVElPTiBhbmQgTUlHUkFUSU9OKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgYENPTVBBQ1RJT05gIGlzIGEgZ29vZCB3YXkgdG8gdHJpZ2dlciwgb3IgYXNzaXN0IHdpdGgsIGBNSUdSQVRJT05gLiBUaGF0IG1ha2VzIGludHVpdGl2ZSBzZW5zZSwgdGhleSdyZSBvZnRlbiBsaW5rZWQuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJJ20gcHJldHR5IHN1cmUgYENPTVBBQ1RJT05gIGFscmVhZHkgaW1wbGllcyBgTUlHUkFUSU9OYC4gWWVwLCBsb29raW5nIGF0IHRoZSBjb25maWcsIGBNSUdSQVRJT05gIGRlZmF1bHRzIHRvICd5JyB3aGVuIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkLiBPa2F5LCBnb29kIHRvIGtub3cgSSdtIG9uIHRoZSByaWdodCB0cmFjayBjb25jZXB0dWFsbHksIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBtZWNoYW5pY3MuIExldCdzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBtaWdyYXRlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoxOS4wODQ4MDQxNTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTQ1ODk2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjE5LjUwMDI3MjI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk1Nzc3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV9wYWdlc2AgRXhwb3J0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyBhIHJlZmVyZW5jZSB0byBgbWlncmF0ZV9wYWdlc2AgYmVpbmcgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gb3IgdmFyaWFibGUuIFRoYXQgc2VlbXPigKYgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiB0aGlzIGlzLCBpbiBmYWN0LCBleHBvc2VkIGZvciBleHRlcm5hbCB1c2FnZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgY291bGQgb3BlbiB0aGUgZG9vciB0byBhIGxvdCBvZiB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBlbmNhcHN1bGF0ZWQgd2l0aGluIGBtaWdyYXRlX3BhZ2VzYC4gSSdsbCB3YW50IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZSBhbmQgaW50ZW5kZWQgdXNlLiBUaGUgZG9jdW1lbnRhdGlvbiBzaG91bGQgY2xhcmlmeSB0aGF0LCBidXQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpdHNlbGYgdG8gYmUgc3VyZS4gSWYgaXQgKmlzKiBleHBvcnRlZCwgaXQncyB3b3J0aCBkaWdnaW5nIGEgYml0IGRlZXBlciB0byBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoyMi42ODk4NTM3ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDAwMzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9MTU5ND1zdGF0aWMgaW5saW5lIGludCB0cnlfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE2MjItXFxubW0vbWlncmF0ZS5jOjE2MjM6c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xcbm1tL21pZ3JhdGUuYy0xNjI0LVxcdGludCBucl9zdWNjZWVkZWQ7XFx0LyogTm9ybWFsIGFuZCBsYXJnZSBmb2xpb3MgbWlncmF0ZWQgc3VjY2Vzc2Z1bGx5LCBpblxcbi0tXFxubW0vbWlncmF0ZS5jPTE2NDE9c3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTY0My1cXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxubW0vbWlncmF0ZS5jOjE2NDQ6XFx0XFx0XFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcXG5tbS9taWdyYXRlLmMtMTY0NS1cXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNzMwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX21vdmUoc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNzM0LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsXFxubW0vbWlncmF0ZS5jOjE3MzU6XFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxcbm1tL21pZ3JhdGUuYy0xNzM2LVxcdFxcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNzgyPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODA1LS8qXFxubW0vbWlncmF0ZS5jOjE4MDY6ICogbWlncmF0ZV9wYWdlc19iYXRjaCgpIGZpcnN0IHVubWFwcyBmb2xpb3MgaW4gdGhlIGZyb20gbGlzdCBhcyBtYW55IGFzXFxubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxcbi0tXFxubW0vbWlncmF0ZS5jLTE4MTMtICovXFxubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxubW0vbWlncmF0ZS5jLTE4MTUtXFx0XFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTgxNy1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXFxubW0vbWlncmF0ZS5jOjE4MTg6XFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcXG5tbS9taWdyYXRlLmMtMTgxOS17XFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1MS1cXHRcXHRcXHQgKiBidXQgaW5jcmVtZW50IG5yX2ZhaWxlZCBiZWNhdXNlLCB3aXRob3V0IGRvaW5nIHNvLFxcbm1tL21pZ3JhdGUuYzoxODUyOlxcdFxcdFxcdCAqIG1pZ3JhdGVfcGFnZXMoKSBtYXkgcmVwb3J0IHN1Y2Nlc3Mgd2l0aCAoc3BsaXQgYnV0XFxubW0vbWlncmF0ZS5jLTE4NTMtXFx0XFx0XFx0ICogdW5taWdyYXRlZCkgcGFnZXMgc3RpbGwgb24gaXRzIGZyb21saXN0OyB3aGVyZWFzIGl0XFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1Ni1cXHRcXHRcXHQgKiBvdGhlcndpc2Ugc3RhdHMgaW5jb25zaXN0ZW5jeSB3aWxsIGhhcHBlbiB3aGVuXFxubW0vbWlncmF0ZS5jOjE4NTc6XFx0XFx0XFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxcbm1tL21pZ3JhdGUuYy0xODU4LVxcdFxcdFxcdCAqIHdpdGggTUlHUkFURV9TWU5DIGFuZCBNSUdSQVRFX0FTWU5DLlxcbi0tXFxubW0vbWlncmF0ZS5jLTIwMjUtXFxubW0vbWlncmF0ZS5jOjIwMjY6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjAyNy1cXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwMjktXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbm1tL21pZ3JhdGUuYzoyMDMwOlxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcXG5tbS9taWdyYXRlLmMtMjAzMS17XFxuLS1cXG5tbS9taWdyYXRlLmMtMjAzMy1cXHRMSVNUX0hFQUQoZm9saW9zKTtcXG5tbS9taWdyYXRlLmM6MjAzNDpcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyBhc3RhdHM7XFxubW0vbWlncmF0ZS5jLTIwMzUtXFxuLS1cXG5tbS9taWdyYXRlLmMtMjAzNy1cXHQvKiBUcnkgdG8gbWlncmF0ZSBpbiBiYXRjaCB3aXRoIE1JR1JBVEVfQVNZTkMgbW9kZSBmaXJzdGx5ICovXFxubW0vbWlncmF0ZS5jOjIwMzg6XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXFxubW0vbWlncmF0ZS5jLTIwMzktXFx0XFx0XFx0XFx0IHJlYXNvbiwgXFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcXHUwMDI2YXN0YXRzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwNjQtXFx0XFx0bGlzdF9tb3ZlKGZyb20tXFx1MDAzZW5leHQsIFxcdTAwMjZmb2xpb3MpO1xcbm1tL21pZ3JhdGUuYzoyMDY1OlxcdFxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMDY2LVxcdFxcdFxcdFxcdFxcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjA3Ny0vKlxcbm1tL21pZ3JhdGUuYzoyMDc4OiAqIG1pZ3JhdGVfcGFnZXMgLSBtaWdyYXRlIHRoZSBmb2xpb3Mgc3BlY2lmaWVkIGluIGEgbGlzdCwgdG8gdGhlIGZyZWUgZm9saW9zXFxubW0vbWlncmF0ZS5jLTIwNzktICpcXHRcXHQgICBzdXBwbGllZCBhcyB0aGUgdGFyZ2V0IGZvciB0aGUgcGFnZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTAyLSAqL1xcbm1tL21pZ3JhdGUuYzoyMTAzOmludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxMDQtXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTEyLVxcdExJU1RfSEVBRChzcGxpdF9mb2xpb3MpO1xcbm1tL21pZ3JhdGUuYzoyMTEzOlxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHN0YXRzO1xcbm1tL21pZ3JhdGUuYy0yMTE0LVxcbm1tL21pZ3JhdGUuYzoyMTE1OlxcdHRyYWNlX21tX21pZ3JhdGVfcGFnZXNfc3RhcnQobW9kZSwgcmVhc29uKTtcXG5tbS9taWdyYXRlLmMtMjExNi1cXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTQxLVxcdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXFxubW0vbWlncmF0ZS5jOjIxNDI6XFx0XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNDMtXFx0XFx0XFx0XFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcXHUwMDI2cmV0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTQ2LVxcdGVsc2VcXG5tbS9taWdyYXRlLmM6MjE0NzpcXHRcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfc3luYyhcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMTQ4LVxcdFxcdFxcdFxcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjE2MS1cXHRcXHQgKi9cXG5tbS9taWdyYXRlLmM6MjE2MjpcXHRcXHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNjMtXFx0XFx0XFx0XFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIxODgtXFx0Y291bnRfdm1fZXZlbnRzKFRIUF9NSUdSQVRJT05fU1BMSVQsIHN0YXRzLm5yX3RocF9zcGxpdCk7XFxubW0vbWlncmF0ZS5jOjIxODk6XFx0dHJhY2VfbW1fbWlncmF0ZV9wYWdlcyhzdGF0cy5ucl9zdWNjZWVkZWQsIHN0YXRzLm5yX2ZhaWxlZF9wYWdlcyxcXG5tbS9taWdyYXRlLmMtMjE5MC1cXHRcXHRcXHQgICAgICAgc3RhdHMubnJfdGhwX3N1Y2NlZWRlZCwgc3RhdHMubnJfdGhwX2ZhaWxlZCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMjUxPXN0YXRpYyBpbnQgZG9fbW92ZV9wYWdlc190b19ub2RlKHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0LCBpbnQgbm9kZSlcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMjU5LVxcbm1tL21pZ3JhdGUuYzoyMjYwOlxcdGVyciA9IG1pZ3JhdGVfcGFnZXMocGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXFxubW0vbWlncmF0ZS5jLTIyNjEtXFx0XFx0KHVuc2lnbmVkIGxvbmcpXFx1MDAyNm10YywgTUlHUkFURV9TWU5DLCBNUl9TWVNDQUxMLCBOVUxMKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjUwPXN0YXRpYyBib29sIG1pZ3JhdGVfYmFsYW5jZWRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9taWdyYXRlLmM6MjY1MTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX21pZ3JhdGVfcGFnZXMpXFxubW0vbWlncmF0ZS5jLTI2NTIte1xcbi0tXFxubW0vbWlncmF0ZS5jLTI2NjMtXFx0XFx0XFx0XFx0ICAgICAgIGhpZ2hfd21hcmtfcGFnZXMoem9uZSkgK1xcbm1tL21pZ3JhdGUuYzoyNjY0OlxcdFxcdFxcdFxcdCAgICAgICBucl9taWdyYXRlX3BhZ2VzLFxcbm1tL21pZ3JhdGUuYy0yNjY1LVxcdFxcdFxcdFxcdCAgICAgICBaT05FX01PVkFCTEUsIEFMTE9DX0NNQSkpXFxuLS1cXG5tbS9taWdyYXRlLmM9Mjc1OD1pbnQgbWlncmF0ZV9taXNwbGFjZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5vZGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjc2Ny1cXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNm1pZ3JhdGVwYWdlcyk7XFxubW0vbWlncmF0ZS5jOjI3Njg6XFx0bnJfcmVtYWluaW5nID0gbWlncmF0ZV9wYWdlcyhcXHUwMDI2bWlncmF0ZXBhZ2VzLCBhbGxvY19taXNwbGFjZWRfZHN0X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yNzY5LVxcdFxcdFxcdFxcdCAgICAgTlVMTCwgbm9kZSwgTUlHUkFURV9BU1lOQyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MjIuNzkzODY1OTc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzQ3NjcyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWlncmF0ZV9wYWdlc2AncyBBY2Nlc3NpYmlsaXR5KipcblxuQWxyaWdodCwgc28gYG1pZ3JhdGVfcGFnZXNgLi4uIGl0J3MgZXhwb3J0ZWQsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpdCdzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzICppbnRlbmRlZCogdG8gYmUgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgc2NvcGUsIHJpZ2h0PyBCdXQgaW50ZW50aW9uIGFuZCByZWFsaXR5IGNhbiBiZSB0d28gZGlmZmVyZW50IHRoaW5ncy4gQmVzdCB0byBiZSBzdXJlLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYXMgdGhlIGNvZGUgc3VnZ2VzdHMsIGp1c3QgdG8gY29uZmlybS4gR290dGEgY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjI1LjY2ODYzOTY2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzc1OTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiptaWdyYXRlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MjUuNzkwMDIyNTUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTIyNDIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtaWdyYXRlX3BhZ2VzYCBGdW5jdGlvbioqXG5cbkhtbSwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBJIHdhcyBleHBlY3RpbmcgYG1pZ3JhdGVfcGFnZXNgIHRvIGJlIHJlYWRpbHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gbXkgbW9kdWxlLCBidXQgaXQgc2VlbXMgbGlrZSB0aGUgY29tcGlsZXIgaXNuJ3QgcmVjb2duaXppbmcgaXQuIFRoYXQncyBhIHJlZCBmbGFnLiBUaGUgbW9zdCBsaWtlbHkgY3VscHJpdCBpcyB0aGF0IGl0J3Mgbm90IGJlaW5nIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYG1pZ3JhdGVfcGFnZXNgIGlzIGFjdHVhbGx5IGJlaW5nIG1hZGUgYXZhaWxhYmxlIGZvciBtb2R1bGVzIHRvIHVzZSwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBpcyBgbW0vbWlncmF0ZS5jYC4gSSdsbCBpbW1lZGlhdGVseSBjaGVjayBmb3IgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybydzIGFwcGxpY2F0aW9uIHRvIHRoYXQgZnVuY3Rpb24gZGVjbGFyYXRpb24uIFRoaXMgd2lsbCBxdWlja2x5IHRlbGwgbWUgaWYgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGludGVuZGVkIGZvciBpdCB0byBiZSBjYWxsYWJsZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGtlcm5lbCBjb2RlLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknbGwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoyOC44NDIyNjc2MTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTQzNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz01OD1pbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTc5LX1cXG5tbS9taWdyYXRlLmM6ODA6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21vdmFibGVfb3BzKTtcXG5tbS9taWdyYXRlLmMtODEtXFxuLS1cXG5tbS9taWdyYXRlLmM9NzI2PWludCBmb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNzM1LX1cXG5tbS9taWdyYXRlLmM6NzM2OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9tYXBwaW5nKTtcXG5tbS9taWdyYXRlLmMtNzM3LVxcbi0tXFxubW0vbWlncmF0ZS5jPTc3OD12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjYtfVxcbm1tL21pZ3JhdGUuYzo4Njc6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY4LVxcbi0tXFxubW0vbWlncmF0ZS5jPTkxMD1pbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtOTE1LX1cXG5tbS9taWdyYXRlLmM6OTE2OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9mb2xpbyk7XFxubW0vbWlncmF0ZS5jLTkxNy1cXG4tLVxcbm1tL21pZ3JhdGUuYz0xMDM4PWludCBidWZmZXJfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMDQyLX1cXG5tbS9taWdyYXRlLmM6MTA0MzpFWFBPUlRfU1lNQk9MKGJ1ZmZlcl9taWdyYXRlX2ZvbGlvKTtcXG5tbS9taWdyYXRlLmMtMTA0NC1cXG4tLVxcbm1tL21pZ3JhdGUuYz0xMDU5PWludCBidWZmZXJfbWlncmF0ZV9mb2xpb19ub3JlZnMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtMTA2My19XFxubW0vbWlncmF0ZS5jOjEwNjQ6RVhQT1JUX1NZTUJPTF9HUEwoYnVmZmVyX21pZ3JhdGVfZm9saW9fbm9yZWZzKTtcXG5tbS9taWdyYXRlLmMtMTA2NS0jZW5kaWYgLyogQ09ORklHX0JVRkZFUl9IRUFEICovXFxuLS1cXG5tbS9taWdyYXRlLmM9MTA2Nz1pbnQgZmlsZW1hcF9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTEwNzEtfVxcbm1tL21pZ3JhdGUuYzoxMDcyOkVYUE9SVF9TWU1CT0xfR1BMKGZpbGVtYXBfbWlncmF0ZV9mb2xpbyk7XFxubW0vbWlncmF0ZS5jLTEwNzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjI4Ljk0MDIyMDg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzA4NTE2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbWlncmF0ZV9wYWdlc2AgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhhdCBgbWlncmF0ZV9wYWdlc2AgaXNuJ3QgZGlyZWN0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBjbGVhcmx5IGEgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGRlZXBseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsLiBJdCdzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLlxuXG5UaGUgY29yZSBjaGFuZ2UgaGVyZSBpcyB0aGUgc3Vic3RpdHV0aW9uIG9mIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYC4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBzaGlmdDsgaXQncyBtZXNzaW5nIHdpdGggUkNVIHF1aWVzY2VudCBzdGF0ZXMsIHNvIHRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5UaGUgbmV4dCB0aGluZyBJJ20gYXNraW5nIGlzOiBkbyB3ZSBuZWVkIHRvIGZ1enogdGhpcz8gWWVzLCBwcm9iYWJseS5cblxuTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbWlncmF0ZV9wYWdlc2AuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MgdGhhdCBpbXBhY3QgaXQuIEkgc2VlIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIChvciBgQ09ORklHX0NPTVBBQ1RJT05gLCB3aGljaCBpbmRpcmVjdGx5IGVuYWJsZXMgaXQpIGlzIHRoZSBrZXkuIEFuZCwgc2luY2UgYENPTkZJR19NSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgSSBjYW4gYWRkIGl0IHRvIGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGl0IGluIHRoZSBmdXp6aW5nLlxuXG5Ob3csIGhvbGQgb24uIElzIGBtaWdyYXRlX3BhZ2VzYCB0aGUgKmJlc3QqIGZvY3VzIHN5bWJvbD8gSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgZnVydGhlci4gSSBzZWUgdGhhdCBgbWlncmF0ZV9wYWdlc2Agc2VydmVzIGFzIGFuIGVudHJ5IHBvaW50IGZvciBgbWlncmF0ZV9wYWdlc19iYXRjaGAuIExldCdzIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjMzLjY3MTA3NjkxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDI0MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfcGFnZXNfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0xNzgyPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODA1LS8qXFxubW0vbWlncmF0ZS5jOjE4MDY6ICogbWlncmF0ZV9wYWdlc19iYXRjaCgpIGZpcnN0IHVubWFwcyBmb2xpb3MgaW4gdGhlIGZyb20gbGlzdCBhcyBtYW55IGFzXFxubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxcbi0tXFxubW0vbWlncmF0ZS5jLTE4MTMtICovXFxubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxubW0vbWlncmF0ZS5jLTE4MTUtXFx0XFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1Ni1cXHRcXHRcXHQgKiBvdGhlcndpc2Ugc3RhdHMgaW5jb25zaXN0ZW5jeSB3aWxsIGhhcHBlbiB3aGVuXFxubW0vbWlncmF0ZS5jOjE4NTc6XFx0XFx0XFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxcbm1tL21pZ3JhdGUuYy0xODU4LVxcdFxcdFxcdCAqIHdpdGggTUlHUkFURV9TWU5DIGFuZCBNSUdSQVRFX0FTWU5DLlxcbi0tXFxubW0vbWlncmF0ZS5jPTIwMjY9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMDM3LVxcdC8qIFRyeSB0byBtaWdyYXRlIGluIGJhdGNoIHdpdGggTUlHUkFURV9BU1lOQyBtb2RlIGZpcnN0bHkgKi9cXG5tbS9taWdyYXRlLmM6MjAzODpcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQyxcXG5tbS9taWdyYXRlLmMtMjAzOS1cXHRcXHRcXHRcXHQgcmVhc29uLCBcXHUwMDI2Zm9saW9zLCBzcGxpdF9mb2xpb3MsIFxcdTAwMjZhc3RhdHMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjA2NC1cXHRcXHRsaXN0X21vdmUoZnJvbS1cXHUwMDNlbmV4dCwgXFx1MDAyNmZvbGlvcyk7XFxubW0vbWlncmF0ZS5jOjIwNjU6XFx0XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIwNjYtXFx0XFx0XFx0XFx0XFx0IHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgcmV0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTAzPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMjE0MS1cXHRpZiAobW9kZSA9PSBNSUdSQVRFX0FTWU5DKVxcbm1tL21pZ3JhdGUuYzoyMTQyOlxcdFxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMTQzLVxcdFxcdFxcdFxcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjE2MS1cXHRcXHQgKi9cXG5tbS9taWdyYXRlLmM6MjE2MjpcXHRcXHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNjMtXFx0XFx0XFx0XFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODozMy44MDU1MDgyMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3OTMzMDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBtaWdyYXRlX3BhZ2VzYCBGdW5jdGlvbiBDYWxsIEhpZXJhcmNoeSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHByZXR0eSBjbGVhciBwYXR0ZXJuIGluIGhvdyB0aGVzZSBwYWdlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0IGxvb2tzIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0J3MgY2FsbGVkIGJ5IGJvdGggYG1pZ3JhdGVfcGFnZXNfc3luY2AgYW5kIGBtaWdyYXRlX3BhZ2VzYC4gVGhhdCBtZWFucyBpdCdzIHRoZSBjb3JlIG9mIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzIGl0c2VsZi4gTm93LCBgbWlncmF0ZV9wYWdlc19zeW5jYCBpcyBhbHNvIGNhbGxlZCBieSBgbWlncmF0ZV9wYWdlc2AuIFRoaXMgZ2l2ZXMgbWUgdGhlIGZlZWxpbmcgdGhhdCBgbWlncmF0ZV9wYWdlc2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgbWlncmF0aW9uIG9wZXJhdGlvbi4gU2VlbXMgbGlrZSBhIHRvcC1sZXZlbCBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaGUgbmV4dCBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgaG93IGlzIHRoZSBzeXN0ZW0gY2FsbGluZyB0aGlzLiBJIHdhbnQgdG8gc2VlIGlmIGBtaWdyYXRlX3BhZ2VzYCBpcyBpbnZva2VkIGJ5IGFueSBzeXN0ZW0gY2FsbHMgb3Igbm90LiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIGZvciB0aGVzZSBtaWdyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MzcuMjg0ODQ1MTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNjUzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc0Ni1cXHRcXHRcXHQgKlxcbm1tL21lbXBvbGljeS5jOjc0NzpcXHRcXHRcXHQgKiBtaWdyYXRlX3BhZ2VzKFxcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xcbm1tL21lbXBvbGljeS5jLTc0OC1cXHRcXHRcXHQgKiBjaGVjayBcXFwibGFyZ2VcXFwiIG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MTI4NT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMyMS1cXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSkge1xcbm1tL21lbXBvbGljeS5jOjEzMjI6XFx0XFx0ZXJyID0gbWlncmF0ZV9wYWdlcyhcXHUwMDI2cGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMTMyMy1cXHRcXHRcXHQodW5zaWduZWQgbG9uZylcXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX1NZU0NBTEwsIE5VTEwpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoxMzM5OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTEzNDAtXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTM4Ny1cXHRcXHRcXHQvKlxcbm1tL21lbXBvbGljeS5jOjEzODg6XFx0XFx0XFx0ICogZG9fbWlncmF0ZV9wYWdlcygpIHRyaWVzIHRvIG1haW50YWluIHRoZSByZWxhdGl2ZVxcbm1tL21lbXBvbGljeS5jLTEzODktXFx0XFx0XFx0ICogbm9kZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhZ2VzIGVzdGFibGlzaGVkIGJldHdlZW5cXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0NzA9c3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ3NS1cXG5tbS9tZW1wb2xpY3kuYzoxNDc2OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTE0NzctXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ4OT1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE2MTYtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSkge1xcbm1tL21lbXBvbGljeS5jOjE2MTc6XFx0XFx0bnJfZmFpbGVkIHw9IG1pZ3JhdGVfcGFnZXMoXFx1MDAyNnBhZ2VsaXN0LFxcbm1tL21lbXBvbGljeS5jLTE2MTgtXFx0XFx0XFx0XFx0YWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sLCBOVUxMLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTg1Nz1TWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgaW50LCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4NjItXFxubW0vbWVtcG9saWN5LmM6MTg2MzpzdGF0aWMgaW50IGtlcm5lbF9taWdyYXRlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBtYXhub2RlLFxcbm1tL21lbXBvbGljeS5jLTE4NjQtXFx0XFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm9sZF9ub2RlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE5MzQtXFxubW0vbWVtcG9saWN5LmM6MTkzNTpcXHRlcnIgPSBkb19taWdyYXRlX3BhZ2VzKG1tLCBvbGQsIG5ldyxcXG5tbS9tZW1wb2xpY3kuYy0xOTM2LVxcdFxcdGNhcGFibGUoQ0FQX1NZU19OSUNFKSA/IE1QT0xfTUZfTU9WRV9BTEwgOiBNUE9MX01GX01PVkUpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTk0OC1cXG5tbS9tZW1wb2xpY3kuYzoxOTQ5OlNZU0NBTExfREVGSU5FNChtaWdyYXRlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLFxcbm1tL21lbXBvbGljeS5jLTE5NTAtXFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiwgb2xkX25vZGVzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTk1Mi17XFxubW0vbWVtcG9saWN5LmM6MTk1MzpcXHRyZXR1cm4ga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkLCBtYXhub2RlLCBvbGRfbm9kZXMsIG5ld19ub2Rlcyk7XFxubW0vbWVtcG9saWN5LmMtMTk1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjM3LjM5NzExNzE3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQyOTEyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbWlncmF0ZV9wYWdlc2AgU3lzdGVtIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgdGhlIGBtaWdyYXRlX3BhZ2VzYCBzeXN0ZW0gY2FsbC4gVGhlIGZhY3QgdGhhdCBgU1lTQ0FMTF9ERUZJTkU0KG1pZ3JhdGVfcGFnZXMsIC4uLilgIGV4aXN0cyBjb25maXJtcyBpdCdzIGEgcmVhbCBlbnRyeSBwb2ludCwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBjYW4gdGFyZ2V0IGFuZCBmdXp6LiBUaGlzIGlzIHByb21pc2luZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLCBzbyBsZXQncyBhZGQgYG1pZ3JhdGVfcGFnZXNgIGl0c2VsZiwgbmF0dXJhbGx5LiBBbHNvLCBJIG5lZWQgdG8gaW5jbHVkZSBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBrZXJuZWxfbWlncmF0ZV9wYWdlc2AsIHdoaWNoIEkgZXhwZWN0IHdpbGwgYmUgY3J1Y2lhbCBpbiB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24gcGF0aC4gTG9va3MgbGlrZSBgbWlncmF0ZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGUuY2AgaXMgdGhlIGNvcmUsIHNvIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfTUlHUkFUSU9OYCBhcmUgZW5hYmxlZC4gVGhlc2UgY29uZmlndXJhdGlvbnMgd2lsbCBsaWtlbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBhbmQgYXZhaWxhYmlsaXR5IG9mIGBtaWdyYXRlX3BhZ2VzYCBzdWJzdGFudGlhbGx5LiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBzZXQgdXAgdG8gZG8gcGFnZSBtaWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQxLjc0MDAzMzA2MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMjQwMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgxLVxcbm1tL0tjb25maWc6NjgyOmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQxLjg5MTI4MDgyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU3MDU1MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNaWdyYXRpb24gU3RhdHVzIHdpdGggTlVNQSoqXG5cblJpZ2h0LCBzbyB3ZSBoYXZlIHRoaXMgYm9vbGVhbiB2YXJpYWJsZSwgYE1JR1JBVElPTmAuIENsZWFybHksIGl0IGluZGljYXRlcyB3aGV0aGVyIHNvbWUgc29ydCBvZiBtaWdyYXRpb24gcHJvY2VzcyBpcyBlbmFibGVkIG9yIHJlcXVpcmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogKndoYXQgaXMgaW5mbHVlbmNpbmcgdGhpcyBzdGF0ZSo/IE1vcmUgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgYE5VTUFgIGZhY3RvcnMgaW50byB0aGlzLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBpcyBkcml2aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBgTUlHUkFUSU9OYCBmbGFnLiBUaGlzIGNvdWxkIGJlIGZvciBhIGZldyByZWFzb25zLiBQZXJoYXBzIE5VTUEgaXMgYmVpbmcgdXNlZCB0byAqZW5hYmxlKiBtaWdyYXRpb24sIG9yIHBvc3NpYmx5IGRpc2FibGUgaXQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBNYXliZSBOVU1BIG5vZGUgYXdhcmVuZXNzIGlzIGEgdHJpZ2dlciwgb3IgcmVsYXRlZCB0byB0aGUgbG9jYXRpb24gd2hlcmUgcmVzb3VyY2VzIGFyZSBwbGFjZWQuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gVGhlIGNvZGUgYW5kL29yIHRoZSBkZXNpZ24gZG9jdW1lbnRhdGlvbiBvdWdodCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODo0NS43NDgzNDA2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzQ2NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTU4MD1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctNTgxLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG5tbS9LY29uZmlnOjU4MjpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01ODMtXFxuLS1cXG5tbS9LY29uZmlnPTY0MD1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NDItXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NDM6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjQ0LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjc0LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY3NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NzYtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDUzPWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA1NS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA1NjpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDU3LVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQ1Ljg5MzA5MzExN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA3MzQzMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBNZW1vcnkgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzeXN0ZW0ncyBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGRlY2lzaW9uIHByb2Nlc3MgaXMgcHJldHR5IGNsZWFyLiBXaGVuIGl0IGNvbWVzIHRvIG1vdmluZyBwYWdlcyBhcm91bmQsIHRoZSBgQ09NUEFDVElPTmAgbWVjaGFuaXNtIGlzIHNldCB0byB0cmlnZ2VyIGEgYE1JR1JBVElPTmAgZXZlbnQuIFNpbWlsYXJseSwgYE5VTUFfTUlHUkFUSU9OYCBhbHNvIGNhbGxzIHVwb24gYE1JR1JBVElPTmAuIFRoaXMgbWFrZXMgc2Vuc2U7IGlmIHlvdSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgbWVtb3J5IGxheW91dCwgeW91J2xsIGluZXZpdGFibHkgbmVlZCB0byBtaWdyYXRlIHBhZ2VzLlxuXG5Ob3csIGBOVU1BX01JR1JBVElPTmAgaGFzIGEgaGFyZCBkZXBlbmRlbmN5OiBpdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIGJvdGggYE5VTUFgIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBhbmQgYE1NVWAgKE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQpIHRvIGJlIGVuYWJsZWQuIFRoYXQncyBmdW5kYW1lbnRhbDsgd2l0aG91dCB0aG9zZSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIGluIHBsYWNlLCBOVU1BLWF3YXJlIG1pZ3JhdGlvbiBpcyBzaW1wbHkgaW1wb3NzaWJsZS5cblxuR2l2ZW4gYWxsIHRoaXMsIGEgc2Vuc2libGUgZm9sbG93LXVwIHF1ZXN0aW9uIGFyaXNlczogSXMgdGhlIGBtaWdyYXRlX3BhZ2VzYCBzeXN0ZW0gY2FsbCBlbmFibGVkIHRocm91Z2ggdGhlIGBOVU1BYCBjb25maWd1cmF0aW9uPyBJZiBOVU1BIGlzIGFjdGl2ZSwgdGhlbiB0aGlzIHN5c2NhbGwgaXMgcHJvYmFibHkgYWxzbyBhdmFpbGFibGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlybSB0aGF0LCBiZWNhdXNlIGl0J3MgdGhlIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBhbnkga2luZCBvZiBwYWdlIG1pZ3JhdGlvbiB0aGF0IEknbSBpbnRlcmVzdGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQ5LjgwMDQzODg2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTEwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FNFxcXFwobWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0xODYzPXN0YXRpYyBpbnQga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG1heG5vZGUsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xOTQ4LVxcbm1tL21lbXBvbGljeS5jOjE5NDk6U1lTQ0FMTF9ERUZJTkU0KG1pZ3JhdGVfcGFnZXMsIHBpZF90LCBwaWQsIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXFxubW0vbWVtcG9saWN5LmMtMTk1MC1cXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBvbGRfbm9kZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQ5LjkwNzM1NjYxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTIwMjM5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIENvbnRleHQgb2YgYG1tL21lbXBvbGljeS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgbW0vbWVtcG9saWN5LmNgIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBhIGtleSBxdWVzdGlvbjogKklzIHRoaXMgZmlsZSwgdGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gZGVwZW5kIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24/KiBTcGVjaWZpY2FsbHksIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX05VTUFgIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSB2ZXJ5IG5hdHVyZSBvZiBtZW1vcnkgcG9saWNpZXMsIGFuZCBOVU1BIGFyY2hpdGVjdHVyZSB0aGF0IGRlZmluZXMgd2hlcmUgbWVtb3J5IHdpbGwgYmUgbG9jYXRlZCBmb3IgcHJvY2Vzc2VzLCBpdCBzZWVtcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBmaWxlIHdpbGwgYmUgZGVmaW5lZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBDT05GSUdfTlVNQWAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIElmIGl0J3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1bml0LCBJIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgYnVpbGQgZmxhZ3Mgc28gSSBkb24ndCB3YXN0ZSB0aW1lIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzbid0IGV2ZW4gaW4gbXkgdGFyZ2V0IGtlcm5lbCBidWlsZC4gVGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCB0aGUgYnVpbGQgc3lzdGVtIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODo1NC44Mjc2MDA4NzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDI5MjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3kub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVxcdCs9IHNwYXJzZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjU0Ljk4NzkwMTcxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDAxMzg5NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBUZXN0aW5nIGBtaWdyYXRlX3BhZ2VzYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYG1lbXBvbGljeS5vYCBpcyBkZWZpbml0ZWx5IGJ1aWx0IG9ubHkgaWYgYENPTkZJR19OVU1BYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGUgd2hvbGUgTlVNQSBhcmNoaXRlY3R1cmUgaXMgZnVuZGFtZW50YWwgdG8gaXRzIHB1cnBvc2UuICBUaGVyZWZvcmUsIEknZCBpbml0aWFsbHkgYXNzdW1lIHRoYXQgYENPTkZJR19OVU1BYCBpcyAqcmVxdWlyZWQqIHRvIGFjdHVhbGx5IGhpdCB0aGUgYG1pZ3JhdGVfcGFnZXNgIHN5c3RlbSBjYWxsLiAgXG5cbkJ1dCBoYW5nIG9u4oCmIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gIFRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgcGF0aCBpbiBgbW0vbWlncmF0ZS5jYCwgYG1pZ3JhdGVfcGFnZXNgIG1pZ2h0IGFsc28gYmUgcmVhY2hlZCB0aHJvdWdoIGBDTUFgIG9yIGBDT01QQUNUSU9OYC4gIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiAgSG93ZXZlciwgZm9yICpzcGVjaWZpY2FsbHkqIHRlc3RpbmcgdGhlIGBtaWdyYXRlX3BhZ2VzYCBzeXN0ZW0gY2FsbCwgSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfTlVNQWAgaXMgc3RpbGwgdGhlIGJlc3QgYmV0LiAgU28sIGxldCdzIGFkZCBgTlVNQWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSBhbmQgdGFyZ2V0IHRoZSBzeXNjYWxsIGV4cGxpY2l0bHkuXG5cbldhaXQsIEkgYWxzbyBuZWVkIGBNSUdSQVRJT05gIGRlZmluZWQgYXMgdGhpcyBpcyBpbnZvbHZlZCBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIEJ1dCBsb29raW5nIGludG8gaXQsIGBNSUdSQVRJT05gIGlzIHNlbGVjdGVkIHZpYSBgQ09NUEFDVElPTmAsIGFuZCB0aGF0J3MgKmFscmVhZHkqIHNldCB0byBgZGVmYXVsdCB5YCAuIE9rYXksIHRoYXQncyBnb29kLlxuXG5TbywgbGV0J3MgYWRkIGBOVU1BYCBhbmQgYE1JR1JBVElPTmAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBPaCB3YWl0LCBgTUlHUkFUSU9OYCBpcyBhIGJvb2xlYW4sIGl0J3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgKG5vIGBwcm9tcHRgKS4gU28sIGlmIGBDT01QQUNUSU9OYCBlbmFibGVzIGBNSUdSQVRJT05gLCBJIGNhbiBqdXN0IHNwZWNpZnkgYENPTVBBQ1RJT05gLiBTbyBsZXQncyBhZGQgYE5VTUFgIGFuZCBgQ09NUEFDVElPTmAuIExldCdzIGFsc28gY2hlY2sgYENPTVBBQ1RJT05gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OTowMC4zODkyOTM4MjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYzNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NjI4PWNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02MzktIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxcbm1tL0tjb25maWc6NjQwOmNvbmZpZyBDT01QQUNUSU9OXFxubW0vS2NvbmZpZy02NDEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OTowMC41NjM5MzU2MjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1MzA2MjUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdGhhdCBgQ09NUEFDVElPTmAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhlIHVzZXIgY2FuIHRvZ2dsZSBvbiBvciBvZmYg4oCTIHRoYXQncyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgaW5jbHVkZSByZWxhdGVkIGZlYXR1cmVzLCBzbyBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGluY29ycG9yYXRpbmcgYE5VTUFgIGFsb25nc2lkZSBgQ09NUEFDVElPTmAgYW5kIGBNSUdSQVRJT05gLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgYE1JR1JBVElPTmAgZG9lc24ndCBoYXZlIGEgZGlyZWN0IGAuY29uZmlnYCBwcm9tcHQsIG1lYW5pbmcgaXQncyBkZXBlbmRlbnQgb24gb3RoZXIgc2VsZWN0aW9ucy4gSSd2ZSBnb3QgdG8gZW5zdXJlIGl0J3Mgc2VsZWN0ZWQgaW4gdGhlIGNvcnJlY3Qgd2F5LiAgU28sIEknbGwgcmV2aXNlIHRoYXQgYW5kIGp1c3QgaW5jbHVkZSBgTlVNQWAgYW5kIGBDT01QQUNUSU9OYCBhdCB0aGlzIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBtZW1vcnkgbWlncmF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGNvZGUuICBNeSBmb2N1cyBzaGlmdHMgdG8gYG1pZ3JhdGVfcGFnZXNgLCBgbWlncmF0ZV9wYWdlc19iYXRjaGAsIGFuZCBgZG9fbWlncmF0ZV9wYWdlc2AuICBXYWl0IGEgbW9tZW50Li4uIGlzbid0IGBtaWdyYXRlX3BhZ2VzX2JhdGNoYCBzdGF0aWM/ICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIFllcywgc3RhdGljLlxuXG5UaGF0IG1lYW5zIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgIGFyZSBteSBwcmltYXJ5IHRhcmdldCBzeW1ib2xzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBgbWlncmF0ZV9wYWdlc19iYXRjaGAgaXMgaW5saW5lZCwgYnV0IEknbSBjb25maWRlbnQgbm93IHRoYXQgSSBoYXZlIHRoZSBpbXBvcnRhbnQgcGllY2VzIGluIG15IHNjb3BlLiBJJ2xsIGNoZWNrIGl0LCBiZWNhdXNlIEkgd2FudCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGNvcnJlY3Qgc3RhdHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OTowNS4zMTcwMDIxNzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM0NDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3BhZ2VzX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9MTc4Mj1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMTgwNS0vKlxcbm1tL21pZ3JhdGUuYzoxODA2OiAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSBmaXJzdCB1bm1hcHMgZm9saW9zIGluIHRoZSBmcm9tIGxpc3QgYXMgbWFueSBhc1xcbm1tL21pZ3JhdGUuYy0xODA3LSAqIHBvc3NpYmxlLCB0aGVuIG1vdmUgdGhlIHVubWFwcGVkIGZvbGlvcy5cXG4tLVxcbm1tL21pZ3JhdGUuYy0xODEzLSAqL1xcbm1tL21pZ3JhdGUuYzoxODE0OnN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbm1tL21pZ3JhdGUuYy0xODE1LVxcdFxcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE4NTYtXFx0XFx0XFx0ICogb3RoZXJ3aXNlIHN0YXRzIGluY29uc2lzdGVuY3kgd2lsbCBoYXBwZW4gd2hlblxcbm1tL21pZ3JhdGUuYzoxODU3OlxcdFxcdFxcdCAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2ggaXMgY2FsbGVkIHZpYSBtaWdyYXRlX3BhZ2VzKClcXG5tbS9taWdyYXRlLmMtMTg1OC1cXHRcXHRcXHQgKiB3aXRoIE1JR1JBVEVfU1lOQyBhbmQgTUlHUkFURV9BU1lOQy5cXG4tLVxcbm1tL21pZ3JhdGUuYz0yMDI2PXN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMjAzNy1cXHQvKiBUcnkgdG8gbWlncmF0ZSBpbiBiYXRjaCB3aXRoIE1JR1JBVEVfQVNZTkMgbW9kZSBmaXJzdGx5ICovXFxubW0vbWlncmF0ZS5jOjIwMzg6XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXFxubW0vbWlncmF0ZS5jLTIwMzktXFx0XFx0XFx0XFx0IHJlYXNvbiwgXFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcXHUwMDI2YXN0YXRzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwNjQtXFx0XFx0bGlzdF9tb3ZlKGZyb20tXFx1MDAzZW5leHQsIFxcdTAwMjZmb2xpb3MpO1xcbm1tL21pZ3JhdGUuYzoyMDY1OlxcdFxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMDY2LVxcdFxcdFxcdFxcdFxcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmM9MjEwMz1pbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIxNDEtXFx0aWYgKG1vZGUgPT0gTUlHUkFURV9BU1lOQylcXG5tbS9taWdyYXRlLmM6MjE0MjpcXHRcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjE0My1cXHRcXHRcXHRcXHRwcml2YXRlLCBtb2RlLCByZWFzb24sIFxcdTAwMjZyZXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIxNjEtXFx0XFx0ICovXFxubW0vbWlncmF0ZS5jOjIxNjI6XFx0XFx0bWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2c3BsaXRfZm9saW9zLCBnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMTYzLVxcdFxcdFxcdFxcdHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsIHJlYXNvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MDUuNDM0MzU4MDgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NjAyODUxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBtaWdyYXRlX3BhZ2VzX2JhdGNoYCBpc24ndCBkZWNsYXJlZCBgaW5saW5lYC4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgcHJvYmFibHkgaXNuJ3QgaW5saW5pbmcgaXQsIHRob3VnaCBpdCAqY291bGQqIGJlLiBCdXQgdGhlIG1vcmUgZmFtaWxpYXIgZnVuY3Rpb25zIGhlcmUsIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLCBhcmUgd2hhdCBJJ2xsIGZvY3VzIG9uLlxuXG5UaGUgZGlmZiBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggcmVwbGFjZXMgYGNvbmRfcmVzY2hlZCgpYCB3aXRoIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLiBBaGEhIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIG5ldyBmdW5jdGlvbiBhbHNvIHNpZ25hbHMgYW4gUkNVIHF1aWVzY2VudCBzdGF0ZSBhbG9uZyB3aXRoIHRoZSBub3JtYWwgcmVzY2hlZHVsaW5nLiBUaGF0J3MgYSBjcml0aWNhbCBhZGp1c3RtZW50LCBzcGVjaWZpY2FsbHkgZm9yIGF2b2lkaW5nIFJDVSBzdGFsbHMgZHVyaW5nIHBvdGVudGlhbGx5IGxlbmd0aHkgbGFyZ2UgcGFnZSBtaWdyYXRpb25zLiBJJ3ZlIHNlZW4gdGhhdCBiZWhhdmlvciBiZWZvcmUuIFRoaXMgY2hhbmdlIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIHRoZSBzeXN0ZW0gZnJvbSBsb2NraW5nIHVwIGR1cmluZyB0aG9zZSBvcGVyYXRpb25zLCB3aGljaCBpcyB3aHkgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgcHJpbWFyeSBpbnRlcmVzdCByaWdodCBub3cgbGllcyB3aXRoIGBOVU1BYCBhbmQgYENPTVBBQ1RJT05gIGNvbmZpZ3Mg4oCTIHRob3NlIGFyZSB0aGUgbW9zdCByZWxldmFudCBjb250ZXh0cyBoZXJlLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBgbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19taWdyYXRlX3BhZ2VzYCB0byBjb25maXJtIGhvdyB0aGlzIG5ldyByZXNjaGVkdWxpbmcgYmVoYXZpb3IgaW50ZXJhY3RzIHdpdGggdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoYXQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXNgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MTIuMzk0NjQ1MjgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzAwNTMzNTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OToxMi43NjQ3MDg3NDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MDkxODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgU291cmNlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhpcyBjb25jZXB0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGVzdGFibGlzaCBpdHMgb3JpZ2luLiAqV2hlcmUqIGV4YWN0bHkgaXMgdGhpcyBkZWZpbmVkPyBJIG5lZWQgdG8gZ28gYmFjayB0byB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCB0aGUgYmVkcm9jayBhc3N1bXB0aW9ucyB1cG9uIHdoaWNoIHRoaXMgcmVzdHMuIEp1bXBpbmcgaW4gd2l0aG91dCB0aGF0IGNsYXJpdHkgaXMganVzdCBhc2tpbmcgZm9yIGEgcG90ZW50aWFsIG1pc2ludGVycHJldGF0aW9uIG9yIHdhc3RlZCBlZmZvcnQuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyBkZWZpbml0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBJIGFtIGNsZWFyIG9uIHdoYXQgaXQgaXMgd2UgYXJlIGRpc2N1c3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MTYuNDQ1NjMwODlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI5MTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD0yMDU9c3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGFza3NfcmN1X2ZpbmlzaCh2b2lkKSB7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMDgtLyoqXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjIwOTogKiBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzIC0gUmVwb3J0IHBvdGVudGlhbCBxdWllc2NlbnQgc3RhdGVzIHRvIFJDVVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMTAtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMTQtICovXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjIxNTojZGVmaW5lIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBcXFxcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTIxNi1kbyB7IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MTYuNjI3OTM1Njc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODQ0NDU5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSQ1UgUXVpZXNjZW50IFN0YXRlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoZSBkZWZpbml0aW9uIOKAkyBpdCdzIHJpZ2h0IHRoZXJlIGluIGBpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmhgLiBUaGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhbHRlcmluZyBob3cgdGhlIFJDVSBxdWllc2NlbnQgc3RhdGUgaXMgcmVwb3J0ZWQgd2hpbGUgcGFnZXMgYXJlIGJlaW5nIG1pZ3JhdGVkLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBsZWdpdGltYXRlIGNoYW5nZTsgaXQncyBkZXNpZ25lZCB0byBpbXByb3ZlIHRoZSBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgdGhlIG5lY2Vzc2FyeSByZXN1bHRzIHByZXBwZWQuIEZvciB0aGlzIHBhdGNoLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgdHJ1ZWAuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgY2xlYXJseSBgbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC4gV2Ugc2hvdWxkIGVuYWJsZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBOVU1BIGFyY2hpdGVjdHVyZSBhbmQgbWVtb3J5IENPTVBBQ1RJT04sIGFzIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBNeSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogdGhlIHBhdGNoIHJlcGxhY2VzIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2goKWAuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgUkNVIHF1aWVzY2VudCBzdGF0ZSByZXBvcnRpbmcsIGVzcGVjaWFsbHkgZHVyaW5nIGxhcmdlLXBhZ2UgbWlncmF0aW9ucywgd2l0aCB0aGUgZXhwbGljaXQgZ29hbCBvZiBwcmV2ZW50aW5nIHBvdGVudGlhbCBSQ1Ugc3RhbGxzLiBDcnVjaWFsbHksIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYG1pZ3JhdGVfcGFnZXNgIHN5c3RlbSBjYWxsIGFuZCBvdGhlciBtaWdyYXRpb24gcGF0aHdheXMsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGFyZWEgdG8gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMzQsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU5OjIxLjYxMjM4MzgwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTA2NjczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiQ09NUEFDVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfcGFnZXNcIixcbiAgICBcImRvX21pZ3JhdGVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9wYWdlc1wiLFxuICAgIFwiZG9fbWlncmF0ZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNvbmRfcmVzY2hlZCgpIHdpdGggY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGluIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSwgd2hpY2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgaG93IFJDVSBxdWllc2NlbnQgc3RhdGVzIGFyZSByZXBvcnRlZCBkdXJpbmcgbGFyZ2UgcGFnZSBtaWdyYXRpb25zIHRvIHByZXZlbnQgUkNVIHN0YWxscy4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG1pZ3JhdGVfcGFnZXMgc3lzY2FsbCBhbmQgb3RoZXIgbWlncmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdtl54[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 03:34:50 +0000 UTC FinishedAt: 2026-07-28 03:59:23 +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": "7b25c83e4711038989b5b08a8977fb68468c854e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "COMPACTION" ], "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": "7b25c83e4711038989b5b08a8977fb68468c854e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "COMPACTION" ], "series_id": "09101dc4-3910-4a4e-b63e-e5918f862a7a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_pages", "do_migrate_pages" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG9fbWlncmF0ZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmZGYwZTFiYTc2YWI4MTRiYjRhM2Q4MmQxNzAxYzgxZWY1YWVhMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMzo1Nzo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGFiMTVhNGRkZGQwNDcxLi5iOTM3Y2JkNzY0ODA4NyAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTg0Myw3ICYjNDM7MTg0Myw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRcdGlzX3RocCA9IGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKTtcbiBcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhlIHJhcmUgZm9saW8gb24gdGhlIGRlZmVycmVkIHNwbGl0IGxpc3Qgc2hvdWxkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG9fbWlncmF0ZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmZGYwZTFiYTc2YWI4MTRiYjRhM2Q4MmQxNzAxYzgxZWY1YWVhMzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAwMzo1Nzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhYjE1YTRkZGRkMDQ3MS4uYjkzN2NiZDc2NDgwODcgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTE4NDMsNyAmIzQzOzE4NDMsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwKIAkJCWlzX3RocCA9IGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKTsKIAkJCW5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0JCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCQljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiAKIAkJCS8qCiAJCQkgKiBUaGUgcmFyZSBmb2xpbyBvbiB0aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCBzaG91bGQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGUuY2AuIEl0JiMzOTtzIGEgc2luZ2xlLWxpbmUgZGlmZiwgcmVhbGx5IHF1aXRlIG1pbm9yLiBXZSYjMzk7cmUgcmVwbGFjaW5nIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGEgc2NoZWR1bGluZyB0d2Vhay4gSXQmIzM5O3MgYSBzbWFsbCBjaGFuZ2UsIGJ1dCBsZXQgbWUgdGhpbmsuLi4gYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLi4uIHRoYXQmIzM5O3MgYSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIFJpZ2h0LCBzbyBldmVuIGEgdGlueSBzY2hlZHVsaW5nIGNoYW5nZSBpbiBhIGZ1bmN0aW9uIGxpa2UgdGhhdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWlncmF0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSBwcnVkZW50IHN0ZXAuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGl0c2VsZiwgb3IgbWF5YmUgZXZlbiBpdHMgcmVsYXRlZCBmdW5jdGlvbiBgbWlncmF0ZV9wYWdlc2AuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byBgbW0vbWlncmF0ZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9wYWdlc19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTc4Mj1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jLTE4MDUtLypcbm1tL21pZ3JhdGUuYzoxODA2OiAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSBmaXJzdCB1bm1hcHMgZm9saW9zIGluIHRoZSBmcm9tIGxpc3QgYXMgbWFueSBhc1xubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxuLS1cbm1tL21pZ3JhdGUuYy0xODEzLSAqL1xubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG5tbS9taWdyYXRlLmMtMTgxNS1cdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE4NTYtXHRcdFx0ICogb3RoZXJ3aXNlIHN0YXRzIGluY29uc2lzdGVuY3kgd2lsbCBoYXBwZW4gd2hlblxubW0vbWlncmF0ZS5jOjE4NTc6XHRcdFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxubW0vbWlncmF0ZS5jLTE4NTgtXHRcdFx0ICogd2l0aCBNSUdSQVRFX1NZTkMgYW5kIE1JR1JBVEVfQVNZTkMuXG4tLVxubW0vbWlncmF0ZS5jPTIwMjY9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjAzNy1cdC8qIFRyeSB0byBtaWdyYXRlIGluIGJhdGNoIHdpdGggTUlHUkFURV9BU1lOQyBtb2RlIGZpcnN0bHkgKi9cbm1tL21pZ3JhdGUuYzoyMDM4Olx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXG5tbS9taWdyYXRlLmMtMjAzOS1cdFx0XHRcdCByZWFzb24sIFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcdTAwMjZhc3RhdHMsXG4tLVxubW0vbWlncmF0ZS5jLTIwNjQtXHRcdGxpc3RfbW92ZShmcm9tLVx1MDAzZW5leHQsIFx1MDAyNmZvbGlvcyk7XG5tbS9taWdyYXRlLmM6MjA2NTpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMDY2LVx0XHRcdFx0XHQgcHJpdmF0ZSwgbW9kZSwgcmVhc29uLCByZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYz0yMTAzPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTIxNDEtXHRpZiAobW9kZSA9PSBNSUdSQVRFX0FTWU5DKVxubW0vbWlncmF0ZS5jOjIxNDI6XHRcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE0My1cdFx0XHRcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXHUwMDI2cmV0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMjE2MS1cdFx0ICovXG5tbS9taWdyYXRlLmM6MjE2MjpcdFx0bWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE2My1cdFx0XHRcdHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsIHJlYXNvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBNaWdyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYWdlIG1pZ3JhdGlvbiBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIGBtaWdyYXRlX3BhZ2VzX2JhdGNoYCBpcyB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgYW5kIGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgb25lIHdlIGV4cG9ydCwgcmlnaHQ/IEdvdCBpdC4gTm93LCB0aGF0IGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGNhbGwuLi4gaG1tbSwgdGhhdCYjMzk7cyBqdXN0IGEgc2NoZWR1bGluZyBwb2ludCwgaXNuJiMzOTt0IGl0PyBJdCBkb2VzbiYjMzk7dCAqZnVuZGFtZW50YWxseSogYWx0ZXIgdGhlIGFsZ29yaXRobSwgYnV0IGl0IGRvZXMgaW5mbHVlbmNlIHRoZSBSQ1UgcXVpZXNjZW50IHN0YXRlcywgd2hpY2ggaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LiBJIHRoaW5rLgoKVGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcgdGhpcyBhcmVhLiBZZXMsIGFic29sdXRlbHkuIElmIHRoYXQgc2NoZWR1bGluZyBwb2ludCAqd2FzKiBtaXNzaW5nLCBpdCBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gUkNVIHN0YWxscy4gU28gZnV6emluZyBpcyBhIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyBhbmQgY29uZmlybSB0aGUgaW50ZW5kZWQgZnVuY3Rpb24uCgpMZXQgbWUgZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzLCBzcGVjaWZpY2FsbHkgYG1pZ3JhdGVfcGFnZXNgLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01JR1JBVElPTmAgaXMgcHJvYmFibHkgcmVxdWlyZWQsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBieSBsb29raW5nIGluIGBtbS9LY29uZmlnYCBvciBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT05Nz1vYmotJChDT05GSUdfTUVNVEVTVClcdFx0JiM0Mzs9IG1lbXRlc3Qub1xubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUub1xubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBtaWdyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGBDT05GSUdfTUlHUkFUSU9OYCBpbiBteSBtaW5kLiBXaGVyZSB3b3VsZCB0aGF0IGNvbmZpZ3VyYXRpb24gYmUgZGVmaW5lZD8gQWgsIHllcywgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2QgZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBJdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGFueXRoaW5nIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmluaXRpb24sIGFueSBkZXBlbmRlbmNpZXMsIG1heWJlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgaXRzIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgbWVtb3J5IGFyY2hpdGVjdHVyZSwgc28gSSBjYW4gYWNjdXJhdGVseSBpbnRlcnByZXQgaXRzIHJvbGUgaW4gd2hhdGV2ZXIgc3lzdGVtIG9yIHNjZW5hcmlvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIExldCYjMzk7cyBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NzE9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODEtXG5tbS9LY29uZmlnOjY4Mjpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWx2aW5nIGludG8gdGhlIGBNSUdSQVRJT05gIEZsYWcmIzM5O3MgT3JpZ2lucyoqCgpSaWdodCwgc28gYE1JR1JBVElPTmAgaXMgYSBib29sZWFuIGZsYWcsIGFuZCBpdHMgc3RhdGUgaXMgdXN1YWxseSB0cmlnZ2VyZWQgYnkgYE5VTUFgLCBgQ09NUEFDVElPTmAsIG9yIGBNRU1PUllfSE9UUExVR2Agb3BlcmF0aW9ucy4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBvZiB0aG9zZSBjb21wb25lbnRzIGlzIHRoZSBvbmUgY3VycmVudGx5IHNldHRpbmcgaXQsIG9yIHdoYXQgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBhcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBgTUlHUkFUSU9OYCBmbGFnIHRvIHVuZGVyc3RhbmQgaXRzIGFjdHVhbCB0cmlnZ2VyLCBhcyBJIGtub3cgdGhlc2UgYXJlIHJlbGF0ZWQgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmFjdHVhbGx5KiBkcml2aW5nIHRoZSBjdXJyZW50IHN0YXRlLiBOZWVkIHRvIGNoZWNrIHdoYXQgbG9naWMgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTgwPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU4MS1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG5tbS9LY29uZmlnOjU4MjpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNTgzLVxuLS1cbm1tL0tjb25maWc9NjQwPWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NDItXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjQzOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NDQtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjc0LVx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbm1tL0tjb25maWc6Njc1Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NzYtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDUzPWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNTUtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDU2Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDU3LVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2VzdGluZyB0aGUgSW1wbGljYXRpb25zIG9mIENPTVBBQ1RJT04gYW5kIE1JR1JBVElPTioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgYENPTVBBQ1RJT05gIGlzIGEgZ29vZCB3YXkgdG8gdHJpZ2dlciwgb3IgYXNzaXN0IHdpdGgsIGBNSUdSQVRJT05gLiBUaGF0IG1ha2VzIGludHVpdGl2ZSBzZW5zZSwgdGhleSYjMzk7cmUgb2Z0ZW4gbGlua2VkLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09NUEFDVElPTmAgYWxyZWFkeSBpbXBsaWVzIGBNSUdSQVRJT05gLiBZZXAsIGxvb2tpbmcgYXQgdGhlIGNvbmZpZywgYE1JR1JBVElPTmAgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTsgd2hlbiBgQ09NUEFDVElPTmAgaXMgZW5hYmxlZC4gT2theSwgZ29vZCB0byBrbm93IEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGNvbmNlcHR1YWxseSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIG1lY2hhbmljcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbWlncmF0ZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiptaWdyYXRlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV9wYWdlc2AgRXhwb3J0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCBzYXcgYSByZWZlcmVuY2UgdG8gYG1pZ3JhdGVfcGFnZXNgIGJlaW5nIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBUaGF0IHNlZW1z4oCmIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhpcyBpcywgaW4gZmFjdCwgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5IGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoaXMgY291bGQgb3BlbiB0aGUgZG9vciB0byBhIGxvdCBvZiB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBlbmNhcHN1bGF0ZWQgd2l0aGluIGBtaWdyYXRlX3BhZ2VzYC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgc2NvcGUgYW5kIGludGVuZGVkIHVzZS4gVGhlIGRvY3VtZW50YXRpb24gc2hvdWxkIGNsYXJpZnkgdGhhdCwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlIGl0c2VsZiB0byBiZSBzdXJlLiBJZiBpdCAqaXMqIGV4cG9ydGVkLCBpdCYjMzk7cyB3b3J0aCBkaWdnaW5nIGEgYml0IGRlZXBlciB0byBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTE1OTQ9c3RhdGljIGlubGluZSBpbnQgdHJ5X3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMTYyMi1cbm1tL21pZ3JhdGUuYzoxNjIzOnN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbm1tL21pZ3JhdGUuYy0xNjI0LVx0aW50IG5yX3N1Y2NlZWRlZDtcdC8qIE5vcm1hbCBhbmQgbGFyZ2UgZm9saW9zIG1pZ3JhdGVkIHN1Y2Nlc3NmdWxseSwgaW5cbi0tXG5tbS9taWdyYXRlLmM9MTY0MT1zdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTY0My1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG5tbS9taWdyYXRlLmM6MTY0NDpcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxubW0vbWlncmF0ZS5jLTE2NDUtXHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXG4tLVxubW0vbWlncmF0ZS5jPTE3MzA9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0xNzM0LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxubW0vbWlncmF0ZS5jOjE3MzU6XHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcbm1tL21pZ3JhdGUuYy0xNzM2LVx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG4tLVxubW0vbWlncmF0ZS5jPTE3ODI9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0xODA1LS8qXG5tbS9taWdyYXRlLmM6MTgwNjogKiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCkgZmlyc3QgdW5tYXBzIGZvbGlvcyBpbiB0aGUgZnJvbSBsaXN0IGFzIG1hbnkgYXNcbm1tL21pZ3JhdGUuYy0xODA3LSAqIHBvc3NpYmxlLCB0aGVuIG1vdmUgdGhlIHVubWFwcGVkIGZvbGlvcy5cbi0tXG5tbS9taWdyYXRlLmMtMTgxMy0gKi9cbm1tL21pZ3JhdGUuYzoxODE0OnN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxubW0vbWlncmF0ZS5jLTE4MTUtXHRcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xODE3LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG5tbS9taWdyYXRlLmM6MTgxODpcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbm1tL21pZ3JhdGUuYy0xODE5LXtcbi0tXG5tbS9taWdyYXRlLmMtMTg1MS1cdFx0XHQgKiBidXQgaW5jcmVtZW50IG5yX2ZhaWxlZCBiZWNhdXNlLCB3aXRob3V0IGRvaW5nIHNvLFxubW0vbWlncmF0ZS5jOjE4NTI6XHRcdFx0ICogbWlncmF0ZV9wYWdlcygpIG1heSByZXBvcnQgc3VjY2VzcyB3aXRoIChzcGxpdCBidXRcbm1tL21pZ3JhdGUuYy0xODUzLVx0XHRcdCAqIHVubWlncmF0ZWQpIHBhZ2VzIHN0aWxsIG9uIGl0cyBmcm9tbGlzdDsgd2hlcmVhcyBpdFxuLS1cbm1tL21pZ3JhdGUuYy0xODU2LVx0XHRcdCAqIG90aGVyd2lzZSBzdGF0cyBpbmNvbnNpc3RlbmN5IHdpbGwgaGFwcGVuIHdoZW5cbm1tL21pZ3JhdGUuYzoxODU3Olx0XHRcdCAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2ggaXMgY2FsbGVkIHZpYSBtaWdyYXRlX3BhZ2VzKClcbm1tL21pZ3JhdGUuYy0xODU4LVx0XHRcdCAqIHdpdGggTUlHUkFURV9TWU5DIGFuZCBNSUdSQVRFX0FTWU5DLlxuLS1cbm1tL21pZ3JhdGUuYy0yMDI1LVxubW0vbWlncmF0ZS5jOjIwMjY6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMDI3LVx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0yMDI5LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG5tbS9taWdyYXRlLmM6MjAzMDpcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxubW0vbWlncmF0ZS5jLTIwMzEte1xuLS1cbm1tL21pZ3JhdGUuYy0yMDMzLVx0TElTVF9IRUFEKGZvbGlvcyk7XG5tbS9taWdyYXRlLmM6MjAzNDpcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIGFzdGF0cztcbm1tL21pZ3JhdGUuYy0yMDM1LVxuLS1cbm1tL21pZ3JhdGUuYy0yMDM3LVx0LyogVHJ5IHRvIG1pZ3JhdGUgaW4gYmF0Y2ggd2l0aCBNSUdSQVRFX0FTWU5DIG1vZGUgZmlyc3RseSAqL1xubW0vbWlncmF0ZS5jOjIwMzg6XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQyxcbm1tL21pZ3JhdGUuYy0yMDM5LVx0XHRcdFx0IHJlYXNvbiwgXHUwMDI2Zm9saW9zLCBzcGxpdF9mb2xpb3MsIFx1MDAyNmFzdGF0cyxcbi0tXG5tbS9taWdyYXRlLmMtMjA2NC1cdFx0bGlzdF9tb3ZlKGZyb20tXHUwMDNlbmV4dCwgXHUwMDI2Zm9saW9zKTtcbm1tL21pZ3JhdGUuYzoyMDY1Olx0XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxubW0vbWlncmF0ZS5jLTIwNjYtXHRcdFx0XHRcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jLTIwNzctLypcbm1tL21pZ3JhdGUuYzoyMDc4OiAqIG1pZ3JhdGVfcGFnZXMgLSBtaWdyYXRlIHRoZSBmb2xpb3Mgc3BlY2lmaWVkIGluIGEgbGlzdCwgdG8gdGhlIGZyZWUgZm9saW9zXG5tbS9taWdyYXRlLmMtMjA3OS0gKlx0XHQgICBzdXBwbGllZCBhcyB0aGUgdGFyZ2V0IGZvciB0aGUgcGFnZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlLmMtMjEwMi0gKi9cbm1tL21pZ3JhdGUuYzoyMTAzOmludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjEwNC1cdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmMtMjExMi1cdExJU1RfSEVBRChzcGxpdF9mb2xpb3MpO1xubW0vbWlncmF0ZS5jOjIxMTM6XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyBzdGF0cztcbm1tL21pZ3JhdGUuYy0yMTE0LVxubW0vbWlncmF0ZS5jOjIxMTU6XHR0cmFjZV9tbV9taWdyYXRlX3BhZ2VzX3N0YXJ0KG1vZGUsIHJlYXNvbik7XG5tbS9taWdyYXRlLmMtMjExNi1cbi0tXG5tbS9taWdyYXRlLmMtMjE0MS1cdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXG5tbS9taWdyYXRlLmM6MjE0MjpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTQzLVx0XHRcdFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcdTAwMjZyZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTQ2LVx0ZWxzZVxubW0vbWlncmF0ZS5jOjIxNDc6XHRcdHJjID0gbWlncmF0ZV9wYWdlc19zeW5jKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTQ4LVx0XHRcdFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcdTAwMjZyZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTYxLVx0XHQgKi9cbm1tL21pZ3JhdGUuYzoyMTYyOlx0XHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNnNwbGl0X2ZvbGlvcywgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTYzLVx0XHRcdFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTg4LVx0Y291bnRfdm1fZXZlbnRzKFRIUF9NSUdSQVRJT05fU1BMSVQsIHN0YXRzLm5yX3RocF9zcGxpdCk7XG5tbS9taWdyYXRlLmM6MjE4OTpcdHRyYWNlX21tX21pZ3JhdGVfcGFnZXMoc3RhdHMubnJfc3VjY2VlZGVkLCBzdGF0cy5ucl9mYWlsZWRfcGFnZXMsXG5tbS9taWdyYXRlLmMtMjE5MC1cdFx0XHQgICAgICAgc3RhdHMubnJfdGhwX3N1Y2NlZWRlZCwgc3RhdHMubnJfdGhwX2ZhaWxlZCxcbi0tXG5tbS9taWdyYXRlLmM9MjI1MT1zdGF0aWMgaW50IGRvX21vdmVfcGFnZXNfdG9fbm9kZShzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgaW50IG5vZGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyNTktXG5tbS9taWdyYXRlLmM6MjI2MDpcdGVyciA9IG1pZ3JhdGVfcGFnZXMocGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXG5tbS9taWdyYXRlLmMtMjI2MS1cdFx0KHVuc2lnbmVkIGxvbmcpXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX1NZU0NBTEwsIE5VTEwpO1xuLS1cbm1tL21pZ3JhdGUuYz0yNjUwPXN0YXRpYyBib29sIG1pZ3JhdGVfYmFsYW5jZWRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL21pZ3JhdGUuYzoyNjUxOlx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9taWdyYXRlX3BhZ2VzKVxubW0vbWlncmF0ZS5jLTI2NTIte1xuLS1cbm1tL21pZ3JhdGUuYy0yNjYzLVx0XHRcdFx0ICAgICAgIGhpZ2hfd21hcmtfcGFnZXMoem9uZSkgJiM0Mztcbm1tL21pZ3JhdGUuYzoyNjY0Olx0XHRcdFx0ICAgICAgIG5yX21pZ3JhdGVfcGFnZXMsXG5tbS9taWdyYXRlLmMtMjY2NS1cdFx0XHRcdCAgICAgICBaT05FX01PVkFCTEUsIEFMTE9DX0NNQSkpXG4tLVxubW0vbWlncmF0ZS5jPTI3NTg9aW50IG1pZ3JhdGVfbWlzcGxhY2VkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBub2RlKVxuLS1cbm1tL21pZ3JhdGUuYy0yNzY3LVx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZtaWdyYXRlcGFnZXMpO1xubW0vbWlncmF0ZS5jOjI3Njg6XHRucl9yZW1haW5pbmcgPSBtaWdyYXRlX3BhZ2VzKFx1MDAyNm1pZ3JhdGVwYWdlcywgYWxsb2NfbWlzcGxhY2VkX2RzdF9mb2xpbyxcbm1tL21pZ3JhdGUuYy0yNzY5LVx0XHRcdFx0ICAgICBOVUxMLCBub2RlLCBNSUdSQVRFX0FTWU5DLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBtaWdyYXRlX3BhZ2VzYCYjMzk7cyBBY2Nlc3NpYmlsaXR5KioKCkFscmlnaHQsIHNvIGBtaWdyYXRlX3BhZ2VzYC4uLiBpdCYjMzk7cyBleHBvcnRlZCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyAqaW50ZW5kZWQqIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIHNjb3BlLCByaWdodD8gQnV0IGludGVudGlvbiBhbmQgcmVhbGl0eSBjYW4gYmUgdHdvIGRpZmZlcmVudCB0aGluZ3MuIEJlc3QgdG8gYmUgc3VyZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBleHBvcnRlZCBhcyB0aGUgY29kZSBzdWdnZXN0cywganVzdCB0byBjb25maXJtLiBHb3R0YSBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1pZ3JhdGVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG1pZ3JhdGVfcGFnZXNgIEZ1bmN0aW9uKioKCkhtbSwgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBtaWdyYXRlX3BhZ2VzYCB0byBiZSByZWFkaWx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIG15IG1vZHVsZSwgYnV0IGl0IHNlZW1zIGxpa2UgdGhlIGNvbXBpbGVyIGlzbiYjMzk7dCByZWNvZ25pemluZyBpdC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBUaGUgbW9zdCBsaWtlbHkgY3VscHJpdCBpcyB0aGF0IGl0JiMzOTtzIG5vdCBiZWluZyBleHBvcnRlZCBhcyBhIHN5bWJvbC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBgbWlncmF0ZV9wYWdlc2AgaXMgYWN0dWFsbHkgYmVpbmcgbWFkZSBhdmFpbGFibGUgZm9yIG1vZHVsZXMgdG8gdXNlLCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIGBtbS9taWdyYXRlLmNgLiBJJiMzOTtsbCBpbW1lZGlhdGVseSBjaGVjayBmb3IgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybyYjMzk7cyBhcHBsaWNhdGlvbiB0byB0aGF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiBUaGlzIHdpbGwgcXVpY2tseSB0ZWxsIG1lIGlmIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBpbnRlbmRlZCBmb3IgaXQgdG8gYmUgY2FsbGFibGUgb3V0c2lkZSBvZiB0aGUgY29yZSBrZXJuZWwgY29kZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTU4PWludCBzZXRfbW92YWJsZV9vcHMoY29uc3Qgc3RydWN0IG1vdmFibGVfb3BlcmF0aW9ucyAqb3BzLCBlbnVtIHBhZ2V0eXBlIHR5cGUpXG4tLVxubW0vbWlncmF0ZS5jLTc5LX1cbm1tL21pZ3JhdGUuYzo4MDpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbW92YWJsZV9vcHMpO1xubW0vbWlncmF0ZS5jLTgxLVxuLS1cbm1tL21pZ3JhdGUuYz03MjY9aW50IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzM1LX1cbm1tL21pZ3JhdGUuYzo3MzY6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX21hcHBpbmcpO1xubW0vbWlncmF0ZS5jLTczNy1cbi0tXG5tbS9taWdyYXRlLmM9Nzc4PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGUuYy04NjYtfVxubW0vbWlncmF0ZS5jOjg2NzpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2OC1cbi0tXG5tbS9taWdyYXRlLmM9OTEwPWludCBtaWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtOTE1LX1cbm1tL21pZ3JhdGUuYzo5MTY6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2ZvbGlvKTtcbm1tL21pZ3JhdGUuYy05MTctXG4tLVxubW0vbWlncmF0ZS5jPTEwMzg9aW50IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy0xMDQyLX1cbm1tL21pZ3JhdGUuYzoxMDQzOkVYUE9SVF9TWU1CT0woYnVmZmVyX21pZ3JhdGVfZm9saW8pO1xubW0vbWlncmF0ZS5jLTEwNDQtXG4tLVxubW0vbWlncmF0ZS5jPTEwNTk9aW50IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvX25vcmVmcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtMTA2My19XG5tbS9taWdyYXRlLmM6MTA2NDpFWFBPUlRfU1lNQk9MX0dQTChidWZmZXJfbWlncmF0ZV9mb2xpb19ub3JlZnMpO1xubW0vbWlncmF0ZS5jLTEwNjUtI2VuZGlmIC8qIENPTkZJR19CVUZGRVJfSEVBRCAqL1xuLS1cbm1tL21pZ3JhdGUuYz0xMDY3PWludCBmaWxlbWFwX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vbWlncmF0ZS5jLTEwNzEtfVxubW0vbWlncmF0ZS5jOjEwNzI6RVhQT1JUX1NZTUJPTF9HUEwoZmlsZW1hcF9taWdyYXRlX2ZvbGlvKTtcbm1tL21pZ3JhdGUuYy0xMDczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTA2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1pZ3JhdGVfcGFnZXNgIFBhdGNoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhhdCBgbWlncmF0ZV9wYWdlc2AgaXNuJiMzOTt0IGRpcmVjdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGNsZWFybHkgYSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiwgZGVlcGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLgoKVGhlIGNvcmUgY2hhbmdlIGhlcmUgaXMgdGhlIHN1YnN0aXR1dGlvbiBvZiBgY29uZF9yZXNjaGVkKClgIHdpdGggYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIHNoaWZ0OyBpdCYjMzk7cyBtZXNzaW5nIHdpdGggUkNVIHF1aWVzY2VudCBzdGF0ZXMsIHNvIHRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7bSBhc2tpbmcgaXM6IGRvIHdlIG5lZWQgdG8gZnV6eiB0aGlzPyBZZXMsIHByb2JhYmx5LgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbWlncmF0ZV9wYWdlc2AuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MgdGhhdCBpbXBhY3QgaXQuIEkgc2VlIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIChvciBgQ09ORklHX0NPTVBBQ1RJT05gLCB3aGljaCBpbmRpcmVjdGx5IGVuYWJsZXMgaXQpIGlzIHRoZSBrZXkuIEFuZCwgc2luY2UgYENPTkZJR19NSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgSSBjYW4gYWRkIGl0IHRvIGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGl0IGluIHRoZSBmdXp6aW5nLgoKTm93LCBob2xkIG9uLiBJcyBgbWlncmF0ZV9wYWdlc2AgdGhlICpiZXN0KiBmb2N1cyBzeW1ib2w/IEkgc2hvdWxkIHByb2JhYmx5IGludmVzdGlnYXRlIGZ1cnRoZXIuIEkgc2VlIHRoYXQgYG1pZ3JhdGVfcGFnZXNgIHNlcnZlcyBhcyBhbiBlbnRyeSBwb2ludCBmb3IgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9wYWdlc19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTc4Mj1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jLTE4MDUtLypcbm1tL21pZ3JhdGUuYzoxODA2OiAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSBmaXJzdCB1bm1hcHMgZm9saW9zIGluIHRoZSBmcm9tIGxpc3QgYXMgbWFueSBhc1xubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxuLS1cbm1tL21pZ3JhdGUuYy0xODEzLSAqL1xubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG5tbS9taWdyYXRlLmMtMTgxNS1cdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE4NTYtXHRcdFx0ICogb3RoZXJ3aXNlIHN0YXRzIGluY29uc2lzdGVuY3kgd2lsbCBoYXBwZW4gd2hlblxubW0vbWlncmF0ZS5jOjE4NTc6XHRcdFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxubW0vbWlncmF0ZS5jLTE4NTgtXHRcdFx0ICogd2l0aCBNSUdSQVRFX1NZTkMgYW5kIE1JR1JBVEVfQVNZTkMuXG4tLVxubW0vbWlncmF0ZS5jPTIwMjY9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjAzNy1cdC8qIFRyeSB0byBtaWdyYXRlIGluIGJhdGNoIHdpdGggTUlHUkFURV9BU1lOQyBtb2RlIGZpcnN0bHkgKi9cbm1tL21pZ3JhdGUuYzoyMDM4Olx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXG5tbS9taWdyYXRlLmMtMjAzOS1cdFx0XHRcdCByZWFzb24sIFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcdTAwMjZhc3RhdHMsXG4tLVxubW0vbWlncmF0ZS5jLTIwNjQtXHRcdGxpc3RfbW92ZShmcm9tLVx1MDAzZW5leHQsIFx1MDAyNmZvbGlvcyk7XG5tbS9taWdyYXRlLmM6MjA2NTpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMDY2LVx0XHRcdFx0XHQgcHJpdmF0ZSwgbW9kZSwgcmVhc29uLCByZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYz0yMTAzPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTIxNDEtXHRpZiAobW9kZSA9PSBNSUdSQVRFX0FTWU5DKVxubW0vbWlncmF0ZS5jOjIxNDI6XHRcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE0My1cdFx0XHRcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXHUwMDI2cmV0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMjE2MS1cdFx0ICovXG5tbS9taWdyYXRlLmM6MjE2MjpcdFx0bWlncmF0ZV9wYWdlc19iYXRjaChcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMjE2My1cdFx0XHRcdHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsIHJlYXNvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgbWlncmF0ZV9wYWdlc2AgRnVuY3Rpb24gQ2FsbCBIaWVyYXJjaHkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHByZXR0eSBjbGVhciBwYXR0ZXJuIGluIGhvdyB0aGVzZSBwYWdlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0IGxvb2tzIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGBtaWdyYXRlX3BhZ2VzX3N5bmNgIGFuZCBgbWlncmF0ZV9wYWdlc2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3MgaXRzZWxmLiBOb3csIGBtaWdyYXRlX3BhZ2VzX3N5bmNgIGlzIGFsc28gY2FsbGVkIGJ5IGBtaWdyYXRlX3BhZ2VzYC4gVGhpcyBnaXZlcyBtZSB0aGUgZmVlbGluZyB0aGF0IGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBtaWdyYXRpb24gb3BlcmF0aW9uLiBTZWVtcyBsaWtlIGEgdG9wLWxldmVsIGZ1bmN0aW9uIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRoZSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBob3cgaXMgdGhlIHN5c3RlbSBjYWxsaW5nIHRoaXMuIEkgd2FudCB0byBzZWUgaWYgYG1pZ3JhdGVfcGFnZXNgIGlzIGludm9rZWQgYnkgYW55IHN5c3RlbSBjYWxscyBvciBub3QuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIgZm9yIHRoZXNlIG1pZ3JhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03NDYtXHRcdFx0ICpcbm1tL21lbXBvbGljeS5jOjc0NzpcdFx0XHQgKiBtaWdyYXRlX3BhZ2VzKFx1MDAyNnBhZ2VsaXN0KSByZXR1cm5zIG5yX2ZhaWxlZCBmb2xpb3MsIHNvXG5tbS9tZW1wb2xpY3kuYy03NDgtXHRcdFx0ICogY2hlY2sgXCYjMzQ7bGFyZ2VcJiMzNDsgbm93IHNvIHRoYXQgcXVldWVfcGFnZXNfcmFuZ2UoKSByZXR1cm5zXG4tLVxubW0vbWVtcG9saWN5LmM9MTI4NT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxuLS1cbm1tL21lbXBvbGljeS5jLTEzMjEtXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cGFnZWxpc3QpKSB7XG5tbS9tZW1wb2xpY3kuYzoxMzIyOlx0XHRlcnIgPSBtaWdyYXRlX3BhZ2VzKFx1MDAyNnBhZ2VsaXN0LCBhbGxvY19taWdyYXRpb25fdGFyZ2V0LCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMTMyMy1cdFx0XHQodW5zaWduZWQgbG9uZylcdTAwMjZtdGMsIE1JR1JBVEVfU1lOQywgTVJfU1lTQ0FMTCwgTlVMTCk7XG4tLVxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cbm1tL21lbXBvbGljeS5jOjEzMzk6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xMzQwLVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmMtMTM4Ny1cdFx0XHQvKlxubW0vbWVtcG9saWN5LmM6MTM4ODpcdFx0XHQgKiBkb19taWdyYXRlX3BhZ2VzKCkgdHJpZXMgdG8gbWFpbnRhaW4gdGhlIHJlbGF0aXZlXG5tbS9tZW1wb2xpY3kuYy0xMzg5LVx0XHRcdCAqIG5vZGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYWdlcyBlc3RhYmxpc2hlZCBiZXR3ZWVuXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ3MD1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTQ3NS1cbm1tL21lbXBvbGljeS5jOjE0NzY6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xNDc3LVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ4OT1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNjE2LVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSkge1xubW0vbWVtcG9saWN5LmM6MTYxNzpcdFx0bnJfZmFpbGVkIHw9IG1pZ3JhdGVfcGFnZXMoXHUwMDI2cGFnZWxpc3QsXG5tbS9tZW1wb2xpY3kuYy0xNjE4LVx0XHRcdFx0YWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jPTE4NTc9U1lTQ0FMTF9ERUZJTkUzKHNldF9tZW1wb2xpY3ksIGludCwgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiwgbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTg2Mi1cbm1tL21lbXBvbGljeS5jOjE4NjM6c3RhdGljIGludCBrZXJuZWxfbWlncmF0ZV9wYWdlcyhwaWRfdCBwaWQsIHVuc2lnbmVkIGxvbmcgbWF4bm9kZSxcbm1tL21lbXBvbGljeS5jLTE4NjQtXHRcdFx0XHRjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqb2xkX25vZGVzLFxuLS1cbm1tL21lbXBvbGljeS5jLTE5MzQtXG5tbS9tZW1wb2xpY3kuYzoxOTM1Olx0ZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgb2xkLCBuZXcsXG5tbS9tZW1wb2xpY3kuYy0xOTM2LVx0XHRjYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0xOTQ4LVxubW0vbWVtcG9saWN5LmM6MTk0OTpTWVNDQUxMX0RFRklORTQobWlncmF0ZV9wYWdlcywgcGlkX3QsIHBpZCwgdW5zaWduZWQgbG9uZywgbWF4bm9kZSxcbm1tL21lbXBvbGljeS5jLTE5NTAtXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG9sZF9ub2Rlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xOTUyLXtcbm1tL21lbXBvbGljeS5jOjE5NTM6XHRyZXR1cm4ga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkLCBtYXhub2RlLCBvbGRfbm9kZXMsIG5ld19ub2Rlcyk7XG5tbS9tZW1wb2xpY3kuYy0xOTU0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtaWdyYXRlX3BhZ2VzYCBTeXN0ZW0gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwuIFRoZSBmYWN0IHRoYXQgYFNZU0NBTExfREVGSU5FNChtaWdyYXRlX3BhZ2VzLCAuLi4pYCBleGlzdHMgY29uZmlybXMgaXQmIzM5O3MgYSByZWFsIGVudHJ5IHBvaW50LCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBjYW4gdGFyZ2V0IGFuZCBmdXp6LiBUaGlzIGlzIHByb21pc2luZy4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scywgc28gbGV0JiMzOTtzIGFkZCBgbWlncmF0ZV9wYWdlc2AgaXRzZWxmLCBuYXR1cmFsbHkuIEFsc28sIEkgbmVlZCB0byBpbmNsdWRlIGBkb19taWdyYXRlX3BhZ2VzYCBhbmQgYGtlcm5lbF9taWdyYXRlX3BhZ2VzYCwgd2hpY2ggSSBleHBlY3Qgd2lsbCBiZSBjcnVjaWFsIGluIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gcGF0aC4gTG9va3MgbGlrZSBgbWlncmF0ZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGUuY2AgaXMgdGhlIGNvcmUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BYCBhbmQgYENPTkZJR19NSUdSQVRJT05gIGFyZSBlbmFibGVkLiBUaGVzZSBjb25maWd1cmF0aW9ucyB3aWxsIGxpa2VseSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIGFuZCBhdmFpbGFiaWxpdHkgb2YgYG1pZ3JhdGVfcGFnZXNgIHN1YnN0YW50aWFsbHkuIFdlIG5lZWQgdG8ga25vdyBpZiB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IHNldCB1cCB0byBkbyBwYWdlIG1pZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NzE9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODEtXG5tbS9LY29uZmlnOjY4Mjpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBNaWdyYXRpb24gU3RhdHVzIHdpdGggTlVNQSoqCgpSaWdodCwgc28gd2UgaGF2ZSB0aGlzIGJvb2xlYW4gdmFyaWFibGUsIGBNSUdSQVRJT05gLiBDbGVhcmx5LCBpdCBpbmRpY2F0ZXMgd2hldGhlciBzb21lIHNvcnQgb2YgbWlncmF0aW9uIHByb2Nlc3MgaXMgZW5hYmxlZCBvciByZXF1aXJlZC4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6ICp3aGF0IGlzIGluZmx1ZW5jaW5nIHRoaXMgc3RhdGUqPyBNb3JlIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IGBOVU1BYCBmYWN0b3JzIGludG8gdGhpcy4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykgaXMgZHJpdmluZyB0aGUgc2V0dGluZyBvZiB0aGUgYE1JR1JBVElPTmAgZmxhZy4gVGhpcyBjb3VsZCBiZSBmb3IgYSBmZXcgcmVhc29ucy4gUGVyaGFwcyBOVU1BIGlzIGJlaW5nIHVzZWQgdG8gKmVuYWJsZSogbWlncmF0aW9uLCBvciBwb3NzaWJseSBkaXNhYmxlIGl0IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gTWF5YmUgTlVNQSBub2RlIGF3YXJlbmVzcyBpcyBhIHRyaWdnZXIsIG9yIHJlbGF0ZWQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHJlc291cmNlcyBhcmUgcGxhY2VkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0LiBUaGUgY29kZSBhbmQvb3IgdGhlIGRlc2lnbiBkb2N1bWVudGF0aW9uIG91Z2h0IHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4MD1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODEtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xubW0vS2NvbmZpZzo1ODI6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTU4My1cbi0tXG5tbS9LY29uZmlnPTY0MD1jb25maWcgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWctNjQyLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjY0MzpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjQ0LVx0ZGVwZW5kcyBvbiBNTVVcbi0tXG5tbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY3NC1cdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnOjY3NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjc2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTA1Mz1jb25maWcgQ01BXG4tLVxubW0vS2NvbmZpZy0xMDU1LVx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWc6MTA1NjpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctMTA1Ny1cdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIE1lbW9yeSBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgZGVjaXNpb24gcHJvY2VzcyBpcyBwcmV0dHkgY2xlYXIuIFdoZW4gaXQgY29tZXMgdG8gbW92aW5nIHBhZ2VzIGFyb3VuZCwgdGhlIGBDT01QQUNUSU9OYCBtZWNoYW5pc20gaXMgc2V0IHRvIHRyaWdnZXIgYSBgTUlHUkFUSU9OYCBldmVudC4gU2ltaWxhcmx5LCBgTlVNQV9NSUdSQVRJT05gIGFsc28gY2FsbHMgdXBvbiBgTUlHUkFUSU9OYC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgeW91JiMzOTtyZSB0cnlpbmcgdG8gb3B0aW1pemUgbWVtb3J5IGxheW91dCwgeW91JiMzOTtsbCBpbmV2aXRhYmx5IG5lZWQgdG8gbWlncmF0ZSBwYWdlcy4KCk5vdywgYE5VTUFfTUlHUkFUSU9OYCBoYXMgYSBoYXJkIGRlcGVuZGVuY3k6IGl0IGFic29sdXRlbHkgcmVxdWlyZXMgYm90aCBgTlVNQWAgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpIGFuZCBgTU1VYCAoTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCkgdG8gYmUgZW5hYmxlZC4gVGhhdCYjMzk7cyBmdW5kYW1lbnRhbDsgd2l0aG91dCB0aG9zZSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIGluIHBsYWNlLCBOVU1BLWF3YXJlIG1pZ3JhdGlvbiBpcyBzaW1wbHkgaW1wb3NzaWJsZS4KCkdpdmVuIGFsbCB0aGlzLCBhIHNlbnNpYmxlIGZvbGxvdy11cCBxdWVzdGlvbiBhcmlzZXM6IElzIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwgZW5hYmxlZCB0aHJvdWdoIHRoZSBgTlVNQWAgY29uZmlndXJhdGlvbj8gSWYgTlVNQSBpcyBhY3RpdmUsIHRoZW4gdGhpcyBzeXNjYWxsIGlzIHByb2JhYmx5IGFsc28gYXZhaWxhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBjb25maXJtIHRoYXQsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBhbnkga2luZCBvZiBwYWdlIG1pZ3JhdGlvbiB0aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkU0XFwobWlncmF0ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTE4NjM9c3RhdGljIGludCBrZXJuZWxfbWlncmF0ZV9wYWdlcyhwaWRfdCBwaWQsIHVuc2lnbmVkIGxvbmcgbWF4bm9kZSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xOTQ4LVxubW0vbWVtcG9saWN5LmM6MTk0OTpTWVNDQUxMX0RFRklORTQobWlncmF0ZV9wYWdlcywgcGlkX3QsIHBpZCwgdW5zaWduZWQgbG9uZywgbWF4bm9kZSxcbm1tL21lbXBvbGljeS5jLTE5NTAtXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG9sZF9ub2RlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIENvbnRleHQgb2YgYG1tL21lbXBvbGljeS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWVtcG9saWN5LmNgIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBhIGtleSBxdWVzdGlvbjogKklzIHRoaXMgZmlsZSwgdGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gZGVwZW5kIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24/KiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19OVU1BYCBpcyB0aGUga2V5LiBHaXZlbiB0aGUgdmVyeSBuYXR1cmUgb2YgbWVtb3J5IHBvbGljaWVzLCBhbmQgTlVNQSBhcmNoaXRlY3R1cmUgdGhhdCBkZWZpbmVzIHdoZXJlIG1lbW9yeSB3aWxsIGJlIGxvY2F0ZWQgZm9yIHByb2Nlc3NlcywgaXQgc2VlbXMgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSB3aWxsIGJlIGRlZmluZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgQ09ORklHX05VTUFgLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBJZiBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHVuaXQsIEkgbmVlZCB0byBrbm93IHRoZSBleGFjdCBidWlsZCBmbGFncyBzbyBJIGRvbiYjMzk7dCB3YXN0ZSB0aW1lIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzbiYjMzk7dCBldmVuIGluIG15IHRhcmdldCBrZXJuZWwgYnVpbGQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlIGJ1aWxkIHN5c3RlbSB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIFRlc3RpbmcgYG1pZ3JhdGVfcGFnZXNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGBtZW1wb2xpY3kub2AgaXMgZGVmaW5pdGVseSBidWlsdCBvbmx5IGlmIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlIHdob2xlIE5VTUEgYXJjaGl0ZWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIGl0cyBwdXJwb3NlLiAgVGhlcmVmb3JlLCBJJiMzOTtkIGluaXRpYWxseSBhc3N1bWUgdGhhdCBgQ09ORklHX05VTUFgIGlzICpyZXF1aXJlZCogdG8gYWN0dWFsbHkgaGl0IHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwuICAKCkJ1dCBoYW5nIG9u4oCmIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gIFRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgcGF0aCBpbiBgbW0vbWlncmF0ZS5jYCwgYG1pZ3JhdGVfcGFnZXNgIG1pZ2h0IGFsc28gYmUgcmVhY2hlZCB0aHJvdWdoIGBDTUFgIG9yIGBDT01QQUNUSU9OYC4gIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gIEhvd2V2ZXIsIGZvciAqc3BlY2lmaWNhbGx5KiB0ZXN0aW5nIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwsIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19OVU1BYCBpcyBzdGlsbCB0aGUgYmVzdCBiZXQuICBTbywgbGV0JiMzOTtzIGFkZCBgTlVNQWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSBhbmQgdGFyZ2V0IHRoZSBzeXNjYWxsIGV4cGxpY2l0bHkuCgpXYWl0LCBJIGFsc28gbmVlZCBgTUlHUkFUSU9OYCBkZWZpbmVkIGFzIHRoaXMgaXMgaW52b2x2ZWQgaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBCdXQgbG9va2luZyBpbnRvIGl0LCBgTUlHUkFUSU9OYCBpcyBzZWxlY3RlZCB2aWEgYENPTVBBQ1RJT05gLCBhbmQgdGhhdCYjMzk7cyAqYWxyZWFkeSogc2V0IHRvIGBkZWZhdWx0IHlgIC4gT2theSwgdGhhdCYjMzk7cyBnb29kLgoKU28sIGxldCYjMzk7cyBhZGQgYE5VTUFgIGFuZCBgTUlHUkFUSU9OYCB0byBgRW5hYmxlQ29uZmlnc2AuIE9oIHdhaXQsIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgKG5vIGBwcm9tcHRgKS4gU28sIGlmIGBDT01QQUNUSU9OYCBlbmFibGVzIGBNSUdSQVRJT05gLCBJIGNhbiBqdXN0IHNwZWNpZnkgYENPTVBBQ1RJT05gLiBTbyBsZXQmIzM5O3MgYWRkIGBOVU1BYCBhbmQgYENPTVBBQ1RJT05gLiBMZXQmIzM5O3MgYWxzbyBjaGVjayBgQ09NUEFDVElPTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTYyOD1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTYzOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBjb21wYWN0aW9uXG5tbS9LY29uZmlnOjY0MDpjb25maWcgQ09NUEFDVElPTlxubW0vS2NvbmZpZy02NDEtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGF0IGBDT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGUgdXNlciBjYW4gdG9nZ2xlIG9uIG9yIG9mZiDigJMgdGhhdCYjMzk7cyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgaW5jbHVkZSByZWxhdGVkIGZlYXR1cmVzLCBzbyBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGluY29ycG9yYXRpbmcgYE5VTUFgIGFsb25nc2lkZSBgQ09NUEFDVElPTmAgYW5kIGBNSUdSQVRJT05gLgoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gIGBNSUdSQVRJT05gIGRvZXNuJiMzOTt0IGhhdmUgYSBkaXJlY3QgYC5jb25maWdgIHByb21wdCwgbWVhbmluZyBpdCYjMzk7cyBkZXBlbmRlbnQgb24gb3RoZXIgc2VsZWN0aW9ucy4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBpdCYjMzk7cyBzZWxlY3RlZCBpbiB0aGUgY29ycmVjdCB3YXkuICBTbywgSSYjMzk7bGwgcmV2aXNlIHRoYXQgYW5kIGp1c3QgaW5jbHVkZSBgTlVNQWAgYW5kIGBDT01QQUNUSU9OYCBhdCB0aGlzIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IG1pZ3JhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlLiAgTXkgZm9jdXMgc2hpZnRzIHRvIGBtaWdyYXRlX3BhZ2VzYCwgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiAgV2FpdCBhIG1vbWVudC4uLiBpc24mIzM5O3QgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIHN0YXRpYz8gIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gWWVzLCBzdGF0aWMuCgpUaGF0IG1lYW5zIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgIGFyZSBteSBwcmltYXJ5IHRhcmdldCBzeW1ib2xzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIGlubGluZWQsIGJ1dCBJJiMzOTttIGNvbmZpZGVudCBub3cgdGhhdCBJIGhhdmUgdGhlIGltcG9ydGFudCBwaWVjZXMgaW4gbXkgc2NvcGUuIEkmIzM5O2xsIGNoZWNrIGl0LCBiZWNhdXNlIEkgd2FudCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGNvcnJlY3Qgc3RhdHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3BhZ2VzX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz0xNzgyPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMTgwNS0vKlxubW0vbWlncmF0ZS5jOjE4MDY6ICogbWlncmF0ZV9wYWdlc19iYXRjaCgpIGZpcnN0IHVubWFwcyBmb2xpb3MgaW4gdGhlIGZyb20gbGlzdCBhcyBtYW55IGFzXG5tbS9taWdyYXRlLmMtMTgwNy0gKiBwb3NzaWJsZSwgdGhlbiBtb3ZlIHRoZSB1bm1hcHBlZCBmb2xpb3MuXG4tLVxubW0vbWlncmF0ZS5jLTE4MTMtICovXG5tbS9taWdyYXRlLmM6MTgxNDpzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbm1tL21pZ3JhdGUuYy0xODE1LVx0XHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTg1Ni1cdFx0XHQgKiBvdGhlcndpc2Ugc3RhdHMgaW5jb25zaXN0ZW5jeSB3aWxsIGhhcHBlbiB3aGVuXG5tbS9taWdyYXRlLmM6MTg1NzpcdFx0XHQgKiBtaWdyYXRlX3BhZ2VzX2JhdGNoIGlzIGNhbGxlZCB2aWEgbWlncmF0ZV9wYWdlcygpXG5tbS9taWdyYXRlLmMtMTg1OC1cdFx0XHQgKiB3aXRoIE1JR1JBVEVfU1lOQyBhbmQgTUlHUkFURV9BU1lOQy5cbi0tXG5tbS9taWdyYXRlLmM9MjAyNj1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0yMDM3LVx0LyogVHJ5IHRvIG1pZ3JhdGUgaW4gYmF0Y2ggd2l0aCBNSUdSQVRFX0FTWU5DIG1vZGUgZmlyc3RseSAqL1xubW0vbWlncmF0ZS5jOjIwMzg6XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQyxcbm1tL21pZ3JhdGUuYy0yMDM5LVx0XHRcdFx0IHJlYXNvbiwgXHUwMDI2Zm9saW9zLCBzcGxpdF9mb2xpb3MsIFx1MDAyNmFzdGF0cyxcbi0tXG5tbS9taWdyYXRlLmMtMjA2NC1cdFx0bGlzdF9tb3ZlKGZyb20tXHUwMDNlbmV4dCwgXHUwMDI2Zm9saW9zKTtcbm1tL21pZ3JhdGUuYzoyMDY1Olx0XHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxubW0vbWlncmF0ZS5jLTIwNjYtXHRcdFx0XHRcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXG4tLVxubW0vbWlncmF0ZS5jPTIxMDM9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjE0MS1cdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXG5tbS9taWdyYXRlLmM6MjE0MjpcdFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTQzLVx0XHRcdFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcdTAwMjZyZXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0yMTYxLVx0XHQgKi9cbm1tL21pZ3JhdGUuYzoyMTYyOlx0XHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFx1MDAyNnNwbGl0X2ZvbGlvcywgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0yMTYzLVx0XHRcdFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbWlncmF0ZV9wYWdlc19iYXRjaGAgaXNuJiMzOTt0IGRlY2xhcmVkIGBpbmxpbmVgLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciBwcm9iYWJseSBpc24mIzM5O3QgaW5saW5pbmcgaXQsIHRob3VnaCBpdCAqY291bGQqIGJlLiBCdXQgdGhlIG1vcmUgZmFtaWxpYXIgZnVuY3Rpb25zIGhlcmUsIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLCBhcmUgd2hhdCBJJiMzOTtsbCBmb2N1cyBvbi4KClRoZSBkaWZmIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCByZXBsYWNlcyBgY29uZF9yZXNjaGVkKClgIHdpdGggYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAuIEFoYSEgVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbmV3IGZ1bmN0aW9uIGFsc28gc2lnbmFscyBhbiBSQ1UgcXVpZXNjZW50IHN0YXRlIGFsb25nIHdpdGggdGhlIG5vcm1hbCByZXNjaGVkdWxpbmcuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhZGp1c3RtZW50LCBzcGVjaWZpY2FsbHkgZm9yIGF2b2lkaW5nIFJDVSBzdGFsbHMgZHVyaW5nIHBvdGVudGlhbGx5IGxlbmd0aHkgbGFyZ2UgcGFnZSBtaWdyYXRpb25zLiBJJiMzOTt2ZSBzZWVuIHRoYXQgYmVoYXZpb3IgYmVmb3JlLiBUaGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQgcHJldmVudGluZyB0aGUgc3lzdGVtIGZyb20gbG9ja2luZyB1cCBkdXJpbmcgdGhvc2Ugb3BlcmF0aW9ucywgd2hpY2ggaXMgd2h5IGl0IGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuCgpNeSBwcmltYXJ5IGludGVyZXN0IHJpZ2h0IG5vdyBsaWVzIHdpdGggYE5VTUFgIGFuZCBgQ09NUEFDVElPTmAgY29uZmlncyDigJMgdGhvc2UgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHRzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBgbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19taWdyYXRlX3BhZ2VzYCB0byBjb25maXJtIGhvdyB0aGlzIG5ldyByZXNjaGVkdWxpbmcgYmVoYXZpb3IgaW50ZXJhY3RzIHdpdGggdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGF0IGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzYCBpcyBhY3R1YWxseSBkZWZpbmVkLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqVHJhY2luZyB0aGUgU291cmNlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoaXMgY29uY2VwdCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggaXRzIG9yaWdpbi4gKldoZXJlKiBleGFjdGx5IGlzIHRoaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGdvIGJhY2sgdG8gdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cywgdGhlIGJlZHJvY2sgYXNzdW1wdGlvbnMgdXBvbiB3aGljaCB0aGlzIHJlc3RzLiBKdW1waW5nIGluIHdpdGhvdXQgdGhhdCBjbGFyaXR5IGlzIGp1c3QgYXNraW5nIGZvciBhIHBvdGVudGlhbCBtaXNpbnRlcnByZXRhdGlvbiBvciB3YXN0ZWQgZWZmb3J0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGRlZmluaXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBJIGFtIGNsZWFyIG9uIHdoYXQgaXQgaXMgd2UgYXJlIGRpc2N1c3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MjA1PXN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3Rhc2tzX3JjdV9maW5pc2godm9pZCkgeyB9XG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTIwOC0vKipcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoyMDk6ICogY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcyAtIFJlcG9ydCBwb3RlbnRpYWwgcXVpZXNjZW50IHN0YXRlcyB0byBSQ1VcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMTAtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMjE0LSAqL1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjIxNTojZGVmaW5lIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTIxNi1kbyB7IFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTM0CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJDVSBRdWllc2NlbnQgU3RhdGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZGVmaW5pdGlvbiDigJMgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGluY2x1ZGUvbGludXgvcmN1cGRhdGUuaGAuIFRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFsdGVyaW5nIGhvdyB0aGUgUkNVIHF1aWVzY2VudCBzdGF0ZSBpcyByZXBvcnRlZCB3aGlsZSBwYWdlcyBhcmUgYmVpbmcgbWlncmF0ZWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgY2hhbmdlOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBpbXByb3ZlIHRoZSBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIGdldCB0aGUgbmVjZXNzYXJ5IHJlc3VsdHMgcHJlcHBlZC4gRm9yIHRoaXMgcGF0Y2gsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGB0cnVlYC4gVGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBjbGVhcmx5IGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiBXZSBzaG91bGQgZW5hYmxlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIE5VTUEgYXJjaGl0ZWN0dXJlIGFuZCBtZW1vcnkgQ09NUEFDVElPTiwgYXMgdGhlc2UgYXJlIGxpa2VseSB0byBiZSBpbnZvbHZlZCBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIE15IHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggcmVwbGFjZXMgYGNvbmRfcmVzY2hlZCgpYCB3aXRoIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGluc2lkZSBgbWlncmF0ZV9wYWdlc19iYXRjaCgpYC4gVGhpcyBmdW5kYW1lbnRhbGx5IGFsdGVycyBSQ1UgcXVpZXNjZW50IHN0YXRlIHJlcG9ydGluZywgZXNwZWNpYWxseSBkdXJpbmcgbGFyZ2UtcGFnZSBtaWdyYXRpb25zLCB3aXRoIHRoZSBleHBsaWNpdCBnb2FsIG9mIHByZXZlbnRpbmcgcG90ZW50aWFsIFJDVSBzdGFsbHMuIENydWNpYWxseSwgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRod2F5cywgbWFraW5nIGl0IGEgY3JpdGljYWwgYXJlYSB0byBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNvbmRfcmVzY2hlZCgpIHdpdGggY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGluIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSwgd2hpY2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgaG93IFJDVSBxdWllc2NlbnQgc3RhdGVzIGFyZSByZXBvcnRlZCBkdXJpbmcgbGFyZ2UgcGFnZSBtaWdyYXRpb25zIHRvIHByZXZlbnQgUkNVIHN0YWxscy4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG1pZ3JhdGVfcGFnZXMgc3lzY2FsbCBhbmQgb3RoZXIgbWlncmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RvX21pZ3JhdGVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgY29uZF9yZXNjaGVkKCkgd2l0aCBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCkgaW4gbWlncmF0ZV9wYWdlc19iYXRjaCgpLCB3aGljaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBob3cgUkNVIHF1aWVzY2VudCBzdGF0ZXMgYXJlIHJlcG9ydGVkIGR1cmluZyBsYXJnZSBwYWdlIG1pZ3JhdGlvbnMgdG8gcHJldmVudCBSQ1Ugc3RhbGxzLiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbWlncmF0ZV9wYWdlcyBzeXNjYWxsIGFuZCBvdGhlciBtaWdyYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1Nzo1Ny44NzU1Njc4MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzg4NTg5OTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9wYWdlc1wiLFxuICAgIFwiZG9fbWlncmF0ZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNvbmRfcmVzY2hlZCgpIHdpdGggY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGluIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSwgd2hpY2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgaG93IFJDVSBxdWllc2NlbnQgc3RhdGVzIGFyZSByZXBvcnRlZCBkdXJpbmcgbGFyZ2UgcGFnZSBtaWdyYXRpb25zIHRvIHByZXZlbnQgUkNVIHN0YWxscy4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG1pZ3JhdGVfcGFnZXMgc3lzY2FsbCBhbmQgb3RoZXIgbWlncmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1Nzo1Ny44NzU1NzY5MjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDg2OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRmZGYwZTFiYTc2YWI4MTRiYjRhM2Q4MmQxNzAxYzgxZWY1YWVhMzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDM6NTc6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggYWIxNWE0ZGRkZDA0NzEuLmI5MzdjYmQ3NjQ4MDg3IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0xODQzLDcgKzE4NDMsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4gXFx0XFx0XFx0aXNfdGhwID0gZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pO1xcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBUaGUgcmFyZSBmb2xpbyBvbiB0aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCBzaG91bGRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTc6NTguNTg3MDQyNTAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODMxNzQ0MTI5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiQ09NUEFDVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfcGFnZXNcIixcbiAgICBcImRvX21pZ3JhdGVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZkZjBlMWJhNzZhYjgxNGJiNGEzZDgyZDE3MDFjODFlZjVhZWEzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAzOjU3OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCBhYjE1YTRkZGRkMDQ3MS4uYjkzN2NiZDc2NDgwODcgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTE4NDMsNyArMTg0Myw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRcdGlzX3RocCA9IGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKTtcbiBcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbitcdFx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGUgcmFyZSBmb2xpbyBvbiB0aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCBzaG91bGRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU3OjU4LjU4NzA0NDAyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzU2MDQwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbWlncmF0ZS5jYC4gSXQncyBhIHNpbmdsZS1saW5lIGRpZmYsIHJlYWxseSBxdWl0ZSBtaW5vci4gV2UncmUgcmVwbGFjaW5nIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgLiBGdW5jdGlvbmFsbHksIGl0J3MgYSBzY2hlZHVsaW5nIHR3ZWFrLiBJdCdzIGEgc21hbGwgY2hhbmdlLCBidXQgbGV0IG1lIHRoaW5rLi4uIGBtaWdyYXRlX3BhZ2VzX2JhdGNoYC4uLiB0aGF0J3MgYSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIFJpZ2h0LCBzbyBldmVuIGEgdGlueSBzY2hlZHVsaW5nIGNoYW5nZSBpbiBhIGZ1bmN0aW9uIGxpa2UgdGhhdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWlncmF0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGZ1enppbmcgc2VlbXMgbGlrZSBhIHBydWRlbnQgc3RlcC4gVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWlncmF0ZV9wYWdlc19iYXRjaGAgaXRzZWxmLCBvciBtYXliZSBldmVuIGl0cyByZWxhdGVkIGZ1bmN0aW9uIGBtaWdyYXRlX3BhZ2VzYC4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBtbS9taWdyYXRlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgbWlncmF0ZV9wYWdlc19iYXRjaGAgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjAzLjQyMjY1MjQyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgwNDA4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9wYWdlc19iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTE3ODI9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE4MDUtLypcXG5tbS9taWdyYXRlLmM6MTgwNjogKiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCkgZmlyc3QgdW5tYXBzIGZvbGlvcyBpbiB0aGUgZnJvbSBsaXN0IGFzIG1hbnkgYXNcXG5tbS9taWdyYXRlLmMtMTgwNy0gKiBwb3NzaWJsZSwgdGhlbiBtb3ZlIHRoZSB1bm1hcHBlZCBmb2xpb3MuXFxuLS1cXG5tbS9taWdyYXRlLmMtMTgxMy0gKi9cXG5tbS9taWdyYXRlLmM6MTgxNDpzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG5tbS9taWdyYXRlLmMtMTgxNS1cXHRcXHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODU2LVxcdFxcdFxcdCAqIG90aGVyd2lzZSBzdGF0cyBpbmNvbnNpc3RlbmN5IHdpbGwgaGFwcGVuIHdoZW5cXG5tbS9taWdyYXRlLmM6MTg1NzpcXHRcXHRcXHQgKiBtaWdyYXRlX3BhZ2VzX2JhdGNoIGlzIGNhbGxlZCB2aWEgbWlncmF0ZV9wYWdlcygpXFxubW0vbWlncmF0ZS5jLTE4NTgtXFx0XFx0XFx0ICogd2l0aCBNSUdSQVRFX1NZTkMgYW5kIE1JR1JBVEVfQVNZTkMuXFxuLS1cXG5tbS9taWdyYXRlLmM9MjAyNj1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwMzctXFx0LyogVHJ5IHRvIG1pZ3JhdGUgaW4gYmF0Y2ggd2l0aCBNSUdSQVRFX0FTWU5DIG1vZGUgZmlyc3RseSAqL1xcbm1tL21pZ3JhdGUuYzoyMDM4OlxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChmcm9tLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLCBNSUdSQVRFX0FTWU5DLFxcbm1tL21pZ3JhdGUuYy0yMDM5LVxcdFxcdFxcdFxcdCByZWFzb24sIFxcdTAwMjZmb2xpb3MsIHNwbGl0X2ZvbGlvcywgXFx1MDAyNmFzdGF0cyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMDY0LVxcdFxcdGxpc3RfbW92ZShmcm9tLVxcdTAwM2VuZXh0LCBcXHUwMDI2Zm9saW9zKTtcXG5tbS9taWdyYXRlLmM6MjA2NTpcXHRcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjA2Ni1cXHRcXHRcXHRcXHRcXHQgcHJpdmF0ZSwgbW9kZSwgcmVhc29uLCByZXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jPTIxMDM9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTQxLVxcdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXFxubW0vbWlncmF0ZS5jOjIxNDI6XFx0XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNDMtXFx0XFx0XFx0XFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcXHUwMDI2cmV0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTYxLVxcdFxcdCAqL1xcbm1tL21pZ3JhdGUuYzoyMTYyOlxcdFxcdG1pZ3JhdGVfcGFnZXNfYmF0Y2goXFx1MDAyNnNwbGl0X2ZvbGlvcywgZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjE2My1cXHRcXHRcXHRcXHRwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLCBNSUdSQVRFX0FTWU5DLCByZWFzb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjAzLjU3MDcwNDc3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDAxODM0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIE1pZ3JhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYWdlIG1pZ3JhdGlvbiBjb2RlLiBMZXQncyBzZWUuLi4gYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIHRoZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uLCBhbmQgYG1pZ3JhdGVfcGFnZXNgIGlzIHRoZSBvbmUgd2UgZXhwb3J0LCByaWdodD8gR290IGl0LiBOb3csIHRoYXQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgY2FsbC4uLiBobW1tLCB0aGF0J3MganVzdCBhIHNjaGVkdWxpbmcgcG9pbnQsIGlzbid0IGl0PyBJdCBkb2Vzbid0ICpmdW5kYW1lbnRhbGx5KiBhbHRlciB0aGUgYWxnb3JpdGhtLCBidXQgaXQgZG9lcyBpbmZsdWVuY2UgdGhlIFJDVSBxdWllc2NlbnQgc3RhdGVzLCB3aGljaCBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIEkgdGhpbmsuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBpdCdzIHdvcnRoIGZ1enppbmcgdGhpcyBhcmVhLiBZZXMsIGFic29sdXRlbHkuIElmIHRoYXQgc2NoZWR1bGluZyBwb2ludCAqd2FzKiBtaXNzaW5nLCBpdCBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gUkNVIHN0YWxscy4gU28gZnV6emluZyBpcyBhIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIGFuZCBjb25maXJtIHRoZSBpbnRlbmRlZCBmdW5jdGlvbi5cblxuTGV0IG1lIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scywgc3BlY2lmaWNhbGx5IGBtaWdyYXRlX3BhZ2VzYC4gSSdsbCBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01JR1JBVElPTmAgaXMgcHJvYmFibHkgcmVxdWlyZWQsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBieSBsb29raW5nIGluIGBtbS9LY29uZmlnYCBvciBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODowNy4zNzA4OTEyOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODgzMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05Nz1vYmotJChDT05GSUdfTUVNVEVTVClcXHRcXHQrPSBtZW10ZXN0Lm9cXG5tbS9NYWtlZmlsZTo5ODpvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm9cXG5tbS9NYWtlZmlsZS05OS1vYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MDcuNTAxNzc5OTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODMzMTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBtaWdyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGBDT05GSUdfTUlHUkFUSU9OYCBpbiBteSBtaW5kLiBXaGVyZSB3b3VsZCB0aGF0IGNvbmZpZ3VyYXRpb24gYmUgZGVmaW5lZD8gQWgsIHllcywgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknZCBnbyBzdHJhaWdodCB0byBgbW0vS2NvbmZpZ2AuIEl0J3MgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciBhbnl0aGluZyBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIHdoYXQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiwgYW55IGRlcGVuZGVuY2llcywgbWF5YmUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBpdHMgcHVycG9zZSwgYW5kIHBvdGVudGlhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBtZW1vcnkgYXJjaGl0ZWN0dXJlLCBzbyBJIGNhbiBhY2N1cmF0ZWx5IGludGVycHJldCBpdHMgcm9sZSBpbiB3aGF0ZXZlciBzeXN0ZW0gb3Igc2NlbmFyaW8gd2UncmUgZGVhbGluZyB3aXRoLiBMZXQncyBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoxMC41MzAxMTQ3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNDc4MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgxLVxcbm1tL0tjb25maWc6NjgyOmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjEwLjY2MTYwNzYxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjQyNjI1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIGBNSUdSQVRJT05gIEZsYWcncyBPcmlnaW5zKipcblxuUmlnaHQsIHNvIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiBmbGFnLCBhbmQgaXRzIHN0YXRlIGlzIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGBOVU1BYCwgYENPTVBBQ1RJT05gLCBvciBgTUVNT1JZX0hPVFBMVUdgIG9wZXJhdGlvbnMuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0ICp3aGljaCogb2YgdGhvc2UgY29tcG9uZW50cyBpcyB0aGUgb25lIGN1cnJlbnRseSBzZXR0aW5nIGl0LCBvciB3aGF0IHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgYXJlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgYE1JR1JBVElPTmAgZmxhZyB0byB1bmRlcnN0YW5kIGl0cyBhY3R1YWwgdHJpZ2dlciwgYXMgSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkIGJ1dCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmFjdHVhbGx5KiBkcml2aW5nIHRoZSBjdXJyZW50IHN0YXRlLiBOZWVkIHRvIGNoZWNrIHdoYXQgbG9naWMgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MTMuNjI1ODczMjc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA0MzQ0NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgwPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbm1tL0tjb25maWc6NTgyOlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTU4My1cXG4tLVxcbm1tL0tjb25maWc9NjQwPWNvbmZpZyBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY0Mi1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NDQtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbm1tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NzQtXFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWc6Njc1OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3Ni1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwNTM9Y29uZmlnIENNQVxcbi0tXFxubW0vS2NvbmZpZy0xMDU1LVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzoxMDU2OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTEwNTctXFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MTYuMDMwMjI1OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NDU3NTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZXN0aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgQ09NUEFDVElPTiBhbmQgTUlHUkFUSU9OKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgYENPTVBBQ1RJT05gIGlzIGEgZ29vZCB3YXkgdG8gdHJpZ2dlciwgb3IgYXNzaXN0IHdpdGgsIGBNSUdSQVRJT05gLiBUaGF0IG1ha2VzIGludHVpdGl2ZSBzZW5zZSwgdGhleSdyZSBvZnRlbiBsaW5rZWQuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJJ20gcHJldHR5IHN1cmUgYENPTVBBQ1RJT05gIGFscmVhZHkgaW1wbGllcyBgTUlHUkFUSU9OYC4gWWVwLCBsb29raW5nIGF0IHRoZSBjb25maWcsIGBNSUdSQVRJT05gIGRlZmF1bHRzIHRvICd5JyB3aGVuIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkLiBPa2F5LCBnb29kIHRvIGtub3cgSSdtIG9uIHRoZSByaWdodCB0cmFjayBjb25jZXB0dWFsbHksIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBtZWNoYW5pY3MuIExldCdzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBtaWdyYXRlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoxOS4wODQ4MDQxNTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTQ1ODk2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjE5LjUwMDI3MjI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk1Nzc3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV9wYWdlc2AgRXhwb3J0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyBhIHJlZmVyZW5jZSB0byBgbWlncmF0ZV9wYWdlc2AgYmVpbmcgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gb3IgdmFyaWFibGUuIFRoYXQgc2VlbXPigKYgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiB0aGlzIGlzLCBpbiBmYWN0LCBleHBvc2VkIGZvciBleHRlcm5hbCB1c2FnZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgY291bGQgb3BlbiB0aGUgZG9vciB0byBhIGxvdCBvZiB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBlbmNhcHN1bGF0ZWQgd2l0aGluIGBtaWdyYXRlX3BhZ2VzYC4gSSdsbCB3YW50IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZSBhbmQgaW50ZW5kZWQgdXNlLiBUaGUgZG9jdW1lbnRhdGlvbiBzaG91bGQgY2xhcmlmeSB0aGF0LCBidXQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpdHNlbGYgdG8gYmUgc3VyZS4gSWYgaXQgKmlzKiBleHBvcnRlZCwgaXQncyB3b3J0aCBkaWdnaW5nIGEgYml0IGRlZXBlciB0byBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoyMi42ODk4NTM3ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDAwMzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9MTU5ND1zdGF0aWMgaW5saW5lIGludCB0cnlfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE2MjItXFxubW0vbWlncmF0ZS5jOjE2MjM6c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xcbm1tL21pZ3JhdGUuYy0xNjI0LVxcdGludCBucl9zdWNjZWVkZWQ7XFx0LyogTm9ybWFsIGFuZCBsYXJnZSBmb2xpb3MgbWlncmF0ZWQgc3VjY2Vzc2Z1bGx5LCBpblxcbi0tXFxubW0vbWlncmF0ZS5jPTE2NDE9c3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTY0My1cXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxubW0vbWlncmF0ZS5jOjE2NDQ6XFx0XFx0XFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcXG5tbS9taWdyYXRlLmMtMTY0NS1cXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNzMwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX21vdmUoc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNzM0LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsXFxubW0vbWlncmF0ZS5jOjE3MzU6XFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxcbm1tL21pZ3JhdGUuYy0xNzM2LVxcdFxcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNzgyPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODA1LS8qXFxubW0vbWlncmF0ZS5jOjE4MDY6ICogbWlncmF0ZV9wYWdlc19iYXRjaCgpIGZpcnN0IHVubWFwcyBmb2xpb3MgaW4gdGhlIGZyb20gbGlzdCBhcyBtYW55IGFzXFxubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxcbi0tXFxubW0vbWlncmF0ZS5jLTE4MTMtICovXFxubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxubW0vbWlncmF0ZS5jLTE4MTUtXFx0XFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTgxNy1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXFxubW0vbWlncmF0ZS5jOjE4MTg6XFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcXG5tbS9taWdyYXRlLmMtMTgxOS17XFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1MS1cXHRcXHRcXHQgKiBidXQgaW5jcmVtZW50IG5yX2ZhaWxlZCBiZWNhdXNlLCB3aXRob3V0IGRvaW5nIHNvLFxcbm1tL21pZ3JhdGUuYzoxODUyOlxcdFxcdFxcdCAqIG1pZ3JhdGVfcGFnZXMoKSBtYXkgcmVwb3J0IHN1Y2Nlc3Mgd2l0aCAoc3BsaXQgYnV0XFxubW0vbWlncmF0ZS5jLTE4NTMtXFx0XFx0XFx0ICogdW5taWdyYXRlZCkgcGFnZXMgc3RpbGwgb24gaXRzIGZyb21saXN0OyB3aGVyZWFzIGl0XFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1Ni1cXHRcXHRcXHQgKiBvdGhlcndpc2Ugc3RhdHMgaW5jb25zaXN0ZW5jeSB3aWxsIGhhcHBlbiB3aGVuXFxubW0vbWlncmF0ZS5jOjE4NTc6XFx0XFx0XFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxcbm1tL21pZ3JhdGUuYy0xODU4LVxcdFxcdFxcdCAqIHdpdGggTUlHUkFURV9TWU5DIGFuZCBNSUdSQVRFX0FTWU5DLlxcbi0tXFxubW0vbWlncmF0ZS5jLTIwMjUtXFxubW0vbWlncmF0ZS5jOjIwMjY6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjAyNy1cXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwMjktXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbm1tL21pZ3JhdGUuYzoyMDMwOlxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcXG5tbS9taWdyYXRlLmMtMjAzMS17XFxuLS1cXG5tbS9taWdyYXRlLmMtMjAzMy1cXHRMSVNUX0hFQUQoZm9saW9zKTtcXG5tbS9taWdyYXRlLmM6MjAzNDpcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyBhc3RhdHM7XFxubW0vbWlncmF0ZS5jLTIwMzUtXFxuLS1cXG5tbS9taWdyYXRlLmMtMjAzNy1cXHQvKiBUcnkgdG8gbWlncmF0ZSBpbiBiYXRjaCB3aXRoIE1JR1JBVEVfQVNZTkMgbW9kZSBmaXJzdGx5ICovXFxubW0vbWlncmF0ZS5jOjIwMzg6XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXFxubW0vbWlncmF0ZS5jLTIwMzktXFx0XFx0XFx0XFx0IHJlYXNvbiwgXFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcXHUwMDI2YXN0YXRzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwNjQtXFx0XFx0bGlzdF9tb3ZlKGZyb20tXFx1MDAzZW5leHQsIFxcdTAwMjZmb2xpb3MpO1xcbm1tL21pZ3JhdGUuYzoyMDY1OlxcdFxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMDY2LVxcdFxcdFxcdFxcdFxcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjA3Ny0vKlxcbm1tL21pZ3JhdGUuYzoyMDc4OiAqIG1pZ3JhdGVfcGFnZXMgLSBtaWdyYXRlIHRoZSBmb2xpb3Mgc3BlY2lmaWVkIGluIGEgbGlzdCwgdG8gdGhlIGZyZWUgZm9saW9zXFxubW0vbWlncmF0ZS5jLTIwNzktICpcXHRcXHQgICBzdXBwbGllZCBhcyB0aGUgdGFyZ2V0IGZvciB0aGUgcGFnZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTAyLSAqL1xcbm1tL21pZ3JhdGUuYzoyMTAzOmludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxMDQtXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTEyLVxcdExJU1RfSEVBRChzcGxpdF9mb2xpb3MpO1xcbm1tL21pZ3JhdGUuYzoyMTEzOlxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHN0YXRzO1xcbm1tL21pZ3JhdGUuYy0yMTE0LVxcbm1tL21pZ3JhdGUuYzoyMTE1OlxcdHRyYWNlX21tX21pZ3JhdGVfcGFnZXNfc3RhcnQobW9kZSwgcmVhc29uKTtcXG5tbS9taWdyYXRlLmMtMjExNi1cXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTQxLVxcdGlmIChtb2RlID09IE1JR1JBVEVfQVNZTkMpXFxubW0vbWlncmF0ZS5jOjIxNDI6XFx0XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNDMtXFx0XFx0XFx0XFx0cHJpdmF0ZSwgbW9kZSwgcmVhc29uLCBcXHUwMDI2cmV0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTQ2LVxcdGVsc2VcXG5tbS9taWdyYXRlLmM6MjE0NzpcXHRcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfc3luYyhcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMTQ4LVxcdFxcdFxcdFxcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjE2MS1cXHRcXHQgKi9cXG5tbS9taWdyYXRlLmM6MjE2MjpcXHRcXHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNjMtXFx0XFx0XFx0XFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIxODgtXFx0Y291bnRfdm1fZXZlbnRzKFRIUF9NSUdSQVRJT05fU1BMSVQsIHN0YXRzLm5yX3RocF9zcGxpdCk7XFxubW0vbWlncmF0ZS5jOjIxODk6XFx0dHJhY2VfbW1fbWlncmF0ZV9wYWdlcyhzdGF0cy5ucl9zdWNjZWVkZWQsIHN0YXRzLm5yX2ZhaWxlZF9wYWdlcyxcXG5tbS9taWdyYXRlLmMtMjE5MC1cXHRcXHRcXHQgICAgICAgc3RhdHMubnJfdGhwX3N1Y2NlZWRlZCwgc3RhdHMubnJfdGhwX2ZhaWxlZCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMjUxPXN0YXRpYyBpbnQgZG9fbW92ZV9wYWdlc190b19ub2RlKHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0LCBpbnQgbm9kZSlcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMjU5LVxcbm1tL21pZ3JhdGUuYzoyMjYwOlxcdGVyciA9IG1pZ3JhdGVfcGFnZXMocGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXFxubW0vbWlncmF0ZS5jLTIyNjEtXFx0XFx0KHVuc2lnbmVkIGxvbmcpXFx1MDAyNm10YywgTUlHUkFURV9TWU5DLCBNUl9TWVNDQUxMLCBOVUxMKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjUwPXN0YXRpYyBib29sIG1pZ3JhdGVfYmFsYW5jZWRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9taWdyYXRlLmM6MjY1MTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX21pZ3JhdGVfcGFnZXMpXFxubW0vbWlncmF0ZS5jLTI2NTIte1xcbi0tXFxubW0vbWlncmF0ZS5jLTI2NjMtXFx0XFx0XFx0XFx0ICAgICAgIGhpZ2hfd21hcmtfcGFnZXMoem9uZSkgK1xcbm1tL21pZ3JhdGUuYzoyNjY0OlxcdFxcdFxcdFxcdCAgICAgICBucl9taWdyYXRlX3BhZ2VzLFxcbm1tL21pZ3JhdGUuYy0yNjY1LVxcdFxcdFxcdFxcdCAgICAgICBaT05FX01PVkFCTEUsIEFMTE9DX0NNQSkpXFxuLS1cXG5tbS9taWdyYXRlLmM9Mjc1OD1pbnQgbWlncmF0ZV9taXNwbGFjZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5vZGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjc2Ny1cXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNm1pZ3JhdGVwYWdlcyk7XFxubW0vbWlncmF0ZS5jOjI3Njg6XFx0bnJfcmVtYWluaW5nID0gbWlncmF0ZV9wYWdlcyhcXHUwMDI2bWlncmF0ZXBhZ2VzLCBhbGxvY19taXNwbGFjZWRfZHN0X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yNzY5LVxcdFxcdFxcdFxcdCAgICAgTlVMTCwgbm9kZSwgTUlHUkFURV9BU1lOQyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MjIuNzkzODY1OTc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzQ3NjcyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWlncmF0ZV9wYWdlc2AncyBBY2Nlc3NpYmlsaXR5KipcblxuQWxyaWdodCwgc28gYG1pZ3JhdGVfcGFnZXNgLi4uIGl0J3MgZXhwb3J0ZWQsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpdCdzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzICppbnRlbmRlZCogdG8gYmUgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgc2NvcGUsIHJpZ2h0PyBCdXQgaW50ZW50aW9uIGFuZCByZWFsaXR5IGNhbiBiZSB0d28gZGlmZmVyZW50IHRoaW5ncy4gQmVzdCB0byBiZSBzdXJlLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYXMgdGhlIGNvZGUgc3VnZ2VzdHMsIGp1c3QgdG8gY29uZmlybS4gR290dGEgY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjI1LjY2ODYzOTY2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzc1OTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiptaWdyYXRlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MjUuNzkwMDIyNTUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTIyNDIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtaWdyYXRlX3BhZ2VzYCBGdW5jdGlvbioqXG5cbkhtbSwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBJIHdhcyBleHBlY3RpbmcgYG1pZ3JhdGVfcGFnZXNgIHRvIGJlIHJlYWRpbHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gbXkgbW9kdWxlLCBidXQgaXQgc2VlbXMgbGlrZSB0aGUgY29tcGlsZXIgaXNuJ3QgcmVjb2duaXppbmcgaXQuIFRoYXQncyBhIHJlZCBmbGFnLiBUaGUgbW9zdCBsaWtlbHkgY3VscHJpdCBpcyB0aGF0IGl0J3Mgbm90IGJlaW5nIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYG1pZ3JhdGVfcGFnZXNgIGlzIGFjdHVhbGx5IGJlaW5nIG1hZGUgYXZhaWxhYmxlIGZvciBtb2R1bGVzIHRvIHVzZSwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBpcyBgbW0vbWlncmF0ZS5jYC4gSSdsbCBpbW1lZGlhdGVseSBjaGVjayBmb3IgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybydzIGFwcGxpY2F0aW9uIHRvIHRoYXQgZnVuY3Rpb24gZGVjbGFyYXRpb24uIFRoaXMgd2lsbCBxdWlja2x5IHRlbGwgbWUgaWYgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGludGVuZGVkIGZvciBpdCB0byBiZSBjYWxsYWJsZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGtlcm5lbCBjb2RlLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknbGwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODoyOC44NDIyNjc2MTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTQzNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz01OD1pbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTc5LX1cXG5tbS9taWdyYXRlLmM6ODA6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21vdmFibGVfb3BzKTtcXG5tbS9taWdyYXRlLmMtODEtXFxuLS1cXG5tbS9taWdyYXRlLmM9NzI2PWludCBmb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNzM1LX1cXG5tbS9taWdyYXRlLmM6NzM2OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9tYXBwaW5nKTtcXG5tbS9taWdyYXRlLmMtNzM3LVxcbi0tXFxubW0vbWlncmF0ZS5jPTc3OD12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjYtfVxcbm1tL21pZ3JhdGUuYzo4Njc6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY4LVxcbi0tXFxubW0vbWlncmF0ZS5jPTkxMD1pbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtOTE1LX1cXG5tbS9taWdyYXRlLmM6OTE2OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9mb2xpbyk7XFxubW0vbWlncmF0ZS5jLTkxNy1cXG4tLVxcbm1tL21pZ3JhdGUuYz0xMDM4PWludCBidWZmZXJfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMDQyLX1cXG5tbS9taWdyYXRlLmM6MTA0MzpFWFBPUlRfU1lNQk9MKGJ1ZmZlcl9taWdyYXRlX2ZvbGlvKTtcXG5tbS9taWdyYXRlLmMtMTA0NC1cXG4tLVxcbm1tL21pZ3JhdGUuYz0xMDU5PWludCBidWZmZXJfbWlncmF0ZV9mb2xpb19ub3JlZnMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtMTA2My19XFxubW0vbWlncmF0ZS5jOjEwNjQ6RVhQT1JUX1NZTUJPTF9HUEwoYnVmZmVyX21pZ3JhdGVfZm9saW9fbm9yZWZzKTtcXG5tbS9taWdyYXRlLmMtMTA2NS0jZW5kaWYgLyogQ09ORklHX0JVRkZFUl9IRUFEICovXFxuLS1cXG5tbS9taWdyYXRlLmM9MTA2Nz1pbnQgZmlsZW1hcF9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTEwNzEtfVxcbm1tL21pZ3JhdGUuYzoxMDcyOkVYUE9SVF9TWU1CT0xfR1BMKGZpbGVtYXBfbWlncmF0ZV9mb2xpbyk7XFxubW0vbWlncmF0ZS5jLTEwNzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjI4Ljk0MDIyMDg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzA4NTE2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbWlncmF0ZV9wYWdlc2AgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhhdCBgbWlncmF0ZV9wYWdlc2AgaXNuJ3QgZGlyZWN0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBjbGVhcmx5IGEgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGRlZXBseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsLiBJdCdzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLlxuXG5UaGUgY29yZSBjaGFuZ2UgaGVyZSBpcyB0aGUgc3Vic3RpdHV0aW9uIG9mIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYC4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBzaGlmdDsgaXQncyBtZXNzaW5nIHdpdGggUkNVIHF1aWVzY2VudCBzdGF0ZXMsIHNvIHRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5UaGUgbmV4dCB0aGluZyBJJ20gYXNraW5nIGlzOiBkbyB3ZSBuZWVkIHRvIGZ1enogdGhpcz8gWWVzLCBwcm9iYWJseS5cblxuTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbWlncmF0ZV9wYWdlc2AuIEJ1dCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MgdGhhdCBpbXBhY3QgaXQuIEkgc2VlIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIChvciBgQ09ORklHX0NPTVBBQ1RJT05gLCB3aGljaCBpbmRpcmVjdGx5IGVuYWJsZXMgaXQpIGlzIHRoZSBrZXkuIEFuZCwgc2luY2UgYENPTkZJR19NSUdSQVRJT05gIGlzIGEgYm9vbGVhbiwgSSBjYW4gYWRkIGl0IHRvIGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGl0IGluIHRoZSBmdXp6aW5nLlxuXG5Ob3csIGhvbGQgb24uIElzIGBtaWdyYXRlX3BhZ2VzYCB0aGUgKmJlc3QqIGZvY3VzIHN5bWJvbD8gSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgZnVydGhlci4gSSBzZWUgdGhhdCBgbWlncmF0ZV9wYWdlc2Agc2VydmVzIGFzIGFuIGVudHJ5IHBvaW50IGZvciBgbWlncmF0ZV9wYWdlc19iYXRjaGAuIExldCdzIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjMzLjY3MTA3NjkxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDI0MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfcGFnZXNfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0xNzgyPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODA1LS8qXFxubW0vbWlncmF0ZS5jOjE4MDY6ICogbWlncmF0ZV9wYWdlc19iYXRjaCgpIGZpcnN0IHVubWFwcyBmb2xpb3MgaW4gdGhlIGZyb20gbGlzdCBhcyBtYW55IGFzXFxubW0vbWlncmF0ZS5jLTE4MDctICogcG9zc2libGUsIHRoZW4gbW92ZSB0aGUgdW5tYXBwZWQgZm9saW9zLlxcbi0tXFxubW0vbWlncmF0ZS5jLTE4MTMtICovXFxubW0vbWlncmF0ZS5jOjE4MTQ6c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxubW0vbWlncmF0ZS5jLTE4MTUtXFx0XFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1Ni1cXHRcXHRcXHQgKiBvdGhlcndpc2Ugc3RhdHMgaW5jb25zaXN0ZW5jeSB3aWxsIGhhcHBlbiB3aGVuXFxubW0vbWlncmF0ZS5jOjE4NTc6XFx0XFx0XFx0ICogbWlncmF0ZV9wYWdlc19iYXRjaCBpcyBjYWxsZWQgdmlhIG1pZ3JhdGVfcGFnZXMoKVxcbm1tL21pZ3JhdGUuYy0xODU4LVxcdFxcdFxcdCAqIHdpdGggTUlHUkFURV9TWU5DIGFuZCBNSUdSQVRFX0FTWU5DLlxcbi0tXFxubW0vbWlncmF0ZS5jPTIwMjY9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMDM3LVxcdC8qIFRyeSB0byBtaWdyYXRlIGluIGJhdGNoIHdpdGggTUlHUkFURV9BU1lOQyBtb2RlIGZpcnN0bHkgKi9cXG5tbS9taWdyYXRlLmM6MjAzODpcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQyxcXG5tbS9taWdyYXRlLmMtMjAzOS1cXHRcXHRcXHRcXHQgcmVhc29uLCBcXHUwMDI2Zm9saW9zLCBzcGxpdF9mb2xpb3MsIFxcdTAwMjZhc3RhdHMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjA2NC1cXHRcXHRsaXN0X21vdmUoZnJvbS1cXHUwMDNlbmV4dCwgXFx1MDAyNmZvbGlvcyk7XFxubW0vbWlncmF0ZS5jOjIwNjU6XFx0XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZmb2xpb3MsIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIwNjYtXFx0XFx0XFx0XFx0XFx0IHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgcmV0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTAzPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMjE0MS1cXHRpZiAobW9kZSA9PSBNSUdSQVRFX0FTWU5DKVxcbm1tL21pZ3JhdGUuYzoyMTQyOlxcdFxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMTQzLVxcdFxcdFxcdFxcdHByaXZhdGUsIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjE2MS1cXHRcXHQgKi9cXG5tbS9taWdyYXRlLmM6MjE2MjpcXHRcXHRtaWdyYXRlX3BhZ2VzX2JhdGNoKFxcdTAwMjZzcGxpdF9mb2xpb3MsIGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTIxNjMtXFx0XFx0XFx0XFx0cHV0X25ld19mb2xpbywgcHJpdmF0ZSwgTUlHUkFURV9BU1lOQywgcmVhc29uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODozMy44MDU1MDgyMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3OTMzMDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBtaWdyYXRlX3BhZ2VzYCBGdW5jdGlvbiBDYWxsIEhpZXJhcmNoeSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHByZXR0eSBjbGVhciBwYXR0ZXJuIGluIGhvdyB0aGVzZSBwYWdlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0IGxvb2tzIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0J3MgY2FsbGVkIGJ5IGJvdGggYG1pZ3JhdGVfcGFnZXNfc3luY2AgYW5kIGBtaWdyYXRlX3BhZ2VzYC4gVGhhdCBtZWFucyBpdCdzIHRoZSBjb3JlIG9mIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzIGl0c2VsZi4gTm93LCBgbWlncmF0ZV9wYWdlc19zeW5jYCBpcyBhbHNvIGNhbGxlZCBieSBgbWlncmF0ZV9wYWdlc2AuIFRoaXMgZ2l2ZXMgbWUgdGhlIGZlZWxpbmcgdGhhdCBgbWlncmF0ZV9wYWdlc2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgbWlncmF0aW9uIG9wZXJhdGlvbi4gU2VlbXMgbGlrZSBhIHRvcC1sZXZlbCBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaGUgbmV4dCBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgaG93IGlzIHRoZSBzeXN0ZW0gY2FsbGluZyB0aGlzLiBJIHdhbnQgdG8gc2VlIGlmIGBtaWdyYXRlX3BhZ2VzYCBpcyBpbnZva2VkIGJ5IGFueSBzeXN0ZW0gY2FsbHMgb3Igbm90LiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIGZvciB0aGVzZSBtaWdyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTg6MzcuMjg0ODQ1MTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNjUzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc0Ni1cXHRcXHRcXHQgKlxcbm1tL21lbXBvbGljeS5jOjc0NzpcXHRcXHRcXHQgKiBtaWdyYXRlX3BhZ2VzKFxcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xcbm1tL21lbXBvbGljeS5jLTc0OC1cXHRcXHRcXHQgKiBjaGVjayBcXFwibGFyZ2VcXFwiIG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MTI4NT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMyMS1cXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSkge1xcbm1tL21lbXBvbGljeS5jOjEzMjI6XFx0XFx0ZXJyID0gbWlncmF0ZV9wYWdlcyhcXHUwMDI2cGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMTMyMy1cXHRcXHRcXHQodW5zaWduZWQgbG9uZylcXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX1NZU0NBTEwsIE5VTEwpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoxMzM5OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTEzNDAtXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTM4Ny1cXHRcXHRcXHQvKlxcbm1tL21lbXBvbGljeS5jOjEzODg6XFx0XFx0XFx0ICogZG9fbWlncmF0ZV9wYWdlcygpIHRyaWVzIHRvIG1haW50YWluIHRoZSByZWxhdGl2ZVxcbm1tL21lbXBvbGljeS5jLTEzODktXFx0XFx0XFx0ICogbm9kZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhZ2VzIGVzdGFibGlzaGVkIGJldHdlZW5cXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0NzA9c3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ3NS1cXG5tbS9tZW1wb2xpY3kuYzoxNDc2OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTE0NzctXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ4OT1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE2MTYtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSkge1xcbm1tL21lbXBvbGljeS5jOjE2MTc6XFx0XFx0bnJfZmFpbGVkIHw9IG1pZ3JhdGVfcGFnZXMoXFx1MDAyNnBhZ2VsaXN0LFxcbm1tL21lbXBvbGljeS5jLTE2MTgtXFx0XFx0XFx0XFx0YWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sLCBOVUxMLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTg1Nz1TWVNDQUxMX0RFRklORTMoc2V0X21lbXBvbGljeSwgaW50LCBtb2RlLCBjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE4NjItXFxubW0vbWVtcG9saWN5LmM6MTg2MzpzdGF0aWMgaW50IGtlcm5lbF9taWdyYXRlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBtYXhub2RlLFxcbm1tL21lbXBvbGljeS5jLTE4NjQtXFx0XFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm9sZF9ub2RlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE5MzQtXFxubW0vbWVtcG9saWN5LmM6MTkzNTpcXHRlcnIgPSBkb19taWdyYXRlX3BhZ2VzKG1tLCBvbGQsIG5ldyxcXG5tbS9tZW1wb2xpY3kuYy0xOTM2LVxcdFxcdGNhcGFibGUoQ0FQX1NZU19OSUNFKSA/IE1QT0xfTUZfTU9WRV9BTEwgOiBNUE9MX01GX01PVkUpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMTk0OC1cXG5tbS9tZW1wb2xpY3kuYzoxOTQ5OlNZU0NBTExfREVGSU5FNChtaWdyYXRlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLFxcbm1tL21lbXBvbGljeS5jLTE5NTAtXFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiwgb2xkX25vZGVzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTk1Mi17XFxubW0vbWVtcG9saWN5LmM6MTk1MzpcXHRyZXR1cm4ga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkLCBtYXhub2RlLCBvbGRfbm9kZXMsIG5ld19ub2Rlcyk7XFxubW0vbWVtcG9saWN5LmMtMTk1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjM3LjM5NzExNzE3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQyOTEyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbWlncmF0ZV9wYWdlc2AgU3lzdGVtIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgdGhlIGBtaWdyYXRlX3BhZ2VzYCBzeXN0ZW0gY2FsbC4gVGhlIGZhY3QgdGhhdCBgU1lTQ0FMTF9ERUZJTkU0KG1pZ3JhdGVfcGFnZXMsIC4uLilgIGV4aXN0cyBjb25maXJtcyBpdCdzIGEgcmVhbCBlbnRyeSBwb2ludCwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBjYW4gdGFyZ2V0IGFuZCBmdXp6LiBUaGlzIGlzIHByb21pc2luZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLCBzbyBsZXQncyBhZGQgYG1pZ3JhdGVfcGFnZXNgIGl0c2VsZiwgbmF0dXJhbGx5LiBBbHNvLCBJIG5lZWQgdG8gaW5jbHVkZSBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBrZXJuZWxfbWlncmF0ZV9wYWdlc2AsIHdoaWNoIEkgZXhwZWN0IHdpbGwgYmUgY3J1Y2lhbCBpbiB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24gcGF0aC4gTG9va3MgbGlrZSBgbWlncmF0ZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGUuY2AgaXMgdGhlIGNvcmUsIHNvIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfTUlHUkFUSU9OYCBhcmUgZW5hYmxlZC4gVGhlc2UgY29uZmlndXJhdGlvbnMgd2lsbCBsaWtlbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBhbmQgYXZhaWxhYmlsaXR5IG9mIGBtaWdyYXRlX3BhZ2VzYCBzdWJzdGFudGlhbGx5LiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBzZXQgdXAgdG8gZG8gcGFnZSBtaWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQxLjc0MDAzMzA2MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMjQwMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgxLVxcbm1tL0tjb25maWc6NjgyOmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQxLjg5MTI4MDgyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU3MDU1MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNaWdyYXRpb24gU3RhdHVzIHdpdGggTlVNQSoqXG5cblJpZ2h0LCBzbyB3ZSBoYXZlIHRoaXMgYm9vbGVhbiB2YXJpYWJsZSwgYE1JR1JBVElPTmAuIENsZWFybHksIGl0IGluZGljYXRlcyB3aGV0aGVyIHNvbWUgc29ydCBvZiBtaWdyYXRpb24gcHJvY2VzcyBpcyBlbmFibGVkIG9yIHJlcXVpcmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogKndoYXQgaXMgaW5mbHVlbmNpbmcgdGhpcyBzdGF0ZSo/IE1vcmUgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgYE5VTUFgIGZhY3RvcnMgaW50byB0aGlzLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBpcyBkcml2aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBgTUlHUkFUSU9OYCBmbGFnLiBUaGlzIGNvdWxkIGJlIGZvciBhIGZldyByZWFzb25zLiBQZXJoYXBzIE5VTUEgaXMgYmVpbmcgdXNlZCB0byAqZW5hYmxlKiBtaWdyYXRpb24sIG9yIHBvc3NpYmx5IGRpc2FibGUgaXQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBNYXliZSBOVU1BIG5vZGUgYXdhcmVuZXNzIGlzIGEgdHJpZ2dlciwgb3IgcmVsYXRlZCB0byB0aGUgbG9jYXRpb24gd2hlcmUgcmVzb3VyY2VzIGFyZSBwbGFjZWQuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gVGhlIGNvZGUgYW5kL29yIHRoZSBkZXNpZ24gZG9jdW1lbnRhdGlvbiBvdWdodCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODo0NS43NDgzNDA2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzQ2NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTU4MD1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctNTgxLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG5tbS9LY29uZmlnOjU4MjpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01ODMtXFxuLS1cXG5tbS9LY29uZmlnPTY0MD1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NDItXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NDM6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjQ0LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjc0LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY3NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NzYtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDUzPWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA1NS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA1NjpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDU3LVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQ1Ljg5MzA5MzExN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA3MzQzMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBNZW1vcnkgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzeXN0ZW0ncyBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGRlY2lzaW9uIHByb2Nlc3MgaXMgcHJldHR5IGNsZWFyLiBXaGVuIGl0IGNvbWVzIHRvIG1vdmluZyBwYWdlcyBhcm91bmQsIHRoZSBgQ09NUEFDVElPTmAgbWVjaGFuaXNtIGlzIHNldCB0byB0cmlnZ2VyIGEgYE1JR1JBVElPTmAgZXZlbnQuIFNpbWlsYXJseSwgYE5VTUFfTUlHUkFUSU9OYCBhbHNvIGNhbGxzIHVwb24gYE1JR1JBVElPTmAuIFRoaXMgbWFrZXMgc2Vuc2U7IGlmIHlvdSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgbWVtb3J5IGxheW91dCwgeW91J2xsIGluZXZpdGFibHkgbmVlZCB0byBtaWdyYXRlIHBhZ2VzLlxuXG5Ob3csIGBOVU1BX01JR1JBVElPTmAgaGFzIGEgaGFyZCBkZXBlbmRlbmN5OiBpdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIGJvdGggYE5VTUFgIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBhbmQgYE1NVWAgKE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQpIHRvIGJlIGVuYWJsZWQuIFRoYXQncyBmdW5kYW1lbnRhbDsgd2l0aG91dCB0aG9zZSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIGluIHBsYWNlLCBOVU1BLWF3YXJlIG1pZ3JhdGlvbiBpcyBzaW1wbHkgaW1wb3NzaWJsZS5cblxuR2l2ZW4gYWxsIHRoaXMsIGEgc2Vuc2libGUgZm9sbG93LXVwIHF1ZXN0aW9uIGFyaXNlczogSXMgdGhlIGBtaWdyYXRlX3BhZ2VzYCBzeXN0ZW0gY2FsbCBlbmFibGVkIHRocm91Z2ggdGhlIGBOVU1BYCBjb25maWd1cmF0aW9uPyBJZiBOVU1BIGlzIGFjdGl2ZSwgdGhlbiB0aGlzIHN5c2NhbGwgaXMgcHJvYmFibHkgYWxzbyBhdmFpbGFibGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlybSB0aGF0LCBiZWNhdXNlIGl0J3MgdGhlIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBhbnkga2luZCBvZiBwYWdlIG1pZ3JhdGlvbiB0aGF0IEknbSBpbnRlcmVzdGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQ5LjgwMDQzODg2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTEwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FNFxcXFwobWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0xODYzPXN0YXRpYyBpbnQga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG1heG5vZGUsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xOTQ4LVxcbm1tL21lbXBvbGljeS5jOjE5NDk6U1lTQ0FMTF9ERUZJTkU0KG1pZ3JhdGVfcGFnZXMsIHBpZF90LCBwaWQsIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXFxubW0vbWVtcG9saWN5LmMtMTk1MC1cXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqLCBvbGRfbm9kZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjQ5LjkwNzM1NjYxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTIwMjM5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIENvbnRleHQgb2YgYG1tL21lbXBvbGljeS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgbW0vbWVtcG9saWN5LmNgIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBhIGtleSBxdWVzdGlvbjogKklzIHRoaXMgZmlsZSwgdGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gZGVwZW5kIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24/KiBTcGVjaWZpY2FsbHksIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX05VTUFgIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSB2ZXJ5IG5hdHVyZSBvZiBtZW1vcnkgcG9saWNpZXMsIGFuZCBOVU1BIGFyY2hpdGVjdHVyZSB0aGF0IGRlZmluZXMgd2hlcmUgbWVtb3J5IHdpbGwgYmUgbG9jYXRlZCBmb3IgcHJvY2Vzc2VzLCBpdCBzZWVtcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBmaWxlIHdpbGwgYmUgZGVmaW5lZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBDT05GSUdfTlVNQWAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIElmIGl0J3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1bml0LCBJIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgYnVpbGQgZmxhZ3Mgc28gSSBkb24ndCB3YXN0ZSB0aW1lIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzbid0IGV2ZW4gaW4gbXkgdGFyZ2V0IGtlcm5lbCBidWlsZC4gVGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCB0aGUgYnVpbGQgc3lzdGVtIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1ODo1NC44Mjc2MDA4NzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDI5MjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3kub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVxcdCs9IHNwYXJzZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU4OjU0Ljk4NzkwMTcxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDAxMzg5NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBUZXN0aW5nIGBtaWdyYXRlX3BhZ2VzYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYG1lbXBvbGljeS5vYCBpcyBkZWZpbml0ZWx5IGJ1aWx0IG9ubHkgaWYgYENPTkZJR19OVU1BYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGUgd2hvbGUgTlVNQSBhcmNoaXRlY3R1cmUgaXMgZnVuZGFtZW50YWwgdG8gaXRzIHB1cnBvc2UuICBUaGVyZWZvcmUsIEknZCBpbml0aWFsbHkgYXNzdW1lIHRoYXQgYENPTkZJR19OVU1BYCBpcyAqcmVxdWlyZWQqIHRvIGFjdHVhbGx5IGhpdCB0aGUgYG1pZ3JhdGVfcGFnZXNgIHN5c3RlbSBjYWxsLiAgXG5cbkJ1dCBoYW5nIG9u4oCmIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gIFRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgcGF0aCBpbiBgbW0vbWlncmF0ZS5jYCwgYG1pZ3JhdGVfcGFnZXNgIG1pZ2h0IGFsc28gYmUgcmVhY2hlZCB0aHJvdWdoIGBDTUFgIG9yIGBDT01QQUNUSU9OYC4gIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiAgSG93ZXZlciwgZm9yICpzcGVjaWZpY2FsbHkqIHRlc3RpbmcgdGhlIGBtaWdyYXRlX3BhZ2VzYCBzeXN0ZW0gY2FsbCwgSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfTlVNQWAgaXMgc3RpbGwgdGhlIGJlc3QgYmV0LiAgU28sIGxldCdzIGFkZCBgTlVNQWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSBhbmQgdGFyZ2V0IHRoZSBzeXNjYWxsIGV4cGxpY2l0bHkuXG5cbldhaXQsIEkgYWxzbyBuZWVkIGBNSUdSQVRJT05gIGRlZmluZWQgYXMgdGhpcyBpcyBpbnZvbHZlZCBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIEJ1dCBsb29raW5nIGludG8gaXQsIGBNSUdSQVRJT05gIGlzIHNlbGVjdGVkIHZpYSBgQ09NUEFDVElPTmAsIGFuZCB0aGF0J3MgKmFscmVhZHkqIHNldCB0byBgZGVmYXVsdCB5YCAuIE9rYXksIHRoYXQncyBnb29kLlxuXG5TbywgbGV0J3MgYWRkIGBOVU1BYCBhbmQgYE1JR1JBVElPTmAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBPaCB3YWl0LCBgTUlHUkFUSU9OYCBpcyBhIGJvb2xlYW4sIGl0J3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgKG5vIGBwcm9tcHRgKS4gU28sIGlmIGBDT01QQUNUSU9OYCBlbmFibGVzIGBNSUdSQVRJT05gLCBJIGNhbiBqdXN0IHNwZWNpZnkgYENPTVBBQ1RJT05gLiBTbyBsZXQncyBhZGQgYE5VTUFgIGFuZCBgQ09NUEFDVElPTmAuIExldCdzIGFsc28gY2hlY2sgYENPTVBBQ1RJT05gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OTowMC4zODkyOTM4MjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYzNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NjI4PWNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02MzktIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxcbm1tL0tjb25maWc6NjQwOmNvbmZpZyBDT01QQUNUSU9OXFxubW0vS2NvbmZpZy02NDEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OTowMC41NjM5MzU2MjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1MzA2MjUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdGhhdCBgQ09NUEFDVElPTmAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhlIHVzZXIgY2FuIHRvZ2dsZSBvbiBvciBvZmYg4oCTIHRoYXQncyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgaW5jbHVkZSByZWxhdGVkIGZlYXR1cmVzLCBzbyBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGluY29ycG9yYXRpbmcgYE5VTUFgIGFsb25nc2lkZSBgQ09NUEFDVElPTmAgYW5kIGBNSUdSQVRJT05gLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgYE1JR1JBVElPTmAgZG9lc24ndCBoYXZlIGEgZGlyZWN0IGAuY29uZmlnYCBwcm9tcHQsIG1lYW5pbmcgaXQncyBkZXBlbmRlbnQgb24gb3RoZXIgc2VsZWN0aW9ucy4gSSd2ZSBnb3QgdG8gZW5zdXJlIGl0J3Mgc2VsZWN0ZWQgaW4gdGhlIGNvcnJlY3Qgd2F5LiAgU28sIEknbGwgcmV2aXNlIHRoYXQgYW5kIGp1c3QgaW5jbHVkZSBgTlVNQWAgYW5kIGBDT01QQUNUSU9OYCBhdCB0aGlzIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBtZW1vcnkgbWlncmF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGNvZGUuICBNeSBmb2N1cyBzaGlmdHMgdG8gYG1pZ3JhdGVfcGFnZXNgLCBgbWlncmF0ZV9wYWdlc19iYXRjaGAsIGFuZCBgZG9fbWlncmF0ZV9wYWdlc2AuICBXYWl0IGEgbW9tZW50Li4uIGlzbid0IGBtaWdyYXRlX3BhZ2VzX2JhdGNoYCBzdGF0aWM/ICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIFllcywgc3RhdGljLlxuXG5UaGF0IG1lYW5zIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgIGFyZSBteSBwcmltYXJ5IHRhcmdldCBzeW1ib2xzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBgbWlncmF0ZV9wYWdlc19iYXRjaGAgaXMgaW5saW5lZCwgYnV0IEknbSBjb25maWRlbnQgbm93IHRoYXQgSSBoYXZlIHRoZSBpbXBvcnRhbnQgcGllY2VzIGluIG15IHNjb3BlLiBJJ2xsIGNoZWNrIGl0LCBiZWNhdXNlIEkgd2FudCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgdGhlIGNvcnJlY3Qgc3RhdHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OTowNS4zMTcwMDIxNzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM0NDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3BhZ2VzX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9MTc4Mj1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmMtMTgwNS0vKlxcbm1tL21pZ3JhdGUuYzoxODA2OiAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSBmaXJzdCB1bm1hcHMgZm9saW9zIGluIHRoZSBmcm9tIGxpc3QgYXMgbWFueSBhc1xcbm1tL21pZ3JhdGUuYy0xODA3LSAqIHBvc3NpYmxlLCB0aGVuIG1vdmUgdGhlIHVubWFwcGVkIGZvbGlvcy5cXG4tLVxcbm1tL21pZ3JhdGUuYy0xODEzLSAqL1xcbm1tL21pZ3JhdGUuYzoxODE0OnN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbm1tL21pZ3JhdGUuYy0xODE1LVxcdFxcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE4NTYtXFx0XFx0XFx0ICogb3RoZXJ3aXNlIHN0YXRzIGluY29uc2lzdGVuY3kgd2lsbCBoYXBwZW4gd2hlblxcbm1tL21pZ3JhdGUuYzoxODU3OlxcdFxcdFxcdCAqIG1pZ3JhdGVfcGFnZXNfYmF0Y2ggaXMgY2FsbGVkIHZpYSBtaWdyYXRlX3BhZ2VzKClcXG5tbS9taWdyYXRlLmMtMTg1OC1cXHRcXHRcXHQgKiB3aXRoIE1JR1JBVEVfU1lOQyBhbmQgTUlHUkFURV9BU1lOQy5cXG4tLVxcbm1tL21pZ3JhdGUuYz0yMDI2PXN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMjAzNy1cXHQvKiBUcnkgdG8gbWlncmF0ZSBpbiBiYXRjaCB3aXRoIE1JR1JBVEVfQVNZTkMgbW9kZSBmaXJzdGx5ICovXFxubW0vbWlncmF0ZS5jOjIwMzg6XFx0cmMgPSBtaWdyYXRlX3BhZ2VzX2JhdGNoKGZyb20sIGdldF9uZXdfZm9saW8sIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsXFxubW0vbWlncmF0ZS5jLTIwMzktXFx0XFx0XFx0XFx0IHJlYXNvbiwgXFx1MDAyNmZvbGlvcywgc3BsaXRfZm9saW9zLCBcXHUwMDI2YXN0YXRzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIwNjQtXFx0XFx0bGlzdF9tb3ZlKGZyb20tXFx1MDAzZW5leHQsIFxcdTAwMjZmb2xpb3MpO1xcbm1tL21pZ3JhdGUuYzoyMDY1OlxcdFxcdHJjID0gbWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2Zm9saW9zLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMDY2LVxcdFxcdFxcdFxcdFxcdCBwcml2YXRlLCBtb2RlLCByZWFzb24sIHJldF9mb2xpb3MsXFxuLS1cXG5tbS9taWdyYXRlLmM9MjEwMz1pbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIxNDEtXFx0aWYgKG1vZGUgPT0gTUlHUkFURV9BU1lOQylcXG5tbS9taWdyYXRlLmM6MjE0MjpcXHRcXHRyYyA9IG1pZ3JhdGVfcGFnZXNfYmF0Y2goXFx1MDAyNmZvbGlvcywgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMjE0My1cXHRcXHRcXHRcXHRwcml2YXRlLCBtb2RlLCByZWFzb24sIFxcdTAwMjZyZXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIxNjEtXFx0XFx0ICovXFxubW0vbWlncmF0ZS5jOjIxNjI6XFx0XFx0bWlncmF0ZV9wYWdlc19iYXRjaChcXHUwMDI2c3BsaXRfZm9saW9zLCBnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0yMTYzLVxcdFxcdFxcdFxcdHB1dF9uZXdfZm9saW8sIHByaXZhdGUsIE1JR1JBVEVfQVNZTkMsIHJlYXNvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MDUuNDM0MzU4MDgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NjAyODUxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBtaWdyYXRlX3BhZ2VzX2JhdGNoYCBpc24ndCBkZWNsYXJlZCBgaW5saW5lYC4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgcHJvYmFibHkgaXNuJ3QgaW5saW5pbmcgaXQsIHRob3VnaCBpdCAqY291bGQqIGJlLiBCdXQgdGhlIG1vcmUgZmFtaWxpYXIgZnVuY3Rpb25zIGhlcmUsIGBtaWdyYXRlX3BhZ2VzYCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLCBhcmUgd2hhdCBJJ2xsIGZvY3VzIG9uLlxuXG5UaGUgZGlmZiBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggcmVwbGFjZXMgYGNvbmRfcmVzY2hlZCgpYCB3aXRoIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLiBBaGEhIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIG5ldyBmdW5jdGlvbiBhbHNvIHNpZ25hbHMgYW4gUkNVIHF1aWVzY2VudCBzdGF0ZSBhbG9uZyB3aXRoIHRoZSBub3JtYWwgcmVzY2hlZHVsaW5nLiBUaGF0J3MgYSBjcml0aWNhbCBhZGp1c3RtZW50LCBzcGVjaWZpY2FsbHkgZm9yIGF2b2lkaW5nIFJDVSBzdGFsbHMgZHVyaW5nIHBvdGVudGlhbGx5IGxlbmd0aHkgbGFyZ2UgcGFnZSBtaWdyYXRpb25zLiBJJ3ZlIHNlZW4gdGhhdCBiZWhhdmlvciBiZWZvcmUuIFRoaXMgY2hhbmdlIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIHRoZSBzeXN0ZW0gZnJvbSBsb2NraW5nIHVwIGR1cmluZyB0aG9zZSBvcGVyYXRpb25zLCB3aGljaCBpcyB3aHkgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgcHJpbWFyeSBpbnRlcmVzdCByaWdodCBub3cgbGllcyB3aXRoIGBOVU1BYCBhbmQgYENPTVBBQ1RJT05gIGNvbmZpZ3Mg4oCTIHRob3NlIGFyZSB0aGUgbW9zdCByZWxldmFudCBjb250ZXh0cyBoZXJlLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBgbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19taWdyYXRlX3BhZ2VzYCB0byBjb25maXJtIGhvdyB0aGlzIG5ldyByZXNjaGVkdWxpbmcgYmVoYXZpb3IgaW50ZXJhY3RzIHdpdGggdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoYXQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXNgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MTIuMzk0NjQ1MjgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzAwNTMzNTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzo1OToxMi43NjQ3MDg3NDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MDkxODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgU291cmNlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhpcyBjb25jZXB0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGVzdGFibGlzaCBpdHMgb3JpZ2luLiAqV2hlcmUqIGV4YWN0bHkgaXMgdGhpcyBkZWZpbmVkPyBJIG5lZWQgdG8gZ28gYmFjayB0byB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCB0aGUgYmVkcm9jayBhc3N1bXB0aW9ucyB1cG9uIHdoaWNoIHRoaXMgcmVzdHMuIEp1bXBpbmcgaW4gd2l0aG91dCB0aGF0IGNsYXJpdHkgaXMganVzdCBhc2tpbmcgZm9yIGEgcG90ZW50aWFsIG1pc2ludGVycHJldGF0aW9uIG9yIHdhc3RlZCBlZmZvcnQuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyBkZWZpbml0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBJIGFtIGNsZWFyIG9uIHdoYXQgaXQgaXMgd2UgYXJlIGRpc2N1c3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MTYuNDQ1NjMwODlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI5MTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD0yMDU9c3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGFza3NfcmN1X2ZpbmlzaCh2b2lkKSB7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMDgtLyoqXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjIwOTogKiBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzIC0gUmVwb3J0IHBvdGVudGlhbCBxdWllc2NlbnQgc3RhdGVzIHRvIFJDVVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMTAtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0yMTQtICovXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjIxNTojZGVmaW5lIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBcXFxcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTIxNi1kbyB7IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6NTk6MTYuNjI3OTM1Njc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODQ0NDU5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSQ1UgUXVpZXNjZW50IFN0YXRlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoZSBkZWZpbml0aW9uIOKAkyBpdCdzIHJpZ2h0IHRoZXJlIGluIGBpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmhgLiBUaGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhbHRlcmluZyBob3cgdGhlIFJDVSBxdWllc2NlbnQgc3RhdGUgaXMgcmVwb3J0ZWQgd2hpbGUgcGFnZXMgYXJlIGJlaW5nIG1pZ3JhdGVkLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBsZWdpdGltYXRlIGNoYW5nZTsgaXQncyBkZXNpZ25lZCB0byBpbXByb3ZlIHRoZSBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgdGhlIG5lY2Vzc2FyeSByZXN1bHRzIHByZXBwZWQuIEZvciB0aGlzIHBhdGNoLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgdHJ1ZWAuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgY2xlYXJseSBgbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC4gV2Ugc2hvdWxkIGVuYWJsZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBOVU1BIGFyY2hpdGVjdHVyZSBhbmQgbWVtb3J5IENPTVBBQ1RJT04sIGFzIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBNeSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogdGhlIHBhdGNoIHJlcGxhY2VzIGBjb25kX3Jlc2NoZWQoKWAgd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUgYG1pZ3JhdGVfcGFnZXNfYmF0Y2goKWAuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgUkNVIHF1aWVzY2VudCBzdGF0ZSByZXBvcnRpbmcsIGVzcGVjaWFsbHkgZHVyaW5nIGxhcmdlLXBhZ2UgbWlncmF0aW9ucywgd2l0aCB0aGUgZXhwbGljaXQgZ29hbCBvZiBwcmV2ZW50aW5nIHBvdGVudGlhbCBSQ1Ugc3RhbGxzLiBDcnVjaWFsbHksIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYG1pZ3JhdGVfcGFnZXNgIHN5c3RlbSBjYWxsIGFuZCBvdGhlciBtaWdyYXRpb24gcGF0aHdheXMsIG1ha2luZyBpdCBhIGNyaXRpY2FsIGFyZWEgdG8gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMzQsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjU5OjIxLjYxMjM4MzgwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTA2NjczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiQ09NUEFDVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfcGFnZXNcIixcbiAgICBcImRvX21pZ3JhdGVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBjb25kX3Jlc2NoZWQoKSB3aXRoIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBpbiBtaWdyYXRlX3BhZ2VzX2JhdGNoKCksIHdoaWNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIGhvdyBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhcmUgcmVwb3J0ZWQgZHVyaW5nIGxhcmdlIHBhZ2UgbWlncmF0aW9ucyB0byBwcmV2ZW50IFJDVSBzdGFsbHMuIFRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBtaWdyYXRlX3BhZ2VzIHN5c2NhbGwgYW5kIG90aGVyIG1pZ3JhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9wYWdlc1wiLFxuICAgIFwiZG9fbWlncmF0ZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGNvbmRfcmVzY2hlZCgpIHdpdGggY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGluIG1pZ3JhdGVfcGFnZXNfYmF0Y2goKSwgd2hpY2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgaG93IFJDVSBxdWllc2NlbnQgc3RhdGVzIGFyZSByZXBvcnRlZCBkdXJpbmcgbGFyZ2UgcGFnZSBtaWdyYXRpb25zIHRvIHByZXZlbnQgUkNVIHN0YWxscy4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG1pZ3JhdGVfcGFnZXMgc3lzY2FsbCBhbmQgb3RoZXIgbWlncmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdtl54[1] Phase: Succeeded StartedAt: 2026-07-28 03:59:33 +0000 UTC FinishedAt: 2026-07-28 03:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 03:59:33 +0000 UTC FinishedAt: 2026-07-28 03:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2] Phase: Succeeded StartedAt: 2026-07-28 03:59:33 +0000 UTC FinishedAt: 2026-07-28 08:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 03:59:33 +0000 UTC FinishedAt: 2026-07-28 08:24:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 03:59:33 +0000 UTC FinishedAt: 2026-07-28 03:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 03:59:33 +0000 UTC FinishedAt: 2026-07-28 03:59:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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-workflowdtl54/series-workflowdtl54-convert-artifact-3661682900/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 03:59:53 +0000 UTC FinishedAt: 2026-07-28 04:38:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 03:59:53 +0000 UTC FinishedAt: 2026-07-28 04:38:26 +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:*1f0bd790-594a-4ed2-8cf4-25393a1da7ab,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-workflowdtl54/series-workflowdtl54-convert-artifact-3661682900/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": "5635c6b2-2a8f-48b9-9c8d-a60a2639d2ef", "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-workflowdtl54/series-workflowdtl54-build-action-1518933074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 03:59:53 +0000 UTC FinishedAt: 2026-07-28 04:38:16 +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:*1f0bd790-594a-4ed2-8cf4-25393a1da7ab,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-workflowdtl54/series-workflowdtl54-convert-artifact-3661682900/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": "5635c6b2-2a8f-48b9-9c8d-a60a2639d2ef", "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-workflowdtl54/series-workflowdtl54-build-action-1518933074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:38:26 +0000 UTC FinishedAt: 2026-07-28 04:38:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:38:26 +0000 UTC FinishedAt: 2026-07-28 04:38:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:38:26 +0000 UTC FinishedAt: 2026-07-28 04:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:38:26 +0000 UTC FinishedAt: 2026-07-28 04:38:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-workflowdtl54/series-workflowdtl54-convert-artifact-3607976083/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:38:46 +0000 UTC FinishedAt: 2026-07-28 04:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:38:46 +0000 UTC FinishedAt: 2026-07-28 04:40:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5635c6b2-2a8f-48b9-9c8d-a60a2639d2ef,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-workflowdtl54/series-workflowdtl54-build-action-1518933074/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-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:40:46 +0000 UTC FinishedAt: 2026-07-28 04:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:40:46 +0000 UTC FinishedAt: 2026-07-28 04:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:40:46 +0000 UTC FinishedAt: 2026-07-28 05:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:40:46 +0000 UTC FinishedAt: 2026-07-28 05:15:04 +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:*1f0bd790-594a-4ed2-8cf4-25393a1da7ab,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-workflowdtl54/series-workflowdtl54-convert-artifact-3607976083/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": "ce024e5a-15fb-49da-acd0-ae404a0e33ee", "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-workflowdtl54/series-workflowdtl54-build-action-2968268487/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 04:40:46 +0000 UTC FinishedAt: 2026-07-28 05:14:54 +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:*1f0bd790-594a-4ed2-8cf4-25393a1da7ab,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-workflowdtl54/series-workflowdtl54-convert-artifact-3607976083/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": "ce024e5a-15fb-49da-acd0-ae404a0e33ee", "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-workflowdtl54/series-workflowdtl54-build-action-2968268487/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:15:04 +0000 UTC FinishedAt: 2026-07-28 05:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:15:04 +0000 UTC FinishedAt: 2026-07-28 05:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:15:04 +0000 UTC FinishedAt: 2026-07-28 05:16:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:15:04 +0000 UTC FinishedAt: 2026-07-28 05:16:48 +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:*ce024e5a-15fb-49da-acd0-ae404a0e33ee,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-workflowdtl54/series-workflowdtl54-build-action-2968268487/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-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 08:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 08:24:21 +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":["migrate_pages","do_migrate_pages"],"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:*5635c6b2-2a8f-48b9-9c8d-a60a2639d2ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce024e5a-15fb-49da-acd0-ae404a0e33ee,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-workflowdtl54/series-workflowdtl54-build-action-1518933074/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-workflowdtl54/series-workflowdtl54-build-action-2968268487/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 05:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 05:17:04 +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":["migrate_pages","do_migrate_pages"],"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-workflowdtl54/series-workflowdtl54-convert-artifact-165127436/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 05:16:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 05:16:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:16:58 +0000 UTC FinishedAt: 2026-07-28 05:16:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:17:08 +0000 UTC FinishedAt: 2026-07-28 08:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtl54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"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":["migrate_pages","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b25c83e4711038989b5b08a8977fb68468c854e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","COMPACTION"],"series_id":"09101dc4-3910-4a4e-b63e-e5918f862a7a","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-07-28 05:17:08 +0000 UTC FinishedAt: 2026-07-28 08:24:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5635c6b2-2a8f-48b9-9c8d-a60a2639d2ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce024e5a-15fb-49da-acd0-ae404a0e33ee,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-workflowdtl54/series-workflowdtl54-build-action-1518933074/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-workflowdtl54/series-workflowdtl54-build-action-2968268487/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-workflowdtl54/series-workflowdtl54-convert-artifact-165127436/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,}