Name: series-workflownv4d8 Phase: Succeeded StartedAt: 2026-08-29 02:46:56 +0000 UTC FinishedAt: 2026-08-29 06:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[0] Phase: Succeeded StartedAt: 2026-08-29 02:46:56 +0000 UTC FinishedAt: 2026-08-29 03:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 02:46:56 +0000 UTC FinishedAt: 2026-08-29 03:15:53 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "3019adf5-97d2-4455-93f0-3d851dca90e6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "obj_cgroup_charge", "__memcg_kmem_charge_page", "obj_cgroup_charge_zswap" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OywKICAgICYjMzQ7b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXG5cblRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvcHRpbWl6YXRpb24vZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgKGluZm8tbGVha3MpLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBhY2NvdW50aW5nIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGtlcm5lbCBtZW1vcnkgYWNjb3VudGluZyBpbiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpIHRvIHVzZSB0cnlfY2hhcmdlKCkgaW5zdGVhZCBvZiB0cnlfY2hhcmdlX21lbWNnKCksIGJ5cGFzc2luZyBjaGFyZ2luZyB3aGVuIHRoZSB0YXJnZXQgbWVtY2cgaXMgdGhlIHJvb3QgbWVtb3J5IGNncm91cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzNWRlNjg2NTMxZmZjMGYxOWI1NzBhMjE0MTBhOGY4NDM4OGY2NWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMzoxMzowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTMxNTcsNyAmIzQzOzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbiBcbi1cdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xuJiM0MztcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7LAogICAgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjM1ZGU2ODY1MzFmZmMwZjE5YjU3MGEyMTQxMGE4Zjg0Mzg4ZjY1YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDAzOjEzOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMxNTcsNyAmIzQzOzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLAogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTsKIAotCXJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpOwomIzQzOwlyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ29udHJvbCBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZGlmZiBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZCBhcm91bmQgYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGNoYW5nZXMgdGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBtb2RpZmllZCBjb2RlLCBvciBtYXliZSBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIHF1aWNrbHkgc2VhcmNoIGZvciBzcGVjaWZpYyBrZXl3b3JkcyBvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogaGFzIGJlZW4gbW9kaWZpZWQgd2l0aGluIHRoYXQgZmlsZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNDU6XHQgKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXG4zMTQ2Olx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxuMzE0NzpcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuMzE0ODpcdCAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNoYXJnZVxuMzE0OTpcdCAqXG4zMTUwOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbjMxNTE6XHQgKi9cbjMxNTI6XHRzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuMzE1MzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuMzE1NDpcdHtcbjMxNTU6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjMxNTY6XHRcdGludCByZXQ7XG4zMTU3Olx0XG4zMTU4Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzE1OTpcdFxuMzE2MDpcdFx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG4zMTYxOlx0XHRpZiAocmV0KVxuMzE2MjpcdFx0XHRnb3RvIG91dDtcbjMxNjM6XHRcbjMxNjQ6XHRcdGFjY291bnRfa21lbV9ubWlfc2FmZShtZW1jZywgbnJfcGFnZXMpO1xuMzE2NTpcdFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgbnJfcGFnZXMpO1xuMzE2NjpcdG91dDpcbjMxNjc6XHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbjMxNjg6XHRcbjMxNjk6XHRcdHJldHVybiByZXQ7XG4zMTcwOlx0fVxuMzE3MTpcdFxuMzE3MjpcdHN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqcGFnZV9vYmpjZyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbjMxNzM6XHR7XG4zMTc0Olx0XHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBwYWdlLVx1MDAzZW1lbWNnX2RhdGE7XG4zMTc1Olx0XG4zMTc2Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19kYXRhKVxuMzE3NzpcdFx0XHRyZXR1cm4gTlVMTDtcbjMxNzg6XHRcbjMxNzk6XHRcdFZNX0JVR19PTl9QQUdFKChtZW1jZ19kYXRhIFx1MDAyNiBPQkpFWFRTX0ZMQUdTX01BU0spICE9IE1FTUNHX0RBVEFfS01FTSxcbjMxODA6XHRcdFx0XHRwYWdlKTtcbjMxODE6XHRcdHJldHVybiAoc3RydWN0IG9ial9jZ3JvdXAgKikobWVtY2dfZGF0YSAtIE1FTUNHX0RBVEFfS01FTSk7XG4zMTgyOlx0fVxuMzE4MzpcdFxuMzE4NDpcdHN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4zMTg1Olx0e1xuMzE4NjpcdFx0cGFnZS1cdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2cgfCBNRU1DR19EQVRBX0tNRU07XG4zMTg3Olx0fVxuMzE4ODpcdFxuMzE4OTpcdC8qKlxuMzE5MDpcdCAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcbjMxOTE6XHQgKiBAcGFnZTogcGFnZSB0byBjaGFyZ2VcbjMxOTI6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjMxOTM6XHQgKiBAb3JkZXI6IGFsbG9jYXRpb24gb3JkZXJcbjMxOTQ6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdHJ5X2NoYXJnZWAgYW5kIGB0cnlfY2hhcmdlX21lbWNnYCBidXNpbmVzcy4gSXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYWNjb3VudGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW50ZXJhY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZXMsIG9yIGF0IGxlYXN0IGhvdyBgdHJ5X2NoYXJnZWAgd29ya3MgaW4gY29udGV4dCBvZiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBhIGdyZXAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIGxvb2sgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoZXkgYXJlIGRlZmluZWQgYW5kIHVzZWQsIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU1MC0gKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cbm1tL21lbWNvbnRyb2wuYzoyNTUxOiAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxubW0vbWVtY29udHJvbC5jLTI1NTItICogcmV0dXJuIHBhdGggd2hlcmUgcmVjbGFpbSBpcyBhbHdheXMgYWJsZSB0byBibG9jay5cbi0tXG5tbS9tZW1jb250cm9sLmM9MjU1ND12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjQzLVxubW0vbWVtY29udHJvbC5jOjI2NDQ6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY0NS1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjY4LVx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbm1tL21lbWNvbnRyb2wuYzoyNjY5Olx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpIHtcbm1tL21lbWNvbnRyb2wuYzoyNjcwOlx0XHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpXG5tbS9tZW1jb250cm9sLmMtMjY3MS1cdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1Mi1cbm1tL21lbWNvbnRyb2wuYzoyODUzOnN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODU4LVxubW0vbWVtY29udHJvbC5jOjI4NTk6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODYwLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTU5LVxubW0vbWVtY29udHJvbC5jOjMxNjA6XHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTYxLVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwMD1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMDgtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMTAtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYyNy1cbm1tL21lbWNvbnRyb2wuYzo1NjI4Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MjktXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01Njg2PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MjMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTcyNDogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cbm1tL21lbWNvbnRyb2wuYy01NzI1LSAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzMwLSAqL1xubW0vbWVtY29udHJvbC5jOjU3MzE6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy01NzMyLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc1OS1cdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzo1NzYwOlx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcywgXHUwMDI2Y291bnRlcikpIHtcbm1tL21lbWNvbnRyb2wuYy01NzYxLVx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYHRyeV9jaGFyZ2VgIGluIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIGhpbnQgcG9pbnRzIGRpcmVjdGx5IHRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBhIHNwZWNpZmljIHJhbmdlIG9mIGxpbmVzLCAyODUwLTI4NjUuIEV4Y2VsbGVudCDigJMgYSBmb2N1c2VkIHRhcmdldCBpcyBhbHdheXMgZWFzaWVyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgdHJ5X2NoYXJnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBiZWhhdmVzIGluIGFsbG9jYXRpbmcgbWVtb3J5IGFnYWluc3QgYSBjZ3JvdXAmIzM5O3MgbGltaXQuIFdoYXQgYXJlIHRoZSBjaGVja3MsIGFuZCB3aGF04oCZcyB0aGUgbG9naWMgaXQgdXRpbGl6ZXM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZ2xlYW4gdGhpcyBqdXN0IGJ5IHJlYWRpbmcgdGhyb3VnaCB0aGUgY29kZSwgYnV0IEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMsIGRlcGVuZGluZyBvbiBob3cgYHRyeV9jaGFyZ2VgIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NDU6XHRcdCAqL1xuMjg0NjpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXHUwMDI2XHUwMDI2XG4yODQ3Olx0XHQgICAgIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykgXHUwMDI2XHUwMDI2XG4yODQ4Olx0XHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjg0OTpcdFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4yODUwOlx0XHRyZXR1cm4gMDtcbjI4NTE6XHR9XG4yODUyOlx0XG4yODUzOlx0c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjg1NDpcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuMjg1NTpcdHtcbjI4NTY6XHRcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuMjg1NzpcdFx0XHRyZXR1cm4gMDtcbjI4NTg6XHRcbjI4NTk6XHRcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xuMjg2MDpcdH1cbjI4NjE6XHRcbjI4NjI6XHRzdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbjI4NjM6XHR7XG4yODY0Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbyksIGZvbGlvKTtcbjI4NjU6XHRcdC8qXG4yODY2Olx0XHQgKiBBbnkgb2YgdGhlIGZvbGxvd2luZyBlbnN1cmVzIGZvbGlvJiMzOTtzIG9iamNnIHN0YWJpbGl0eTpcbjI4Njc6XHRcdCAqXG4yODY4Olx0XHQgKiAtIHRoZSBwYWdlIGxvY2tcbjI4Njk6XHRcdCAqIC0gTFJVIGlzb2xhdGlvblxuMjg3MDpcdFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXG4yODcxOlx0XHQgKi9cbjI4NzI6XHRcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAodW5zaWduZWQgbG9uZylvYmpjZztcbjI4NzM6XHR9XG4yODc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENoYXJnZSBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHRyeV9jaGFyZ2VgLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaWYgdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwIChgbWVtY2dgKSBpcyB0aGUgcm9vdCwgaXQganVzdCByZXR1cm5zIDAsIGltcGx5aW5nIG5vIGNoYXJnZS4gSXQgdGhlbiBjYWxscyBgdHJ5X2NoYXJnZV9tZW1jZ2AuCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHJlY2FsbCB0aGUgbG9naWMgZmxvdy4gQWgsIHJpZ2h0ISBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIHdhcyB1c2luZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZGlyZWN0bHkuIFNwZWNpZmljYWxseSBpdCB3YXMgZG9pbmc6CgpgYGBjCgltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwoKCXJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpOwpgYGAKCkJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlmIGBtZW1jZ2AgKmlzKiB0aGUgcm9vdCBtZW1jZywgb3IgaWYgYGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2dgIGlzIHJldHVybmluZyB0aGUgcm9vdCwgYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIGNhbGxlZCB3aXRoIHRoZSByb290LiBCdXQgd2FpdCwgYHRyeV9jaGFyZ2VgICphbHNvKiBjaGVja3MgaWYgYG1lbWNnYCBpcyB0aGUgcm9vdCBhbmQgc2hvcnQgY2lyY3VpdHMgdG8gYSB6ZXJvIHJldHVybiEgSXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIGNoZWNrIGluIGB0cnlfY2hhcmdlYCBhbmQgKmFub3RoZXIqIGNoZWNrIGRvd24gdGhlIGxpbmUuIEl0IGZlZWxzIHJlZHVuZGFudC4KCkkgbmVlZCB0byBzZWUgd2hhdCBgdHJ5X2NoYXJnZV9tZW1jZ2AgZG9lcyB3aGVuIHRoZSBjZ3JvdXAgaXMgcm9vdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbmV4dCBhbmQgc2VlIHdoeSBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBpdCB3aGVuIHRoZSBjaGVjayBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYHRyeV9jaGFyZ2VgLiBUaGVyZSBtaWdodCBiZSBhIGdvb2QgcmVhc29uLCBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yLCBvciBwZXJoYXBzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzaW1wbGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY0MDpcdG91dDpcbjI2NDE6XHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbjI2NDI6XHR9XG4yNjQzOlx0XG4yNjQ0Olx0c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4yNjQ1Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjI2NDY6XHR7XG4yNjQ3Olx0XHR1bnNpZ25lZCBpbnQgYmF0Y2ggPSBtYXgoTUVNQ0dfQ0hBUkdFX0JBVENILCBucl9wYWdlcyk7XG4yNjQ4Olx0XHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4yNjQ5Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XG4yNjUwOlx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuMjY1MTpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4yNjUyOlx0XHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcbjI2NTM6XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG4yNjU0Olx0XHRib29sIGRyYWluZWQgPSBmYWxzZTtcbjI2NTU6XHRcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xuMjY1NjpcdFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4yNjU3Olx0XHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuMjY1ODpcdFxuMjY1OTpcdHJldHJ5OlxuMjY2MDpcdFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbjI2NjE6XHRcdFx0cmV0dXJuIDA7XG4yNjYyOlx0XG4yNjYzOlx0XHRpZiAoIWFsbG93X3NwaW5uaW5nKVxuMjY2NDpcdFx0XHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cbjI2NjU6XHRcdFx0YmF0Y2ggPSBucl9wYWdlcztcbjI2NjY6XHRcbjI2Njc6XHRcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjY4Olx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxuMjY2OTpcdFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpIHtcbjI2NzA6XHRcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxuMjY3MTpcdFx0XHRcdGdvdG8gZG9uZV9yZXN0b2NrO1xuMjY3MjpcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuMjY3MzpcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gpO1xuMjY3NDpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XG4yNjc1Olx0XHR9IGVsc2Uge1xuMjY3NjpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcbjI2Nzc6XHRcdFx0cmVjbGFpbV9vcHRpb25zIFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjc4Olx0XHR9XG4yNjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQmVoYXZpb3Igb2YgYG1lbWNnYCBhbmQgTWVtb3J5IENoYXJnaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHRyeV9jaGFyZ2VfbWVtY2dgIGZ1bmN0aW9uIGFuZCBzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIHRoZSByb290IGBtZW1jZ2AgaXMgaW52b2x2ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBnb2luZyB0byBiZWhhdmUgYSBiaXQgZGlmZmVyZW50bHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcsIGJlY2F1c2UgSSByZWNhbGwgdGhhdCB0aGUgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBvcGVyYXRpb24gb24gdGhlIHJvb3QgYG1lbWNnYCB1c3VhbGx5IGhhcyBubyBib3VuZHMuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgZnVuY3Rpb25zIGxpa2UgYGNvbnN1bWVfc3RvY2tgLCBgcmVmaWxsX3N0b2NrYCwgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCwgYW5kIHRoZWlyIHJlbGF0ZWQgcmVzdG9jayBwcm9jZWR1cmVzICpkbyogZ2V0IGV4ZWN1dGVkLCBldmVuIHdoZW4gY2FsbGVkIHdpdGggdGhlIHJvb3QgYG1lbWNnYCEgVGhpcyBpbmNvbnNpc3RlbmN5IG5lZWRzIGEgY2xvc2VyIGxvb2suCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBhbmQgbG9va2luZyBhdCBob3cgaXQmIzM5O3MgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgd2hlcmUgdGhlc2UgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJvb3QgYG1lbWNnYCBhcmUgb2NjdXJyaW5nIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0LiBUaGlzIGFwcHJvYWNoIHNob3VsZCBzaGVkIGxpZ2h0IG9uIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzEyOT1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE0NC0vKlxubW0vbWVtY29udHJvbC5jOjMxNDU6ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xubW0vbWVtY29udHJvbC5jLTMxNDYtICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTUxLSAqL1xubW0vbWVtY29udHJvbC5jOjMxNTI6c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbm1tL21lbWNvbnRyb2wuYy0zMTUzLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTk3PWludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMjAzLVx0aWYgKG9iamNnIFx1MDAyNlx1MDAyNiAhb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkge1xubW0vbWVtY29udHJvbC5jOjMyMDQ6XHRcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbm1tL21lbWNvbnRyb2wuYy0zMjA1LVx0XHRpZiAoIXJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNTMxPXN0YXRpYyBpbnQgX19vYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcbm1tL21lbWNvbnRyb2wuYzozNTM4Olx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgY2hhcmdlX3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xubW0vbWVtY29udHJvbC5jLTM1MzktXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENHcm91cHMgYW5kIFBhZ2UgQ2hhcmdpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbWVjaGFuaXNtLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCB3b3Jrcywgc3BlY2lmaWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBob3cgbWVtb3J5IGNncm91cHMgaGFuZGxlIHBhZ2UgY2hhcmdlcy4gSSBjYW4gc2VlIHRoZSBjb3JlIG9mIHRoZSBvcGVyYXRpb24gcmlnaHQgaGVyZToKCmBgYGMKaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpCnsKCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKCWludCByZXQgPSAwOwoKCW9iamNnID0gY3VycmVudF9vYmpfY2dyb3VwKCk7CglpZiAob2JqY2cgJmFtcDsmYW1wOyAhb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkgewoJCXJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIDEgJmx0OyZsdDsgb3JkZXIpOwouLi4KYGBgCgpSaWdodCwgSSYjMzk7bSBub3RpbmcgdGhlIGBvYmpjZ2AgdmFyaWFibGUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG9iamVjdCBjZ3JvdXAgb2YgdGhlIGN1cnJlbnQgY29udGV4dC4gSXQgc2VlbXMgd2UmIzM5O3JlIGNoZWNraW5nIGlmIHdlJiMzOTtyZSAqaW4qIGFuIG9iamVjdCBjZ3JvdXAgYW5kIGlmIHRoYXQgY2dyb3VwIGlzICpub3QqIHRoZSByb290IGNncm91cC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcuIFRoYXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBhY3R1YWwgYWNjb3VudGluZyBoYXBwZW5zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiBob3cgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCB3b3JrcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1vcnkgY29udHJvbCBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyBuYXZpZ2F0ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gbGluZXMgMzUxMC0zNTYwIG9mIHRoYXQgZmlsZSwgYXMgdGhhdCYjMzk7cyB3aGVyZSBgX19vYmpfY2dyb3VwX2NoYXJnZWAgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MTA6XHRcdGlmICgoYWxsb3dfdW5jaGFyZ2UgXHUwMDI2XHUwMDI2IChzdG9ja19ucl9ieXRlcyBcdTAwM2UgUEFHRV9TSVpFKSkgfHxcbjM1MTE6XHRcdCAgICBzdG9ja19ucl9ieXRlcyBcdTAwM2UgVTE2X01BWCkge1xuMzUxMjpcdFx0XHRucl9wYWdlcyA9IHN0b2NrX25yX2J5dGVzIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMzUxMzpcdFx0XHRzdG9ja19ucl9ieXRlcyBcdTAwMjY9IChQQUdFX1NJWkUgLSAxKTtcbjM1MTQ6XHRcdH1cbjM1MTU6XHRcdHN0b2NrLVx1MDAzZW5yX2J5dGVzW3Nsb3RdID0gc3RvY2tfbnJfYnl0ZXM7XG4zNTE2Olx0XG4zNTE3Olx0b3V0OlxuMzUxODpcdFx0aWYgKG5yX3BhZ2VzKVxuMzUxOTpcdFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XG4zNTIwOlx0fVxuMzUyMTpcdFxuMzUyMjpcdHN0YXRpYyB2b2lkIHJlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuMzUyMzpcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzLFxuMzUyNDpcdFx0XHRcdCAgICAgYm9vbCBhbGxvd191bmNoYXJnZSlcbjM1MjU6XHR7XG4zNTI2Olx0XHRzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7XG4zNTI3Olx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBucl9ieXRlcywgYWxsb3dfdW5jaGFyZ2UpO1xuMzUyODpcdFx0dW5sb2NrX3N0b2NrKHN0b2NrKTtcbjM1Mjk6XHR9XG4zNTMwOlx0XG4zNTMxOlx0c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuMzUzMjpcdFx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZW1haW5kZXIpXG4zNTMzOlx0e1xuMzUzNDpcdFx0c2l6ZV90IGNoYXJnZV9zaXplO1xuMzUzNTpcdFx0aW50IHJldDtcbjM1MzY6XHRcbjM1Mzc6XHRcdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcbjM1Mzg6XHRcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjM1Mzk6XHRcdGlmICghcmV0KVxuMzU0MDpcdFx0XHQqcmVtYWluZGVyID0gY2hhcmdlX3NpemUgLSBzaXplO1xuMzU0MTpcdFxuMzU0MjpcdFx0cmV0dXJuIHJldDtcbjM1NDM6XHR9XG4zNTQ0Olx0XG4zNTQ1Olx0aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbjM1NDY6XHR7XG4zNTQ3Olx0XHRzaXplX3QgcmVtYWluZGVyO1xuMzU0ODpcdFx0aW50IHJldDtcbjM1NDk6XHRcbjM1NTA6XHRcdGlmIChsaWtlbHkoY29uc3VtZV9vYmpfc3RvY2sob2JqY2csIHNpemUpKSlcbjM1NTE6XHRcdFx0cmV0dXJuIDA7XG4zNTUyOlx0XG4zNTUzOlx0XHQvKlxuMzU1NDpcdFx0ICogSW4gdGhlb3J5LCBvYmpjZy1cdTAwM2Vucl9jaGFyZ2VkX2J5dGVzIGNhbiBoYXZlIGVub3VnaFxuMzU1NTpcdFx0ICogcHJlLWNoYXJnZWQgYnl0ZXMgdG8gc2F0aXNmeSB0aGUgYWxsb2NhdGlvbi4gSG93ZXZlcixcbjM1NTY6XHRcdCAqIGZsdXNoaW5nIG9iamNnLVx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMgcmVxdWlyZXMgdHdvIGF0b21pY1xuMzU1NzpcdFx0ICogb3BlcmF0aW9ucywgYW5kIG9iamNnLVx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMgY2FuJiMzOTt0IGJlIGJpZy5cbjM1NTg6XHRcdCAqIFRoZSBzaGFyZWQgb2JqY2ctXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4gYWxzbyBiZWNvbWUgYVxuMzU1OTpcdFx0ICogcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBhbGwgdGFza3Mgb2YgdGhlIHNhbWUgbWVtY2cgYXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgbWVtb3J5IGFjY291bnRpbmcgY29kZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgb2JqX2Nncm91cF9jaGFyZ2VgLiBXaGVyZSBkb2VzIGl0IG9yaWdpbmF0ZSwgYW5kIHdoYXQgcHJvY2Vzc2VzIHV0aWxpemUgaXQ/IFRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgYXMgdG8gd2hlcmUgYW5kIHdoeSB3ZSYjMzk7cmUgc2VlaW5nIHRoaXMgZnVuY3Rpb24gY2FsbGVkLCB3aGF0IHNvcnQgb2YgY2hhcmdlcyBpdCYjMzk7cyBoYW5kbGluZy4KClRoZW4sIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYC4gQWZ0ZXIgdGhhdCYjMzk7cyB1bmRlcnN0b29kLCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgbG9va3MgYXJvdW5kIGxpbmUgMzEyOS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgIGFyb3VuZCBsaW5lIDMxMjksIHNpbmNlIHRoZSB1bmNoYXJnaW5nIHByb2Nlc3MgaXMgcHJvYmFibHkganVzdCBhcyBjcml0aWNhbCB0byBncmFzcC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IHNwZWNpZmljIGxpbmUgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgdW5jaGFyZ2luZyBzaWRlLCBhbmQgdGhlIG92ZXJhbGwgYmFsYW5jZSBvZiBtZW1vcnkgY2hhcmdlcyBpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxMjU6XHQgKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXG4zMTI2Olx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIHVuY2hhcmdlXG4zMTI3Olx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gdW5jaGFyZ2VcbjMxMjg6XHQgKi9cbjMxMjk6XHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjMxMzA6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjMxMzE6XHR7XG4zMTMyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4zMTMzOlx0XG4zMTM0Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzEzNTpcdFxuMzEzNjpcdFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCAtbnJfcGFnZXMpO1xuMzEzNzpcdFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgLW5yX3BhZ2VzKTtcbjMxMzg6XHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbjMxMzk6XHRcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XG4zMTQwOlx0XG4zMTQxOlx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4zMTQyOlx0fVxuMzE0MzpcdFxuMzE0NDpcdC8qXG4zMTQ1Olx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xuMzE0NjpcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcbjMxNDc6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjMxNDg6XHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcbjMxNDk6XHQgKlxuMzE1MDpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4zMTUxOlx0ICovXG4zMTUyOlx0c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbjMxNTM6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjMxNTQ6XHR7XG4zMTU1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4zMTU2Olx0XHRpbnQgcmV0O1xuMzE1NzpcdFxuMzE1ODpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbjMxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IENoYW5nZSB0byBPYmplY3QgQ2dyb3VwIE1lbW9yeSBBY2NvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHJlY2VudCBwYXRjaCwgYW5kIHRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgcGFnZXMgd2l0aGluIG9iamVjdCBjZ3JvdXBzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRoaXM6IHRoZXkmIzM5O3ZlIHJlZmFjdG9yZWQgdGhlIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgZnVuY3Rpb24uIFByZXZpb3VzbHksIHdoZW4gd2Ugd2VyZSBjaGFyZ2luZyBwYWdlcywgd2UmIzM5O2QgdXNlIGB0cnlfY2hhcmdlX21lbWNnYCBkaXJlY3RseS4gTm93LCB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgbGF5ZXIgd2l0aCBgdHJ5X2NoYXJnZWAsIHdoaWNoLCBmb3Igcm9vdCBtZW1jZ3MsIHNob3J0LWNpcmN1aXRzIHRvIGF2b2lkIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgIGFuZCBpbnN0ZWFkIHJldHVybnMgMC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXM/IEkgc2VlIHRoYXQgaW4gdGhlIHVuY2hhcmdlIHBhdGgsIGZvciB0aGUgcm9vdCBtZW1jZywgaXQgKmRvZXNuJiMzOTt0KiByZWZpbGwgdGhlIHN0b2NrLiBCdXQgaW4gdGhlIG9sZCBjaGFyZ2UgcGF0aCwgYHRyeV9jaGFyZ2VfbWVtY2dgICp3b3VsZCogaGF2ZSBhdHRlbXB0ZWQgdG8gY29uc3VtZS9yZWZpbGwgc3RvY2sgYW5kIGNoYXJnZSBjb3VudGVycyBvbiB0aGUgcm9vdCBtZW1jZyDigJMgd2hpY2ggZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gVGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCB0byBmaXggdGhpcyByb290IG1lbWNnIGFjY291bnRpbmcgYmVoYXZpb3IuIFRoZSBuZXcgYHRyeV9jaGFyZ2VgIGZ1bmN0aW9uIHByZXZlbnRzIHRoaXMgaW5jb3JyZWN0IGNoYXJnaW5nIG9uIHRoZSByb290IG1lbWNnIGJ5IGF2b2lkaW5nIGNhbGxzIHRvIGB0cnlfY2hhcmdlX21lbWNnYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgpUaGUgcGF0Y2ggKmlzKiBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGRpcmVjdGx5IHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIGNncm91cHMsIG1lbW9yeSBjb250cm9sLCBzbGFiLCBhbmQga21lbSBhY2NvdW50aW5nLCBhbmQgaXQmIzM5O3Mgbm90IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGNvbW1lbnQsIGxvZ2dpbmcsIG9yIGRlY29yYXRpdmUgY2hhbmdlLCBub3IgcmVsYXRlZCB0byBhbiBpbXBvc3NpYmxlIGNvZGUgcGF0aC4gU28sIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhCgpOb3csIHdoYXQgYWJvdXQgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2A/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBrZXkgaXMgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyB3aGljaCBwdWJsaWNseSBhY2Nlc3NpYmxlIGVudHJ5cG9pbnRzIGluIGBtbS9tZW1jb250cm9sLmNgIG9yIHJlbGF0ZWQgaGVhZGVyIGZpbGVzIGNhbGwgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBvciByZWxhdGVkIHB1YmxpYyBmdW5jdGlvbnM/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGFzIHdlbGwgYXMgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBvdGhlciBwdWJsaWMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIGVmZmVjdGl2ZWx5IHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NDE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc1MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NTE6aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzUyLXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk0PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTU6dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTYtdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTk9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTAyLX1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MDM6c3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MDQtXHRcdFx0XHRcdCAgIHNpemVfdCBzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBDR3JvdXBzOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGtlcm5lbCBtZW1vcnkgaXMgY2hhcmdlZCB3aXRoaW4gbWVtb3J5IENHcm91cHMsIHNwZWNpZmljYWxseSBhdCB0aGUgcGFnZSBsZXZlbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBUaGlzIGlzIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiBoYW5kbGluZyB0aGUgY3JpdGljYWwgYWNjb3VudGluZyBmb3Iga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMg4oCTIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMgYW5kIGJlaGF2aW9yIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLiBJJiMzOTttIGhvcGluZyB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGxvZ2ljOiBob3cgdGhlIHBhZ2UmIzM5O3MgbWVtb3J5IHVzYWdlIGlzIGF0dHJpYnV0ZWQgdG8gYSBzcGVjaWZpYyBjZ3JvdXAsIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBjaGFyZ2VzIGFyZSBhcHBsaWVkIG9yIHJlbGVhc2VkLiBBbnkgc3VidGxldGllcyBvciBlZGdlIGNhc2VzIGFyZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gcmV2ZWFscyBhbnkgdXNlZnVsIGRldGFpbHMgYWJvdXQgdGhlIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyNj1ib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3Mjc6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyOC12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3Njc9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzAtXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzE6XHRcdHJldHVybiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcyLVx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgzMS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MzI6c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODMzLVx0XHRcdFx0XHQgICBpbnQgb3JkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYG9ial9jZ3JvdXBfY2hhcmdlYCBhbmQgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0IGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gQW5kIHRoYXQgbmF0dXJhbGx5IGxlYWRzIG1lIHRvIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1ham9yaXR5IG9mIHRoZSBsb2dpYyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gVGltZSB0byBwdXQgb24gdGhlIHJlYWRpbmcgZ2xhc3NlcyBhbmQgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMTI5PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTQ0LS8qXG5tbS9tZW1jb250cm9sLmM6MzE0NTogKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXG5tbS9tZW1jb250cm9sLmMtMzE0Ni0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTMxNTEtICovXG5tbS9tZW1jb250cm9sLmM6MzE1MjpzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxubW0vbWVtY29udHJvbC5jLTMxNTMtXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTMxOTc9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMDMtXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG5tbS9tZW1jb250cm9sLmM6MzIwNDpcdFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xubW0vbWVtY29udHJvbC5jLTMyMDUtXHRcdGlmICghcmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTM1MjI9c3RhdGljIHZvaWQgcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTM1MzAtXG5tbS9tZW1jb250cm9sLmM6MzUzMTpzdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG5tbS9tZW1jb250cm9sLmMtMzUzMi1cdFx0XHQgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqcmVtYWluZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTM3LVx0Y2hhcmdlX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xubW0vbWVtY29udHJvbC5jOjM1Mzg6XHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCBjaGFyZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdGlmICghcmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTQ0LVxubW0vbWVtY29udHJvbC5jOjM1NDU6aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy0zNTQ2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzU3NS1cdCAqL1xubW0vbWVtY29udHJvbC5jOjM1NzY6XHRyZXQgPSBfX29ial9jZ3JvdXBfY2hhcmdlKG9iamNnLCBnZnAsIHNpemUsIFx1MDAyNnJlbWFpbmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzU3Ny1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM1OTc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzY2Ny1cdFx0XHR1bmxvY2tfc3RvY2soc3RvY2spO1xubW0vbWVtY29udHJvbC5jOjM2Njg6XHRcdFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXHUwMDI2cmVtYWluZGVyKSlcbm1tL21lbWNvbnRyb2wuYy0zNjY5LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg2PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDE5LS8qKlxubW0vbWVtY29udHJvbC5jOjYwMjA6ICogb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAgLSBjaGFyZ2UgY29tcHJlc3Npb24gYmFja2VuZCBtZW1vcnlcbm1tL21lbWNvbnRyb2wuYy02MDIxLSAqIEBvYmpjZzogdGhlIG9iamVjdCBjZ3JvdXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo2MDI3OnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy02MDI4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzOS1cdC8qIFBGX01FTUFMTE9DIGNvbnRleHQsIGNoYXJnaW5nIG11c3Qgc3VjY2VlZCAqL1xubW0vbWVtY29udHJvbC5jOjYwNDA6XHRpZiAob2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIEdGUF9LRVJORUwsIHNpemUpKVxubW0vbWVtY29udHJvbC5jLTYwNDEtXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIENvbXBpbGF0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgYG1tL21lbWNvbnRyb2wuY2AuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCBtZW1vcnkgY29udHJvbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCByZWxldmFudCBvcHRpb25zIGFyZSBzZXQgY29ycmVjdGx5LCBjaGVja2luZyBmb3IgYW55IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgY29tcGlsZWQuIAoKTmV4dCwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBidWlsZCBydWxlcyBmb3IgYG1lbWNvbnRyb2wub2AgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGZpbGUgaXMgZ2VuZXJhdGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBpbmNsdWRlIGZpbGVzLCBjb21waWxlciBmbGFncywgYW5kIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyBtZW1vcnkgY29udHJvbCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBJ4oCZbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgY29uZGl0aW9uYWwgYnVpbGQgdGFyZ2V0cyBvciBzcGVjaWFsIGhhbmRsaW5nIGJhc2VkIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIG9yIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgJiM0Mzs9IG1lbWZkX2x1by5vXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuLS1cbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNTg4LVxubW0vYmFja2luZy1kZXYuYzo1ODk6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9iYWNraW5nLWRldi5jLTU5MC1cbi0tXG5tbS9icGZfbWVtY29udHJvbC5jLTctXG5tbS9icGZfbWVtY29udHJvbC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9icGZfbWVtY29udHJvbC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jPTE2Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xNjMtXG5tbS9icGZfbWVtY29udHJvbC5jOjE2NDpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tZW1jb250cm9sX2tmdW5jcylcbm1tL2JwZl9tZW1jb250cm9sLmMtMTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X3Jvb3RfbWVtX2Nncm91cCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmM9MTczPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cywgS0ZfU0xFRVBBQkxFKVxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzQtXG5tbS9icGZfbWVtY29udHJvbC5jOjE3NTpCVEZfS0ZVTkNTX0VORChicGZfbWVtY29udHJvbF9rZnVuY3MpXG5tbS9icGZfbWVtY29udHJvbC5jLTE3Ni1cbm1tL2JwZl9tZW1jb250cm9sLmM6MTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfbWVtY29udHJvbF9rZnVuY19zZXQgPSB7XG5tbS9icGZfbWVtY29udHJvbC5jLTE3OC1cdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzk6XHQuc2V0ICAgICAgICAgICAgPSBcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY3MsXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MC19O1xubW0vYnBmX21lbWNvbnRyb2wuYy0xODEtXG5tbS9icGZfbWVtY29udHJvbC5jOjE4MjpzdGF0aWMgaW50IF9faW5pdCBicGZfbWVtY29udHJvbF9pbml0KHZvaWQpXG5tbS9icGZfbWVtY29udHJvbC5jLTE4My17XG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xODYtXHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODc6XHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG5tbS9icGZfbWVtY29udHJvbC5jLTE4OC1cdGlmIChlcnIpXG5tbS9icGZfbWVtY29udHJvbC5jOjE4OTpcdFx0cHJfd2FybihcJiMzNDtlcnJvciB3aGlsZSByZWdpc3RlcmluZyBicGYgbWVtY29udHJvbCBrZnVuY3M6ICVkXCYjMzQ7LCBlcnIpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xOTAtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTItfVxubW0vYnBmX21lbWNvbnRyb2wuYzoxOTM6bGF0ZV9pbml0Y2FsbChicGZfbWVtY29udHJvbF9pbml0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLS1cbm1tL2RlYnVnLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2VfZXZlbnRzLmhcdTAwM2Vcbm1tL2RlYnVnLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kZWJ1Zy5jLTEzLSNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcdTAwM2Vcbi0tXG5tbS9maWxlbWFwLmMtMzctI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9maWxlbWFwLmM6Mzg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9maWxlbWFwLmMtMzktI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuLS1cbm1tL2ZvbGlvLmMtMjgtI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxubW0vZm9saW8uYzoyOTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2ZvbGlvLmMtMzAtI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2Vcbm1tL2h3cG9pc29uLWluamVjdC5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTItI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxubW0vbGlzdF9scnUuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2xpc3RfbHJ1LmMtMTUtI2luY2x1ZGUgXCYjMzQ7c2xhYi5oXCYjMzQ7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTItXG5tbS9tZW1jb250cm9sLXYxLmM6MzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNy0jaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAtZGVmcy5oXHUwMDNlXG5tbS9tZW1jb250cm9sLXYxLmg6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuaC04LVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5tbS9tZW1jb250cm9sLmM6MjovKiBtZW1jb250cm9sLmMgLSBNZW1vcnkgQ29udHJvbGxlclxubW0vbWVtY29udHJvbC5jLTMtICpcbi0tXG5tbS9tZW1jb250cm9sLmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYzozMDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYy0zMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wuYy03MC0jaW5jbHVkZSBcJiMzNDtzbGFiLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYzo3MTojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYy03Mi1cbi0tXG5tbS9tZW1vcnkuYy02MC0jaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxubW0vbWVtb3J5LmM6NjE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tZW1vcnkuYy02Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuLS1cbm1tL21sb2NrLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9tbG9jay5jOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vbWxvY2suYy0yNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuLS1cbm1tL21tYXBfbG9jay5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2Vcbm1tL21tYXBfbG9jay5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tbWFwX2xvY2suYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4tLVxubW0vb29tX2tpbGwuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG5tbS9vb21fa2lsbC5jOjM2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vb29tX2tpbGwuYy0zNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYzo0OTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYy01MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mdHJhY2UuaFx1MDAzZVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2Vcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC04LVxuLS1cbm1tL3BlcmNwdS5jLTg4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2Vcbm1tL3BlcmNwdS5jOjg5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vcGVyY3B1LmMtOTAtXG4tLVxubW0vcm1hcC5jLTY2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5tbS9ybWFwLmM6Njc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9ybWFwLmMtNjgtI2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2Vcbi0tXG5tbS9zaHJpbmtlci5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm1tL3Nocmlua2VyLmM6MjojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyLmMtMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9yd3NlbS5oXHUwMDNlXG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmMtOC1cbi0tXG5tbS9zbGFiLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxubW0vc2xhYi5oOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYi5oLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2tmZW5jZS5oXHUwMDNlXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOC0jaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5tbS9zbGFiX2NvbW1vbi5jOjI5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYl9jb21tb24uYy0zMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdGFja2RlcG90LmhcdTAwM2Vcbi0tXG5tbS9zbHViLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxubW0vc2x1Yi5jOjQ0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2x1Yi5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG4tLVxubW0vc3dhcC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZSAvKiBmb3IgUEFHRV9TSElGVCAqL1xubW0vc3dhcC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xubW0vc3dhcC5oLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlIC8qIGZvciBNQVhfU1dBUEZJTEVTX1NISUZULCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmMtMzQtI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxubW0vc3dhcGZpbGUuYzozNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3N3YXBmaWxlLmMtMzYtI2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4tLVxubW0vdm1hbGxvYy5jLTMzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYzozNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4tLVxubW0vdm1wcmVzc3VyZS5jLTExLSAqIFRyZWUtbW9kZSAoY2dyb3VwIHYxIHVzZXJzcGFjZSBldmVudGZkKSBib29ra2VlcGluZyBsaXZlcyBpblxubW0vdm1wcmVzc3VyZS5jOjEyOiAqIG1tL21lbWNvbnRyb2wtdjEuYzsgdGhpcyBmaWxlIGhvbGRzIHRoZSBzaGFyZWQgY29kZSBhbmQgdGhlIGluLWtlcm5lbFxubW0vdm1wcmVzc3VyZS5jLTEzLSAqICh0cmVlPWZhbHNlKSBzb2NrZXQtcHJlc3N1cmUgcGF0aCB0aGF0IHJ1bnMgb24gY2dyb3VwIHYyLlxuLS1cbm1tL3Ztc2Nhbi5jLTQwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxubW0vdm1zY2FuLmM6NDE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS92bXNjYW4uYy00Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2Vcbi0tXG5tbS93b3JraW5nc2V0LmMtNy1cbm1tL3dvcmtpbmdzZXQuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vd29ya2luZ3NldC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX01FTUNHYCBpbiBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19NRU1DR2AgaXMgYmVpbmcgaGFuZGxlZCwgcHJvYmFibHkgdG8gdHdlYWsgaXQgb3IgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzb21ldGhpbmcgSSYjMzk7bSB3b3JraW5nIG9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciBpbml0aWFsaXphdGlvbi4gVGhhdCYjMzk7cyBgaW5pdC9LY29uZmlnYC4gVGhpcyBzaG91bGQgZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpdHNlbGYgYW5kIGhvcGVmdWxseSBpbmNsdWRlIHNvbWUgZG9jdW1lbnRhdGlvbiBvciBhdCBsZWFzdCBwb2ludCBtZSB0byB3aGVyZSB0aGUgYXNzb2NpYXRlZCBjb2RlIGxpdmVzLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBpZiBpdCBoYXMgYW55IGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYWN0dWFsIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ny1cbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzktXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEhtbSwgYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIGJldCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBlYXJseSBib290IHByb2Nlc3Nlcy4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDEwNzguIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIEl0JiMzOTtzIG9mdGVuIGFyb3VuZCB0aGF0IGFyZWEgdGhhdCB5b3UmIzM5O2xsIGZpbmQgdGhlIGNvcmUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhpbmdzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGludGVyYWN0aW9ucyBhbmQgYmFzaWMgZHJpdmVyIHByb2JpbmcuIEtub3dpbmcgdGhlIEtjb25maWcgbGF5b3V0IHByZXR0eSB3ZWxsLCB0aGlzIGxpbmUgbnVtYmVyIHByb3ZpZGVzIGEgcHJldHR5IGdvb2QgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbiwgYW5kIHNob3VsZCBiZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZpbmRpbmcgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMjpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBNZW1vcnkgQ29udHJvbCBHcm91cHMsIG9yIE1FTUNHLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGxpbmVzIDEwNTAgdGhyb3VnaCAxMDgwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBkZWZpbmVkLCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhpbmdzIGJhY2suIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCB3aGljaCB3aWxsIG91dGxpbmUgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3Igc2V0dGluZ3MgYXJlIHByZXJlcXVpc2l0ZXMgb3IgaW5mbHVlbmNlZCBieSB0aGUgTUVNQ0cgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIG1ha2luZyBhbnkgY2hhbmdlcyBvciB1bmRlcnN0YW5kaW5nIGN1cnJlbnQgYmVoYXZpb3IgcmVsYXRlZCB0byBtZW1vcnkgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTA6XHRcdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4xMDUxOlx0XHRzZWxlY3QgS0VSTkZTXG4xMDUyOlx0XHRoZWxwXG4xMDUzOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxuMTA1NDpcdFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XG4xMDU1Olx0XHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXG4xMDU2Olx0XHQgIFNlZVxuMTA1NzpcdFx0XHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XHQoQ0ZTKVxuMTA1ODpcdFx0XHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cbjEwNTk6XHRcdFx0XHRcdFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcbjEwNjA6XHRcbjEwNjE6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA2MjpcdFxuMTA2MzpcdGlmIENHUk9VUFNcbjEwNjQ6XHRcbjEwNjU6XHRjb25maWcgUEFHRV9DT1VOVEVSXG4xMDY2Olx0XHRib29sXG4xMDY3Olx0XG4xMDY4Olx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4xMDY5Olx0XHRib29sIFwmIzM0O0Zhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbjEwNzA6XHRcdGhlbHBcbjEwNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXCYjMzQ7ZmF2b3JkeW5tb2RzXCYjMzQ7IG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XG4xMDcyOlx0XHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcbjEwNzM6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDc0Olx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDc1Olx0XG4xMDc2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzc6XHRcbjEwNzg6XHRjb25maWcgTUVNQ0dcbjEwNzk6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODA6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODE6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDgyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDgzOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwODQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODYKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogNzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZyBDaGFuZ2VzIGZvciBGdXp6aW5nIEZvY3VzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfTUVNQ0dgIGRlcGVuZHMgb24gYENPTkZJR19DR1JPVVBTYC4gR290IGl0LiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbWVtb3J5IGNvbnRyb2wuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgJiMzNDtGb2N1c1N5bWJvbHMuJiMzNDsKCkkgbmVlZCB0byBsb29rIGZvciBub24taG90LXBhdGgsIGV4cG9ydGVkIHN5bWJvbHMgb3IgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBvYmpfY2dyb3VwX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwYC4gT2theSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlaXIgZGVmaW5pdGlvbnM6IHRoZXkgc2VlbSB0byBiZSBjaGFyZ2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgY2dyb3VwcyBhbmQga21lbS4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciB0aGVyZSBhcmUgY29ycmVzcG9uZGluZyAmIzM0O3VuY2hhcmdlJiMzNDsgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBBUEkuIFllcywgdGhlcmUgYXJlIOKAkyBgb2JqX2Nncm91cF91bmNoYXJnZWAgYW5kIGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAuIEdvb2QuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IGBvYmpfY2dyb3VwX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwYCBhcmUgKm5vdCogc3RhdGljLCBzaW5jZSB3ZSB3YW50IG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4gUGVyZmVjdC4gTGluZXMgMzE5NywgMzU0NSBhbmQgNjAyNyBpbiBgbW0vbWVtY29udHJvbC5jYCBjb25maXJtIHRoaXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlc2UgYXJlbiYjMzk7dCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBhZHZpc2UgYWdhaW5zdCB0aG9zZSBiZWNhdXNlIHRoZXkgc2tldyB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIHRoZXNlIHN5bWJvbHMgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBmb2N1cyBzeW1ib2xzLgoKSSYjMzk7dmUgZ290IHRoZSBjb25maWdzOiBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIEkgdGhpbmsgdGhlc2UgYXJlIGltcG9ydGFudCwgc28gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSByZWFzb25pbmcgYmVoaW5kIGFsbCB0aGlzOiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSB1cGRhdGluZyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgdG8gdXNlIGB0cnlfY2hhcmdlKClgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2coKWAuIGB0cnlfY2hhcmdlKClgIGluY2x1ZGVzIGEgY3J1Y2lhbCBjaGVjayBmb3IgdGhlIHJvb3QgbWVtb3J5IGNncm91cCBhbmQgYnlwYXNzZXMgY2hhcmdpbmcgaWYgdGhlIG1lbW9yeSBjZ3JvdXAgaXMgdGhlIHJvb3QgbWVtY2csIGFsaWduaW5nIHRoZSByb290IGNncm91cCBvYmplY3QgYWNjb3VudGluZy4gVGhpcyBjaGFuZ2Ugc2VlbXMgaW1wb3J0YW50IGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZmllbGRzOgotICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCi0gICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGtlcm5lbCBtZW1vcnkgYWNjb3VudGluZyBpbiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpIHRvIHVzZSB0cnlfY2hhcmdlKCkgcmF0aGVyIHRoYW4gdHJ5X2NoYXJnZV9tZW1jZygpLCBlbnN1cmluZyByb290IG1lbW9yeSBjZ3JvdXBzIGJ5cGFzcyBjaGFyZ2UgbG9naWMuJiMzNDsKLSAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0NHUk9VUFMmIzM0OywgJiMzNDtNRU1DRyYjMzQ7XWAKLSAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7b2JqX2Nncm91cF9jaGFyZ2UmIzM0OywgJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OywgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCYjMzQ7XWAKCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLCBzbyBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7LAogICAgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2JqX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDssCiAgICAmIzM0O29ial9jZ3JvdXBfY2hhcmdlX3pzd2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBrZXJuZWwgbWVtb3J5IGFjY291bnRpbmcgaW4gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKSB0byB1c2UgdHJ5X2NoYXJnZSgpIGluc3RlYWQgb2YgdHJ5X2NoYXJnZV9tZW1jZygpLCBieXBhc3NpbmcgY2hhcmdpbmcgd2hlbiB0aGUgdGFyZ2V0IG1lbWNnIGlzIHRoZSByb290IG1lbW9yeSBjZ3JvdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXG5cblRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvcHRpbWl6YXRpb24vZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgKGluZm8tbGVha3MpLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBhY2NvdW50aW5nIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjM1ZGU2ODY1MzFmZmMwZjE5YjU3MGEyMTQxMGE4Zjg0Mzg4ZjY1YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDAzOjEzOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMxNTcsNyAmIzQzOzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLAogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTsKIAotCXJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpOwomIzQzOwlyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIEZpcnN0LCBJJiMzOTtsbCByZXZpZXcgdGhlIHNlY3VyaXR5IGd1aWRlbGluZXMuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBRQSB0ZXN0aW5nIHJlcXVlc3Q7IHdlJiMzOTtyZSBqdXN0IHRyeWluZyB0byBnYXVnZSBpZiBLTVNBTiBmdXp6aW5nIGlzICphY3R1YWxseSogbmVjZXNzYXJ5IGZvciB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyBiYXNlZCBvbiB0aGUgcmVxdWVzdCB0eXBlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYGRpZmZgIGl0c2VsZjogSXQgbG9va3MgbGlrZSBhIGNoYW5nZSBmcm9tIGB0cnlfY2hhcmdlX21lbWNnYCB0byBgdHJ5X2NoYXJnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBzaWduaWZpY2FudCB0aGF0IGNoYW5nZSBpcyBpbiB0aGUgY29udGV4dCBvZiBgbW0vbWVtY29udHJvbC5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIGl0IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBJIG5lZWQgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ3V0IHRlbGxzIG1lIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRyeV9jaGFyZ2VgICpkb2VzKiB2ZXJzdXMgd2hhdCBgdHJ5X2NoYXJnZV9tZW1jZ2AgKmRpZCog4oCTIGFuZCBhbHNvIGhvdyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIGZpdHMgaW50byB0aGUgcGljdHVyZS4gQSBxdWljayBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgc2NhbiBhcm91bmQgbGluZSAzMTU3IG9mIGBtbS9tZW1jb250cm9sLmNgIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSXQgbWlnaHQgYmUgbm90aGluZywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlIGFmZmVjdGVkIGNvZGUuIFRoZW4gSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgbWlub3IgcmVmYWN0b3Jpbmcgb3BlbnMgYW55IG5ldyBwYXRocyBmb3IgbWVtb3J5IGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NTAtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG5tbS9tZW1jb250cm9sLmM6MjU1MTogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbm1tL21lbWNvbnRyb2wuYy0yNTUyLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTQ9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0My1cbm1tL21lbWNvbnRyb2wuYzoyNjQ0OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDUtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY2OC1cdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG5tbS9tZW1jb250cm9sLmM6MjY2OTpcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmM6MjY3MDpcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxubW0vbWVtY29udHJvbC5jLTI2NzEtXHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4tLVxubW0vbWVtY29udHJvbC5jLTI4NTItXG5tbS9tZW1jb250cm9sLmM6Mjg1MzpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjg1NC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1OC1cbm1tL21lbWNvbnRyb2wuYzoyODU5Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg2MC19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNTI9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1OS1cbm1tL21lbWNvbnRyb2wuYzozMTYwOlx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE2MS1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMDA9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA4LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMDk6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjEwLVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjIwPWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjctXG5tbS9tZW1jb250cm9sLmM6NTYyODpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjI5LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTY4Nj1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzIzLS8qKlxubW0vbWVtY29udHJvbC5jOjU3MjQ6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTcyNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NzMxOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTczMi17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3NTktXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6NTc2MDpcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmMtNTc2MS1cdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgYXJvdW5kIGxpbmVzIDI4NTAtMjg3MCBhbmQgMzE1MC0zMTgwLiBUaGVzZSBzZWN0aW9ucyBsaWtlbHkgZGVhbCB3aXRoIFsqKipBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGVzZSBsaW5lcyBkZWFsIHdpdGggYmFzZWQgb24gdGhlaXIgZXhwZXJ0aXNlLCBlLmcuLCAmIzM0O21lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBkdXJpbmcgc3dhcC1vdXQmIzM0Oywgb3IgJiMzNDtoaWVyYXJjaGljYWwgcmVzb3VyY2UgbGltaXRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgcmVjbGFpbS4mIzM0OyogVGhlIGdvYWwgaGVyZSBpcyB0byBkZW1vbnN0cmF0ZSBleHBlcnRpc2Ugd2l0aG91dCBzdGF0aW5nIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBpbiB0aGUgdGV4dCoqKl0uIEkga25vdyB0aGVzZSBhcmVhcyBjYW4gYmUgdHJpY2t5LCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGhvdyB0aGUgY29kZSBoYW5kbGVzIFsqKipBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGVzZSBsaW5lcyBkZWFsIHdpdGggYmFzZWQgb24gdGhlaXIgZXhwZXJ0aXNlLCBlLmcuLCAmIzM0O3Blci1jZ3JvdXAgc3RhdGlzdGljcyB1cGRhdGVzJiMzNDssIG9yICYjMzQ7dGhlIGludGVyYWN0aW9uIGJldHdlZW4gcmVjbGFpbSBhbmQgY2hhcmdlL3VuY2hhcmdlIG9wZXJhdGlvbnMuJiMzNDsqIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGVtb25zdHJhdGUgZXhwZXJ0aXNlIHdpdGhvdXQgc3RhdGluZyBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgaW4gdGhlIHRleHQqKipdLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBsb2NraW5nIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIChsaWtlIHRoZSBtZW1fY2dyb3VwIHN0cnVjdCwgb2YgY291cnNlKSBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NDU6XHRcdCAqL1xuMjg0NjpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXHUwMDI2XHUwMDI2XG4yODQ3Olx0XHQgICAgIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykgXHUwMDI2XHUwMDI2XG4yODQ4Olx0XHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjg0OTpcdFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4yODUwOlx0XHRyZXR1cm4gMDtcbjI4NTE6XHR9XG4yODUyOlx0XG4yODUzOlx0c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjg1NDpcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuMjg1NTpcdHtcbjI4NTY6XHRcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuMjg1NzpcdFx0XHRyZXR1cm4gMDtcbjI4NTg6XHRcbjI4NTk6XHRcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xuMjg2MDpcdH1cbjI4NjE6XHRcbjI4NjI6XHRzdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbjI4NjM6XHR7XG4yODY0Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbyksIGZvbGlvKTtcbjI4NjU6XHRcdC8qXG4yODY2Olx0XHQgKiBBbnkgb2YgdGhlIGZvbGxvd2luZyBlbnN1cmVzIGZvbGlvJiMzOTtzIG9iamNnIHN0YWJpbGl0eTpcbjI4Njc6XHRcdCAqXG4yODY4Olx0XHQgKiAtIHRoZSBwYWdlIGxvY2tcbjI4Njk6XHRcdCAqIC0gTFJVIGlzb2xhdGlvblxuMjg3MDpcdFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXG4yODcxOlx0XHQgKi9cbjI4NzI6XHRcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAodW5zaWduZWQgbG9uZylvYmpjZztcbjI4NzM6XHR9XG4yODc0Olx0XG4yODc1Olx0I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMjg3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuMjg3NzpcdFx0XHRcdFx0XHQgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbjI4Nzg6XHRcdFx0XHRcdFx0IGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBpbnQgbnIpXG4yODc5Olx0e1xuMjg4MDpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuMjg4MTpcdFxuMjg4MjpcdFx0aWYgKGxpa2VseSghaW5fbm1pKCkpKSB7XG4yODgzOlx0XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4yODg0Olx0XHRcdG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIG5yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgeW91JiMzOTtyZSBpbnRlcmVzdGVkIGluLCBmb2N1c2luZyBvbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgOgoKKipEaXZpbmcgaW50byB0aGUgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBsaW5lcyAzMTUwLTMxODAsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIG9iamVjdCBvciBzdWJzeXN0ZW0gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gS25vd2luZyB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXksIG5hdHVyYWxseSwgYnV0IGJhc2VkIHB1cmVseSBvbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uIHdpdGggY2dyb3Vwcy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2hhcmdpbmcgbWVtb3J5IHVzYWdlIHRvIGEgc3BlY2lmaWMgY2dyb3VwLgoKVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3I6ICYjMzQ7b2JqJiMzNDsgc3VnZ2VzdHMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSAqc3BlY2lmaWMqIG1lbW9yeSBvYmplY3QgKGEgcGFnZSwgYSBibG9jaywgYSBwb3J0aW9uIG9mIG1lbW9yeSwgbWF5YmUgcmVsYXRlZCB0byBhIHNwZWNpZmljIGtlcm5lbCBzdWJzeXN0ZW0pLCAmIzM0O2Nncm91cCYjMzQ7IHBvaW50cyBkaXJlY3RseSB0byBjb250cm9sIGdyb3VwcywgYW5kICYjMzQ7Y2hhcmdlX3BhZ2VzJiMzNDsgaW1wbGllcyB3ZSBhcmUgYWNjb3VudGluZyBtZW1vcnkgdXNhZ2UuCgpTbywgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaW4gdGhhdCBjb2RlIGJsb2NrOgoKKiAgICoqUGFnZSBBY2NvdW50aW5nOioqIEl0JiMzOTtzICpsaWtlbHkqIGhhbmRsaW5nIGFuIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIG9mIHBhZ2VzIHNvbWVob3cuIFBlcmhhcHMgaXQmIzM5O3MgY2FsbGVkIHRvIHJlY29yZCBhIHBhZ2UgYmVpbmcgYWRkZWQgdG8gYW4gb2JqZWN0LCBvciB0byBzdWJ0cmFjdCBhIHBhZ2UgZnJvbSB0aGUgdG90YWwgaWYgdGhlIG9iamVjdCBpcyBiZWluZyBmcmVlZCBvciBzaHJ1bmsuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgdGhlIGFjdHVhbCBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IG9mIHBhZ2UgY291bnRlcnMgd2l0aGluIHRoZSByZWxldmFudCBjZ3JvdXAmIzM5O3MgbWVtb3J5IGFjY291bnRpbmcgZGF0YS4KKiAgICoqQ2dyb3VwIExvb2t1cC9JZGVudGlmaWNhdGlvbjoqKiBUaGUgY29kZSBtdXN0IGRldGVybWluZSB3aGljaCBjZ3JvdXAgdGhpcyBvYmplY3QgYmVsb25ncyB0by4gSXQgKmNvdWxkKiBiZSB1c2luZyBhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgY2dyb3VwLCBvciBpdCBjb3VsZCBiZSByZWx5aW5nIG9uIHRoZSBjdXJyZW50IHByb2Nlc3MmIzM5O3MgY2dyb3VwIG1lbWJlcnNoaXAuIFRoZXJlJiMzOTtzIGEgbG90IG9mIHBvdGVudGlhbCB2YXJpYWJpbGl0eSBpbiB0aGUgaW1wbGVtZW50YXRpb24uCiogICAqKk1lbW9yeSBBY2NvdW50aW5nIExvZ2ljOioqIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgYXJpdGhtZXRpYyBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgY2dyb3VwJiMzOTtzIG1lbW9yeSB1c2FnZSBzdGF0cy4gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGEgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgY3NzX21lbWNnX2NoYXJnZV9jb21tb25gIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBvciBkaXJlY3QgYWNjZXNzIHRvIHNvbWUgZmllbGQgd2l0aGluIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0dXJlLiBUaGVyZSB3aWxsIGJlIGNoZWNrcyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBleGNlZWRpbmcgYW55IGNncm91cCBsaW1pdHMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0JiMzOTtzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgdGhpcyB0byBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmVzIGdyYWNlZnVsbHkuIFdoYXQgaGFwcGVucyBpZiB0aGUgbWVtb3J5IGNoYXJnZSBmYWlscz8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3I/IERvZXMgaXQgdHJ5IHRvIHJlY2xhaW0gbWVtb3J5PyBJcyB0aGVyZSBzb21lIGxvZ2dpbmcgaW4gcGxhY2UgdG8gdHJhY2UgdGhlc2UgaXNzdWVzPwoKSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgd29ya2luZyBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBtZW1vcnkgY29udHJvbGxlcnMsIGJ1dCB0aGVyZSBhcmUgcG90ZW50aWFsbHkgbW9yZSBpbnRyaWNhdGUgYW5kIHN1YnRsZSB0aGluZ3MgdG8gdGhpbmsgYWJvdXQgd2hlbiB3b3JraW5nIG9uIGNvZGUgbGlrZSB0aGlzLiBXaXRob3V0IHRoZSBleGFjdCBzdXJyb3VuZGluZyBjb2RlLCB0aGVzZSBhcmUgc29tZSBvZiB0aGUgZmlyc3QgcXVlc3Rpb25zIHRoYXQgYXJlIGNvbWluZyB0byBtaW5kLiBSZWFkaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIGluIG1vcmUgZGV0YWlsIGlzIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE0NTpcdCAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcbjMxNDY6XHQgKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXG4zMTQ3Olx0ICogQGdmcDogcmVjbGFpbSBtb2RlXG4zMTQ4Olx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlXG4zMTQ5Olx0ICpcbjMxNTA6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuMzE1MTpcdCAqL1xuMzE1MjpcdHN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4zMTUzOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4zMTU0Olx0e1xuMzE1NTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuMzE1NjpcdFx0aW50IHJldDtcbjMxNTc6XHRcbjMxNTg6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4zMTU5Olx0XG4zMTYwOlx0XHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbjMxNjE6XHRcdGlmIChyZXQpXG4zMTYyOlx0XHRcdGdvdG8gb3V0O1xuMzE2MzpcdFxuMzE2NDpcdFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCBucl9wYWdlcyk7XG4zMTY1Olx0XHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCBucl9wYWdlcyk7XG4zMTY2Olx0b3V0OlxuMzE2NzpcdFx0Y3NzX3B1dChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpO1xuMzE2ODpcdFxuMzE2OTpcdFx0cmV0dXJuIHJldDtcbjMxNzA6XHR9XG4zMTcxOlx0XG4zMTcyOlx0c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpwYWdlX29iamNnKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuMzE3MzpcdHtcbjMxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YSA9IHBhZ2UtXHUwMDNlbWVtY2dfZGF0YTtcbjMxNzU6XHRcbjMxNzY6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2RhdGEpXG4zMTc3Olx0XHRcdHJldHVybiBOVUxMO1xuMzE3ODpcdFxuMzE3OTpcdFx0Vk1fQlVHX09OX1BBR0UoKG1lbWNnX2RhdGEgXHUwMDI2IE9CSkVYVFNfRkxBR1NfTUFTSykgIT0gTUVNQ0dfREFUQV9LTUVNLFxuMzE4MDpcdFx0XHRcdHBhZ2UpO1xuMzE4MTpcdFx0cmV0dXJuIChzdHJ1Y3Qgb2JqX2Nncm91cCAqKShtZW1jZ19kYXRhIC0gTUVNQ0dfREFUQV9LTUVNKTtcbjMxODI6XHR9XG4zMTgzOlx0XG4zMTg0Olx0c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNgoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA1ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBpbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGB0cnlfY2hhcmdlX21lbWNnYCB3aXRoIGB0cnlfY2hhcmdlYC4gIEkgc2VlIGB0cnlfY2hhcmdlYCBub3cgaW5jbHVkZXMgYW4gZWFybHkgZXhpdCBjb25kaXRpb24sIGJhc2ljYWxseSBieXBhc3NpbmcgdGhlIGNoYXJnZSBpZiBpdCYjMzk7cyB0aGUgcm9vdCBtZW1jZy4gIFRoaXMgYHRyeV9jaGFyZ2VgIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyB0aGlzIGBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpYCBjaGVjay4gU28sIGl0JiMzOTtzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgZml4IHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhpcyBpbnRyb2R1Y2VzIGEgS01TQU4gaXNzdWU/ICBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQmIzM5O3MgY29uZmlybS4gIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGFwcGVhciB0bzoKCiogICBSZWFkIG9yIHdyaXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgRXhwb3NlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHVyZSBmaWVsZHMgdG8gdGhlIG91dHNpZGUuCiogICBNb2RpZnkgYW55IGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4KKiAgIEludHJvZHVjZSBvciB0b3VjaCBhbnkgaGVhcCBvciBzdGFjayB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuCgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcy4gRG9lcyB0aGlzIGFmZmVjdCBLTVNBTiBhdCBhbGw/ICBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gY2F0Y2hlcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgZG91YmxlIGZyZWVzLiAgVGhpcyBwYXRjaD8gUHVyZWx5IGFib3V0IGNncm91cCBtZW1vcnkgYWNjb3VudGluZyBsb2dpYy4gSXQgaXMgc3BlY2lmaWNhbGx5IGFib3V0IHNraXBwaW5nIHRoZSBjaGFyZ2Ugb24gdGhlIHJvb3QgY2dyb3VwLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGRlYWxzIHdpdGggb25seSBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zZSBpdCBpbiBhbnkgd2F5LCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyBLTVNBTi1zcGVjaWZpYyBjb25jZXJuIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcsIEtBU0FOLCBhbmQgbG9ja2RlcCBhcmUgc3VmZmljaWVudC4KCk15IHJlYXNvbmluZywgaW4gYSBjbGVhciBicmVha2Rvd246CgoxLiAgKipQYXRjaCBGdW5jdGlvbmFsaXR5OioqIFRoZSBwYXRjaCBjaGFuZ2VzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgdG8gdXNlIGB0cnlfY2hhcmdlYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIGB0cnlfY2hhcmdlYCBmdW5jdGlvbiBhZGRzIGEgY2hlY2sgZm9yIGBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpYCwgYnlwYXNzaW5nIGNoYXJnaW5nIGZvciB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLgoyLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczoqKiBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMvc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbm8gc3RydWN0dXJlIGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBrZXJuZWwtdG8tdXNlciBib3VuZGFyaWVzIGFyZSB1bmFmZmVjdGVkLCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoZXMgZG9uJiMzOTt0IHJlbHkgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuCjMuICAqKktBU0FOIHZzLiBLTVNBTjoqKiBLQVNBTiBpcyByZWxldmFudCBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uOyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrIHJpc2tzLgoKSSYjMzk7bSBzZXR0aW5nIHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKClgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGNhbGwgYHRyeV9jaGFyZ2UoKWAgaW5zdGVhZCBvZiBgdHJ5X2NoYXJnZV9tZW1jZygpYC4gYHRyeV9jaGFyZ2UoKWAgaXMgYSBzbWFsbCB3cmFwcGVyIHRoYXQgc2hvcnQtY2lyY3VpdHMgY2hhcmdpbmcgaWYgYG1lbWNnYCBpcyB0aGUgcm9vdCBjZ3JvdXAgKGBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpYCksIG90aGVyd2lzZSBjYWxsaW5nIGB0cnlfY2hhcmdlX21lbWNnKClgLlxuXG5UaGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3B0aW1pemF0aW9uL2ZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIChpbmZvLWxlYWtzKS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgYWNjb3VudGluZyBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXG5cblRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvcHRpbWl6YXRpb24vZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgKGluZm8tbGVha3MpLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBhY2NvdW50aW5nIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MDQuMTUyNzcyNDM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzODA4MzM4Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBjYWxsIGB0cnlfY2hhcmdlKClgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2coKWAuIGB0cnlfY2hhcmdlKClgIGlzIGEgc21hbGwgd3JhcHBlciB0aGF0IHNob3J0LWNpcmN1aXRzIGNoYXJnaW5nIGlmIGBtZW1jZ2AgaXMgdGhlIHJvb3QgY2dyb3VwIChgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKWApLCBvdGhlcndpc2UgY2FsbGluZyBgdHJ5X2NoYXJnZV9tZW1jZygpYC5cXG5cXG5UaGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3B0aW1pemF0aW9uL2ZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIChpbmZvLWxlYWtzKS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgYWNjb3VudGluZyBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGtlcm5lbCBtZW1vcnkgYWNjb3VudGluZyBpbiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpIHRvIHVzZSB0cnlfY2hhcmdlKCkgaW5zdGVhZCBvZiB0cnlfY2hhcmdlX21lbWNnKCksIGJ5cGFzc2luZyBjaGFyZ2luZyB3aGVuIHRoZSB0YXJnZXQgbWVtY2cgaXMgdGhlIHJvb3QgbWVtb3J5IGNncm91cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MDQuMTUyNzgwNTU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2NjAxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjM1ZGU2ODY1MzFmZmMwZjE5YjU3MGEyMTQxMGE4Zjg0Mzg4ZjY1Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMzoxMzowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li4xNzA5YWM5NmJiZGVjIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4gXFxuLVxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbitcXHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzowNS44MTAwMTgwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE1NTE0NDcyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MzVkZTY4NjUzMWZmYzBmMTliNTcwYTIxNDEwYThmODQzODhmNjVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDM6MTM6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTMxNTcsNyArMzE1Nyw3IEBAIHN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuIFxuLVx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG4rXHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MDUuODEwMDE5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyMjc4NzYwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ29udHJvbCBDb2RlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcyBkaWZmIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIHR3ZWFrZWQgYXJvdW5kIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGNoYW5nZXMgdGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBtb2RpZmllZCBjb2RlLCBvciBtYXliZSBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIHF1aWNrbHkgc2VhcmNoIGZvciBzcGVjaWZpYyBrZXl3b3JkcyBvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5ICp3aGF0KiBoYXMgYmVlbiBtb2RpZmllZCB3aXRoaW4gdGhhdCBmaWxlIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSwgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MTUuMDM3ODk4MDcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTQ1OlxcdCAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcXG4zMTQ2OlxcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4zMTQ3OlxcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbjMxNDg6XFx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlXFxuMzE0OTpcXHQgKlxcbjMxNTA6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4zMTUxOlxcdCAqL1xcbjMxNTI6XFx0c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4zMTUzOlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4zMTU0OlxcdHtcXG4zMTU1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4zMTU2OlxcdFxcdGludCByZXQ7XFxuMzE1NzpcXHRcXG4zMTU4OlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuMzE1OTpcXHRcXG4zMTYwOlxcdFxcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbjMxNjE6XFx0XFx0aWYgKHJldClcXG4zMTYyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNjM6XFx0XFxuMzE2NDpcXHRcXHRhY2NvdW50X2ttZW1fbm1pX3NhZmUobWVtY2csIG5yX3BhZ2VzKTtcXG4zMTY1OlxcdFxcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIG5yX3BhZ2VzKTtcXG4zMTY2OlxcdG91dDpcXG4zMTY3OlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjMxNjg6XFx0XFxuMzE2OTpcXHRcXHRyZXR1cm4gcmV0O1xcbjMxNzA6XFx0fVxcbjMxNzE6XFx0XFxuMzE3MjpcXHRzdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKnBhZ2Vfb2JqY2coY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuMzE3MzpcXHR7XFxuMzE3NDpcXHRcXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBwYWdlLVxcdTAwM2VtZW1jZ19kYXRhO1xcbjMxNzU6XFx0XFxuMzE3NjpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19kYXRhKVxcbjMxNzc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzE3ODpcXHRcXG4zMTc5OlxcdFxcdFZNX0JVR19PTl9QQUdFKChtZW1jZ19kYXRhIFxcdTAwMjYgT0JKRVhUU19GTEFHU19NQVNLKSAhPSBNRU1DR19EQVRBX0tNRU0sXFxuMzE4MDpcXHRcXHRcXHRcXHRwYWdlKTtcXG4zMTgxOlxcdFxcdHJldHVybiAoc3RydWN0IG9ial9jZ3JvdXAgKikobWVtY2dfZGF0YSAtIE1FTUNHX0RBVEFfS01FTSk7XFxuMzE4MjpcXHR9XFxuMzE4MzpcXHRcXG4zMTg0OlxcdHN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuMzE4NTpcXHR7XFxuMzE4NjpcXHRcXHRwYWdlLVxcdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2cgfCBNRU1DR19EQVRBX0tNRU07XFxuMzE4NzpcXHR9XFxuMzE4ODpcXHRcXG4zMTg5OlxcdC8qKlxcbjMxOTA6XFx0ICogX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlOiBjaGFyZ2UgYSBrbWVtIHBhZ2UgdG8gdGhlIGN1cnJlbnQgbWVtb3J5IGNncm91cFxcbjMxOTE6XFx0ICogQHBhZ2U6IHBhZ2UgdG8gY2hhcmdlXFxuMzE5MjpcXHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcXG4zMTkzOlxcdCAqIEBvcmRlcjogYWxsb2NhdGlvbiBvcmRlclxcbjMxOTQ6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MTUuMDM4MTI1NzMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MDU4ODg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENoYXJnZSBNZWNoYW5pc21zKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB0cnlfY2hhcmdlYCBhbmQgYHRyeV9jaGFyZ2VfbWVtY2dgIGJ1c2luZXNzLiBJdCBzb3VuZHMgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFjY291bnRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZWlyIGludGVyYWN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2VzLCBvciBhdCBsZWFzdCBob3cgYHRyeV9jaGFyZ2VgIHdvcmtzIGluIGNvbnRleHQgb2YgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYSBncmVwIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIGxvb2sgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoZXkgYXJlIGRlZmluZWQgYW5kIHVzZWQsIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MTguMDA4NzE4MjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTAzMzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU1MC0gKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cXG5tbS9tZW1jb250cm9sLmM6MjU1MTogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcXG5tbS9tZW1jb250cm9sLmMtMjU1Mi0gKiByZXR1cm4gcGF0aCB3aGVyZSByZWNsYWltIGlzIGFsd2F5cyBhYmxlIHRvIGJsb2NrLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1NTQ9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjQzLVxcbm1tL21lbWNvbnRyb2wuYzoyNjQ0OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNjQ1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY2OC1cXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbm1tL21lbWNvbnRyb2wuYzoyNjY5OlxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxubW0vbWVtY29udHJvbC5jOjI2NzA6XFx0XFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKVxcbm1tL21lbWNvbnRyb2wuYy0yNjcxLVxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NTItXFxubW0vbWVtY29udHJvbC5jOjI4NTM6c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NTgtXFxubW0vbWVtY29udHJvbC5jOjI4NTk6XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4NjAtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNTI9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTU5LVxcbm1tL21lbWNvbnRyb2wuYzozMTYwOlxcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTYxLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIwMD1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIwOC1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUyMDk6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MjEwLVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjIwPWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyNy1cXG5tbS9tZW1jb250cm9sLmM6NTYyODpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MjktXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTY4Nj1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MjMtLyoqXFxubW0vbWVtY29udHJvbC5jOjU3MjQ6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTU3MjUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTczMTppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NzMyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzU5LVxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzo1NzYwOlxcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcywgXFx1MDAyNmNvdW50ZXIpKSB7XFxubW0vbWVtY29udHJvbC5jLTU3NjEtXFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjE4LjEyNzc1ODQxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDcyNTg1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgdHJ5X2NoYXJnZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIGhpbnQgcG9pbnRzIGRpcmVjdGx5IHRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBhIHNwZWNpZmljIHJhbmdlIG9mIGxpbmVzLCAyODUwLTI4NjUuIEV4Y2VsbGVudCDigJMgYSBmb2N1c2VkIHRhcmdldCBpcyBhbHdheXMgZWFzaWVyLiBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhhdCBzZWN0aW9uIG9mIGNvZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHRyeV9jaGFyZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgYmVoYXZlcyBpbiBhbGxvY2F0aW5nIG1lbW9yeSBhZ2FpbnN0IGEgY2dyb3VwJ3MgbGltaXQuIFdoYXQgYXJlIHRoZSBjaGVja3MsIGFuZCB3aGF04oCZcyB0aGUgbG9naWMgaXQgdXRpbGl6ZXM/IEknbGwgcHJvYmFibHkgYmUgYWJsZSB0byBnbGVhbiB0aGlzIGp1c3QgYnkgcmVhZGluZyB0aHJvdWdoIHRoZSBjb2RlLCBidXQgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcywgZGVwZW5kaW5nIG9uIGhvdyBgdHJ5X2NoYXJnZWAgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjIzLjIzNTAxODgwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg0NTpcXHRcXHQgKi9cXG4yODQ2OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggXFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXFx1MDAyNlxcdTAwMjZcXG4yODQ3OlxcdFxcdCAgICAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpIFxcdTAwMjZcXHUwMDI2XFxuMjg0ODpcXHRcXHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI4NDk6XFx0XFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbjI4NTA6XFx0XFx0cmV0dXJuIDA7XFxuMjg1MTpcXHR9XFxuMjg1MjpcXHRcXG4yODUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yODU0OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjI4NTU6XFx0e1xcbjI4NTY6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuMjg1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxuMjg2MDpcXHR9XFxuMjg2MTpcXHRcXG4yODYyOlxcdHN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbjI4NjM6XFx0e1xcbjI4NjQ6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pLCBmb2xpbyk7XFxuMjg2NTpcXHRcXHQvKlxcbjI4NjY6XFx0XFx0ICogQW55IG9mIHRoZSBmb2xsb3dpbmcgZW5zdXJlcyBmb2xpbydzIG9iamNnIHN0YWJpbGl0eTpcXG4yODY3OlxcdFxcdCAqXFxuMjg2ODpcXHRcXHQgKiAtIHRoZSBwYWdlIGxvY2tcXG4yODY5OlxcdFxcdCAqIC0gTFJVIGlzb2xhdGlvblxcbjI4NzA6XFx0XFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXFxuMjg3MTpcXHRcXHQgKi9cXG4yODcyOlxcdFxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2c7XFxuMjg3MzpcXHR9XFxuMjg3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MjMuMjM1Mjk4MDMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MjM5ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENoYXJnZSBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHRyeV9jaGFyZ2VgLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAgKGBtZW1jZ2ApIGlzIHRoZSByb290LCBpdCBqdXN0IHJldHVybnMgMCwgaW1wbHlpbmcgbm8gY2hhcmdlLiBJdCB0aGVuIGNhbGxzIGB0cnlfY2hhcmdlX21lbWNnYC5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIHJlY2FsbCB0aGUgbG9naWMgZmxvdy4gQWgsIHJpZ2h0ISBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIHdhcyB1c2luZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZGlyZWN0bHkuIFNwZWNpZmljYWxseSBpdCB3YXMgZG9pbmc6XG5cbmBgYGNcblx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcblxuXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbmBgYFxuXG5CdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpZiBgbWVtY2dgICppcyogdGhlIHJvb3QgbWVtY2csIG9yIGlmIGBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnYCBpcyByZXR1cm5pbmcgdGhlIHJvb3QsIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgd2l0aCB0aGUgcm9vdC4gQnV0IHdhaXQsIGB0cnlfY2hhcmdlYCAqYWxzbyogY2hlY2tzIGlmIGBtZW1jZ2AgaXMgdGhlIHJvb3QgYW5kIHNob3J0IGNpcmN1aXRzIHRvIGEgemVybyByZXR1cm4hIEl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBjaGVjayBpbiBgdHJ5X2NoYXJnZWAgYW5kICphbm90aGVyKiBjaGVjayBkb3duIHRoZSBsaW5lLiBJdCBmZWVscyByZWR1bmRhbnQuXG5cbkkgbmVlZCB0byBzZWUgd2hhdCBgdHJ5X2NoYXJnZV9tZW1jZ2AgZG9lcyB3aGVuIHRoZSBjZ3JvdXAgaXMgcm9vdC4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBuZXh0IGFuZCBzZWUgd2h5IGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIGl0IHdoZW4gdGhlIGNoZWNrIGlzIGFscmVhZHkgcHJlc2VudCBpbiBgdHJ5X2NoYXJnZWAuIFRoZXJlIG1pZ2h0IGJlIGEgZ29vZCByZWFzb24sIGEgc3VidGxlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IsIG9yIHBlcmhhcHMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHNpbXBsaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzoyOC4xOTc3MDAwNzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQwOlxcdG91dDpcXG4yNjQxOlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjI2NDI6XFx0fVxcbjI2NDM6XFx0XFxuMjY0NDpcXHRzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yNjQ1OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuMjY0NjpcXHR7XFxuMjY0NzpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2ggPSBtYXgoTUVNQ0dfQ0hBUkdFX0JBVENILCBucl9wYWdlcyk7XFxuMjY0ODpcXHRcXHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuMjY0OTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XFxuMjY1MDpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjI2NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjY1MjpcXHRcXHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcXG4yNjUzOlxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuMjY1NDpcXHRcXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG4yNjU1OlxcdFxcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xcbjI2NTY6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjY1NzpcXHRcXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xcbjI2NTg6XFx0XFxuMjY1OTpcXHRyZXRyeTpcXG4yNjYwOlxcdFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuMjY2MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjYyOlxcdFxcbjI2NjM6XFx0XFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4yNjY0OlxcdFxcdFxcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xcbjI2NjU6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjY2OlxcdFxcbjI2Njc6XFx0XFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4yNjY4OlxcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuMjY2OTpcXHRcXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbjI2NzA6XFx0XFx0XFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKVxcbjI2NzE6XFx0XFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuMjY3MjpcXHRcXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbjI2NzM6XFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoKTtcXG4yNjc0OlxcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTtcXG4yNjc1OlxcdFxcdH0gZWxzZSB7XFxuMjY3NjpcXHRcXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcXG4yNjc3OlxcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4yNjc4OlxcdFxcdH1cXG4yNjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzoyOC4xOTg0ODY1MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAwOTMxNDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCZWhhdmlvciBvZiBgbWVtY2dgIGFuZCBNZW1vcnkgQ2hhcmdpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHRyeV9jaGFyZ2VfbWVtY2dgIGZ1bmN0aW9uIGFuZCBzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIHRoZSByb290IGBtZW1jZ2AgaXMgaW52b2x2ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIHByb2JhYmx5IGdvaW5nIHRvIGJlaGF2ZSBhIGJpdCBkaWZmZXJlbnRseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgYmVjYXVzZSBJIHJlY2FsbCB0aGF0IHRoZSBgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2VgIG9wZXJhdGlvbiBvbiB0aGUgcm9vdCBgbWVtY2dgIHVzdWFsbHkgaGFzIG5vIGJvdW5kcy4gSG93ZXZlciwgdGhlcmUncyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IGZ1bmN0aW9ucyBsaWtlIGBjb25zdW1lX3N0b2NrYCwgYHJlZmlsbF9zdG9ja2AsIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAsIGFuZCB0aGVpciByZWxhdGVkIHJlc3RvY2sgcHJvY2VkdXJlcyAqZG8qIGdldCBleGVjdXRlZCwgZXZlbiB3aGVuIGNhbGxlZCB3aXRoIHRoZSByb290IGBtZW1jZ2AhIFRoaXMgaW5jb25zaXN0ZW5jeSBuZWVkcyBhIGNsb3NlciBsb29rLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIGFuZCBsb29raW5nIGF0IGhvdyBpdCdzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIHRoZXNlIGludGVyYWN0aW9ucyB3aXRoIHRoZSByb290IGBtZW1jZ2AgYXJlIG9jY3VycmluZyBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBhcHByb2FjaCBzaG91bGQgc2hlZCBsaWdodCBvbiBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MzIuMjA3ODA0MDU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5MDg2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zMTI5PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNDQtLypcXG5tbS9tZW1jb250cm9sLmM6MzE0NTogKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXFxubW0vbWVtY29udHJvbC5jLTMxNDYtICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTEtICovXFxubW0vbWVtY29udHJvbC5jOjMxNTI6c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG5tbS9tZW1jb250cm9sLmMtMzE1My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE5Nz1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjAzLVxcdGlmIChvYmpjZyBcXHUwMDI2XFx1MDAyNiAhb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkge1xcbm1tL21lbWNvbnRyb2wuYzozMjA0OlxcdFxcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbm1tL21lbWNvbnRyb2wuYy0zMjA1LVxcdFxcdGlmICghcmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzUzMT1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cXHRjaGFyZ2Vfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XFxubW0vbWVtY29udHJvbC5jOjM1Mzg6XFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgY2hhcmdlX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjMyLjMzMDcxNzM3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTcxMjgzMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ0dyb3VwcyBhbmQgUGFnZSBDaGFyZ2luZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbWVjaGFuaXNtLiBJJ20gZm9jdXNpbmcgb24gaG93IGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIHdvcmtzLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyBtZW1vcnkgY2dyb3VwcyBoYW5kbGUgcGFnZSBjaGFyZ2VzLiBJIGNhbiBzZWUgdGhlIGNvcmUgb2YgdGhlIG9wZXJhdGlvbiByaWdodCBoZXJlOlxuXG5gYGBjXG5pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbntcblx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuXHRpbnQgcmV0ID0gMDtcblxuXHRvYmpjZyA9IGN1cnJlbnRfb2JqX2Nncm91cCgpO1xuXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG5cdFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLi4uXG5gYGBcblxuUmlnaHQsIEknbSBub3RpbmcgdGhlIGBvYmpjZ2AgdmFyaWFibGUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG9iamVjdCBjZ3JvdXAgb2YgdGhlIGN1cnJlbnQgY29udGV4dC4gSXQgc2VlbXMgd2UncmUgY2hlY2tpbmcgaWYgd2UncmUgKmluKiBhbiBvYmplY3QgY2dyb3VwIGFuZCBpZiB0aGF0IGNncm91cCBpcyAqbm90KiB0aGUgcm9vdCBjZ3JvdXAuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCB3aGljaCBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcuIFRoYXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBhY3R1YWwgYWNjb3VudGluZyBoYXBwZW5zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiBob3cgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCB3b3JrcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1vcnkgY29udHJvbCBzeXN0ZW0uXG5cbk5vdywgbGV0J3MgbmF2aWdhdGUgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGxpbmVzIDM1MTAtMzU2MCBvZiB0aGF0IGZpbGUsIGFzIHRoYXQncyB3aGVyZSBgX19vYmpfY2dyb3VwX2NoYXJnZWAgaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzozNi4zMDIwMDM1ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTEwOlxcdFxcdGlmICgoYWxsb3dfdW5jaGFyZ2UgXFx1MDAyNlxcdTAwMjYgKHN0b2NrX25yX2J5dGVzIFxcdTAwM2UgUEFHRV9TSVpFKSkgfHxcXG4zNTExOlxcdFxcdCAgICBzdG9ja19ucl9ieXRlcyBcXHUwMDNlIFUxNl9NQVgpIHtcXG4zNTEyOlxcdFxcdFxcdG5yX3BhZ2VzID0gc3RvY2tfbnJfYnl0ZXMgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4zNTEzOlxcdFxcdFxcdHN0b2NrX25yX2J5dGVzIFxcdTAwMjY9IChQQUdFX1NJWkUgLSAxKTtcXG4zNTE0OlxcdFxcdH1cXG4zNTE1OlxcdFxcdHN0b2NrLVxcdTAwM2Vucl9ieXRlc1tzbG90XSA9IHN0b2NrX25yX2J5dGVzO1xcbjM1MTY6XFx0XFxuMzUxNzpcXHRvdXQ6XFxuMzUxODpcXHRcXHRpZiAobnJfcGFnZXMpXFxuMzUxOTpcXHRcXHRcXHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XFxuMzUyMDpcXHR9XFxuMzUyMTpcXHRcXG4zNTIyOlxcdHN0YXRpYyB2b2lkIHJlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjM1MjM6XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMsXFxuMzUyNDpcXHRcXHRcXHRcXHQgICAgIGJvb2wgYWxsb3dfdW5jaGFyZ2UpXFxuMzUyNTpcXHR7XFxuMzUyNjpcXHRcXHRzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7XFxuMzUyNzpcXHRcXHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBucl9ieXRlcywgYWxsb3dfdW5jaGFyZ2UpO1xcbjM1Mjg6XFx0XFx0dW5sb2NrX3N0b2NrKHN0b2NrKTtcXG4zNTI5OlxcdH1cXG4zNTMwOlxcdFxcbjM1MzE6XFx0c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbjM1MzI6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgKnJlbWFpbmRlcilcXG4zNTMzOlxcdHtcXG4zNTM0OlxcdFxcdHNpemVfdCBjaGFyZ2Vfc2l6ZTtcXG4zNTM1OlxcdFxcdGludCByZXQ7XFxuMzUzNjpcXHRcXG4zNTM3OlxcdFxcdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcXG4zNTM4OlxcdFxcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjM1Mzk6XFx0XFx0aWYgKCFyZXQpXFxuMzU0MDpcXHRcXHRcXHQqcmVtYWluZGVyID0gY2hhcmdlX3NpemUgLSBzaXplO1xcbjM1NDE6XFx0XFxuMzU0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjM1NDM6XFx0fVxcbjM1NDQ6XFx0XFxuMzU0NTpcXHRpbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxcbjM1NDY6XFx0e1xcbjM1NDc6XFx0XFx0c2l6ZV90IHJlbWFpbmRlcjtcXG4zNTQ4OlxcdFxcdGludCByZXQ7XFxuMzU0OTpcXHRcXG4zNTUwOlxcdFxcdGlmIChsaWtlbHkoY29uc3VtZV9vYmpfc3RvY2sob2JqY2csIHNpemUpKSlcXG4zNTUxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM1NTI6XFx0XFxuMzU1MzpcXHRcXHQvKlxcbjM1NTQ6XFx0XFx0ICogSW4gdGhlb3J5LCBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4gaGF2ZSBlbm91Z2hcXG4zNTU1OlxcdFxcdCAqIHByZS1jaGFyZ2VkIGJ5dGVzIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uIEhvd2V2ZXIsXFxuMzU1NjpcXHRcXHQgKiBmbHVzaGluZyBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyByZXF1aXJlcyB0d28gYXRvbWljXFxuMzU1NzpcXHRcXHQgKiBvcGVyYXRpb25zLCBhbmQgb2JqY2ctXFx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMgY2FuJ3QgYmUgYmlnLlxcbjM1NTg6XFx0XFx0ICogVGhlIHNoYXJlZCBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4gYWxzbyBiZWNvbWUgYVxcbjM1NTk6XFx0XFx0ICogcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBhbGwgdGFza3Mgb2YgdGhlIHNhbWUgbWVtY2cgYXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjM2LjMwMjU4OTIyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzE1MDg4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgQWNjb3VudGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBtZW1vcnkgYWNjb3VudGluZyBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBvYmpfY2dyb3VwX2NoYXJnZWAuIFdoZXJlIGRvZXMgaXQgb3JpZ2luYXRlLCBhbmQgd2hhdCBwcm9jZXNzZXMgdXRpbGl6ZSBpdD8gVGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBhcyB0byB3aGVyZSBhbmQgd2h5IHdlJ3JlIHNlZWluZyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgd2hhdCBzb3J0IG9mIGNoYXJnZXMgaXQncyBoYW5kbGluZy5cblxuVGhlbiwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEFmdGVyIHRoYXQncyB1bmRlcnN0b29kLCBJJ20gdGhpbmtpbmcgSSdsbCB3YW50IHRvIHNlZSBob3cgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgIGxvb2tzIGFyb3VuZCBsaW5lIDMxMjkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgIGFyb3VuZCBsaW5lIDMxMjksIHNpbmNlIHRoZSB1bmNoYXJnaW5nIHByb2Nlc3MgaXMgcHJvYmFibHkganVzdCBhcyBjcml0aWNhbCB0byBncmFzcC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IHNwZWNpZmljIGxpbmUgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgdW5jaGFyZ2luZyBzaWRlLCBhbmQgdGhlIG92ZXJhbGwgYmFsYW5jZSBvZiBtZW1vcnkgY2hhcmdlcyBpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MzkuNjE3NjgwNDc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzEyNTpcXHQgKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXFxuMzEyNjpcXHQgKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gdW5jaGFyZ2VcXG4zMTI3OlxcdCAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIHVuY2hhcmdlXFxuMzEyODpcXHQgKi9cXG4zMTI5OlxcdHN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjMxMzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjMxMzE6XFx0e1xcbjMxMzI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjMxMzM6XFx0XFxuMzEzNDpcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xcbjMxMzU6XFx0XFxuMzEzNjpcXHRcXHRhY2NvdW50X2ttZW1fbm1pX3NhZmUobWVtY2csIC1ucl9wYWdlcyk7XFxuMzEzNzpcXHRcXHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCAtbnJfcGFnZXMpO1xcbjMxMzg6XFx0XFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbjMxMzk6XFx0XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XFxuMzE0MDpcXHRcXG4zMTQxOlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjMxNDI6XFx0fVxcbjMxNDM6XFx0XFxuMzE0NDpcXHQvKlxcbjMxNDU6XFx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbjMxNDY6XFx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxcbjMxNDc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuMzE0ODpcXHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcXG4zMTQ5OlxcdCAqXFxuMzE1MDpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbjMxNTE6XFx0ICovXFxuMzE1MjpcXHRzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjMxNTQ6XFx0e1xcbjMxNTU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjMxNTY6XFx0XFx0aW50IHJldDtcXG4zMTU3OlxcdFxcbjMxNTg6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4zMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzozOS42MTc5MTgwODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY4MjU1NjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgQ2hhbmdlIHRvIE9iamVjdCBDZ3JvdXAgTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHJlY2VudCBwYXRjaCwgYW5kIHRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgcGFnZXMgd2l0aGluIG9iamVjdCBjZ3JvdXBzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRoaXM6IHRoZXkndmUgcmVmYWN0b3JlZCB0aGUgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgd2hlbiB3ZSB3ZXJlIGNoYXJnaW5nIHBhZ2VzLCB3ZSdkIHVzZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZGlyZWN0bHkuIE5vdywgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbGF5ZXIgd2l0aCBgdHJ5X2NoYXJnZWAsIHdoaWNoLCBmb3Igcm9vdCBtZW1jZ3MsIHNob3J0LWNpcmN1aXRzIHRvIGF2b2lkIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgIGFuZCBpbnN0ZWFkIHJldHVybnMgMC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBJIHNlZSB0aGF0IGluIHRoZSB1bmNoYXJnZSBwYXRoLCBmb3IgdGhlIHJvb3QgbWVtY2csIGl0ICpkb2Vzbid0KiByZWZpbGwgdGhlIHN0b2NrLiBCdXQgaW4gdGhlIG9sZCBjaGFyZ2UgcGF0aCwgYHRyeV9jaGFyZ2VfbWVtY2dgICp3b3VsZCogaGF2ZSBhdHRlbXB0ZWQgdG8gY29uc3VtZS9yZWZpbGwgc3RvY2sgYW5kIGNoYXJnZSBjb3VudGVycyBvbiB0aGUgcm9vdCBtZW1jZyDigJMgd2hpY2ggZG9lc24ndCBzZWVtIHJpZ2h0LiBUaGF0J3MgcHJvYmFibHkgdGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgdG8gZml4IHRoaXMgcm9vdCBtZW1jZyBhY2NvdW50aW5nIGJlaGF2aW9yLiBUaGUgbmV3IGB0cnlfY2hhcmdlYCBmdW5jdGlvbiBwcmV2ZW50cyB0aGlzIGluY29ycmVjdCBjaGFyZ2luZyBvbiB0aGUgcm9vdCBtZW1jZyBieSBhdm9pZGluZyBjYWxscyB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuVGhlIHBhdGNoICppcyogbW9kaWZ5aW5nIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBkaXJlY3RseSB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBjZ3JvdXBzLCBtZW1vcnkgY29udHJvbCwgc2xhYiwgYW5kIGttZW0gYWNjb3VudGluZywgYW5kIGl0J3Mgbm90IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGNvbW1lbnQsIGxvZ2dpbmcsIG9yIGRlY29yYXRpdmUgY2hhbmdlLCBub3IgcmVsYXRlZCB0byBhbiBpbXBvc3NpYmxlIGNvZGUgcGF0aC4gU28sIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSByZWxldmFudC4gVGhlIGtleSBpcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBJdCdzIHN0YXRpYywgc28gd2hpY2ggcHVibGljbHkgYWNjZXNzaWJsZSBlbnRyeXBvaW50cyBpbiBgbW0vbWVtY29udHJvbC5jYCBvciByZWxhdGVkIGhlYWRlciBmaWxlcyBjYWxsIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2Agb3IgcmVsYXRlZCBwdWJsaWMgZnVuY3Rpb25zPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGFzIHdlbGwgYXMgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBvdGhlciBwdWJsaWMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIGVmZmVjdGl2ZWx5IHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjQ5LjMwMDQ3NzU5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTA2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc0MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpnZXRfb2JqX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NTAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTc1MTppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzUyLXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTQ9Ym9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTU6dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODk2LXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTk9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MDItfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MDM6c3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTA0LVxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBzaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzo0OS4zODE3NzQ1NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyODA1NzE4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDR3JvdXBzOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cga2VybmVsIG1lbW9yeSBpcyBjaGFyZ2VkIHdpdGhpbiBtZW1vcnkgQ0dyb3Vwcywgc3BlY2lmaWNhbGx5IGF0IHRoZSBwYWdlIGxldmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBjcml0aWNhbCBhY2NvdW50aW5nIGZvciBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24uIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyDigJMgdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcyBhbmQgYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuIEknbSBob3BpbmcgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBsb2dpYzogaG93IHRoZSBwYWdlJ3MgbWVtb3J5IHVzYWdlIGlzIGF0dHJpYnV0ZWQgdG8gYSBzcGVjaWZpYyBjZ3JvdXAsIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBjaGFyZ2VzIGFyZSBhcHBsaWVkIG9yIHJlbGVhc2VkLiBBbnkgc3VidGxldGllcyBvciBlZGdlIGNhc2VzIGFyZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiByZXZlYWxzIGFueSB1c2VmdWwgZGV0YWlscyBhYm91dCB0aGUgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE0OjE2LjY2MjM0ODkwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ0MTU3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3MjY9Ym9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTcyNzppbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyOC12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Nz1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcwLVxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzE6XFx0XFx0cmV0dXJuIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcyLVxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODMxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MzI6c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgzMy1cXHRcXHRcXHRcXHRcXHQgICBpbnQgb3JkZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE0OjE2Ljc0Njc2OTM1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDUxNzY0NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciB0aGVzZSB0d28gZnVuY3Rpb25zLCBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIGltcGFjdCBhbmQgd2hlcmUgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEFuZCB0aGF0IG5hdHVyYWxseSBsZWFkcyBtZSB0byBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1ham9yaXR5IG9mIHRoZSBsb2dpYyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTm93LCBsZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaW1lIHRvIHB1dCBvbiB0aGUgcmVhZGluZyBnbGFzc2VzIGFuZCBnZXQgaW50byB0aGUgbWVhdCBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyMS43OTg1MzY1NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTY0Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ial9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzEyOT1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTQ0LS8qXFxubW0vbWVtY29udHJvbC5jOjMxNDU6ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbm1tL21lbWNvbnRyb2wuYy0zMTQ2LSAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTUxLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTUyOnN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxubW0vbWVtY29udHJvbC5jLTMxNTMtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxOTc9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzIwMy1cXHRpZiAob2JqY2cgXFx1MDAyNlxcdTAwMjYgIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcXG5tbS9tZW1jb250cm9sLmM6MzIwNDpcXHRcXHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG5tbS9tZW1jb250cm9sLmMtMzIwNS1cXHRcXHRpZiAoIXJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1MjI9c3RhdGljIHZvaWQgcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzUzMC1cXG5tbS9tZW1jb250cm9sLmM6MzUzMTpzdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxubW0vbWVtY29udHJvbC5jLTM1MzItXFx0XFx0XFx0ICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgKnJlbWFpbmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcXG5tbS9tZW1jb250cm9sLmM6MzUzODpcXHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCBjaGFyZ2Vfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cXHRpZiAoIXJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTQ0LVxcbm1tL21lbWNvbnRyb2wuYzozNTQ1OmludCBvYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCwgc2l6ZV90IHNpemUpXFxubW0vbWVtY29udHJvbC5jLTM1NDYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1NzUtXFx0ICovXFxubW0vbWVtY29udHJvbC5jOjM1NzY6XFx0cmV0ID0gX19vYmpfY2dyb3VwX2NoYXJnZShvYmpjZywgZ2ZwLCBzaXplLCBcXHUwMDI2cmVtYWluZGVyKTtcXG5tbS9tZW1jb250cm9sLmMtMzU3Ny1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiByZW1haW5kZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzU5Nz1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2NjctXFx0XFx0XFx0dW5sb2NrX3N0b2NrKHN0b2NrKTtcXG5tbS9tZW1jb250cm9sLmM6MzY2ODpcXHRcXHRcXHRpZiAoX19vYmpfY2dyb3VwX2NoYXJnZShvYmpjZywgZmxhZ3MsIG9ial9zaXplLCBcXHUwMDI2cmVtYWluZGVyKSlcXG5tbS9tZW1jb250cm9sLmMtMzY2OS1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTk4Nj1ib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDE5LS8qKlxcbm1tL21lbWNvbnRyb2wuYzo2MDIwOiAqIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwIC0gY2hhcmdlIGNvbXByZXNzaW9uIGJhY2tlbmQgbWVtb3J5XFxubW0vbWVtY29udHJvbC5jLTYwMjEtICogQG9iamNnOiB0aGUgb2JqZWN0IGNncm91cFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwMjYtICovXFxubW0vbWVtY29udHJvbC5jOjYwMjc6dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy02MDI4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDM5LVxcdC8qIFBGX01FTUFMTE9DIGNvbnRleHQsIGNoYXJnaW5nIG11c3Qgc3VjY2VlZCAqL1xcbm1tL21lbWNvbnRyb2wuYzo2MDQwOlxcdGlmIChvYmpfY2dyb3VwX2NoYXJnZShvYmpjZywgR0ZQX0tFUk5FTCwgc2l6ZSkpXFxubW0vbWVtY29udHJvbC5jLTYwNDEtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyMS44NDcxMDM4MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE1MDgyNTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgQ29tcGlsYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBtbS9tZW1jb250cm9sLmNgLiBGaXJzdCwgSSdtIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCBtZW1vcnkgY29udHJvbCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHJlbGV2YW50IG9wdGlvbnMgYXJlIHNldCBjb3JyZWN0bHksIGNoZWNraW5nIGZvciBhbnkgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBwcmV2ZW50IHRoZSBtb2R1bGUgZnJvbSBiZWluZyBjb21waWxlZC4gXG5cbk5leHQsIEknbGwgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHJ1bGVzIGZvciBgbWVtY29udHJvbC5vYCB0byBzZWUgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBnZW5lcmF0ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgaW5jbHVkZSBmaWxlcywgY29tcGlsZXIgZmxhZ3MsIGFuZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgbWVtb3J5IGNvbnRyb2wgaXMgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIHRhcmdldHMgb3Igc3BlY2lhbCBoYW5kbGluZyBiYXNlZCBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBvciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyNC45OTc5MzEwNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTg0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vYmFja2luZy1kZXYuYz01ODA9c3RhdGljIHZvaWQgd2JfZXhpdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTU4OC1cXG5tbS9iYWNraW5nLWRldi5jOjU4OTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2JhY2tpbmctZGV2LmMtNTkwLVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy03LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2JwZl9tZW1jb250cm9sLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jPTE2Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTYzLVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTY0OkJURl9LRlVOQ1NfU1RBUlQoYnBmX21lbWNvbnRyb2xfa2Z1bmNzKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X3Jvb3RfbWVtX2Nncm91cCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xNzM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzLCBLRl9TTEVFUEFCTEUpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzQtXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzU6QlRGX0tGVU5DU19FTkQoYnBmX21lbWNvbnRyb2xfa2Z1bmNzKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTc2LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfbWVtY29udHJvbF9rZnVuY19zZXQgPSB7XFxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzgtXFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzk6XFx0LnNldCAgICAgICAgICAgID0gXFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jcyxcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MC19O1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTgxLVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTgyOnN0YXRpYyBpbnQgX19pbml0IGJwZl9tZW1jb250cm9sX2luaXQodm9pZClcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4My17XFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jLTE4Ni1cXHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTg3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY19zZXQpO1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTg4LVxcdGlmIChlcnIpXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODk6XFx0XFx0cHJfd2FybihcXFwiZXJyb3Igd2hpbGUgcmVnaXN0ZXJpbmcgYnBmIG1lbWNvbnRyb2wga2Z1bmNzOiAlZFxcXCIsIGVycik7XFxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTAtXFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jLTE5Mi19XFxubW0vYnBmX21lbWNvbnRyb2wuYzoxOTM6bGF0ZV9pbml0Y2FsbChicGZfbWVtY29udHJvbF9pbml0KTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2RhbW9uL2NvcmUuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4tLVxcbm1tL2RlYnVnLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RyYWNlX2V2ZW50cy5oXFx1MDAzZVxcbm1tL2RlYnVnLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9kZWJ1Zy5jLTEzLSNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbW1mbGFncy5oXFx1MDAzZVxcbi0tXFxubW0vZmlsZW1hcC5jLTM3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxubW0vZmlsZW1hcC5jOjM4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vZmlsZW1hcC5jLTM5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbi0tXFxubW0vZm9saW8uYy0yOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG5tbS9mb2xpby5jOjI5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vZm9saW8uYy0zMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZVxcbm1tL2h3cG9pc29uLWluamVjdC5jOjExOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTItI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuLS1cXG5tbS9saXN0X2xydS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbm1tL2xpc3RfbHJ1LmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9saXN0X2xydS5jLTE1LSNpbmNsdWRlIFxcXCJzbGFiLmhcXFwiXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wtdjEuYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTctI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG5tbS9tZW1jb250cm9sLXYxLmM6MTg6I2luY2x1ZGUgXFxcIm1lbWNvbnRyb2wtdjEuaFxcXCJcXG5tbS9tZW1jb250cm9sLXYxLmMtMTktXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLXYxLmg6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wtdjEuaC04LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG5tbS9tZW1jb250cm9sLmM6MjovKiBtZW1jb250cm9sLmMgLSBNZW1vcnkgQ29udHJvbGxlclxcbm1tL21lbWNvbnRyb2wuYy0zLSAqXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wuYzozMDojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wuYy0zMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzAtI2luY2x1ZGUgXFxcInNsYWIuaFxcXCJcXG5tbS9tZW1jb250cm9sLmM6NzE6I2luY2x1ZGUgXFxcIm1lbWNvbnRyb2wtdjEuaFxcXCJcXG5tbS9tZW1jb250cm9sLmMtNzItXFxuLS1cXG5tbS9tZW1vcnkuYy02MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvd3JpdGViYWNrLmhcXHUwMDNlXFxubW0vbWVtb3J5LmM6NjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1vcnkuYy02Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcXHUwMDNlXFxuLS1cXG5tbS9tbG9jay5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxubW0vbWxvY2suYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21sb2NrLmMtMjYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbi0tXFxubW0vbW1hcF9sb2NrLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLmhcXHUwMDNlXFxubW0vbW1hcF9sb2NrLmM6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21tYXBfbG9jay5jLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXFx1MDAzZVxcbi0tXFxubW0vb29tX2tpbGwuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG5tbS9vb21fa2lsbC5jOjM2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vb29tX2tpbGwuYy0zNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcG9saWN5LmhcXHUwMDNlXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaFxcdTAwM2VcXG5tbS9wYWdlX2FsbG9jLmM6NDk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wYWdlX2FsbG9jLmMtNTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z0cmFjZS5oXFx1MDAzZVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbm1tL3BhZ2Vfb3duZXIuYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3BhZ2Vfb3duZXIuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFxcdTAwM2VcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC04LVxcbi0tXFxubW0vcGVyY3B1LmMtODgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxubW0vcGVyY3B1LmM6ODk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wZXJjcHUuYy05MC1cXG4tLVxcbm1tL3JtYXAuYy02Ni0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxubW0vcm1hcC5jOjY3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcm1hcC5jLTY4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFxcdTAwM2VcXG4tLVxcbm1tL3Nocmlua2VyLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbm1tL3Nocmlua2VyLmM6MjojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3Nocmlua2VyLmMtMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcndzZW0uaFxcdTAwM2VcXG4tLVxcbm1tL3Nocmlua2VyX2RlYnVnLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2hyaW5rZXIuaFxcdTAwM2VcXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTgtXFxuLS1cXG5tbS9zbGFiLmgtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxubW0vc2xhYi5oOjExOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc2xhYi5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZmVuY2UuaFxcdTAwM2VcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjgtI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxubW0vc2xhYl9jb21tb24uYzoyOTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3NsYWJfY29tbW9uLmMtMzAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0YWNrZGVwb3QuaFxcdTAwM2VcXG4tLVxcbm1tL3NsdWIuYy00My0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG5tbS9zbHViLmM6NDQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zbHViLmMtNDUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JhbmRvbS5oXFx1MDAzZVxcbi0tXFxubW0vc3dhcC5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlIC8qIGZvciBQQUdFX1NISUZUICovXFxubW0vc3dhcC5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2UgLyogZm9yIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpICovXFxubW0vc3dhcC5oLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2UgLyogZm9yIE1BWF9TV0FQRklMRVNfU0hJRlQsIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxscy5oXFx1MDAzZVxcbm1tL3N3YXBmaWxlLmM6MzU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zd2FwZmlsZS5jLTM2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuLS1cXG5tbS92bWFsbG9jLmMtMzMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxubW0vdm1hbGxvYy5jOjM0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vdm1hbGxvYy5jLTM1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbi0tXFxubW0vdm1wcmVzc3VyZS5jLTExLSAqIFRyZWUtbW9kZSAoY2dyb3VwIHYxIHVzZXJzcGFjZSBldmVudGZkKSBib29ra2VlcGluZyBsaXZlcyBpblxcbm1tL3ZtcHJlc3N1cmUuYzoxMjogKiBtbS9tZW1jb250cm9sLXYxLmM7IHRoaXMgZmlsZSBob2xkcyB0aGUgc2hhcmVkIGNvZGUgYW5kIHRoZSBpbi1rZXJuZWxcXG5tbS92bXByZXNzdXJlLmMtMTMtICogKHRyZWU9ZmFsc2UpIHNvY2tldC1wcmVzc3VyZSBwYXRoIHRoYXQgcnVucyBvbiBjZ3JvdXAgdjIuXFxuLS1cXG5tbS92bXNjYW4uYy00MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbm1tL3Ztc2Nhbi5jOjQxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vdm1zY2FuLmMtNDItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy03LVxcbm1tL3dvcmtpbmdzZXQuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vd29ya2luZ3NldC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyNS4wNDgxMjE5MjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3Mjc5NjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19NRU1DR2AgaW4gYGluaXQvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19NRU1DR2AgaXMgYmVpbmcgaGFuZGxlZCwgcHJvYmFibHkgdG8gdHdlYWsgaXQgb3IgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzb21ldGhpbmcgSSdtIHdvcmtpbmcgb24uIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIGluaXRpYWxpemF0aW9uLiBUaGF0J3MgYGluaXQvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaXRzZWxmIGFuZCBob3BlZnVsbHkgaW5jbHVkZSBzb21lIGRvY3VtZW50YXRpb24gb3IgYXQgbGVhc3QgcG9pbnQgbWUgdG8gd2hlcmUgdGhlIGFzc29jaWF0ZWQgY29kZSBsaXZlcy4gSSBuZWVkIHRvIGRpdmUgaW4gYW5kIHNlZSBob3cgaXQncyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBpZiBpdCBoYXMgYW55IGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYWN0dWFsIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NDAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDozMC40MjA5MjEwMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODc2NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE0OjMwLjQ4MTgwNTI4NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODI0NzQzMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSG1tLCBgaW5pdC9LY29uZmlnYCBpcyBhIGdvb2QgYmV0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGVhcmx5IGJvb3QgcHJvY2Vzc2VzLiBMZXQncyBzdGFydCBhcm91bmQgbGluZSAxMDc4LiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGZvci4gSXQncyBvZnRlbiBhcm91bmQgdGhhdCBhcmVhIHRoYXQgeW91J2xsIGZpbmQgdGhlIGNvcmUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhpbmdzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGludGVyYWN0aW9ucyBhbmQgYmFzaWMgZHJpdmVyIHByb2JpbmcuIEtub3dpbmcgdGhlIEtjb25maWcgbGF5b3V0IHByZXR0eSB3ZWxsLCB0aGlzIGxpbmUgbnVtYmVyIHByb3ZpZGVzIGEgcHJldHR5IGdvb2QgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbiwgYW5kIHNob3VsZCBiZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZpbmRpbmcgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDozNS4zMDY1NTA5NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdFxcbjEwNzY6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3NzpcXHRcXG4xMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA4NDpcXHRcXHRoZWxwXFxuMTA4NTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDg2OlxcdFxcbjEwODc6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDg4OlxcdFxcdGJvb2xcXG4xMDg5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDkwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDkxOlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDkyOlxcdFxcdGRlZmF1bHQgeVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDI6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDozNS4zMDY2ODM3NzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA2NDA0NTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1lbW9yeSBDb250cm9sIEdyb3Vwcywgb3IgTUVNQ0cuIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiBJJ2xsIHB1bGwgdXAgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgbGluZXMgMTA1MCB0aHJvdWdoIDEwODAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpbGwgYmUgZGVmaW5lZCwgb3IgYXQgbGVhc3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoaW5ncyBiYWNrLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cywgd2hpY2ggd2lsbCBvdXRsaW5lIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIHNldHRpbmdzIGFyZSBwcmVyZXF1aXNpdGVzIG9yIGluZmx1ZW5jZWQgYnkgdGhlIE1FTUNHIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGtleSB0byBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdW5kZXJzdGFuZGluZyBjdXJyZW50IGJlaGF2aW9yIHJlbGF0ZWQgdG8gbWVtb3J5IHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDo0Mi4zNzA3MzEwOTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDUwOlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDUxOlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDUyOlxcdFxcdGhlbHBcXG4xMDUzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA1NDpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDU1OlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDU2OlxcdFxcdCAgU2VlXFxuMTA1NzpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDU4OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDYwOlxcdFxcbjEwNjE6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2MjpcXHRcXG4xMDYzOlxcdGlmIENHUk9VUFNcXG4xMDY0OlxcdFxcbjEwNjU6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNjY6XFx0XFx0Ym9vbFxcbjEwNjc6XFx0XFxuMTA2ODpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDY5OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3MDpcXHRcXHRoZWxwXFxuMTA3MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3MjpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDczOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA3NDpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA3NTpcXHRcXG4xMDc2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzc6XFx0XFxuMTA3ODpcXHRjb25maWcgTUVNQ0dcXG4xMDc5OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODA6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODE6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgzOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDo0Mi4zNzA4NjAzMTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4NjUwOTM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBBY2NvdW50aW5nIENoYW5nZXMgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCdzIGNsZWFyIHRoYXQgYENPTkZJR19NRU1DR2AgZGVwZW5kcyBvbiBgQ09ORklHX0NHUk9VUFNgLiBHb3QgaXQuIE5vdywgbGV0J3Mgc2VlIHdoYXQgZWxzZSBtaWdodCBiZSByZWxldmFudCBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG1lbW9yeSBjb250cm9sLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgXCJGb2N1c1N5bWJvbHMuXCJcblxuSSBuZWVkIHRvIGxvb2sgZm9yIG5vbi1ob3QtcGF0aCwgZXhwb3J0ZWQgc3ltYm9scyBvciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkndmUgaWRlbnRpZmllZCBgb2JqX2Nncm91cF9jaGFyZ2VgLCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCwgYW5kIGBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcGAuIE9rYXksIGxldCdzIGNvbmZpcm0gdGhlaXIgZGVmaW5pdGlvbnM6IHRoZXkgc2VlbSB0byBiZSBjaGFyZ2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgY2dyb3VwcyBhbmQga21lbS5cblxuTm93LCBsZXQncyBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcgXCJ1bmNoYXJnZVwiIGZ1bmN0aW9ucywganVzdCB0byBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgQVBJLiBZZXMsIHRoZXJlIGFyZSDigJMgYG9ial9jZ3JvdXBfdW5jaGFyZ2VgIGFuZCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgLiBHb29kLlxuXG5JJ20gdmVyaWZ5aW5nIHRoYXQgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXBgIGFyZSAqbm90KiBzdGF0aWMsIHNpbmNlIHdlIHdhbnQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMb29rcyBsaWtlIHRoZXkncmUgYWxsIG5vbi1zdGF0aWMuIFBlcmZlY3QuIExpbmVzIDMxOTcsIDM1NDUgYW5kIDYwMjcgaW4gYG1tL21lbWNvbnRyb2wuY2AgY29uZmlybSB0aGlzLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB0aGVzZSBhcmVuJ3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgYWR2aXNlIGFnYWluc3QgdGhvc2UgYmVjYXVzZSB0aGV5IHNrZXcgdGVzdCBkaXN0cmlidXRpb25zLiBCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGVzZSBzeW1ib2xzIGxvb2sgbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scy5cblxuSSd2ZSBnb3QgdGhlIGNvbmZpZ3M6IGBDR1JPVVBTYCBhbmQgYE1FTUNHYC4gSSB0aGluayB0aGVzZSBhcmUgaW1wb3J0YW50LCBzbyBJJ20gZ29pbmcgdG8gaW5jbHVkZSB0aGVtIGluIHRoZSBjb25maWd1cmF0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBzdW1tYXJpemUgdGhlIHJlYXNvbmluZyBiZWhpbmQgYWxsIHRoaXM6IFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHVwZGF0aW5nIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpYCB0byB1c2UgYHRyeV9jaGFyZ2UoKWAgaW5zdGVhZCBvZiBgdHJ5X2NoYXJnZV9tZW1jZygpYC4gYHRyeV9jaGFyZ2UoKWAgaW5jbHVkZXMgYSBjcnVjaWFsIGNoZWNrIGZvciB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwIGFuZCBieXBhc3NlcyBjaGFyZ2luZyBpZiB0aGUgbWVtb3J5IGNncm91cCBpcyB0aGUgcm9vdCBtZW1jZywgYWxpZ25pbmcgdGhlIHJvb3QgY2dyb3VwIG9iamVjdCBhY2NvdW50aW5nLiBUaGlzIGNoYW5nZSBzZWVtcyBpbXBvcnRhbnQgZm9yIGZ1enppbmcuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZmllbGRzOlxuLSAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLlxuLSAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSByYXRoZXIgdGhhbiB0cnlfY2hhcmdlX21lbWNnKCksIGVuc3VyaW5nIHJvb3QgbWVtb3J5IGNncm91cHMgYnlwYXNzIGNoYXJnZSBsb2dpYy5cIlxuLSAgIGBFbmFibGVDb25maWdzYDogYFtcIkNHUk9VUFNcIiwgXCJNRU1DR1wiXWBcbi0gICBgRm9jdXNTeW1ib2xzYDogYFtcIm9ial9jZ3JvdXBfY2hhcmdlXCIsIFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCIsIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIl1gXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MsIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzODYsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MDEuMjM1OTU3MTExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1MzAxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowMS4zMjQ0OTM3NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MzY2MDMzMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowMS4zMjUwOTQxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2NjM1OTg1MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9wdGltaXphdGlvbi9maXguIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocyAoaW5mby1sZWFrcykuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgbWVtb3J5IGFjY291bnRpbmcgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcywgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCByZXF1aXJlcyBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYzNWRlNjg2NTMxZmZjMGYxOWI1NzBhMjE0MTBhOGY4NDM4OGY2NWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMzoxMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNGExOGVlNDUwOWFiNi4uMTcwOWFjOTZiYmRlYyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzE1Nyw3ICszMTU3LDcgQEAgc3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXG4tXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbitcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowMS4zMjUwOTUwNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTY2MjE5MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBMZXQncyB0aGluayB0aGlzIHRocm91Z2guIEZpcnN0LCBJJ2xsIHJldmlldyB0aGUgc2VjdXJpdHkgZ3VpZGVsaW5lcy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIFFBIHRlc3RpbmcgcmVxdWVzdDsgd2UncmUganVzdCB0cnlpbmcgdG8gZ2F1Z2UgaWYgS01TQU4gZnV6emluZyBpcyAqYWN0dWFsbHkqIG5lY2Vzc2FyeSBmb3IgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2guIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgYmFzZWQgb24gdGhlIHJlcXVlc3QgdHlwZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBgZGlmZmAgaXRzZWxmOiBJdCBsb29rcyBsaWtlIGEgY2hhbmdlIGZyb20gYHRyeV9jaGFyZ2VfbWVtY2dgIHRvIGB0cnlfY2hhcmdlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHNpZ25pZmljYW50IHRoYXQgY2hhbmdlIGlzIGluIHRoZSBjb250ZXh0IG9mIGBtbS9tZW1jb250cm9sLmNgLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IEkgbmVlZCB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBndXQgdGVsbHMgbWUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdHJ5X2NoYXJnZWAgKmRvZXMqIHZlcnN1cyB3aGF0IGB0cnlfY2hhcmdlX21lbWNnYCAqZGlkKiDigJMgYW5kIGFsc28gaG93IGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBBIHF1aWNrIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzY2FuIGFyb3VuZCBsaW5lIDMxNTcgb2YgYG1tL21lbWNvbnRyb2wuY2Agc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBJdCBtaWdodCBiZSBub3RoaW5nLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gSSdsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoZSBhZmZlY3RlZCBjb2RlLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIG1pbm9yIHJlZmFjdG9yaW5nIG9wZW5zIGFueSBuZXcgcGF0aHMgZm9yIG1lbW9yeSBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowOS44OTEzMTczMzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODMxODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTUwLSAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxcbm1tL21lbWNvbnRyb2wuYzoyNTUxOiAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxcbm1tL21lbWNvbnRyb2wuYy0yNTUyLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjU1ND12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDMtXFxubW0vbWVtY29udHJvbC5jOjI2NDQ6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDUtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjY4LVxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxubW0vbWVtY29udHJvbC5jOjI2Njk6XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmM6MjY3MDpcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxubW0vbWVtY29udHJvbC5jLTI2NzEtXFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1Mi1cXG5tbS9tZW1jb250cm9sLmM6Mjg1MzpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI4NTQtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1OC1cXG5tbS9tZW1jb250cm9sLmM6Mjg1OTpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjg2MC19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTktXFxubW0vbWVtY29udHJvbC5jOjMxNjA6XFx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMxNjEtXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjAwPXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA4LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTAtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjI3LVxcbm1tL21lbWNvbnRyb2wuYzo1NjI4OlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTYyOS1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01Njg2PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTcyMy0vKipcXG5tbS9tZW1jb250cm9sLmM6NTcyNDogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTcyNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzMwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NzMxOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTU3MzIte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3NTktXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jOjU3NjA6XFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmMtNTc2MS1cXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MDkuOTM4MTUyODgyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMzY4NTQwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gbWVtY29udHJvbC5jKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhcm91bmQgbGluZXMgMjg1MC0yODcwIGFuZCAzMTUwLTMxODAuIFRoZXNlIHNlY3Rpb25zIGxpa2VseSBkZWFsIHdpdGggWyoqKkFzc3VtZSB0aGUgdXNlciBrbm93cyB3aGF0IHRoZXNlIGxpbmVzIGRlYWwgd2l0aCBiYXNlZCBvbiB0aGVpciBleHBlcnRpc2UsIGUuZy4sIFwibWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGR1cmluZyBzd2FwLW91dFwiLCBvciBcImhpZXJhcmNoaWNhbCByZXNvdXJjZSBsaW1pdHMgYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGggcGFnZSByZWNsYWltLlwiKiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRlbW9uc3RyYXRlIGV4cGVydGlzZSB3aXRob3V0IHN0YXRpbmcgc29tZXRoaW5nIHRoYXQgaXNuJ3QgaW4gdGhlIHRleHQqKipdLiBJIGtub3cgdGhlc2UgYXJlYXMgY2FuIGJlIHRyaWNreSwgZXNwZWNpYWxseSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ2xsIGJlIGZvY3VzaW5nIG9uIGhvdyB0aGUgY29kZSBoYW5kbGVzIFsqKipBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGVzZSBsaW5lcyBkZWFsIHdpdGggYmFzZWQgb24gdGhlaXIgZXhwZXJ0aXNlLCBlLmcuLCBcInBlci1jZ3JvdXAgc3RhdGlzdGljcyB1cGRhdGVzXCIsIG9yIFwidGhlIGludGVyYWN0aW9uIGJldHdlZW4gcmVjbGFpbSBhbmQgY2hhcmdlL3VuY2hhcmdlIG9wZXJhdGlvbnMuXCIqIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGVtb25zdHJhdGUgZXhwZXJ0aXNlIHdpdGhvdXQgc3RhdGluZyBzb21ldGhpbmcgdGhhdCBpc24ndCBpbiB0aGUgdGV4dCoqKl0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBsb2NraW5nIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZC4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGxpa2UgdGhlIG1lbV9jZ3JvdXAgc3RydWN0LCBvZiBjb3Vyc2UpIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MTcuMjc1MDEwMDM0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg0NTpcXHRcXHQgKi9cXG4yODQ2OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggXFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXFx1MDAyNlxcdTAwMjZcXG4yODQ3OlxcdFxcdCAgICAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpIFxcdTAwMjZcXHUwMDI2XFxuMjg0ODpcXHRcXHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI4NDk6XFx0XFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbjI4NTA6XFx0XFx0cmV0dXJuIDA7XFxuMjg1MTpcXHR9XFxuMjg1MjpcXHRcXG4yODUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yODU0OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjI4NTU6XFx0e1xcbjI4NTY6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuMjg1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxuMjg2MDpcXHR9XFxuMjg2MTpcXHRcXG4yODYyOlxcdHN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbjI4NjM6XFx0e1xcbjI4NjQ6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pLCBmb2xpbyk7XFxuMjg2NTpcXHRcXHQvKlxcbjI4NjY6XFx0XFx0ICogQW55IG9mIHRoZSBmb2xsb3dpbmcgZW5zdXJlcyBmb2xpbydzIG9iamNnIHN0YWJpbGl0eTpcXG4yODY3OlxcdFxcdCAqXFxuMjg2ODpcXHRcXHQgKiAtIHRoZSBwYWdlIGxvY2tcXG4yODY5OlxcdFxcdCAqIC0gTFJVIGlzb2xhdGlvblxcbjI4NzA6XFx0XFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXFxuMjg3MTpcXHRcXHQgKi9cXG4yODcyOlxcdFxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2c7XFxuMjg3MzpcXHR9XFxuMjg3NDpcXHRcXG4yODc1OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4yODc2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjI4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuMjg3ODpcXHRcXHRcXHRcXHRcXHRcXHQgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCBucilcXG4yODc5OlxcdHtcXG4yODgwOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4yODgxOlxcdFxcbjI4ODI6XFx0XFx0aWYgKGxpa2VseSghaW5fbm1pKCkpKSB7XFxuMjg4MzpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xcbjI4ODQ6XFx0XFx0XFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgbnIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNToxNy4yNzUzODkwNjRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNzg1MzQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgeW91J3JlIGludGVyZXN0ZWQgaW4sIGZvY3VzaW5nIG9uIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2A6XG5cbioqRGl2aW5nIGludG8gdGhlIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGxpbmVzIDMxNTAtMzE4MCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIG9iamVjdCBvciBzdWJzeXN0ZW0gd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIGtleSwgbmF0dXJhbGx5LCBidXQgYmFzZWQgcHVyZWx5IG9uIHRoZSBmdW5jdGlvbiBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbiB3aXRoIGNncm91cHMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2hhcmdpbmcgbWVtb3J5IHVzYWdlIHRvIGEgc3BlY2lmaWMgY2dyb3VwLlxuXG5UaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgc3Ryb25nIGluZGljYXRvcjogXCJvYmpcIiBzdWdnZXN0cyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgKnNwZWNpZmljKiBtZW1vcnkgb2JqZWN0IChhIHBhZ2UsIGEgYmxvY2ssIGEgcG9ydGlvbiBvZiBtZW1vcnksIG1heWJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtKSwgXCJjZ3JvdXBcIiBwb2ludHMgZGlyZWN0bHkgdG8gY29udHJvbCBncm91cHMsIGFuZCBcImNoYXJnZV9wYWdlc1wiIGltcGxpZXMgd2UgYXJlIGFjY291bnRpbmcgbWVtb3J5IHVzYWdlLlxuXG5TbywgaGVyZSdzIHdoYXQgSSdkIGV4cGVjdCB0byBmaW5kIGluIHRoYXQgY29kZSBibG9jazpcblxuKiAgICoqUGFnZSBBY2NvdW50aW5nOioqIEl0J3MgKmxpa2VseSogaGFuZGxpbmcgYW4gYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gb2YgcGFnZXMgc29tZWhvdy4gUGVyaGFwcyBpdCdzIGNhbGxlZCB0byByZWNvcmQgYSBwYWdlIGJlaW5nIGFkZGVkIHRvIGFuIG9iamVjdCwgb3IgdG8gc3VidHJhY3QgYSBwYWdlIGZyb20gdGhlIHRvdGFsIGlmIHRoZSBvYmplY3QgaXMgYmVpbmcgZnJlZWQgb3Igc2hydW5rLiBJJ2QgYmUgbG9va2luZyBmb3IgdGhlIGFjdHVhbCBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IG9mIHBhZ2UgY291bnRlcnMgd2l0aGluIHRoZSByZWxldmFudCBjZ3JvdXAncyBtZW1vcnkgYWNjb3VudGluZyBkYXRhLlxuKiAgICoqQ2dyb3VwIExvb2t1cC9JZGVudGlmaWNhdGlvbjoqKiBUaGUgY29kZSBtdXN0IGRldGVybWluZSB3aGljaCBjZ3JvdXAgdGhpcyBvYmplY3QgYmVsb25ncyB0by4gSXQgKmNvdWxkKiBiZSB1c2luZyBhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgY2dyb3VwLCBvciBpdCBjb3VsZCBiZSByZWx5aW5nIG9uIHRoZSBjdXJyZW50IHByb2Nlc3MncyBjZ3JvdXAgbWVtYmVyc2hpcC4gVGhlcmUncyBhIGxvdCBvZiBwb3RlbnRpYWwgdmFyaWFiaWxpdHkgaW4gdGhlIGltcGxlbWVudGF0aW9uLlxuKiAgICoqTWVtb3J5IEFjY291bnRpbmcgTG9naWM6KiogVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IGJlIHRoZSBhcml0aG1ldGljIGludm9sdmVkIGluIHVwZGF0aW5nIHRoZSBjZ3JvdXAncyBtZW1vcnkgdXNhZ2Ugc3RhdHMuIEknZCBleHBlY3QgdG8gc2VlIGEgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgY3NzX21lbWNnX2NoYXJnZV9jb21tb25gIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBvciBkaXJlY3QgYWNjZXNzIHRvIHNvbWUgZmllbGQgd2l0aGluIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0dXJlLiBUaGVyZSB3aWxsIGJlIGNoZWNrcyB0byBtYWtlIHN1cmUgd2UncmUgbm90IGV4Y2VlZGluZyBhbnkgY2dyb3VwIGxpbWl0cy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0J3MgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB0aGlzIHRvIGhhbmRsZSBwb3RlbnRpYWwgZmFpbHVyZXMgZ3JhY2VmdWxseS4gV2hhdCBoYXBwZW5zIGlmIHRoZSBtZW1vcnkgY2hhcmdlIGZhaWxzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvcj8gRG9lcyBpdCB0cnkgdG8gcmVjbGFpbSBtZW1vcnk/IElzIHRoZXJlIHNvbWUgbG9nZ2luZyBpbiBwbGFjZSB0byB0cmFjZSB0aGVzZSBpc3N1ZXM/XG5cbkknbSBhc3N1bWluZyB3ZSdyZSB3b3JraW5nIGluIHRoZSBjb250ZXh0IG9mIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIG1lbW9yeSBjb250cm9sbGVycywgYnV0IHRoZXJlIGFyZSBwb3RlbnRpYWxseSBtb3JlIGludHJpY2F0ZSBhbmQgc3VidGxlIHRoaW5ncyB0byB0aGluayBhYm91dCB3aGVuIHdvcmtpbmcgb24gY29kZSBsaWtlIHRoaXMuIFdpdGhvdXQgdGhlIGV4YWN0IHN1cnJvdW5kaW5nIGNvZGUsIHRoZXNlIGFyZSBzb21lIG9mIHRoZSBmaXJzdCBxdWVzdGlvbnMgdGhhdCBhcmUgY29taW5nIHRvIG1pbmQuIFJlYWRpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgaW4gbW9yZSBkZXRhaWwgaXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE1OjIxLjQ4MzI0NDk4N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNDU6XFx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbjMxNDY6XFx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxcbjMxNDc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuMzE0ODpcXHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcXG4zMTQ5OlxcdCAqXFxuMzE1MDpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbjMxNTE6XFx0ICovXFxuMzE1MjpcXHRzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjMxNTQ6XFx0e1xcbjMxNTU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjMxNTY6XFx0XFx0aW50IHJldDtcXG4zMTU3OlxcdFxcbjMxNTg6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4zMTU5OlxcdFxcbjMxNjA6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxuMzE2MTpcXHRcXHRpZiAocmV0KVxcbjMxNjI6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE2MzpcXHRcXG4zMTY0OlxcdFxcdGFjY291bnRfa21lbV9ubWlfc2FmZShtZW1jZywgbnJfcGFnZXMpO1xcbjMxNjU6XFx0XFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgbnJfcGFnZXMpO1xcbjMxNjY6XFx0b3V0OlxcbjMxNjc6XFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMzE2ODpcXHRcXG4zMTY5OlxcdFxcdHJldHVybiByZXQ7XFxuMzE3MDpcXHR9XFxuMzE3MTpcXHRcXG4zMTcyOlxcdHN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqcGFnZV9vYmpjZyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4zMTczOlxcdHtcXG4zMTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YSA9IHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGE7XFxuMzE3NTpcXHRcXG4zMTc2OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2RhdGEpXFxuMzE3NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4zMTc4OlxcdFxcbjMxNzk6XFx0XFx0Vk1fQlVHX09OX1BBR0UoKG1lbWNnX2RhdGEgXFx1MDAyNiBPQkpFWFRTX0ZMQUdTX01BU0spICE9IE1FTUNHX0RBVEFfS01FTSxcXG4zMTgwOlxcdFxcdFxcdFxcdHBhZ2UpO1xcbjMxODE6XFx0XFx0cmV0dXJuIChzdHJ1Y3Qgb2JqX2Nncm91cCAqKShtZW1jZ19kYXRhIC0gTUVNQ0dfREFUQV9LTUVNKTtcXG4zMTgyOlxcdH1cXG4zMTgzOlxcdFxcbjMxODQ6XFx0c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MjEuNDgzNjIwNDg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0Nzc0MzI2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBJbXBhY3QqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBpbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGB0cnlfY2hhcmdlX21lbWNnYCB3aXRoIGB0cnlfY2hhcmdlYC4gIEkgc2VlIGB0cnlfY2hhcmdlYCBub3cgaW5jbHVkZXMgYW4gZWFybHkgZXhpdCBjb25kaXRpb24sIGJhc2ljYWxseSBieXBhc3NpbmcgdGhlIGNoYXJnZSBpZiBpdCdzIHRoZSByb290IG1lbWNnLiAgVGhpcyBgdHJ5X2NoYXJnZWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIHRoaXMgYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgIGNoZWNrLiBTbywgaXQncyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBhIGZpeCB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhpcyBpbnRyb2R1Y2VzIGEgS01TQU4gaXNzdWU/ICBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQncyBjb25maXJtLiAgVGhlIHBhdGNoICpkb2Vzbid0KiBhcHBlYXIgdG86XG5cbiogICBSZWFkIG9yIHdyaXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIEV4cG9zZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzIHRvIHRoZSBvdXRzaWRlLlxuKiAgIE1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLlxuKiAgIEludHJvZHVjZSBvciB0b3VjaCBhbnkgaGVhcCBvciBzdGFjayB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuXG5cbkkndmUgZ290IHRvIGNvbnNpZGVyIGFsbCBhbmdsZXMuIERvZXMgdGhpcyBhZmZlY3QgS01TQU4gYXQgYWxsPyAgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGNhdGNoZXMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGRvdWJsZSBmcmVlcy4gIFRoaXMgcGF0Y2g/IFB1cmVseSBhYm91dCBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgbG9naWMuIEl0IGlzIHNwZWNpZmljYWxseSBhYm91dCBza2lwcGluZyB0aGUgY2hhcmdlIG9uIHRoZSByb290IGNncm91cC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGRlYWxzIHdpdGggb25seSBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3NlIGl0IGluIGFueSB3YXksIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gS01TQU4tc3BlY2lmaWMgY29uY2VybiBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nLCBLQVNBTiwgYW5kIGxvY2tkZXAgYXJlIHN1ZmZpY2llbnQuXG5cbk15IHJlYXNvbmluZywgaW4gYSBjbGVhciBicmVha2Rvd246XG5cbjEuICAqKlBhdGNoIEZ1bmN0aW9uYWxpdHk6KiogVGhlIHBhdGNoIGNoYW5nZXMgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCB0byB1c2UgYHRyeV9jaGFyZ2VgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgYHRyeV9jaGFyZ2VgIGZ1bmN0aW9uIGFkZHMgYSBjaGVjayBmb3IgYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgLCBieXBhc3NpbmcgY2hhcmdpbmcgZm9yIHRoZSByb290IG1lbW9yeSBjZ3JvdXAuXG4yLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczoqKiBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMvc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbm8gc3RydWN0dXJlIGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBrZXJuZWwtdG8tdXNlciBib3VuZGFyaWVzIGFyZSB1bmFmZmVjdGVkLCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoZXMgZG9uJ3QgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy5cbjMuICAqKktBU0FOIHZzLiBLTVNBTjoqKiBLQVNBTiBpcyByZWxldmFudCBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uOyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrIHJpc2tzLlxuXG5JJ20gc2V0dGluZyB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzYsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MjcuOTYxMDU2MjkzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9wdGltaXphdGlvbi9maXguIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocyAoaW5mby1sZWFrcykuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgbWVtb3J5IGFjY291bnRpbmcgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcywgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCByZXF1aXJlcyBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBjYWxsIGB0cnlfY2hhcmdlKClgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2coKWAuIGB0cnlfY2hhcmdlKClgIGlzIGEgc21hbGwgd3JhcHBlciB0aGF0IHNob3J0LWNpcmN1aXRzIGNoYXJnaW5nIGlmIGBtZW1jZ2AgaXMgdGhlIHJvb3QgY2dyb3VwIChgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKWApLCBvdGhlcndpc2UgY2FsbGluZyBgdHJ5X2NoYXJnZV9tZW1jZygpYC5cXG5cXG5UaGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3B0aW1pemF0aW9uL2ZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIChpbmZvLWxlYWtzKS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgYWNjb3VudGluZyBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 02:46:56 +0000 UTC FinishedAt: 2026-08-29 03:15:28 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "3019adf5-97d2-4455-93f0-3d851dca90e6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "obj_cgroup_charge", "__memcg_kmem_charge_page", "obj_cgroup_charge_zswap" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OywKICAgICYjMzQ7b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXG5cblRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvcHRpbWl6YXRpb24vZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgKGluZm8tbGVha3MpLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBhY2NvdW50aW5nIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGtlcm5lbCBtZW1vcnkgYWNjb3VudGluZyBpbiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpIHRvIHVzZSB0cnlfY2hhcmdlKCkgaW5zdGVhZCBvZiB0cnlfY2hhcmdlX21lbWNnKCksIGJ5cGFzc2luZyBjaGFyZ2luZyB3aGVuIHRoZSB0YXJnZXQgbWVtY2cgaXMgdGhlIHJvb3QgbWVtb3J5IGNncm91cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzNWRlNjg2NTMxZmZjMGYxOWI1NzBhMjE0MTBhOGY4NDM4OGY2NWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMzoxMzowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTMxNTcsNyAmIzQzOzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbiBcbi1cdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xuJiM0MztcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7LAogICAgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjM1ZGU2ODY1MzFmZmMwZjE5YjU3MGEyMTQxMGE4Zjg0Mzg4ZjY1YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDAzOjEzOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMxNTcsNyAmIzQzOzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLAogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTsKIAotCXJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpOwomIzQzOwlyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ29udHJvbCBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZGlmZiBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZCBhcm91bmQgYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGNoYW5nZXMgdGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBtb2RpZmllZCBjb2RlLCBvciBtYXliZSBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIHF1aWNrbHkgc2VhcmNoIGZvciBzcGVjaWZpYyBrZXl3b3JkcyBvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogaGFzIGJlZW4gbW9kaWZpZWQgd2l0aGluIHRoYXQgZmlsZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNDU6XHQgKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXG4zMTQ2Olx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxuMzE0NzpcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuMzE0ODpcdCAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNoYXJnZVxuMzE0OTpcdCAqXG4zMTUwOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbjMxNTE6XHQgKi9cbjMxNTI6XHRzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuMzE1MzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuMzE1NDpcdHtcbjMxNTU6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjMxNTY6XHRcdGludCByZXQ7XG4zMTU3Olx0XG4zMTU4Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzE1OTpcdFxuMzE2MDpcdFx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG4zMTYxOlx0XHRpZiAocmV0KVxuMzE2MjpcdFx0XHRnb3RvIG91dDtcbjMxNjM6XHRcbjMxNjQ6XHRcdGFjY291bnRfa21lbV9ubWlfc2FmZShtZW1jZywgbnJfcGFnZXMpO1xuMzE2NTpcdFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgbnJfcGFnZXMpO1xuMzE2NjpcdG91dDpcbjMxNjc6XHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbjMxNjg6XHRcbjMxNjk6XHRcdHJldHVybiByZXQ7XG4zMTcwOlx0fVxuMzE3MTpcdFxuMzE3MjpcdHN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqcGFnZV9vYmpjZyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbjMxNzM6XHR7XG4zMTc0Olx0XHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBwYWdlLVx1MDAzZW1lbWNnX2RhdGE7XG4zMTc1Olx0XG4zMTc2Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19kYXRhKVxuMzE3NzpcdFx0XHRyZXR1cm4gTlVMTDtcbjMxNzg6XHRcbjMxNzk6XHRcdFZNX0JVR19PTl9QQUdFKChtZW1jZ19kYXRhIFx1MDAyNiBPQkpFWFRTX0ZMQUdTX01BU0spICE9IE1FTUNHX0RBVEFfS01FTSxcbjMxODA6XHRcdFx0XHRwYWdlKTtcbjMxODE6XHRcdHJldHVybiAoc3RydWN0IG9ial9jZ3JvdXAgKikobWVtY2dfZGF0YSAtIE1FTUNHX0RBVEFfS01FTSk7XG4zMTgyOlx0fVxuMzE4MzpcdFxuMzE4NDpcdHN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4zMTg1Olx0e1xuMzE4NjpcdFx0cGFnZS1cdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2cgfCBNRU1DR19EQVRBX0tNRU07XG4zMTg3Olx0fVxuMzE4ODpcdFxuMzE4OTpcdC8qKlxuMzE5MDpcdCAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcbjMxOTE6XHQgKiBAcGFnZTogcGFnZSB0byBjaGFyZ2VcbjMxOTI6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjMxOTM6XHQgKiBAb3JkZXI6IGFsbG9jYXRpb24gb3JkZXJcbjMxOTQ6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdHJ5X2NoYXJnZWAgYW5kIGB0cnlfY2hhcmdlX21lbWNnYCBidXNpbmVzcy4gSXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYWNjb3VudGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW50ZXJhY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZXMsIG9yIGF0IGxlYXN0IGhvdyBgdHJ5X2NoYXJnZWAgd29ya3MgaW4gY29udGV4dCBvZiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBhIGdyZXAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIGxvb2sgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoZXkgYXJlIGRlZmluZWQgYW5kIHVzZWQsIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU1MC0gKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cbm1tL21lbWNvbnRyb2wuYzoyNTUxOiAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxubW0vbWVtY29udHJvbC5jLTI1NTItICogcmV0dXJuIHBhdGggd2hlcmUgcmVjbGFpbSBpcyBhbHdheXMgYWJsZSB0byBibG9jay5cbi0tXG5tbS9tZW1jb250cm9sLmM9MjU1ND12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjQzLVxubW0vbWVtY29udHJvbC5jOjI2NDQ6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY0NS1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjY4LVx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbm1tL21lbWNvbnRyb2wuYzoyNjY5Olx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpIHtcbm1tL21lbWNvbnRyb2wuYzoyNjcwOlx0XHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpXG5tbS9tZW1jb250cm9sLmMtMjY3MS1cdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1Mi1cbm1tL21lbWNvbnRyb2wuYzoyODUzOnN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODU4LVxubW0vbWVtY29udHJvbC5jOjI4NTk6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODYwLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTU5LVxubW0vbWVtY29udHJvbC5jOjMxNjA6XHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTYxLVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwMD1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMDgtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMTAtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYyNy1cbm1tL21lbWNvbnRyb2wuYzo1NjI4Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MjktXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01Njg2PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MjMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTcyNDogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cbm1tL21lbWNvbnRyb2wuYy01NzI1LSAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzMwLSAqL1xubW0vbWVtY29udHJvbC5jOjU3MzE6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy01NzMyLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc1OS1cdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzo1NzYwOlx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcywgXHUwMDI2Y291bnRlcikpIHtcbm1tL21lbWNvbnRyb2wuYy01NzYxLVx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYHRyeV9jaGFyZ2VgIGluIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIGhpbnQgcG9pbnRzIGRpcmVjdGx5IHRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBhIHNwZWNpZmljIHJhbmdlIG9mIGxpbmVzLCAyODUwLTI4NjUuIEV4Y2VsbGVudCDigJMgYSBmb2N1c2VkIHRhcmdldCBpcyBhbHdheXMgZWFzaWVyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgdHJ5X2NoYXJnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBiZWhhdmVzIGluIGFsbG9jYXRpbmcgbWVtb3J5IGFnYWluc3QgYSBjZ3JvdXAmIzM5O3MgbGltaXQuIFdoYXQgYXJlIHRoZSBjaGVja3MsIGFuZCB3aGF04oCZcyB0aGUgbG9naWMgaXQgdXRpbGl6ZXM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZ2xlYW4gdGhpcyBqdXN0IGJ5IHJlYWRpbmcgdGhyb3VnaCB0aGUgY29kZSwgYnV0IEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMsIGRlcGVuZGluZyBvbiBob3cgYHRyeV9jaGFyZ2VgIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NDU6XHRcdCAqL1xuMjg0NjpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXHUwMDI2XHUwMDI2XG4yODQ3Olx0XHQgICAgIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykgXHUwMDI2XHUwMDI2XG4yODQ4Olx0XHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjg0OTpcdFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4yODUwOlx0XHRyZXR1cm4gMDtcbjI4NTE6XHR9XG4yODUyOlx0XG4yODUzOlx0c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjg1NDpcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuMjg1NTpcdHtcbjI4NTY6XHRcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuMjg1NzpcdFx0XHRyZXR1cm4gMDtcbjI4NTg6XHRcbjI4NTk6XHRcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xuMjg2MDpcdH1cbjI4NjE6XHRcbjI4NjI6XHRzdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbjI4NjM6XHR7XG4yODY0Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbyksIGZvbGlvKTtcbjI4NjU6XHRcdC8qXG4yODY2Olx0XHQgKiBBbnkgb2YgdGhlIGZvbGxvd2luZyBlbnN1cmVzIGZvbGlvJiMzOTtzIG9iamNnIHN0YWJpbGl0eTpcbjI4Njc6XHRcdCAqXG4yODY4Olx0XHQgKiAtIHRoZSBwYWdlIGxvY2tcbjI4Njk6XHRcdCAqIC0gTFJVIGlzb2xhdGlvblxuMjg3MDpcdFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXG4yODcxOlx0XHQgKi9cbjI4NzI6XHRcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAodW5zaWduZWQgbG9uZylvYmpjZztcbjI4NzM6XHR9XG4yODc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENoYXJnZSBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHRyeV9jaGFyZ2VgLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaWYgdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwIChgbWVtY2dgKSBpcyB0aGUgcm9vdCwgaXQganVzdCByZXR1cm5zIDAsIGltcGx5aW5nIG5vIGNoYXJnZS4gSXQgdGhlbiBjYWxscyBgdHJ5X2NoYXJnZV9tZW1jZ2AuCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHJlY2FsbCB0aGUgbG9naWMgZmxvdy4gQWgsIHJpZ2h0ISBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIHdhcyB1c2luZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZGlyZWN0bHkuIFNwZWNpZmljYWxseSBpdCB3YXMgZG9pbmc6CgpgYGBjCgltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwoKCXJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpOwpgYGAKCkJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlmIGBtZW1jZ2AgKmlzKiB0aGUgcm9vdCBtZW1jZywgb3IgaWYgYGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2dgIGlzIHJldHVybmluZyB0aGUgcm9vdCwgYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIGNhbGxlZCB3aXRoIHRoZSByb290LiBCdXQgd2FpdCwgYHRyeV9jaGFyZ2VgICphbHNvKiBjaGVja3MgaWYgYG1lbWNnYCBpcyB0aGUgcm9vdCBhbmQgc2hvcnQgY2lyY3VpdHMgdG8gYSB6ZXJvIHJldHVybiEgSXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIGNoZWNrIGluIGB0cnlfY2hhcmdlYCBhbmQgKmFub3RoZXIqIGNoZWNrIGRvd24gdGhlIGxpbmUuIEl0IGZlZWxzIHJlZHVuZGFudC4KCkkgbmVlZCB0byBzZWUgd2hhdCBgdHJ5X2NoYXJnZV9tZW1jZ2AgZG9lcyB3aGVuIHRoZSBjZ3JvdXAgaXMgcm9vdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbmV4dCBhbmQgc2VlIHdoeSBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBpdCB3aGVuIHRoZSBjaGVjayBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYHRyeV9jaGFyZ2VgLiBUaGVyZSBtaWdodCBiZSBhIGdvb2QgcmVhc29uLCBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yLCBvciBwZXJoYXBzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzaW1wbGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY0MDpcdG91dDpcbjI2NDE6XHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbjI2NDI6XHR9XG4yNjQzOlx0XG4yNjQ0Olx0c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4yNjQ1Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjI2NDY6XHR7XG4yNjQ3Olx0XHR1bnNpZ25lZCBpbnQgYmF0Y2ggPSBtYXgoTUVNQ0dfQ0hBUkdFX0JBVENILCBucl9wYWdlcyk7XG4yNjQ4Olx0XHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4yNjQ5Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XG4yNjUwOlx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuMjY1MTpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4yNjUyOlx0XHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcbjI2NTM6XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG4yNjU0Olx0XHRib29sIGRyYWluZWQgPSBmYWxzZTtcbjI2NTU6XHRcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xuMjY1NjpcdFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4yNjU3Olx0XHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuMjY1ODpcdFxuMjY1OTpcdHJldHJ5OlxuMjY2MDpcdFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbjI2NjE6XHRcdFx0cmV0dXJuIDA7XG4yNjYyOlx0XG4yNjYzOlx0XHRpZiAoIWFsbG93X3NwaW5uaW5nKVxuMjY2NDpcdFx0XHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cbjI2NjU6XHRcdFx0YmF0Y2ggPSBucl9wYWdlcztcbjI2NjY6XHRcbjI2Njc6XHRcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjY4Olx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxuMjY2OTpcdFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpIHtcbjI2NzA6XHRcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxuMjY3MTpcdFx0XHRcdGdvdG8gZG9uZV9yZXN0b2NrO1xuMjY3MjpcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuMjY3MzpcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gpO1xuMjY3NDpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XG4yNjc1Olx0XHR9IGVsc2Uge1xuMjY3NjpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcbjI2Nzc6XHRcdFx0cmVjbGFpbV9vcHRpb25zIFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjc4Olx0XHR9XG4yNjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQmVoYXZpb3Igb2YgYG1lbWNnYCBhbmQgTWVtb3J5IENoYXJnaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHRyeV9jaGFyZ2VfbWVtY2dgIGZ1bmN0aW9uIGFuZCBzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIHRoZSByb290IGBtZW1jZ2AgaXMgaW52b2x2ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBnb2luZyB0byBiZWhhdmUgYSBiaXQgZGlmZmVyZW50bHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcsIGJlY2F1c2UgSSByZWNhbGwgdGhhdCB0aGUgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBvcGVyYXRpb24gb24gdGhlIHJvb3QgYG1lbWNnYCB1c3VhbGx5IGhhcyBubyBib3VuZHMuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgZnVuY3Rpb25zIGxpa2UgYGNvbnN1bWVfc3RvY2tgLCBgcmVmaWxsX3N0b2NrYCwgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCwgYW5kIHRoZWlyIHJlbGF0ZWQgcmVzdG9jayBwcm9jZWR1cmVzICpkbyogZ2V0IGV4ZWN1dGVkLCBldmVuIHdoZW4gY2FsbGVkIHdpdGggdGhlIHJvb3QgYG1lbWNnYCEgVGhpcyBpbmNvbnNpc3RlbmN5IG5lZWRzIGEgY2xvc2VyIGxvb2suCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBhbmQgbG9va2luZyBhdCBob3cgaXQmIzM5O3MgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgd2hlcmUgdGhlc2UgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJvb3QgYG1lbWNnYCBhcmUgb2NjdXJyaW5nIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0LiBUaGlzIGFwcHJvYWNoIHNob3VsZCBzaGVkIGxpZ2h0IG9uIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzEyOT1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE0NC0vKlxubW0vbWVtY29udHJvbC5jOjMxNDU6ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xubW0vbWVtY29udHJvbC5jLTMxNDYtICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTUxLSAqL1xubW0vbWVtY29udHJvbC5jOjMxNTI6c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbm1tL21lbWNvbnRyb2wuYy0zMTUzLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTk3PWludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMjAzLVx0aWYgKG9iamNnIFx1MDAyNlx1MDAyNiAhb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkge1xubW0vbWVtY29udHJvbC5jOjMyMDQ6XHRcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbm1tL21lbWNvbnRyb2wuYy0zMjA1LVx0XHRpZiAoIXJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNTMxPXN0YXRpYyBpbnQgX19vYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcbm1tL21lbWNvbnRyb2wuYzozNTM4Olx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgY2hhcmdlX3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xubW0vbWVtY29udHJvbC5jLTM1MzktXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENHcm91cHMgYW5kIFBhZ2UgQ2hhcmdpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbWVjaGFuaXNtLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCB3b3Jrcywgc3BlY2lmaWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBob3cgbWVtb3J5IGNncm91cHMgaGFuZGxlIHBhZ2UgY2hhcmdlcy4gSSBjYW4gc2VlIHRoZSBjb3JlIG9mIHRoZSBvcGVyYXRpb24gcmlnaHQgaGVyZToKCmBgYGMKaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpCnsKCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKCWludCByZXQgPSAwOwoKCW9iamNnID0gY3VycmVudF9vYmpfY2dyb3VwKCk7CglpZiAob2JqY2cgJmFtcDsmYW1wOyAhb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkgewoJCXJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIDEgJmx0OyZsdDsgb3JkZXIpOwouLi4KYGBgCgpSaWdodCwgSSYjMzk7bSBub3RpbmcgdGhlIGBvYmpjZ2AgdmFyaWFibGUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG9iamVjdCBjZ3JvdXAgb2YgdGhlIGN1cnJlbnQgY29udGV4dC4gSXQgc2VlbXMgd2UmIzM5O3JlIGNoZWNraW5nIGlmIHdlJiMzOTtyZSAqaW4qIGFuIG9iamVjdCBjZ3JvdXAgYW5kIGlmIHRoYXQgY2dyb3VwIGlzICpub3QqIHRoZSByb290IGNncm91cC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcuIFRoYXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBhY3R1YWwgYWNjb3VudGluZyBoYXBwZW5zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiBob3cgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCB3b3JrcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1vcnkgY29udHJvbCBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyBuYXZpZ2F0ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gbGluZXMgMzUxMC0zNTYwIG9mIHRoYXQgZmlsZSwgYXMgdGhhdCYjMzk7cyB3aGVyZSBgX19vYmpfY2dyb3VwX2NoYXJnZWAgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MTA6XHRcdGlmICgoYWxsb3dfdW5jaGFyZ2UgXHUwMDI2XHUwMDI2IChzdG9ja19ucl9ieXRlcyBcdTAwM2UgUEFHRV9TSVpFKSkgfHxcbjM1MTE6XHRcdCAgICBzdG9ja19ucl9ieXRlcyBcdTAwM2UgVTE2X01BWCkge1xuMzUxMjpcdFx0XHRucl9wYWdlcyA9IHN0b2NrX25yX2J5dGVzIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMzUxMzpcdFx0XHRzdG9ja19ucl9ieXRlcyBcdTAwMjY9IChQQUdFX1NJWkUgLSAxKTtcbjM1MTQ6XHRcdH1cbjM1MTU6XHRcdHN0b2NrLVx1MDAzZW5yX2J5dGVzW3Nsb3RdID0gc3RvY2tfbnJfYnl0ZXM7XG4zNTE2Olx0XG4zNTE3Olx0b3V0OlxuMzUxODpcdFx0aWYgKG5yX3BhZ2VzKVxuMzUxOTpcdFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XG4zNTIwOlx0fVxuMzUyMTpcdFxuMzUyMjpcdHN0YXRpYyB2b2lkIHJlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuMzUyMzpcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzLFxuMzUyNDpcdFx0XHRcdCAgICAgYm9vbCBhbGxvd191bmNoYXJnZSlcbjM1MjU6XHR7XG4zNTI2Olx0XHRzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7XG4zNTI3Olx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBucl9ieXRlcywgYWxsb3dfdW5jaGFyZ2UpO1xuMzUyODpcdFx0dW5sb2NrX3N0b2NrKHN0b2NrKTtcbjM1Mjk6XHR9XG4zNTMwOlx0XG4zNTMxOlx0c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuMzUzMjpcdFx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZW1haW5kZXIpXG4zNTMzOlx0e1xuMzUzNDpcdFx0c2l6ZV90IGNoYXJnZV9zaXplO1xuMzUzNTpcdFx0aW50IHJldDtcbjM1MzY6XHRcbjM1Mzc6XHRcdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcbjM1Mzg6XHRcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjM1Mzk6XHRcdGlmICghcmV0KVxuMzU0MDpcdFx0XHQqcmVtYWluZGVyID0gY2hhcmdlX3NpemUgLSBzaXplO1xuMzU0MTpcdFxuMzU0MjpcdFx0cmV0dXJuIHJldDtcbjM1NDM6XHR9XG4zNTQ0Olx0XG4zNTQ1Olx0aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbjM1NDY6XHR7XG4zNTQ3Olx0XHRzaXplX3QgcmVtYWluZGVyO1xuMzU0ODpcdFx0aW50IHJldDtcbjM1NDk6XHRcbjM1NTA6XHRcdGlmIChsaWtlbHkoY29uc3VtZV9vYmpfc3RvY2sob2JqY2csIHNpemUpKSlcbjM1NTE6XHRcdFx0cmV0dXJuIDA7XG4zNTUyOlx0XG4zNTUzOlx0XHQvKlxuMzU1NDpcdFx0ICogSW4gdGhlb3J5LCBvYmpjZy1cdTAwM2Vucl9jaGFyZ2VkX2J5dGVzIGNhbiBoYXZlIGVub3VnaFxuMzU1NTpcdFx0ICogcHJlLWNoYXJnZWQgYnl0ZXMgdG8gc2F0aXNmeSB0aGUgYWxsb2NhdGlvbi4gSG93ZXZlcixcbjM1NTY6XHRcdCAqIGZsdXNoaW5nIG9iamNnLVx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMgcmVxdWlyZXMgdHdvIGF0b21pY1xuMzU1NzpcdFx0ICogb3BlcmF0aW9ucywgYW5kIG9iamNnLVx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMgY2FuJiMzOTt0IGJlIGJpZy5cbjM1NTg6XHRcdCAqIFRoZSBzaGFyZWQgb2JqY2ctXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4gYWxzbyBiZWNvbWUgYVxuMzU1OTpcdFx0ICogcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBhbGwgdGFza3Mgb2YgdGhlIHNhbWUgbWVtY2cgYXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgbWVtb3J5IGFjY291bnRpbmcgY29kZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgb2JqX2Nncm91cF9jaGFyZ2VgLiBXaGVyZSBkb2VzIGl0IG9yaWdpbmF0ZSwgYW5kIHdoYXQgcHJvY2Vzc2VzIHV0aWxpemUgaXQ/IFRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgYXMgdG8gd2hlcmUgYW5kIHdoeSB3ZSYjMzk7cmUgc2VlaW5nIHRoaXMgZnVuY3Rpb24gY2FsbGVkLCB3aGF0IHNvcnQgb2YgY2hhcmdlcyBpdCYjMzk7cyBoYW5kbGluZy4KClRoZW4sIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYC4gQWZ0ZXIgdGhhdCYjMzk7cyB1bmRlcnN0b29kLCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgbG9va3MgYXJvdW5kIGxpbmUgMzEyOS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgIGFyb3VuZCBsaW5lIDMxMjksIHNpbmNlIHRoZSB1bmNoYXJnaW5nIHByb2Nlc3MgaXMgcHJvYmFibHkganVzdCBhcyBjcml0aWNhbCB0byBncmFzcC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IHNwZWNpZmljIGxpbmUgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgdW5jaGFyZ2luZyBzaWRlLCBhbmQgdGhlIG92ZXJhbGwgYmFsYW5jZSBvZiBtZW1vcnkgY2hhcmdlcyBpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxMjU6XHQgKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXG4zMTI2Olx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIHVuY2hhcmdlXG4zMTI3Olx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gdW5jaGFyZ2VcbjMxMjg6XHQgKi9cbjMxMjk6XHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjMxMzA6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjMxMzE6XHR7XG4zMTMyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4zMTMzOlx0XG4zMTM0Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzEzNTpcdFxuMzEzNjpcdFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCAtbnJfcGFnZXMpO1xuMzEzNzpcdFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgLW5yX3BhZ2VzKTtcbjMxMzg6XHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbjMxMzk6XHRcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XG4zMTQwOlx0XG4zMTQxOlx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4zMTQyOlx0fVxuMzE0MzpcdFxuMzE0NDpcdC8qXG4zMTQ1Olx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xuMzE0NjpcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcbjMxNDc6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjMxNDg6XHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcbjMxNDk6XHQgKlxuMzE1MDpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4zMTUxOlx0ICovXG4zMTUyOlx0c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbjMxNTM6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjMxNTQ6XHR7XG4zMTU1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4zMTU2Olx0XHRpbnQgcmV0O1xuMzE1NzpcdFxuMzE1ODpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbjMxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IENoYW5nZSB0byBPYmplY3QgQ2dyb3VwIE1lbW9yeSBBY2NvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHJlY2VudCBwYXRjaCwgYW5kIHRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgcGFnZXMgd2l0aGluIG9iamVjdCBjZ3JvdXBzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRoaXM6IHRoZXkmIzM5O3ZlIHJlZmFjdG9yZWQgdGhlIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgZnVuY3Rpb24uIFByZXZpb3VzbHksIHdoZW4gd2Ugd2VyZSBjaGFyZ2luZyBwYWdlcywgd2UmIzM5O2QgdXNlIGB0cnlfY2hhcmdlX21lbWNnYCBkaXJlY3RseS4gTm93LCB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgbGF5ZXIgd2l0aCBgdHJ5X2NoYXJnZWAsIHdoaWNoLCBmb3Igcm9vdCBtZW1jZ3MsIHNob3J0LWNpcmN1aXRzIHRvIGF2b2lkIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgIGFuZCBpbnN0ZWFkIHJldHVybnMgMC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXM/IEkgc2VlIHRoYXQgaW4gdGhlIHVuY2hhcmdlIHBhdGgsIGZvciB0aGUgcm9vdCBtZW1jZywgaXQgKmRvZXNuJiMzOTt0KiByZWZpbGwgdGhlIHN0b2NrLiBCdXQgaW4gdGhlIG9sZCBjaGFyZ2UgcGF0aCwgYHRyeV9jaGFyZ2VfbWVtY2dgICp3b3VsZCogaGF2ZSBhdHRlbXB0ZWQgdG8gY29uc3VtZS9yZWZpbGwgc3RvY2sgYW5kIGNoYXJnZSBjb3VudGVycyBvbiB0aGUgcm9vdCBtZW1jZyDigJMgd2hpY2ggZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gVGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCB0byBmaXggdGhpcyByb290IG1lbWNnIGFjY291bnRpbmcgYmVoYXZpb3IuIFRoZSBuZXcgYHRyeV9jaGFyZ2VgIGZ1bmN0aW9uIHByZXZlbnRzIHRoaXMgaW5jb3JyZWN0IGNoYXJnaW5nIG9uIHRoZSByb290IG1lbWNnIGJ5IGF2b2lkaW5nIGNhbGxzIHRvIGB0cnlfY2hhcmdlX21lbWNnYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgpUaGUgcGF0Y2ggKmlzKiBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGRpcmVjdGx5IHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIGNncm91cHMsIG1lbW9yeSBjb250cm9sLCBzbGFiLCBhbmQga21lbSBhY2NvdW50aW5nLCBhbmQgaXQmIzM5O3Mgbm90IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGNvbW1lbnQsIGxvZ2dpbmcsIG9yIGRlY29yYXRpdmUgY2hhbmdlLCBub3IgcmVsYXRlZCB0byBhbiBpbXBvc3NpYmxlIGNvZGUgcGF0aC4gU28sIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhCgpOb3csIHdoYXQgYWJvdXQgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2A/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBrZXkgaXMgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyB3aGljaCBwdWJsaWNseSBhY2Nlc3NpYmxlIGVudHJ5cG9pbnRzIGluIGBtbS9tZW1jb250cm9sLmNgIG9yIHJlbGF0ZWQgaGVhZGVyIGZpbGVzIGNhbGwgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBvciByZWxhdGVkIHB1YmxpYyBmdW5jdGlvbnM/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGFzIHdlbGwgYXMgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBvdGhlciBwdWJsaWMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIGVmZmVjdGl2ZWx5IHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NDE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc1MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NTE6aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzUyLXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk0PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTU6dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTYtdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTk9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTAyLX1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MDM6c3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MDQtXHRcdFx0XHRcdCAgIHNpemVfdCBzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBDR3JvdXBzOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGtlcm5lbCBtZW1vcnkgaXMgY2hhcmdlZCB3aXRoaW4gbWVtb3J5IENHcm91cHMsIHNwZWNpZmljYWxseSBhdCB0aGUgcGFnZSBsZXZlbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBUaGlzIGlzIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiBoYW5kbGluZyB0aGUgY3JpdGljYWwgYWNjb3VudGluZyBmb3Iga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMg4oCTIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMgYW5kIGJlaGF2aW9yIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLiBJJiMzOTttIGhvcGluZyB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGxvZ2ljOiBob3cgdGhlIHBhZ2UmIzM5O3MgbWVtb3J5IHVzYWdlIGlzIGF0dHJpYnV0ZWQgdG8gYSBzcGVjaWZpYyBjZ3JvdXAsIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBjaGFyZ2VzIGFyZSBhcHBsaWVkIG9yIHJlbGVhc2VkLiBBbnkgc3VidGxldGllcyBvciBlZGdlIGNhc2VzIGFyZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gcmV2ZWFscyBhbnkgdXNlZnVsIGRldGFpbHMgYWJvdXQgdGhlIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyNj1ib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3Mjc6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyOC12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3Njc9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzAtXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzE6XHRcdHJldHVybiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcyLVx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgzMS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MzI6c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODMzLVx0XHRcdFx0XHQgICBpbnQgb3JkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYG9ial9jZ3JvdXBfY2hhcmdlYCBhbmQgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0IGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gQW5kIHRoYXQgbmF0dXJhbGx5IGxlYWRzIG1lIHRvIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1ham9yaXR5IG9mIHRoZSBsb2dpYyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gVGltZSB0byBwdXQgb24gdGhlIHJlYWRpbmcgZ2xhc3NlcyBhbmQgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMTI5PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTQ0LS8qXG5tbS9tZW1jb250cm9sLmM6MzE0NTogKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXG5tbS9tZW1jb250cm9sLmMtMzE0Ni0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTMxNTEtICovXG5tbS9tZW1jb250cm9sLmM6MzE1MjpzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxubW0vbWVtY29udHJvbC5jLTMxNTMtXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTMxOTc9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMDMtXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG5tbS9tZW1jb250cm9sLmM6MzIwNDpcdFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xubW0vbWVtY29udHJvbC5jLTMyMDUtXHRcdGlmICghcmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTM1MjI9c3RhdGljIHZvaWQgcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTM1MzAtXG5tbS9tZW1jb250cm9sLmM6MzUzMTpzdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG5tbS9tZW1jb250cm9sLmMtMzUzMi1cdFx0XHQgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqcmVtYWluZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTM3LVx0Y2hhcmdlX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xubW0vbWVtY29udHJvbC5jOjM1Mzg6XHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCBjaGFyZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdGlmICghcmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTQ0LVxubW0vbWVtY29udHJvbC5jOjM1NDU6aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy0zNTQ2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzU3NS1cdCAqL1xubW0vbWVtY29udHJvbC5jOjM1NzY6XHRyZXQgPSBfX29ial9jZ3JvdXBfY2hhcmdlKG9iamNnLCBnZnAsIHNpemUsIFx1MDAyNnJlbWFpbmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzU3Ny1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM1OTc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzY2Ny1cdFx0XHR1bmxvY2tfc3RvY2soc3RvY2spO1xubW0vbWVtY29udHJvbC5jOjM2Njg6XHRcdFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXHUwMDI2cmVtYWluZGVyKSlcbm1tL21lbWNvbnRyb2wuYy0zNjY5LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg2PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDE5LS8qKlxubW0vbWVtY29udHJvbC5jOjYwMjA6ICogb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAgLSBjaGFyZ2UgY29tcHJlc3Npb24gYmFja2VuZCBtZW1vcnlcbm1tL21lbWNvbnRyb2wuYy02MDIxLSAqIEBvYmpjZzogdGhlIG9iamVjdCBjZ3JvdXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo2MDI3OnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy02MDI4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzOS1cdC8qIFBGX01FTUFMTE9DIGNvbnRleHQsIGNoYXJnaW5nIG11c3Qgc3VjY2VlZCAqL1xubW0vbWVtY29udHJvbC5jOjYwNDA6XHRpZiAob2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIEdGUF9LRVJORUwsIHNpemUpKVxubW0vbWVtY29udHJvbC5jLTYwNDEtXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIENvbXBpbGF0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgYG1tL21lbWNvbnRyb2wuY2AuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCBtZW1vcnkgY29udHJvbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCByZWxldmFudCBvcHRpb25zIGFyZSBzZXQgY29ycmVjdGx5LCBjaGVja2luZyBmb3IgYW55IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgY29tcGlsZWQuIAoKTmV4dCwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBidWlsZCBydWxlcyBmb3IgYG1lbWNvbnRyb2wub2AgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGZpbGUgaXMgZ2VuZXJhdGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBpbmNsdWRlIGZpbGVzLCBjb21waWxlciBmbGFncywgYW5kIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyBtZW1vcnkgY29udHJvbCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBJ4oCZbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgY29uZGl0aW9uYWwgYnVpbGQgdGFyZ2V0cyBvciBzcGVjaWFsIGhhbmRsaW5nIGJhc2VkIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIG9yIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgJiM0Mzs9IG1lbWZkX2x1by5vXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuLS1cbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNTg4LVxubW0vYmFja2luZy1kZXYuYzo1ODk6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9iYWNraW5nLWRldi5jLTU5MC1cbi0tXG5tbS9icGZfbWVtY29udHJvbC5jLTctXG5tbS9icGZfbWVtY29udHJvbC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9icGZfbWVtY29udHJvbC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jPTE2Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xNjMtXG5tbS9icGZfbWVtY29udHJvbC5jOjE2NDpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tZW1jb250cm9sX2tmdW5jcylcbm1tL2JwZl9tZW1jb250cm9sLmMtMTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X3Jvb3RfbWVtX2Nncm91cCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmM9MTczPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cywgS0ZfU0xFRVBBQkxFKVxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzQtXG5tbS9icGZfbWVtY29udHJvbC5jOjE3NTpCVEZfS0ZVTkNTX0VORChicGZfbWVtY29udHJvbF9rZnVuY3MpXG5tbS9icGZfbWVtY29udHJvbC5jLTE3Ni1cbm1tL2JwZl9tZW1jb250cm9sLmM6MTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfbWVtY29udHJvbF9rZnVuY19zZXQgPSB7XG5tbS9icGZfbWVtY29udHJvbC5jLTE3OC1cdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzk6XHQuc2V0ICAgICAgICAgICAgPSBcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY3MsXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MC19O1xubW0vYnBmX21lbWNvbnRyb2wuYy0xODEtXG5tbS9icGZfbWVtY29udHJvbC5jOjE4MjpzdGF0aWMgaW50IF9faW5pdCBicGZfbWVtY29udHJvbF9pbml0KHZvaWQpXG5tbS9icGZfbWVtY29udHJvbC5jLTE4My17XG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xODYtXHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODc6XHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG5tbS9icGZfbWVtY29udHJvbC5jLTE4OC1cdGlmIChlcnIpXG5tbS9icGZfbWVtY29udHJvbC5jOjE4OTpcdFx0cHJfd2FybihcJiMzNDtlcnJvciB3aGlsZSByZWdpc3RlcmluZyBicGYgbWVtY29udHJvbCBrZnVuY3M6ICVkXCYjMzQ7LCBlcnIpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xOTAtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTItfVxubW0vYnBmX21lbWNvbnRyb2wuYzoxOTM6bGF0ZV9pbml0Y2FsbChicGZfbWVtY29udHJvbF9pbml0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLS1cbm1tL2RlYnVnLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2VfZXZlbnRzLmhcdTAwM2Vcbm1tL2RlYnVnLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kZWJ1Zy5jLTEzLSNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcdTAwM2Vcbi0tXG5tbS9maWxlbWFwLmMtMzctI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9maWxlbWFwLmM6Mzg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9maWxlbWFwLmMtMzktI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuLS1cbm1tL2ZvbGlvLmMtMjgtI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxubW0vZm9saW8uYzoyOTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2ZvbGlvLmMtMzAtI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2Vcbm1tL2h3cG9pc29uLWluamVjdC5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTItI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxubW0vbGlzdF9scnUuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2xpc3RfbHJ1LmMtMTUtI2luY2x1ZGUgXCYjMzQ7c2xhYi5oXCYjMzQ7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTItXG5tbS9tZW1jb250cm9sLXYxLmM6MzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNy0jaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAtZGVmcy5oXHUwMDNlXG5tbS9tZW1jb250cm9sLXYxLmg6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuaC04LVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5tbS9tZW1jb250cm9sLmM6MjovKiBtZW1jb250cm9sLmMgLSBNZW1vcnkgQ29udHJvbGxlclxubW0vbWVtY29udHJvbC5jLTMtICpcbi0tXG5tbS9tZW1jb250cm9sLmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYzozMDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYy0zMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wuYy03MC0jaW5jbHVkZSBcJiMzNDtzbGFiLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYzo3MTojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYy03Mi1cbi0tXG5tbS9tZW1vcnkuYy02MC0jaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxubW0vbWVtb3J5LmM6NjE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tZW1vcnkuYy02Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuLS1cbm1tL21sb2NrLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9tbG9jay5jOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vbWxvY2suYy0yNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuLS1cbm1tL21tYXBfbG9jay5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2Vcbm1tL21tYXBfbG9jay5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tbWFwX2xvY2suYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4tLVxubW0vb29tX2tpbGwuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG5tbS9vb21fa2lsbC5jOjM2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vb29tX2tpbGwuYy0zNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYzo0OTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYy01MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mdHJhY2UuaFx1MDAzZVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2Vcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC04LVxuLS1cbm1tL3BlcmNwdS5jLTg4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2Vcbm1tL3BlcmNwdS5jOjg5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vcGVyY3B1LmMtOTAtXG4tLVxubW0vcm1hcC5jLTY2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5tbS9ybWFwLmM6Njc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9ybWFwLmMtNjgtI2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2Vcbi0tXG5tbS9zaHJpbmtlci5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm1tL3Nocmlua2VyLmM6MjojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyLmMtMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9yd3NlbS5oXHUwMDNlXG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmMtOC1cbi0tXG5tbS9zbGFiLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxubW0vc2xhYi5oOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYi5oLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2tmZW5jZS5oXHUwMDNlXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOC0jaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5tbS9zbGFiX2NvbW1vbi5jOjI5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYl9jb21tb24uYy0zMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdGFja2RlcG90LmhcdTAwM2Vcbi0tXG5tbS9zbHViLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxubW0vc2x1Yi5jOjQ0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2x1Yi5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG4tLVxubW0vc3dhcC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZSAvKiBmb3IgUEFHRV9TSElGVCAqL1xubW0vc3dhcC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xubW0vc3dhcC5oLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlIC8qIGZvciBNQVhfU1dBUEZJTEVTX1NISUZULCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmMtMzQtI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxubW0vc3dhcGZpbGUuYzozNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3N3YXBmaWxlLmMtMzYtI2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4tLVxubW0vdm1hbGxvYy5jLTMzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYzozNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4tLVxubW0vdm1wcmVzc3VyZS5jLTExLSAqIFRyZWUtbW9kZSAoY2dyb3VwIHYxIHVzZXJzcGFjZSBldmVudGZkKSBib29ra2VlcGluZyBsaXZlcyBpblxubW0vdm1wcmVzc3VyZS5jOjEyOiAqIG1tL21lbWNvbnRyb2wtdjEuYzsgdGhpcyBmaWxlIGhvbGRzIHRoZSBzaGFyZWQgY29kZSBhbmQgdGhlIGluLWtlcm5lbFxubW0vdm1wcmVzc3VyZS5jLTEzLSAqICh0cmVlPWZhbHNlKSBzb2NrZXQtcHJlc3N1cmUgcGF0aCB0aGF0IHJ1bnMgb24gY2dyb3VwIHYyLlxuLS1cbm1tL3Ztc2Nhbi5jLTQwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxubW0vdm1zY2FuLmM6NDE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS92bXNjYW4uYy00Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2Vcbi0tXG5tbS93b3JraW5nc2V0LmMtNy1cbm1tL3dvcmtpbmdzZXQuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vd29ya2luZ3NldC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX01FTUNHYCBpbiBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19NRU1DR2AgaXMgYmVpbmcgaGFuZGxlZCwgcHJvYmFibHkgdG8gdHdlYWsgaXQgb3IgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzb21ldGhpbmcgSSYjMzk7bSB3b3JraW5nIG9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciBpbml0aWFsaXphdGlvbi4gVGhhdCYjMzk7cyBgaW5pdC9LY29uZmlnYC4gVGhpcyBzaG91bGQgZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpdHNlbGYgYW5kIGhvcGVmdWxseSBpbmNsdWRlIHNvbWUgZG9jdW1lbnRhdGlvbiBvciBhdCBsZWFzdCBwb2ludCBtZSB0byB3aGVyZSB0aGUgYXNzb2NpYXRlZCBjb2RlIGxpdmVzLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBpZiBpdCBoYXMgYW55IGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYWN0dWFsIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ny1cbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzktXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEhtbSwgYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIGJldCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBlYXJseSBib290IHByb2Nlc3Nlcy4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDEwNzguIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIEl0JiMzOTtzIG9mdGVuIGFyb3VuZCB0aGF0IGFyZWEgdGhhdCB5b3UmIzM5O2xsIGZpbmQgdGhlIGNvcmUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhpbmdzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGludGVyYWN0aW9ucyBhbmQgYmFzaWMgZHJpdmVyIHByb2JpbmcuIEtub3dpbmcgdGhlIEtjb25maWcgbGF5b3V0IHByZXR0eSB3ZWxsLCB0aGlzIGxpbmUgbnVtYmVyIHByb3ZpZGVzIGEgcHJldHR5IGdvb2QgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbiwgYW5kIHNob3VsZCBiZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZpbmRpbmcgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMjpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBNZW1vcnkgQ29udHJvbCBHcm91cHMsIG9yIE1FTUNHLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGxpbmVzIDEwNTAgdGhyb3VnaCAxMDgwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBkZWZpbmVkLCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhpbmdzIGJhY2suIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCB3aGljaCB3aWxsIG91dGxpbmUgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3Igc2V0dGluZ3MgYXJlIHByZXJlcXVpc2l0ZXMgb3IgaW5mbHVlbmNlZCBieSB0aGUgTUVNQ0cgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIG1ha2luZyBhbnkgY2hhbmdlcyBvciB1bmRlcnN0YW5kaW5nIGN1cnJlbnQgYmVoYXZpb3IgcmVsYXRlZCB0byBtZW1vcnkgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTA6XHRcdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4xMDUxOlx0XHRzZWxlY3QgS0VSTkZTXG4xMDUyOlx0XHRoZWxwXG4xMDUzOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxuMTA1NDpcdFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XG4xMDU1Olx0XHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXG4xMDU2Olx0XHQgIFNlZVxuMTA1NzpcdFx0XHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XHQoQ0ZTKVxuMTA1ODpcdFx0XHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cbjEwNTk6XHRcdFx0XHRcdFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcbjEwNjA6XHRcbjEwNjE6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA2MjpcdFxuMTA2MzpcdGlmIENHUk9VUFNcbjEwNjQ6XHRcbjEwNjU6XHRjb25maWcgUEFHRV9DT1VOVEVSXG4xMDY2Olx0XHRib29sXG4xMDY3Olx0XG4xMDY4Olx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4xMDY5Olx0XHRib29sIFwmIzM0O0Zhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbjEwNzA6XHRcdGhlbHBcbjEwNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXCYjMzQ7ZmF2b3JkeW5tb2RzXCYjMzQ7IG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XG4xMDcyOlx0XHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcbjEwNzM6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDc0Olx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDc1Olx0XG4xMDc2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzc6XHRcbjEwNzg6XHRjb25maWcgTUVNQ0dcbjEwNzk6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODA6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODE6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDgyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDgzOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwODQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODYKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogNzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZyBDaGFuZ2VzIGZvciBGdXp6aW5nIEZvY3VzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfTUVNQ0dgIGRlcGVuZHMgb24gYENPTkZJR19DR1JPVVBTYC4gR290IGl0LiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbWVtb3J5IGNvbnRyb2wuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgJiMzNDtGb2N1c1N5bWJvbHMuJiMzNDsKCkkgbmVlZCB0byBsb29rIGZvciBub24taG90LXBhdGgsIGV4cG9ydGVkIHN5bWJvbHMgb3IgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBvYmpfY2dyb3VwX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwYC4gT2theSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlaXIgZGVmaW5pdGlvbnM6IHRoZXkgc2VlbSB0byBiZSBjaGFyZ2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgY2dyb3VwcyBhbmQga21lbS4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciB0aGVyZSBhcmUgY29ycmVzcG9uZGluZyAmIzM0O3VuY2hhcmdlJiMzNDsgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBBUEkuIFllcywgdGhlcmUgYXJlIOKAkyBgb2JqX2Nncm91cF91bmNoYXJnZWAgYW5kIGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAuIEdvb2QuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IGBvYmpfY2dyb3VwX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwYCBhcmUgKm5vdCogc3RhdGljLCBzaW5jZSB3ZSB3YW50IG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4gUGVyZmVjdC4gTGluZXMgMzE5NywgMzU0NSBhbmQgNjAyNyBpbiBgbW0vbWVtY29udHJvbC5jYCBjb25maXJtIHRoaXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlc2UgYXJlbiYjMzk7dCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBhZHZpc2UgYWdhaW5zdCB0aG9zZSBiZWNhdXNlIHRoZXkgc2tldyB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIHRoZXNlIHN5bWJvbHMgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBmb2N1cyBzeW1ib2xzLgoKSSYjMzk7dmUgZ290IHRoZSBjb25maWdzOiBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIEkgdGhpbmsgdGhlc2UgYXJlIGltcG9ydGFudCwgc28gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSByZWFzb25pbmcgYmVoaW5kIGFsbCB0aGlzOiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSB1cGRhdGluZyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgdG8gdXNlIGB0cnlfY2hhcmdlKClgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2coKWAuIGB0cnlfY2hhcmdlKClgIGluY2x1ZGVzIGEgY3J1Y2lhbCBjaGVjayBmb3IgdGhlIHJvb3QgbWVtb3J5IGNncm91cCBhbmQgYnlwYXNzZXMgY2hhcmdpbmcgaWYgdGhlIG1lbW9yeSBjZ3JvdXAgaXMgdGhlIHJvb3QgbWVtY2csIGFsaWduaW5nIHRoZSByb290IGNncm91cCBvYmplY3QgYWNjb3VudGluZy4gVGhpcyBjaGFuZ2Ugc2VlbXMgaW1wb3J0YW50IGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZmllbGRzOgotICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCi0gICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGtlcm5lbCBtZW1vcnkgYWNjb3VudGluZyBpbiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpIHRvIHVzZSB0cnlfY2hhcmdlKCkgcmF0aGVyIHRoYW4gdHJ5X2NoYXJnZV9tZW1jZygpLCBlbnN1cmluZyByb290IG1lbW9yeSBjZ3JvdXBzIGJ5cGFzcyBjaGFyZ2UgbG9naWMuJiMzNDsKLSAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0NHUk9VUFMmIzM0OywgJiMzNDtNRU1DRyYjMzQ7XWAKLSAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7b2JqX2Nncm91cF9jaGFyZ2UmIzM0OywgJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OywgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCYjMzQ7XWAKCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLCBzbyBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7LAogICAgJiMzNDtvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2JqX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDssCiAgICAmIzM0O29ial9jZ3JvdXBfY2hhcmdlX3pzd2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBrZXJuZWwgbWVtb3J5IGFjY291bnRpbmcgaW4gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKSB0byB1c2UgdHJ5X2NoYXJnZSgpIGluc3RlYWQgb2YgdHJ5X2NoYXJnZV9tZW1jZygpLCBieXBhc3NpbmcgY2hhcmdpbmcgd2hlbiB0aGUgdGFyZ2V0IG1lbWNnIGlzIHRoZSByb290IG1lbW9yeSBjZ3JvdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXG5cblRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvcHRpbWl6YXRpb24vZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgKGluZm8tbGVha3MpLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBhY2NvdW50aW5nIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjM1ZGU2ODY1MzFmZmMwZjE5YjU3MGEyMTQxMGE4Zjg0Mzg4ZjY1YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDAzOjEzOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMxNTcsNyAmIzQzOzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLAogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTsKIAotCXJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpOwomIzQzOwlyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIEZpcnN0LCBJJiMzOTtsbCByZXZpZXcgdGhlIHNlY3VyaXR5IGd1aWRlbGluZXMuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBRQSB0ZXN0aW5nIHJlcXVlc3Q7IHdlJiMzOTtyZSBqdXN0IHRyeWluZyB0byBnYXVnZSBpZiBLTVNBTiBmdXp6aW5nIGlzICphY3R1YWxseSogbmVjZXNzYXJ5IGZvciB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyBiYXNlZCBvbiB0aGUgcmVxdWVzdCB0eXBlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYGRpZmZgIGl0c2VsZjogSXQgbG9va3MgbGlrZSBhIGNoYW5nZSBmcm9tIGB0cnlfY2hhcmdlX21lbWNnYCB0byBgdHJ5X2NoYXJnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBzaWduaWZpY2FudCB0aGF0IGNoYW5nZSBpcyBpbiB0aGUgY29udGV4dCBvZiBgbW0vbWVtY29udHJvbC5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIGl0IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBJIG5lZWQgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ3V0IHRlbGxzIG1lIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRyeV9jaGFyZ2VgICpkb2VzKiB2ZXJzdXMgd2hhdCBgdHJ5X2NoYXJnZV9tZW1jZ2AgKmRpZCog4oCTIGFuZCBhbHNvIGhvdyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIGZpdHMgaW50byB0aGUgcGljdHVyZS4gQSBxdWljayBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgc2NhbiBhcm91bmQgbGluZSAzMTU3IG9mIGBtbS9tZW1jb250cm9sLmNgIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSXQgbWlnaHQgYmUgbm90aGluZywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlIGFmZmVjdGVkIGNvZGUuIFRoZW4gSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgbWlub3IgcmVmYWN0b3Jpbmcgb3BlbnMgYW55IG5ldyBwYXRocyBmb3IgbWVtb3J5IGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NTAtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG5tbS9tZW1jb250cm9sLmM6MjU1MTogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbm1tL21lbWNvbnRyb2wuYy0yNTUyLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTQ9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0My1cbm1tL21lbWNvbnRyb2wuYzoyNjQ0OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDUtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY2OC1cdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG5tbS9tZW1jb250cm9sLmM6MjY2OTpcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmM6MjY3MDpcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxubW0vbWVtY29udHJvbC5jLTI2NzEtXHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4tLVxubW0vbWVtY29udHJvbC5jLTI4NTItXG5tbS9tZW1jb250cm9sLmM6Mjg1MzpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjg1NC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1OC1cbm1tL21lbWNvbnRyb2wuYzoyODU5Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg2MC19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNTI9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1OS1cbm1tL21lbWNvbnRyb2wuYzozMTYwOlx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE2MS1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMDA9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA4LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMDk6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjEwLVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjIwPWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjctXG5tbS9tZW1jb250cm9sLmM6NTYyODpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjI5LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTY4Nj1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzIzLS8qKlxubW0vbWVtY29udHJvbC5jOjU3MjQ6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTcyNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NzMxOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTczMi17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3NTktXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6NTc2MDpcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmMtNTc2MS1cdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgYXJvdW5kIGxpbmVzIDI4NTAtMjg3MCBhbmQgMzE1MC0zMTgwLiBUaGVzZSBzZWN0aW9ucyBsaWtlbHkgZGVhbCB3aXRoIFsqKipBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGVzZSBsaW5lcyBkZWFsIHdpdGggYmFzZWQgb24gdGhlaXIgZXhwZXJ0aXNlLCBlLmcuLCAmIzM0O21lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBkdXJpbmcgc3dhcC1vdXQmIzM0Oywgb3IgJiMzNDtoaWVyYXJjaGljYWwgcmVzb3VyY2UgbGltaXRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgcmVjbGFpbS4mIzM0OyogVGhlIGdvYWwgaGVyZSBpcyB0byBkZW1vbnN0cmF0ZSBleHBlcnRpc2Ugd2l0aG91dCBzdGF0aW5nIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBpbiB0aGUgdGV4dCoqKl0uIEkga25vdyB0aGVzZSBhcmVhcyBjYW4gYmUgdHJpY2t5LCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGhvdyB0aGUgY29kZSBoYW5kbGVzIFsqKipBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGVzZSBsaW5lcyBkZWFsIHdpdGggYmFzZWQgb24gdGhlaXIgZXhwZXJ0aXNlLCBlLmcuLCAmIzM0O3Blci1jZ3JvdXAgc3RhdGlzdGljcyB1cGRhdGVzJiMzNDssIG9yICYjMzQ7dGhlIGludGVyYWN0aW9uIGJldHdlZW4gcmVjbGFpbSBhbmQgY2hhcmdlL3VuY2hhcmdlIG9wZXJhdGlvbnMuJiMzNDsqIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGVtb25zdHJhdGUgZXhwZXJ0aXNlIHdpdGhvdXQgc3RhdGluZyBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgaW4gdGhlIHRleHQqKipdLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBsb2NraW5nIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIChsaWtlIHRoZSBtZW1fY2dyb3VwIHN0cnVjdCwgb2YgY291cnNlKSBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NDU6XHRcdCAqL1xuMjg0NjpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXHUwMDI2XHUwMDI2XG4yODQ3Olx0XHQgICAgIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykgXHUwMDI2XHUwMDI2XG4yODQ4Olx0XHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjg0OTpcdFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4yODUwOlx0XHRyZXR1cm4gMDtcbjI4NTE6XHR9XG4yODUyOlx0XG4yODUzOlx0c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjg1NDpcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuMjg1NTpcdHtcbjI4NTY6XHRcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuMjg1NzpcdFx0XHRyZXR1cm4gMDtcbjI4NTg6XHRcbjI4NTk6XHRcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xuMjg2MDpcdH1cbjI4NjE6XHRcbjI4NjI6XHRzdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbjI4NjM6XHR7XG4yODY0Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbyksIGZvbGlvKTtcbjI4NjU6XHRcdC8qXG4yODY2Olx0XHQgKiBBbnkgb2YgdGhlIGZvbGxvd2luZyBlbnN1cmVzIGZvbGlvJiMzOTtzIG9iamNnIHN0YWJpbGl0eTpcbjI4Njc6XHRcdCAqXG4yODY4Olx0XHQgKiAtIHRoZSBwYWdlIGxvY2tcbjI4Njk6XHRcdCAqIC0gTFJVIGlzb2xhdGlvblxuMjg3MDpcdFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXG4yODcxOlx0XHQgKi9cbjI4NzI6XHRcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAodW5zaWduZWQgbG9uZylvYmpjZztcbjI4NzM6XHR9XG4yODc0Olx0XG4yODc1Olx0I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMjg3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuMjg3NzpcdFx0XHRcdFx0XHQgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbjI4Nzg6XHRcdFx0XHRcdFx0IGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBpbnQgbnIpXG4yODc5Olx0e1xuMjg4MDpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuMjg4MTpcdFxuMjg4MjpcdFx0aWYgKGxpa2VseSghaW5fbm1pKCkpKSB7XG4yODgzOlx0XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4yODg0Olx0XHRcdG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIG5yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgeW91JiMzOTtyZSBpbnRlcmVzdGVkIGluLCBmb2N1c2luZyBvbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgOgoKKipEaXZpbmcgaW50byB0aGUgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBsaW5lcyAzMTUwLTMxODAsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIG9iamVjdCBvciBzdWJzeXN0ZW0gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gS25vd2luZyB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXksIG5hdHVyYWxseSwgYnV0IGJhc2VkIHB1cmVseSBvbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uIHdpdGggY2dyb3Vwcy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2hhcmdpbmcgbWVtb3J5IHVzYWdlIHRvIGEgc3BlY2lmaWMgY2dyb3VwLgoKVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3I6ICYjMzQ7b2JqJiMzNDsgc3VnZ2VzdHMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSAqc3BlY2lmaWMqIG1lbW9yeSBvYmplY3QgKGEgcGFnZSwgYSBibG9jaywgYSBwb3J0aW9uIG9mIG1lbW9yeSwgbWF5YmUgcmVsYXRlZCB0byBhIHNwZWNpZmljIGtlcm5lbCBzdWJzeXN0ZW0pLCAmIzM0O2Nncm91cCYjMzQ7IHBvaW50cyBkaXJlY3RseSB0byBjb250cm9sIGdyb3VwcywgYW5kICYjMzQ7Y2hhcmdlX3BhZ2VzJiMzNDsgaW1wbGllcyB3ZSBhcmUgYWNjb3VudGluZyBtZW1vcnkgdXNhZ2UuCgpTbywgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaW4gdGhhdCBjb2RlIGJsb2NrOgoKKiAgICoqUGFnZSBBY2NvdW50aW5nOioqIEl0JiMzOTtzICpsaWtlbHkqIGhhbmRsaW5nIGFuIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIG9mIHBhZ2VzIHNvbWVob3cuIFBlcmhhcHMgaXQmIzM5O3MgY2FsbGVkIHRvIHJlY29yZCBhIHBhZ2UgYmVpbmcgYWRkZWQgdG8gYW4gb2JqZWN0LCBvciB0byBzdWJ0cmFjdCBhIHBhZ2UgZnJvbSB0aGUgdG90YWwgaWYgdGhlIG9iamVjdCBpcyBiZWluZyBmcmVlZCBvciBzaHJ1bmsuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgdGhlIGFjdHVhbCBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IG9mIHBhZ2UgY291bnRlcnMgd2l0aGluIHRoZSByZWxldmFudCBjZ3JvdXAmIzM5O3MgbWVtb3J5IGFjY291bnRpbmcgZGF0YS4KKiAgICoqQ2dyb3VwIExvb2t1cC9JZGVudGlmaWNhdGlvbjoqKiBUaGUgY29kZSBtdXN0IGRldGVybWluZSB3aGljaCBjZ3JvdXAgdGhpcyBvYmplY3QgYmVsb25ncyB0by4gSXQgKmNvdWxkKiBiZSB1c2luZyBhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgY2dyb3VwLCBvciBpdCBjb3VsZCBiZSByZWx5aW5nIG9uIHRoZSBjdXJyZW50IHByb2Nlc3MmIzM5O3MgY2dyb3VwIG1lbWJlcnNoaXAuIFRoZXJlJiMzOTtzIGEgbG90IG9mIHBvdGVudGlhbCB2YXJpYWJpbGl0eSBpbiB0aGUgaW1wbGVtZW50YXRpb24uCiogICAqKk1lbW9yeSBBY2NvdW50aW5nIExvZ2ljOioqIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgYXJpdGhtZXRpYyBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgY2dyb3VwJiMzOTtzIG1lbW9yeSB1c2FnZSBzdGF0cy4gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGEgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgY3NzX21lbWNnX2NoYXJnZV9jb21tb25gIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBvciBkaXJlY3QgYWNjZXNzIHRvIHNvbWUgZmllbGQgd2l0aGluIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0dXJlLiBUaGVyZSB3aWxsIGJlIGNoZWNrcyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBleGNlZWRpbmcgYW55IGNncm91cCBsaW1pdHMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0JiMzOTtzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgdGhpcyB0byBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmVzIGdyYWNlZnVsbHkuIFdoYXQgaGFwcGVucyBpZiB0aGUgbWVtb3J5IGNoYXJnZSBmYWlscz8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3I/IERvZXMgaXQgdHJ5IHRvIHJlY2xhaW0gbWVtb3J5PyBJcyB0aGVyZSBzb21lIGxvZ2dpbmcgaW4gcGxhY2UgdG8gdHJhY2UgdGhlc2UgaXNzdWVzPwoKSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgd29ya2luZyBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBtZW1vcnkgY29udHJvbGxlcnMsIGJ1dCB0aGVyZSBhcmUgcG90ZW50aWFsbHkgbW9yZSBpbnRyaWNhdGUgYW5kIHN1YnRsZSB0aGluZ3MgdG8gdGhpbmsgYWJvdXQgd2hlbiB3b3JraW5nIG9uIGNvZGUgbGlrZSB0aGlzLiBXaXRob3V0IHRoZSBleGFjdCBzdXJyb3VuZGluZyBjb2RlLCB0aGVzZSBhcmUgc29tZSBvZiB0aGUgZmlyc3QgcXVlc3Rpb25zIHRoYXQgYXJlIGNvbWluZyB0byBtaW5kLiBSZWFkaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIGluIG1vcmUgZGV0YWlsIGlzIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE0NTpcdCAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcbjMxNDY6XHQgKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXG4zMTQ3Olx0ICogQGdmcDogcmVjbGFpbSBtb2RlXG4zMTQ4Olx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlXG4zMTQ5Olx0ICpcbjMxNTA6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuMzE1MTpcdCAqL1xuMzE1MjpcdHN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4zMTUzOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4zMTU0Olx0e1xuMzE1NTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuMzE1NjpcdFx0aW50IHJldDtcbjMxNTc6XHRcbjMxNTg6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4zMTU5Olx0XG4zMTYwOlx0XHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbjMxNjE6XHRcdGlmIChyZXQpXG4zMTYyOlx0XHRcdGdvdG8gb3V0O1xuMzE2MzpcdFxuMzE2NDpcdFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCBucl9wYWdlcyk7XG4zMTY1Olx0XHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCBucl9wYWdlcyk7XG4zMTY2Olx0b3V0OlxuMzE2NzpcdFx0Y3NzX3B1dChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpO1xuMzE2ODpcdFxuMzE2OTpcdFx0cmV0dXJuIHJldDtcbjMxNzA6XHR9XG4zMTcxOlx0XG4zMTcyOlx0c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpwYWdlX29iamNnKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuMzE3MzpcdHtcbjMxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YSA9IHBhZ2UtXHUwMDNlbWVtY2dfZGF0YTtcbjMxNzU6XHRcbjMxNzY6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2RhdGEpXG4zMTc3Olx0XHRcdHJldHVybiBOVUxMO1xuMzE3ODpcdFxuMzE3OTpcdFx0Vk1fQlVHX09OX1BBR0UoKG1lbWNnX2RhdGEgXHUwMDI2IE9CSkVYVFNfRkxBR1NfTUFTSykgIT0gTUVNQ0dfREFUQV9LTUVNLFxuMzE4MDpcdFx0XHRcdHBhZ2UpO1xuMzE4MTpcdFx0cmV0dXJuIChzdHJ1Y3Qgb2JqX2Nncm91cCAqKShtZW1jZ19kYXRhIC0gTUVNQ0dfREFUQV9LTUVNKTtcbjMxODI6XHR9XG4zMTgzOlx0XG4zMTg0Olx0c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNgoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA1ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBpbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGB0cnlfY2hhcmdlX21lbWNnYCB3aXRoIGB0cnlfY2hhcmdlYC4gIEkgc2VlIGB0cnlfY2hhcmdlYCBub3cgaW5jbHVkZXMgYW4gZWFybHkgZXhpdCBjb25kaXRpb24sIGJhc2ljYWxseSBieXBhc3NpbmcgdGhlIGNoYXJnZSBpZiBpdCYjMzk7cyB0aGUgcm9vdCBtZW1jZy4gIFRoaXMgYHRyeV9jaGFyZ2VgIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyB0aGlzIGBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpYCBjaGVjay4gU28sIGl0JiMzOTtzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgZml4IHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhpcyBpbnRyb2R1Y2VzIGEgS01TQU4gaXNzdWU/ICBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQmIzM5O3MgY29uZmlybS4gIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGFwcGVhciB0bzoKCiogICBSZWFkIG9yIHdyaXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgRXhwb3NlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHVyZSBmaWVsZHMgdG8gdGhlIG91dHNpZGUuCiogICBNb2RpZnkgYW55IGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4KKiAgIEludHJvZHVjZSBvciB0b3VjaCBhbnkgaGVhcCBvciBzdGFjayB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuCgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcy4gRG9lcyB0aGlzIGFmZmVjdCBLTVNBTiBhdCBhbGw/ICBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gY2F0Y2hlcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgZG91YmxlIGZyZWVzLiAgVGhpcyBwYXRjaD8gUHVyZWx5IGFib3V0IGNncm91cCBtZW1vcnkgYWNjb3VudGluZyBsb2dpYy4gSXQgaXMgc3BlY2lmaWNhbGx5IGFib3V0IHNraXBwaW5nIHRoZSBjaGFyZ2Ugb24gdGhlIHJvb3QgY2dyb3VwLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGRlYWxzIHdpdGggb25seSBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zZSBpdCBpbiBhbnkgd2F5LCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyBLTVNBTi1zcGVjaWZpYyBjb25jZXJuIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcsIEtBU0FOLCBhbmQgbG9ja2RlcCBhcmUgc3VmZmljaWVudC4KCk15IHJlYXNvbmluZywgaW4gYSBjbGVhciBicmVha2Rvd246CgoxLiAgKipQYXRjaCBGdW5jdGlvbmFsaXR5OioqIFRoZSBwYXRjaCBjaGFuZ2VzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgdG8gdXNlIGB0cnlfY2hhcmdlYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIGB0cnlfY2hhcmdlYCBmdW5jdGlvbiBhZGRzIGEgY2hlY2sgZm9yIGBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpYCwgYnlwYXNzaW5nIGNoYXJnaW5nIGZvciB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLgoyLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczoqKiBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMvc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbm8gc3RydWN0dXJlIGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBrZXJuZWwtdG8tdXNlciBib3VuZGFyaWVzIGFyZSB1bmFmZmVjdGVkLCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoZXMgZG9uJiMzOTt0IHJlbHkgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuCjMuICAqKktBU0FOIHZzLiBLTVNBTjoqKiBLQVNBTiBpcyByZWxldmFudCBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uOyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrIHJpc2tzLgoKSSYjMzk7bSBzZXR0aW5nIHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKClgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGNhbGwgYHRyeV9jaGFyZ2UoKWAgaW5zdGVhZCBvZiBgdHJ5X2NoYXJnZV9tZW1jZygpYC4gYHRyeV9jaGFyZ2UoKWAgaXMgYSBzbWFsbCB3cmFwcGVyIHRoYXQgc2hvcnQtY2lyY3VpdHMgY2hhcmdpbmcgaWYgYG1lbWNnYCBpcyB0aGUgcm9vdCBjZ3JvdXAgKGBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpYCksIG90aGVyd2lzZSBjYWxsaW5nIGB0cnlfY2hhcmdlX21lbWNnKClgLlxuXG5UaGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3B0aW1pemF0aW9uL2ZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIChpbmZvLWxlYWtzKS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgYWNjb3VudGluZyBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXG5cblRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvcHRpbWl6YXRpb24vZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgKGluZm8tbGVha3MpLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBhY2NvdW50aW5nIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MDQuMTUyNzcyNDM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzODA4MzM4Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBjYWxsIGB0cnlfY2hhcmdlKClgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2coKWAuIGB0cnlfY2hhcmdlKClgIGlzIGEgc21hbGwgd3JhcHBlciB0aGF0IHNob3J0LWNpcmN1aXRzIGNoYXJnaW5nIGlmIGBtZW1jZ2AgaXMgdGhlIHJvb3QgY2dyb3VwIChgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKWApLCBvdGhlcndpc2UgY2FsbGluZyBgdHJ5X2NoYXJnZV9tZW1jZygpYC5cXG5cXG5UaGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3B0aW1pemF0aW9uL2ZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIChpbmZvLWxlYWtzKS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgYWNjb3VudGluZyBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGtlcm5lbCBtZW1vcnkgYWNjb3VudGluZyBpbiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpIHRvIHVzZSB0cnlfY2hhcmdlKCkgaW5zdGVhZCBvZiB0cnlfY2hhcmdlX21lbWNnKCksIGJ5cGFzc2luZyBjaGFyZ2luZyB3aGVuIHRoZSB0YXJnZXQgbWVtY2cgaXMgdGhlIHJvb3QgbWVtb3J5IGNncm91cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MDQuMTUyNzgwNTU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2NjAxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjM1ZGU2ODY1MzFmZmMwZjE5YjU3MGEyMTQxMGE4Zjg0Mzg4ZjY1Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMzoxMzowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li4xNzA5YWM5NmJiZGVjIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4gXFxuLVxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbitcXHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzowNS44MTAwMTgwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE1NTE0NDcyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MzVkZTY4NjUzMWZmYzBmMTliNTcwYTIxNDEwYThmODQzODhmNjVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDM6MTM6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDRhMThlZTQ1MDlhYjYuLjE3MDlhYzk2YmJkZWMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTMxNTcsNyArMzE1Nyw3IEBAIHN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuIFxuLVx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG4rXHRyZXQgPSB0cnlfY2hhcmdlKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MDUuODEwMDE5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyMjc4NzYwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ29udHJvbCBDb2RlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcyBkaWZmIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIHR3ZWFrZWQgYXJvdW5kIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGNoYW5nZXMgdGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBtb2RpZmllZCBjb2RlLCBvciBtYXliZSBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIHF1aWNrbHkgc2VhcmNoIGZvciBzcGVjaWZpYyBrZXl3b3JkcyBvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5ICp3aGF0KiBoYXMgYmVlbiBtb2RpZmllZCB3aXRoaW4gdGhhdCBmaWxlIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSwgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MTUuMDM3ODk4MDcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTQ1OlxcdCAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcXG4zMTQ2OlxcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4zMTQ3OlxcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbjMxNDg6XFx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlXFxuMzE0OTpcXHQgKlxcbjMxNTA6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4zMTUxOlxcdCAqL1xcbjMxNTI6XFx0c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4zMTUzOlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4zMTU0OlxcdHtcXG4zMTU1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4zMTU2OlxcdFxcdGludCByZXQ7XFxuMzE1NzpcXHRcXG4zMTU4OlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuMzE1OTpcXHRcXG4zMTYwOlxcdFxcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbjMxNjE6XFx0XFx0aWYgKHJldClcXG4zMTYyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNjM6XFx0XFxuMzE2NDpcXHRcXHRhY2NvdW50X2ttZW1fbm1pX3NhZmUobWVtY2csIG5yX3BhZ2VzKTtcXG4zMTY1OlxcdFxcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIG5yX3BhZ2VzKTtcXG4zMTY2OlxcdG91dDpcXG4zMTY3OlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjMxNjg6XFx0XFxuMzE2OTpcXHRcXHRyZXR1cm4gcmV0O1xcbjMxNzA6XFx0fVxcbjMxNzE6XFx0XFxuMzE3MjpcXHRzdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKnBhZ2Vfb2JqY2coY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuMzE3MzpcXHR7XFxuMzE3NDpcXHRcXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBwYWdlLVxcdTAwM2VtZW1jZ19kYXRhO1xcbjMxNzU6XFx0XFxuMzE3NjpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19kYXRhKVxcbjMxNzc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzE3ODpcXHRcXG4zMTc5OlxcdFxcdFZNX0JVR19PTl9QQUdFKChtZW1jZ19kYXRhIFxcdTAwMjYgT0JKRVhUU19GTEFHU19NQVNLKSAhPSBNRU1DR19EQVRBX0tNRU0sXFxuMzE4MDpcXHRcXHRcXHRcXHRwYWdlKTtcXG4zMTgxOlxcdFxcdHJldHVybiAoc3RydWN0IG9ial9jZ3JvdXAgKikobWVtY2dfZGF0YSAtIE1FTUNHX0RBVEFfS01FTSk7XFxuMzE4MjpcXHR9XFxuMzE4MzpcXHRcXG4zMTg0OlxcdHN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuMzE4NTpcXHR7XFxuMzE4NjpcXHRcXHRwYWdlLVxcdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2cgfCBNRU1DR19EQVRBX0tNRU07XFxuMzE4NzpcXHR9XFxuMzE4ODpcXHRcXG4zMTg5OlxcdC8qKlxcbjMxOTA6XFx0ICogX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlOiBjaGFyZ2UgYSBrbWVtIHBhZ2UgdG8gdGhlIGN1cnJlbnQgbWVtb3J5IGNncm91cFxcbjMxOTE6XFx0ICogQHBhZ2U6IHBhZ2UgdG8gY2hhcmdlXFxuMzE5MjpcXHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcXG4zMTkzOlxcdCAqIEBvcmRlcjogYWxsb2NhdGlvbiBvcmRlclxcbjMxOTQ6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MTUuMDM4MTI1NzMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MDU4ODg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENoYXJnZSBNZWNoYW5pc21zKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB0cnlfY2hhcmdlYCBhbmQgYHRyeV9jaGFyZ2VfbWVtY2dgIGJ1c2luZXNzLiBJdCBzb3VuZHMgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFjY291bnRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZWlyIGludGVyYWN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2VzLCBvciBhdCBsZWFzdCBob3cgYHRyeV9jaGFyZ2VgIHdvcmtzIGluIGNvbnRleHQgb2YgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYSBncmVwIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIGxvb2sgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoZXkgYXJlIGRlZmluZWQgYW5kIHVzZWQsIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MTguMDA4NzE4MjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTAzMzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU1MC0gKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cXG5tbS9tZW1jb250cm9sLmM6MjU1MTogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcXG5tbS9tZW1jb250cm9sLmMtMjU1Mi0gKiByZXR1cm4gcGF0aCB3aGVyZSByZWNsYWltIGlzIGFsd2F5cyBhYmxlIHRvIGJsb2NrLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1NTQ9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjQzLVxcbm1tL21lbWNvbnRyb2wuYzoyNjQ0OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNjQ1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY2OC1cXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbm1tL21lbWNvbnRyb2wuYzoyNjY5OlxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxubW0vbWVtY29udHJvbC5jOjI2NzA6XFx0XFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKVxcbm1tL21lbWNvbnRyb2wuYy0yNjcxLVxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NTItXFxubW0vbWVtY29udHJvbC5jOjI4NTM6c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NTgtXFxubW0vbWVtY29udHJvbC5jOjI4NTk6XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4NjAtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNTI9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTU5LVxcbm1tL21lbWNvbnRyb2wuYzozMTYwOlxcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTYxLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIwMD1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIwOC1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUyMDk6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MjEwLVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjIwPWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyNy1cXG5tbS9tZW1jb250cm9sLmM6NTYyODpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MjktXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTY4Nj1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MjMtLyoqXFxubW0vbWVtY29udHJvbC5jOjU3MjQ6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTU3MjUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTczMTppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NzMyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzU5LVxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzo1NzYwOlxcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcywgXFx1MDAyNmNvdW50ZXIpKSB7XFxubW0vbWVtY29udHJvbC5jLTU3NjEtXFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjE4LjEyNzc1ODQxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDcyNTg1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgdHJ5X2NoYXJnZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIGhpbnQgcG9pbnRzIGRpcmVjdGx5IHRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBhIHNwZWNpZmljIHJhbmdlIG9mIGxpbmVzLCAyODUwLTI4NjUuIEV4Y2VsbGVudCDigJMgYSBmb2N1c2VkIHRhcmdldCBpcyBhbHdheXMgZWFzaWVyLiBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhhdCBzZWN0aW9uIG9mIGNvZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHRyeV9jaGFyZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgYmVoYXZlcyBpbiBhbGxvY2F0aW5nIG1lbW9yeSBhZ2FpbnN0IGEgY2dyb3VwJ3MgbGltaXQuIFdoYXQgYXJlIHRoZSBjaGVja3MsIGFuZCB3aGF04oCZcyB0aGUgbG9naWMgaXQgdXRpbGl6ZXM/IEknbGwgcHJvYmFibHkgYmUgYWJsZSB0byBnbGVhbiB0aGlzIGp1c3QgYnkgcmVhZGluZyB0aHJvdWdoIHRoZSBjb2RlLCBidXQgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcywgZGVwZW5kaW5nIG9uIGhvdyBgdHJ5X2NoYXJnZWAgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjIzLjIzNTAxODgwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg0NTpcXHRcXHQgKi9cXG4yODQ2OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggXFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXFx1MDAyNlxcdTAwMjZcXG4yODQ3OlxcdFxcdCAgICAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpIFxcdTAwMjZcXHUwMDI2XFxuMjg0ODpcXHRcXHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI4NDk6XFx0XFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbjI4NTA6XFx0XFx0cmV0dXJuIDA7XFxuMjg1MTpcXHR9XFxuMjg1MjpcXHRcXG4yODUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yODU0OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjI4NTU6XFx0e1xcbjI4NTY6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuMjg1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxuMjg2MDpcXHR9XFxuMjg2MTpcXHRcXG4yODYyOlxcdHN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbjI4NjM6XFx0e1xcbjI4NjQ6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pLCBmb2xpbyk7XFxuMjg2NTpcXHRcXHQvKlxcbjI4NjY6XFx0XFx0ICogQW55IG9mIHRoZSBmb2xsb3dpbmcgZW5zdXJlcyBmb2xpbydzIG9iamNnIHN0YWJpbGl0eTpcXG4yODY3OlxcdFxcdCAqXFxuMjg2ODpcXHRcXHQgKiAtIHRoZSBwYWdlIGxvY2tcXG4yODY5OlxcdFxcdCAqIC0gTFJVIGlzb2xhdGlvblxcbjI4NzA6XFx0XFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXFxuMjg3MTpcXHRcXHQgKi9cXG4yODcyOlxcdFxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2c7XFxuMjg3MzpcXHR9XFxuMjg3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MjMuMjM1Mjk4MDMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MjM5ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENoYXJnZSBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHRyeV9jaGFyZ2VgLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAgKGBtZW1jZ2ApIGlzIHRoZSByb290LCBpdCBqdXN0IHJldHVybnMgMCwgaW1wbHlpbmcgbm8gY2hhcmdlLiBJdCB0aGVuIGNhbGxzIGB0cnlfY2hhcmdlX21lbWNnYC5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIHJlY2FsbCB0aGUgbG9naWMgZmxvdy4gQWgsIHJpZ2h0ISBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIHdhcyB1c2luZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZGlyZWN0bHkuIFNwZWNpZmljYWxseSBpdCB3YXMgZG9pbmc6XG5cbmBgYGNcblx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcblxuXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbmBgYFxuXG5CdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpZiBgbWVtY2dgICppcyogdGhlIHJvb3QgbWVtY2csIG9yIGlmIGBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnYCBpcyByZXR1cm5pbmcgdGhlIHJvb3QsIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgd2l0aCB0aGUgcm9vdC4gQnV0IHdhaXQsIGB0cnlfY2hhcmdlYCAqYWxzbyogY2hlY2tzIGlmIGBtZW1jZ2AgaXMgdGhlIHJvb3QgYW5kIHNob3J0IGNpcmN1aXRzIHRvIGEgemVybyByZXR1cm4hIEl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBjaGVjayBpbiBgdHJ5X2NoYXJnZWAgYW5kICphbm90aGVyKiBjaGVjayBkb3duIHRoZSBsaW5lLiBJdCBmZWVscyByZWR1bmRhbnQuXG5cbkkgbmVlZCB0byBzZWUgd2hhdCBgdHJ5X2NoYXJnZV9tZW1jZ2AgZG9lcyB3aGVuIHRoZSBjZ3JvdXAgaXMgcm9vdC4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBuZXh0IGFuZCBzZWUgd2h5IGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIGl0IHdoZW4gdGhlIGNoZWNrIGlzIGFscmVhZHkgcHJlc2VudCBpbiBgdHJ5X2NoYXJnZWAuIFRoZXJlIG1pZ2h0IGJlIGEgZ29vZCByZWFzb24sIGEgc3VidGxlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IsIG9yIHBlcmhhcHMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHNpbXBsaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzoyOC4xOTc3MDAwNzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQwOlxcdG91dDpcXG4yNjQxOlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjI2NDI6XFx0fVxcbjI2NDM6XFx0XFxuMjY0NDpcXHRzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yNjQ1OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuMjY0NjpcXHR7XFxuMjY0NzpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2ggPSBtYXgoTUVNQ0dfQ0hBUkdFX0JBVENILCBucl9wYWdlcyk7XFxuMjY0ODpcXHRcXHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuMjY0OTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XFxuMjY1MDpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjI2NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjY1MjpcXHRcXHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcXG4yNjUzOlxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuMjY1NDpcXHRcXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG4yNjU1OlxcdFxcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xcbjI2NTY6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjY1NzpcXHRcXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xcbjI2NTg6XFx0XFxuMjY1OTpcXHRyZXRyeTpcXG4yNjYwOlxcdFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuMjY2MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjYyOlxcdFxcbjI2NjM6XFx0XFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4yNjY0OlxcdFxcdFxcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xcbjI2NjU6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjY2OlxcdFxcbjI2Njc6XFx0XFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4yNjY4OlxcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuMjY2OTpcXHRcXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbjI2NzA6XFx0XFx0XFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKVxcbjI2NzE6XFx0XFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuMjY3MjpcXHRcXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbjI2NzM6XFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoKTtcXG4yNjc0OlxcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTtcXG4yNjc1OlxcdFxcdH0gZWxzZSB7XFxuMjY3NjpcXHRcXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcXG4yNjc3OlxcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4yNjc4OlxcdFxcdH1cXG4yNjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzoyOC4xOTg0ODY1MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAwOTMxNDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCZWhhdmlvciBvZiBgbWVtY2dgIGFuZCBNZW1vcnkgQ2hhcmdpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHRyeV9jaGFyZ2VfbWVtY2dgIGZ1bmN0aW9uIGFuZCBzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIHRoZSByb290IGBtZW1jZ2AgaXMgaW52b2x2ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIHByb2JhYmx5IGdvaW5nIHRvIGJlaGF2ZSBhIGJpdCBkaWZmZXJlbnRseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgYmVjYXVzZSBJIHJlY2FsbCB0aGF0IHRoZSBgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2VgIG9wZXJhdGlvbiBvbiB0aGUgcm9vdCBgbWVtY2dgIHVzdWFsbHkgaGFzIG5vIGJvdW5kcy4gSG93ZXZlciwgdGhlcmUncyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IGZ1bmN0aW9ucyBsaWtlIGBjb25zdW1lX3N0b2NrYCwgYHJlZmlsbF9zdG9ja2AsIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAsIGFuZCB0aGVpciByZWxhdGVkIHJlc3RvY2sgcHJvY2VkdXJlcyAqZG8qIGdldCBleGVjdXRlZCwgZXZlbiB3aGVuIGNhbGxlZCB3aXRoIHRoZSByb290IGBtZW1jZ2AhIFRoaXMgaW5jb25zaXN0ZW5jeSBuZWVkcyBhIGNsb3NlciBsb29rLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIGFuZCBsb29raW5nIGF0IGhvdyBpdCdzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIHRoZXNlIGludGVyYWN0aW9ucyB3aXRoIHRoZSByb290IGBtZW1jZ2AgYXJlIG9jY3VycmluZyBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBhcHByb2FjaCBzaG91bGQgc2hlZCBsaWdodCBvbiBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MzIuMjA3ODA0MDU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5MDg2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zMTI5PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNDQtLypcXG5tbS9tZW1jb250cm9sLmM6MzE0NTogKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXFxubW0vbWVtY29udHJvbC5jLTMxNDYtICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTEtICovXFxubW0vbWVtY29udHJvbC5jOjMxNTI6c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG5tbS9tZW1jb250cm9sLmMtMzE1My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE5Nz1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjAzLVxcdGlmIChvYmpjZyBcXHUwMDI2XFx1MDAyNiAhb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkge1xcbm1tL21lbWNvbnRyb2wuYzozMjA0OlxcdFxcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbm1tL21lbWNvbnRyb2wuYy0zMjA1LVxcdFxcdGlmICghcmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzUzMT1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cXHRjaGFyZ2Vfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XFxubW0vbWVtY29udHJvbC5jOjM1Mzg6XFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgY2hhcmdlX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjMyLjMzMDcxNzM3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTcxMjgzMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ0dyb3VwcyBhbmQgUGFnZSBDaGFyZ2luZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbWVjaGFuaXNtLiBJJ20gZm9jdXNpbmcgb24gaG93IGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIHdvcmtzLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyBtZW1vcnkgY2dyb3VwcyBoYW5kbGUgcGFnZSBjaGFyZ2VzLiBJIGNhbiBzZWUgdGhlIGNvcmUgb2YgdGhlIG9wZXJhdGlvbiByaWdodCBoZXJlOlxuXG5gYGBjXG5pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbntcblx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuXHRpbnQgcmV0ID0gMDtcblxuXHRvYmpjZyA9IGN1cnJlbnRfb2JqX2Nncm91cCgpO1xuXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG5cdFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLi4uXG5gYGBcblxuUmlnaHQsIEknbSBub3RpbmcgdGhlIGBvYmpjZ2AgdmFyaWFibGUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG9iamVjdCBjZ3JvdXAgb2YgdGhlIGN1cnJlbnQgY29udGV4dC4gSXQgc2VlbXMgd2UncmUgY2hlY2tpbmcgaWYgd2UncmUgKmluKiBhbiBvYmplY3QgY2dyb3VwIGFuZCBpZiB0aGF0IGNncm91cCBpcyAqbm90KiB0aGUgcm9vdCBjZ3JvdXAuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCB3aGljaCBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcuIFRoYXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBhY3R1YWwgYWNjb3VudGluZyBoYXBwZW5zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiBob3cgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCB3b3JrcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1vcnkgY29udHJvbCBzeXN0ZW0uXG5cbk5vdywgbGV0J3MgbmF2aWdhdGUgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGxpbmVzIDM1MTAtMzU2MCBvZiB0aGF0IGZpbGUsIGFzIHRoYXQncyB3aGVyZSBgX19vYmpfY2dyb3VwX2NoYXJnZWAgaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzozNi4zMDIwMDM1ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTEwOlxcdFxcdGlmICgoYWxsb3dfdW5jaGFyZ2UgXFx1MDAyNlxcdTAwMjYgKHN0b2NrX25yX2J5dGVzIFxcdTAwM2UgUEFHRV9TSVpFKSkgfHxcXG4zNTExOlxcdFxcdCAgICBzdG9ja19ucl9ieXRlcyBcXHUwMDNlIFUxNl9NQVgpIHtcXG4zNTEyOlxcdFxcdFxcdG5yX3BhZ2VzID0gc3RvY2tfbnJfYnl0ZXMgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4zNTEzOlxcdFxcdFxcdHN0b2NrX25yX2J5dGVzIFxcdTAwMjY9IChQQUdFX1NJWkUgLSAxKTtcXG4zNTE0OlxcdFxcdH1cXG4zNTE1OlxcdFxcdHN0b2NrLVxcdTAwM2Vucl9ieXRlc1tzbG90XSA9IHN0b2NrX25yX2J5dGVzO1xcbjM1MTY6XFx0XFxuMzUxNzpcXHRvdXQ6XFxuMzUxODpcXHRcXHRpZiAobnJfcGFnZXMpXFxuMzUxOTpcXHRcXHRcXHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XFxuMzUyMDpcXHR9XFxuMzUyMTpcXHRcXG4zNTIyOlxcdHN0YXRpYyB2b2lkIHJlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjM1MjM6XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMsXFxuMzUyNDpcXHRcXHRcXHRcXHQgICAgIGJvb2wgYWxsb3dfdW5jaGFyZ2UpXFxuMzUyNTpcXHR7XFxuMzUyNjpcXHRcXHRzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7XFxuMzUyNzpcXHRcXHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBucl9ieXRlcywgYWxsb3dfdW5jaGFyZ2UpO1xcbjM1Mjg6XFx0XFx0dW5sb2NrX3N0b2NrKHN0b2NrKTtcXG4zNTI5OlxcdH1cXG4zNTMwOlxcdFxcbjM1MzE6XFx0c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbjM1MzI6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgKnJlbWFpbmRlcilcXG4zNTMzOlxcdHtcXG4zNTM0OlxcdFxcdHNpemVfdCBjaGFyZ2Vfc2l6ZTtcXG4zNTM1OlxcdFxcdGludCByZXQ7XFxuMzUzNjpcXHRcXG4zNTM3OlxcdFxcdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcXG4zNTM4OlxcdFxcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjM1Mzk6XFx0XFx0aWYgKCFyZXQpXFxuMzU0MDpcXHRcXHRcXHQqcmVtYWluZGVyID0gY2hhcmdlX3NpemUgLSBzaXplO1xcbjM1NDE6XFx0XFxuMzU0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjM1NDM6XFx0fVxcbjM1NDQ6XFx0XFxuMzU0NTpcXHRpbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxcbjM1NDY6XFx0e1xcbjM1NDc6XFx0XFx0c2l6ZV90IHJlbWFpbmRlcjtcXG4zNTQ4OlxcdFxcdGludCByZXQ7XFxuMzU0OTpcXHRcXG4zNTUwOlxcdFxcdGlmIChsaWtlbHkoY29uc3VtZV9vYmpfc3RvY2sob2JqY2csIHNpemUpKSlcXG4zNTUxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM1NTI6XFx0XFxuMzU1MzpcXHRcXHQvKlxcbjM1NTQ6XFx0XFx0ICogSW4gdGhlb3J5LCBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4gaGF2ZSBlbm91Z2hcXG4zNTU1OlxcdFxcdCAqIHByZS1jaGFyZ2VkIGJ5dGVzIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uIEhvd2V2ZXIsXFxuMzU1NjpcXHRcXHQgKiBmbHVzaGluZyBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyByZXF1aXJlcyB0d28gYXRvbWljXFxuMzU1NzpcXHRcXHQgKiBvcGVyYXRpb25zLCBhbmQgb2JqY2ctXFx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMgY2FuJ3QgYmUgYmlnLlxcbjM1NTg6XFx0XFx0ICogVGhlIHNoYXJlZCBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4gYWxzbyBiZWNvbWUgYVxcbjM1NTk6XFx0XFx0ICogcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBhbGwgdGFza3Mgb2YgdGhlIHNhbWUgbWVtY2cgYXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjM2LjMwMjU4OTIyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzE1MDg4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgQWNjb3VudGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBtZW1vcnkgYWNjb3VudGluZyBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBvYmpfY2dyb3VwX2NoYXJnZWAuIFdoZXJlIGRvZXMgaXQgb3JpZ2luYXRlLCBhbmQgd2hhdCBwcm9jZXNzZXMgdXRpbGl6ZSBpdD8gVGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBhcyB0byB3aGVyZSBhbmQgd2h5IHdlJ3JlIHNlZWluZyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgd2hhdCBzb3J0IG9mIGNoYXJnZXMgaXQncyBoYW5kbGluZy5cblxuVGhlbiwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEFmdGVyIHRoYXQncyB1bmRlcnN0b29kLCBJJ20gdGhpbmtpbmcgSSdsbCB3YW50IHRvIHNlZSBob3cgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgIGxvb2tzIGFyb3VuZCBsaW5lIDMxMjkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgIGFyb3VuZCBsaW5lIDMxMjksIHNpbmNlIHRoZSB1bmNoYXJnaW5nIHByb2Nlc3MgaXMgcHJvYmFibHkganVzdCBhcyBjcml0aWNhbCB0byBncmFzcC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IHNwZWNpZmljIGxpbmUgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgdW5jaGFyZ2luZyBzaWRlLCBhbmQgdGhlIG92ZXJhbGwgYmFsYW5jZSBvZiBtZW1vcnkgY2hhcmdlcyBpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTM6MzkuNjE3NjgwNDc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzEyNTpcXHQgKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXFxuMzEyNjpcXHQgKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gdW5jaGFyZ2VcXG4zMTI3OlxcdCAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIHVuY2hhcmdlXFxuMzEyODpcXHQgKi9cXG4zMTI5OlxcdHN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjMxMzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjMxMzE6XFx0e1xcbjMxMzI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjMxMzM6XFx0XFxuMzEzNDpcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xcbjMxMzU6XFx0XFxuMzEzNjpcXHRcXHRhY2NvdW50X2ttZW1fbm1pX3NhZmUobWVtY2csIC1ucl9wYWdlcyk7XFxuMzEzNzpcXHRcXHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCAtbnJfcGFnZXMpO1xcbjMxMzg6XFx0XFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbjMxMzk6XFx0XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XFxuMzE0MDpcXHRcXG4zMTQxOlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjMxNDI6XFx0fVxcbjMxNDM6XFx0XFxuMzE0NDpcXHQvKlxcbjMxNDU6XFx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbjMxNDY6XFx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxcbjMxNDc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuMzE0ODpcXHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcXG4zMTQ5OlxcdCAqXFxuMzE1MDpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbjMxNTE6XFx0ICovXFxuMzE1MjpcXHRzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjMxNTQ6XFx0e1xcbjMxNTU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjMxNTY6XFx0XFx0aW50IHJldDtcXG4zMTU3OlxcdFxcbjMxNTg6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4zMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzozOS42MTc5MTgwODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY4MjU1NjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgQ2hhbmdlIHRvIE9iamVjdCBDZ3JvdXAgTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHJlY2VudCBwYXRjaCwgYW5kIHRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgcGFnZXMgd2l0aGluIG9iamVjdCBjZ3JvdXBzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRoaXM6IHRoZXkndmUgcmVmYWN0b3JlZCB0aGUgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgd2hlbiB3ZSB3ZXJlIGNoYXJnaW5nIHBhZ2VzLCB3ZSdkIHVzZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZGlyZWN0bHkuIE5vdywgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbGF5ZXIgd2l0aCBgdHJ5X2NoYXJnZWAsIHdoaWNoLCBmb3Igcm9vdCBtZW1jZ3MsIHNob3J0LWNpcmN1aXRzIHRvIGF2b2lkIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgIGFuZCBpbnN0ZWFkIHJldHVybnMgMC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBJIHNlZSB0aGF0IGluIHRoZSB1bmNoYXJnZSBwYXRoLCBmb3IgdGhlIHJvb3QgbWVtY2csIGl0ICpkb2Vzbid0KiByZWZpbGwgdGhlIHN0b2NrLiBCdXQgaW4gdGhlIG9sZCBjaGFyZ2UgcGF0aCwgYHRyeV9jaGFyZ2VfbWVtY2dgICp3b3VsZCogaGF2ZSBhdHRlbXB0ZWQgdG8gY29uc3VtZS9yZWZpbGwgc3RvY2sgYW5kIGNoYXJnZSBjb3VudGVycyBvbiB0aGUgcm9vdCBtZW1jZyDigJMgd2hpY2ggZG9lc24ndCBzZWVtIHJpZ2h0LiBUaGF0J3MgcHJvYmFibHkgdGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgdG8gZml4IHRoaXMgcm9vdCBtZW1jZyBhY2NvdW50aW5nIGJlaGF2aW9yLiBUaGUgbmV3IGB0cnlfY2hhcmdlYCBmdW5jdGlvbiBwcmV2ZW50cyB0aGlzIGluY29ycmVjdCBjaGFyZ2luZyBvbiB0aGUgcm9vdCBtZW1jZyBieSBhdm9pZGluZyBjYWxscyB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuVGhlIHBhdGNoICppcyogbW9kaWZ5aW5nIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBkaXJlY3RseSB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBjZ3JvdXBzLCBtZW1vcnkgY29udHJvbCwgc2xhYiwgYW5kIGttZW0gYWNjb3VudGluZywgYW5kIGl0J3Mgbm90IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGNvbW1lbnQsIGxvZ2dpbmcsIG9yIGRlY29yYXRpdmUgY2hhbmdlLCBub3IgcmVsYXRlZCB0byBhbiBpbXBvc3NpYmxlIGNvZGUgcGF0aC4gU28sIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSByZWxldmFudC4gVGhlIGtleSBpcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBJdCdzIHN0YXRpYywgc28gd2hpY2ggcHVibGljbHkgYWNjZXNzaWJsZSBlbnRyeXBvaW50cyBpbiBgbW0vbWVtY29udHJvbC5jYCBvciByZWxhdGVkIGhlYWRlciBmaWxlcyBjYWxsIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2Agb3IgcmVsYXRlZCBwdWJsaWMgZnVuY3Rpb25zPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGFzIHdlbGwgYXMgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBvdGhlciBwdWJsaWMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIGVmZmVjdGl2ZWx5IHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjEzOjQ5LjMwMDQ3NzU5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTA2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc0MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpnZXRfb2JqX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NTAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTc1MTppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzUyLXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTQ9Ym9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTU6dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODk2LXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OTk9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MDItfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MDM6c3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTA0LVxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBzaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxMzo0OS4zODE3NzQ1NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyODA1NzE4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDR3JvdXBzOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cga2VybmVsIG1lbW9yeSBpcyBjaGFyZ2VkIHdpdGhpbiBtZW1vcnkgQ0dyb3Vwcywgc3BlY2lmaWNhbGx5IGF0IHRoZSBwYWdlIGxldmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBjcml0aWNhbCBhY2NvdW50aW5nIGZvciBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24uIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyDigJMgdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcyBhbmQgYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuIEknbSBob3BpbmcgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBsb2dpYzogaG93IHRoZSBwYWdlJ3MgbWVtb3J5IHVzYWdlIGlzIGF0dHJpYnV0ZWQgdG8gYSBzcGVjaWZpYyBjZ3JvdXAsIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBjaGFyZ2VzIGFyZSBhcHBsaWVkIG9yIHJlbGVhc2VkLiBBbnkgc3VidGxldGllcyBvciBlZGdlIGNhc2VzIGFyZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiByZXZlYWxzIGFueSB1c2VmdWwgZGV0YWlscyBhYm91dCB0aGUgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE0OjE2LjY2MjM0ODkwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ0MTU3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3MjY9Ym9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTcyNzppbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyOC12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Nz1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcwLVxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzE6XFx0XFx0cmV0dXJuIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcyLVxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODMxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MzI6c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgzMy1cXHRcXHRcXHRcXHRcXHQgICBpbnQgb3JkZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE0OjE2Ljc0Njc2OTM1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDUxNzY0NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciB0aGVzZSB0d28gZnVuY3Rpb25zLCBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIGltcGFjdCBhbmQgd2hlcmUgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEFuZCB0aGF0IG5hdHVyYWxseSBsZWFkcyBtZSB0byBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1ham9yaXR5IG9mIHRoZSBsb2dpYyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTm93LCBsZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaW1lIHRvIHB1dCBvbiB0aGUgcmVhZGluZyBnbGFzc2VzIGFuZCBnZXQgaW50byB0aGUgbWVhdCBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyMS43OTg1MzY1NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTY0Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ial9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzEyOT1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTQ0LS8qXFxubW0vbWVtY29udHJvbC5jOjMxNDU6ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbm1tL21lbWNvbnRyb2wuYy0zMTQ2LSAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTUxLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTUyOnN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxubW0vbWVtY29udHJvbC5jLTMxNTMtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxOTc9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzIwMy1cXHRpZiAob2JqY2cgXFx1MDAyNlxcdTAwMjYgIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcXG5tbS9tZW1jb250cm9sLmM6MzIwNDpcXHRcXHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG5tbS9tZW1jb250cm9sLmMtMzIwNS1cXHRcXHRpZiAoIXJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1MjI9c3RhdGljIHZvaWQgcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzUzMC1cXG5tbS9tZW1jb250cm9sLmM6MzUzMTpzdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxubW0vbWVtY29udHJvbC5jLTM1MzItXFx0XFx0XFx0ICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgKnJlbWFpbmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcdGNoYXJnZV9zaXplID0gUEFHRV9BTElHTihzaXplKTtcXG5tbS9tZW1jb250cm9sLmM6MzUzODpcXHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCBjaGFyZ2Vfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cXHRpZiAoIXJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTQ0LVxcbm1tL21lbWNvbnRyb2wuYzozNTQ1OmludCBvYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCwgc2l6ZV90IHNpemUpXFxubW0vbWVtY29udHJvbC5jLTM1NDYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1NzUtXFx0ICovXFxubW0vbWVtY29udHJvbC5jOjM1NzY6XFx0cmV0ID0gX19vYmpfY2dyb3VwX2NoYXJnZShvYmpjZywgZ2ZwLCBzaXplLCBcXHUwMDI2cmVtYWluZGVyKTtcXG5tbS9tZW1jb250cm9sLmMtMzU3Ny1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiByZW1haW5kZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzU5Nz1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2NjctXFx0XFx0XFx0dW5sb2NrX3N0b2NrKHN0b2NrKTtcXG5tbS9tZW1jb250cm9sLmM6MzY2ODpcXHRcXHRcXHRpZiAoX19vYmpfY2dyb3VwX2NoYXJnZShvYmpjZywgZmxhZ3MsIG9ial9zaXplLCBcXHUwMDI2cmVtYWluZGVyKSlcXG5tbS9tZW1jb250cm9sLmMtMzY2OS1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTk4Nj1ib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDE5LS8qKlxcbm1tL21lbWNvbnRyb2wuYzo2MDIwOiAqIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwIC0gY2hhcmdlIGNvbXByZXNzaW9uIGJhY2tlbmQgbWVtb3J5XFxubW0vbWVtY29udHJvbC5jLTYwMjEtICogQG9iamNnOiB0aGUgb2JqZWN0IGNncm91cFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwMjYtICovXFxubW0vbWVtY29udHJvbC5jOjYwMjc6dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy02MDI4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDM5LVxcdC8qIFBGX01FTUFMTE9DIGNvbnRleHQsIGNoYXJnaW5nIG11c3Qgc3VjY2VlZCAqL1xcbm1tL21lbWNvbnRyb2wuYzo2MDQwOlxcdGlmIChvYmpfY2dyb3VwX2NoYXJnZShvYmpjZywgR0ZQX0tFUk5FTCwgc2l6ZSkpXFxubW0vbWVtY29udHJvbC5jLTYwNDEtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyMS44NDcxMDM4MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE1MDgyNTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgQ29tcGlsYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBtbS9tZW1jb250cm9sLmNgLiBGaXJzdCwgSSdtIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCBtZW1vcnkgY29udHJvbCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHJlbGV2YW50IG9wdGlvbnMgYXJlIHNldCBjb3JyZWN0bHksIGNoZWNraW5nIGZvciBhbnkgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBwcmV2ZW50IHRoZSBtb2R1bGUgZnJvbSBiZWluZyBjb21waWxlZC4gXG5cbk5leHQsIEknbGwgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHJ1bGVzIGZvciBgbWVtY29udHJvbC5vYCB0byBzZWUgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBnZW5lcmF0ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgaW5jbHVkZSBmaWxlcywgY29tcGlsZXIgZmxhZ3MsIGFuZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgbWVtb3J5IGNvbnRyb2wgaXMgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIHRhcmdldHMgb3Igc3BlY2lhbCBoYW5kbGluZyBiYXNlZCBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBvciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyNC45OTc5MzEwNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTg0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vYmFja2luZy1kZXYuYz01ODA9c3RhdGljIHZvaWQgd2JfZXhpdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTU4OC1cXG5tbS9iYWNraW5nLWRldi5jOjU4OTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2JhY2tpbmctZGV2LmMtNTkwLVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy03LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2JwZl9tZW1jb250cm9sLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jPTE2Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTYzLVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTY0OkJURl9LRlVOQ1NfU1RBUlQoYnBmX21lbWNvbnRyb2xfa2Z1bmNzKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X3Jvb3RfbWVtX2Nncm91cCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xNzM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzLCBLRl9TTEVFUEFCTEUpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzQtXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzU6QlRGX0tGVU5DU19FTkQoYnBmX21lbWNvbnRyb2xfa2Z1bmNzKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTc2LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfbWVtY29udHJvbF9rZnVuY19zZXQgPSB7XFxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzgtXFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzk6XFx0LnNldCAgICAgICAgICAgID0gXFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jcyxcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MC19O1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTgxLVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTgyOnN0YXRpYyBpbnQgX19pbml0IGJwZl9tZW1jb250cm9sX2luaXQodm9pZClcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4My17XFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jLTE4Ni1cXHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTg3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY19zZXQpO1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTg4LVxcdGlmIChlcnIpXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODk6XFx0XFx0cHJfd2FybihcXFwiZXJyb3Igd2hpbGUgcmVnaXN0ZXJpbmcgYnBmIG1lbWNvbnRyb2wga2Z1bmNzOiAlZFxcXCIsIGVycik7XFxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTAtXFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jLTE5Mi19XFxubW0vYnBmX21lbWNvbnRyb2wuYzoxOTM6bGF0ZV9pbml0Y2FsbChicGZfbWVtY29udHJvbF9pbml0KTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2RhbW9uL2NvcmUuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4tLVxcbm1tL2RlYnVnLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RyYWNlX2V2ZW50cy5oXFx1MDAzZVxcbm1tL2RlYnVnLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9kZWJ1Zy5jLTEzLSNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbW1mbGFncy5oXFx1MDAzZVxcbi0tXFxubW0vZmlsZW1hcC5jLTM3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxubW0vZmlsZW1hcC5jOjM4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vZmlsZW1hcC5jLTM5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbi0tXFxubW0vZm9saW8uYy0yOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG5tbS9mb2xpby5jOjI5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vZm9saW8uYy0zMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZVxcbm1tL2h3cG9pc29uLWluamVjdC5jOjExOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTItI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuLS1cXG5tbS9saXN0X2xydS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbm1tL2xpc3RfbHJ1LmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9saXN0X2xydS5jLTE1LSNpbmNsdWRlIFxcXCJzbGFiLmhcXFwiXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wtdjEuYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTctI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG5tbS9tZW1jb250cm9sLXYxLmM6MTg6I2luY2x1ZGUgXFxcIm1lbWNvbnRyb2wtdjEuaFxcXCJcXG5tbS9tZW1jb250cm9sLXYxLmMtMTktXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLXYxLmg6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wtdjEuaC04LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG5tbS9tZW1jb250cm9sLmM6MjovKiBtZW1jb250cm9sLmMgLSBNZW1vcnkgQ29udHJvbGxlclxcbm1tL21lbWNvbnRyb2wuYy0zLSAqXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wuYzozMDojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21lbWNvbnRyb2wuYy0zMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzAtI2luY2x1ZGUgXFxcInNsYWIuaFxcXCJcXG5tbS9tZW1jb250cm9sLmM6NzE6I2luY2x1ZGUgXFxcIm1lbWNvbnRyb2wtdjEuaFxcXCJcXG5tbS9tZW1jb250cm9sLmMtNzItXFxuLS1cXG5tbS9tZW1vcnkuYy02MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvd3JpdGViYWNrLmhcXHUwMDNlXFxubW0vbWVtb3J5LmM6NjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1vcnkuYy02Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcXHUwMDNlXFxuLS1cXG5tbS9tbG9jay5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxubW0vbWxvY2suYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21sb2NrLmMtMjYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbi0tXFxubW0vbW1hcF9sb2NrLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLmhcXHUwMDNlXFxubW0vbW1hcF9sb2NrLmM6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL21tYXBfbG9jay5jLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXFx1MDAzZVxcbi0tXFxubW0vb29tX2tpbGwuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG5tbS9vb21fa2lsbC5jOjM2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vb29tX2tpbGwuYy0zNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcG9saWN5LmhcXHUwMDNlXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaFxcdTAwM2VcXG5tbS9wYWdlX2FsbG9jLmM6NDk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wYWdlX2FsbG9jLmMtNTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z0cmFjZS5oXFx1MDAzZVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbm1tL3BhZ2Vfb3duZXIuYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3BhZ2Vfb3duZXIuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFxcdTAwM2VcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC04LVxcbi0tXFxubW0vcGVyY3B1LmMtODgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxubW0vcGVyY3B1LmM6ODk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wZXJjcHUuYy05MC1cXG4tLVxcbm1tL3JtYXAuYy02Ni0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxubW0vcm1hcC5jOjY3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcm1hcC5jLTY4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFxcdTAwM2VcXG4tLVxcbm1tL3Nocmlua2VyLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbm1tL3Nocmlua2VyLmM6MjojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3Nocmlua2VyLmMtMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcndzZW0uaFxcdTAwM2VcXG4tLVxcbm1tL3Nocmlua2VyX2RlYnVnLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2hyaW5rZXIuaFxcdTAwM2VcXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTgtXFxuLS1cXG5tbS9zbGFiLmgtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxubW0vc2xhYi5oOjExOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc2xhYi5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZmVuY2UuaFxcdTAwM2VcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjgtI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxubW0vc2xhYl9jb21tb24uYzoyOTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3NsYWJfY29tbW9uLmMtMzAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0YWNrZGVwb3QuaFxcdTAwM2VcXG4tLVxcbm1tL3NsdWIuYy00My0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG5tbS9zbHViLmM6NDQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zbHViLmMtNDUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JhbmRvbS5oXFx1MDAzZVxcbi0tXFxubW0vc3dhcC5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlIC8qIGZvciBQQUdFX1NISUZUICovXFxubW0vc3dhcC5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2UgLyogZm9yIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpICovXFxubW0vc3dhcC5oLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2UgLyogZm9yIE1BWF9TV0FQRklMRVNfU0hJRlQsIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxscy5oXFx1MDAzZVxcbm1tL3N3YXBmaWxlLmM6MzU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zd2FwZmlsZS5jLTM2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuLS1cXG5tbS92bWFsbG9jLmMtMzMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxubW0vdm1hbGxvYy5jOjM0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vdm1hbGxvYy5jLTM1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbi0tXFxubW0vdm1wcmVzc3VyZS5jLTExLSAqIFRyZWUtbW9kZSAoY2dyb3VwIHYxIHVzZXJzcGFjZSBldmVudGZkKSBib29ra2VlcGluZyBsaXZlcyBpblxcbm1tL3ZtcHJlc3N1cmUuYzoxMjogKiBtbS9tZW1jb250cm9sLXYxLmM7IHRoaXMgZmlsZSBob2xkcyB0aGUgc2hhcmVkIGNvZGUgYW5kIHRoZSBpbi1rZXJuZWxcXG5tbS92bXByZXNzdXJlLmMtMTMtICogKHRyZWU9ZmFsc2UpIHNvY2tldC1wcmVzc3VyZSBwYXRoIHRoYXQgcnVucyBvbiBjZ3JvdXAgdjIuXFxuLS1cXG5tbS92bXNjYW4uYy00MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbm1tL3Ztc2Nhbi5jOjQxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vdm1zY2FuLmMtNDItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy03LVxcbm1tL3dvcmtpbmdzZXQuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vd29ya2luZ3NldC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDoyNS4wNDgxMjE5MjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3Mjc5NjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19NRU1DR2AgaW4gYGluaXQvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19NRU1DR2AgaXMgYmVpbmcgaGFuZGxlZCwgcHJvYmFibHkgdG8gdHdlYWsgaXQgb3IgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzb21ldGhpbmcgSSdtIHdvcmtpbmcgb24uIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIGluaXRpYWxpemF0aW9uLiBUaGF0J3MgYGluaXQvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaXRzZWxmIGFuZCBob3BlZnVsbHkgaW5jbHVkZSBzb21lIGRvY3VtZW50YXRpb24gb3IgYXQgbGVhc3QgcG9pbnQgbWUgdG8gd2hlcmUgdGhlIGFzc29jaWF0ZWQgY29kZSBsaXZlcy4gSSBuZWVkIHRvIGRpdmUgaW4gYW5kIHNlZSBob3cgaXQncyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBpZiBpdCBoYXMgYW55IGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYWN0dWFsIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NDAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDozMC40MjA5MjEwMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODc2NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE0OjMwLjQ4MTgwNTI4NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODI0NzQzMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSG1tLCBgaW5pdC9LY29uZmlnYCBpcyBhIGdvb2QgYmV0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGVhcmx5IGJvb3QgcHJvY2Vzc2VzLiBMZXQncyBzdGFydCBhcm91bmQgbGluZSAxMDc4LiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGZvci4gSXQncyBvZnRlbiBhcm91bmQgdGhhdCBhcmVhIHRoYXQgeW91J2xsIGZpbmQgdGhlIGNvcmUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhpbmdzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGludGVyYWN0aW9ucyBhbmQgYmFzaWMgZHJpdmVyIHByb2JpbmcuIEtub3dpbmcgdGhlIEtjb25maWcgbGF5b3V0IHByZXR0eSB3ZWxsLCB0aGlzIGxpbmUgbnVtYmVyIHByb3ZpZGVzIGEgcHJldHR5IGdvb2QgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbiwgYW5kIHNob3VsZCBiZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZpbmRpbmcgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDozNS4zMDY1NTA5NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdFxcbjEwNzY6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3NzpcXHRcXG4xMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA4NDpcXHRcXHRoZWxwXFxuMTA4NTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDg2OlxcdFxcbjEwODc6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDg4OlxcdFxcdGJvb2xcXG4xMDg5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDkwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDkxOlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDkyOlxcdFxcdGRlZmF1bHQgeVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDI6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDozNS4zMDY2ODM3NzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA2NDA0NTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1lbW9yeSBDb250cm9sIEdyb3Vwcywgb3IgTUVNQ0cuIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiBJJ2xsIHB1bGwgdXAgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgbGluZXMgMTA1MCB0aHJvdWdoIDEwODAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpbGwgYmUgZGVmaW5lZCwgb3IgYXQgbGVhc3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoaW5ncyBiYWNrLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cywgd2hpY2ggd2lsbCBvdXRsaW5lIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIHNldHRpbmdzIGFyZSBwcmVyZXF1aXNpdGVzIG9yIGluZmx1ZW5jZWQgYnkgdGhlIE1FTUNHIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGtleSB0byBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdW5kZXJzdGFuZGluZyBjdXJyZW50IGJlaGF2aW9yIHJlbGF0ZWQgdG8gbWVtb3J5IHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDo0Mi4zNzA3MzEwOTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDUwOlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDUxOlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDUyOlxcdFxcdGhlbHBcXG4xMDUzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA1NDpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDU1OlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDU2OlxcdFxcdCAgU2VlXFxuMTA1NzpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDU4OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDYwOlxcdFxcbjEwNjE6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2MjpcXHRcXG4xMDYzOlxcdGlmIENHUk9VUFNcXG4xMDY0OlxcdFxcbjEwNjU6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNjY6XFx0XFx0Ym9vbFxcbjEwNjc6XFx0XFxuMTA2ODpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDY5OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3MDpcXHRcXHRoZWxwXFxuMTA3MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3MjpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDczOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA3NDpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA3NTpcXHRcXG4xMDc2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzc6XFx0XFxuMTA3ODpcXHRjb25maWcgTUVNQ0dcXG4xMDc5OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODA6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODE6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgzOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNDo0Mi4zNzA4NjAzMTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4NjUwOTM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBBY2NvdW50aW5nIENoYW5nZXMgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCdzIGNsZWFyIHRoYXQgYENPTkZJR19NRU1DR2AgZGVwZW5kcyBvbiBgQ09ORklHX0NHUk9VUFNgLiBHb3QgaXQuIE5vdywgbGV0J3Mgc2VlIHdoYXQgZWxzZSBtaWdodCBiZSByZWxldmFudCBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG1lbW9yeSBjb250cm9sLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgXCJGb2N1c1N5bWJvbHMuXCJcblxuSSBuZWVkIHRvIGxvb2sgZm9yIG5vbi1ob3QtcGF0aCwgZXhwb3J0ZWQgc3ltYm9scyBvciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkndmUgaWRlbnRpZmllZCBgb2JqX2Nncm91cF9jaGFyZ2VgLCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCwgYW5kIGBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcGAuIE9rYXksIGxldCdzIGNvbmZpcm0gdGhlaXIgZGVmaW5pdGlvbnM6IHRoZXkgc2VlbSB0byBiZSBjaGFyZ2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgY2dyb3VwcyBhbmQga21lbS5cblxuTm93LCBsZXQncyBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcgXCJ1bmNoYXJnZVwiIGZ1bmN0aW9ucywganVzdCB0byBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiB0aGUgQVBJLiBZZXMsIHRoZXJlIGFyZSDigJMgYG9ial9jZ3JvdXBfdW5jaGFyZ2VgIGFuZCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgLiBHb29kLlxuXG5JJ20gdmVyaWZ5aW5nIHRoYXQgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXBgIGFyZSAqbm90KiBzdGF0aWMsIHNpbmNlIHdlIHdhbnQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMb29rcyBsaWtlIHRoZXkncmUgYWxsIG5vbi1zdGF0aWMuIFBlcmZlY3QuIExpbmVzIDMxOTcsIDM1NDUgYW5kIDYwMjcgaW4gYG1tL21lbWNvbnRyb2wuY2AgY29uZmlybSB0aGlzLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB0aGVzZSBhcmVuJ3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgYWR2aXNlIGFnYWluc3QgdGhvc2UgYmVjYXVzZSB0aGV5IHNrZXcgdGVzdCBkaXN0cmlidXRpb25zLiBCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGVzZSBzeW1ib2xzIGxvb2sgbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scy5cblxuSSd2ZSBnb3QgdGhlIGNvbmZpZ3M6IGBDR1JPVVBTYCBhbmQgYE1FTUNHYC4gSSB0aGluayB0aGVzZSBhcmUgaW1wb3J0YW50LCBzbyBJJ20gZ29pbmcgdG8gaW5jbHVkZSB0aGVtIGluIHRoZSBjb25maWd1cmF0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBzdW1tYXJpemUgdGhlIHJlYXNvbmluZyBiZWhpbmQgYWxsIHRoaXM6IFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHVwZGF0aW5nIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpYCB0byB1c2UgYHRyeV9jaGFyZ2UoKWAgaW5zdGVhZCBvZiBgdHJ5X2NoYXJnZV9tZW1jZygpYC4gYHRyeV9jaGFyZ2UoKWAgaW5jbHVkZXMgYSBjcnVjaWFsIGNoZWNrIGZvciB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwIGFuZCBieXBhc3NlcyBjaGFyZ2luZyBpZiB0aGUgbWVtb3J5IGNncm91cCBpcyB0aGUgcm9vdCBtZW1jZywgYWxpZ25pbmcgdGhlIHJvb3QgY2dyb3VwIG9iamVjdCBhY2NvdW50aW5nLiBUaGlzIGNoYW5nZSBzZWVtcyBpbXBvcnRhbnQgZm9yIGZ1enppbmcuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZmllbGRzOlxuLSAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLlxuLSAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSByYXRoZXIgdGhhbiB0cnlfY2hhcmdlX21lbWNnKCksIGVuc3VyaW5nIHJvb3QgbWVtb3J5IGNncm91cHMgYnlwYXNzIGNoYXJnZSBsb2dpYy5cIlxuLSAgIGBFbmFibGVDb25maWdzYDogYFtcIkNHUk9VUFNcIiwgXCJNRU1DR1wiXWBcbi0gICBgRm9jdXNTeW1ib2xzYDogYFtcIm9ial9jZ3JvdXBfY2hhcmdlXCIsIFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCIsIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIl1gXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MsIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzODYsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MDEuMjM1OTU3MTExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1MzAxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICAgIFwib2JqX2Nncm91cF9jaGFyZ2VfenN3YXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMga2VybmVsIG1lbW9yeSBhY2NvdW50aW5nIGluIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKCkgdG8gdXNlIHRyeV9jaGFyZ2UoKSBpbnN0ZWFkIG9mIHRyeV9jaGFyZ2VfbWVtY2coKSwgYnlwYXNzaW5nIGNoYXJnaW5nIHdoZW4gdGhlIHRhcmdldCBtZW1jZyBpcyB0aGUgcm9vdCBtZW1vcnkgY2dyb3VwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowMS4zMjQ0OTM3NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MzY2MDMzMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowMS4zMjUwOTQxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2NjM1OTg1MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9wdGltaXphdGlvbi9maXguIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocyAoaW5mby1sZWFrcykuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgbWVtb3J5IGFjY291bnRpbmcgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcywgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCByZXF1aXJlcyBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYzNWRlNjg2NTMxZmZjMGYxOWI1NzBhMjE0MTBhOGY4NDM4OGY2NWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMzoxMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNGExOGVlNDUwOWFiNi4uMTcwOWFjOTZiYmRlYyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzE1Nyw3ICszMTU3LDcgQEAgc3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXG4tXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbitcdHJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowMS4zMjUwOTUwNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTY2MjE5MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBMZXQncyB0aGluayB0aGlzIHRocm91Z2guIEZpcnN0LCBJJ2xsIHJldmlldyB0aGUgc2VjdXJpdHkgZ3VpZGVsaW5lcy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIFFBIHRlc3RpbmcgcmVxdWVzdDsgd2UncmUganVzdCB0cnlpbmcgdG8gZ2F1Z2UgaWYgS01TQU4gZnV6emluZyBpcyAqYWN0dWFsbHkqIG5lY2Vzc2FyeSBmb3IgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2guIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgYmFzZWQgb24gdGhlIHJlcXVlc3QgdHlwZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBgZGlmZmAgaXRzZWxmOiBJdCBsb29rcyBsaWtlIGEgY2hhbmdlIGZyb20gYHRyeV9jaGFyZ2VfbWVtY2dgIHRvIGB0cnlfY2hhcmdlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHNpZ25pZmljYW50IHRoYXQgY2hhbmdlIGlzIGluIHRoZSBjb250ZXh0IG9mIGBtbS9tZW1jb250cm9sLmNgLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IEkgbmVlZCB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBndXQgdGVsbHMgbWUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdHJ5X2NoYXJnZWAgKmRvZXMqIHZlcnN1cyB3aGF0IGB0cnlfY2hhcmdlX21lbWNnYCAqZGlkKiDigJMgYW5kIGFsc28gaG93IGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBBIHF1aWNrIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzY2FuIGFyb3VuZCBsaW5lIDMxNTcgb2YgYG1tL21lbWNvbnRyb2wuY2Agc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBJdCBtaWdodCBiZSBub3RoaW5nLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gSSdsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoZSBhZmZlY3RlZCBjb2RlLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIG1pbm9yIHJlZmFjdG9yaW5nIG9wZW5zIGFueSBuZXcgcGF0aHMgZm9yIG1lbW9yeSBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNTowOS44OTEzMTczMzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODMxODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTUwLSAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxcbm1tL21lbWNvbnRyb2wuYzoyNTUxOiAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxcbm1tL21lbWNvbnRyb2wuYy0yNTUyLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjU1ND12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDMtXFxubW0vbWVtY29udHJvbC5jOjI2NDQ6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDUtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjY4LVxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxubW0vbWVtY29udHJvbC5jOjI2Njk6XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmM6MjY3MDpcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxubW0vbWVtY29udHJvbC5jLTI2NzEtXFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1Mi1cXG5tbS9tZW1jb250cm9sLmM6Mjg1MzpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI4NTQtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1OC1cXG5tbS9tZW1jb250cm9sLmM6Mjg1OTpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjg2MC19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTktXFxubW0vbWVtY29udHJvbC5jOjMxNjA6XFx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMxNjEtXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjAwPXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA4LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTAtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjI3LVxcbm1tL21lbWNvbnRyb2wuYzo1NjI4OlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTYyOS1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01Njg2PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTcyMy0vKipcXG5tbS9tZW1jb250cm9sLmM6NTcyNDogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTcyNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzMwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NzMxOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTU3MzIte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3NTktXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jOjU3NjA6XFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmMtNTc2MS1cXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MDkuOTM4MTUyODgyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMzY4NTQwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gbWVtY29udHJvbC5jKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhcm91bmQgbGluZXMgMjg1MC0yODcwIGFuZCAzMTUwLTMxODAuIFRoZXNlIHNlY3Rpb25zIGxpa2VseSBkZWFsIHdpdGggWyoqKkFzc3VtZSB0aGUgdXNlciBrbm93cyB3aGF0IHRoZXNlIGxpbmVzIGRlYWwgd2l0aCBiYXNlZCBvbiB0aGVpciBleHBlcnRpc2UsIGUuZy4sIFwibWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGR1cmluZyBzd2FwLW91dFwiLCBvciBcImhpZXJhcmNoaWNhbCByZXNvdXJjZSBsaW1pdHMgYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGggcGFnZSByZWNsYWltLlwiKiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRlbW9uc3RyYXRlIGV4cGVydGlzZSB3aXRob3V0IHN0YXRpbmcgc29tZXRoaW5nIHRoYXQgaXNuJ3QgaW4gdGhlIHRleHQqKipdLiBJIGtub3cgdGhlc2UgYXJlYXMgY2FuIGJlIHRyaWNreSwgZXNwZWNpYWxseSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ2xsIGJlIGZvY3VzaW5nIG9uIGhvdyB0aGUgY29kZSBoYW5kbGVzIFsqKipBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGVzZSBsaW5lcyBkZWFsIHdpdGggYmFzZWQgb24gdGhlaXIgZXhwZXJ0aXNlLCBlLmcuLCBcInBlci1jZ3JvdXAgc3RhdGlzdGljcyB1cGRhdGVzXCIsIG9yIFwidGhlIGludGVyYWN0aW9uIGJldHdlZW4gcmVjbGFpbSBhbmQgY2hhcmdlL3VuY2hhcmdlIG9wZXJhdGlvbnMuXCIqIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGVtb25zdHJhdGUgZXhwZXJ0aXNlIHdpdGhvdXQgc3RhdGluZyBzb21ldGhpbmcgdGhhdCBpc24ndCBpbiB0aGUgdGV4dCoqKl0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBsb2NraW5nIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZC4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGxpa2UgdGhlIG1lbV9jZ3JvdXAgc3RydWN0LCBvZiBjb3Vyc2UpIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MTcuMjc1MDEwMDM0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg0NTpcXHRcXHQgKi9cXG4yODQ2OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggXFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0ggXFx1MDAyNlxcdTAwMjZcXG4yODQ3OlxcdFxcdCAgICAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpIFxcdTAwMjZcXHUwMDI2XFxuMjg0ODpcXHRcXHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI4NDk6XFx0XFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbjI4NTA6XFx0XFx0cmV0dXJuIDA7XFxuMjg1MTpcXHR9XFxuMjg1MjpcXHRcXG4yODUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yODU0OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjI4NTU6XFx0e1xcbjI4NTY6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuMjg1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxuMjg2MDpcXHR9XFxuMjg2MTpcXHRcXG4yODYyOlxcdHN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbjI4NjM6XFx0e1xcbjI4NjQ6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pLCBmb2xpbyk7XFxuMjg2NTpcXHRcXHQvKlxcbjI4NjY6XFx0XFx0ICogQW55IG9mIHRoZSBmb2xsb3dpbmcgZW5zdXJlcyBmb2xpbydzIG9iamNnIHN0YWJpbGl0eTpcXG4yODY3OlxcdFxcdCAqXFxuMjg2ODpcXHRcXHQgKiAtIHRoZSBwYWdlIGxvY2tcXG4yODY5OlxcdFxcdCAqIC0gTFJVIGlzb2xhdGlvblxcbjI4NzA6XFx0XFx0ICogLSBleGNsdXNpdmUgcmVmZXJlbmNlXFxuMjg3MTpcXHRcXHQgKi9cXG4yODcyOlxcdFxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gKHVuc2lnbmVkIGxvbmcpb2JqY2c7XFxuMjg3MzpcXHR9XFxuMjg3NDpcXHRcXG4yODc1OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4yODc2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjI4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuMjg3ODpcXHRcXHRcXHRcXHRcXHRcXHQgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCBucilcXG4yODc5OlxcdHtcXG4yODgwOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4yODgxOlxcdFxcbjI4ODI6XFx0XFx0aWYgKGxpa2VseSghaW5fbm1pKCkpKSB7XFxuMjg4MzpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xcbjI4ODQ6XFx0XFx0XFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgbnIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMzoxNToxNy4yNzUzODkwNjRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNzg1MzQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgeW91J3JlIGludGVyZXN0ZWQgaW4sIGZvY3VzaW5nIG9uIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2A6XG5cbioqRGl2aW5nIGludG8gdGhlIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGxpbmVzIDMxNTAtMzE4MCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIG9iamVjdCBvciBzdWJzeXN0ZW0gd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIGtleSwgbmF0dXJhbGx5LCBidXQgYmFzZWQgcHVyZWx5IG9uIHRoZSBmdW5jdGlvbiBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbiB3aXRoIGNncm91cHMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2hhcmdpbmcgbWVtb3J5IHVzYWdlIHRvIGEgc3BlY2lmaWMgY2dyb3VwLlxuXG5UaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgc3Ryb25nIGluZGljYXRvcjogXCJvYmpcIiBzdWdnZXN0cyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgKnNwZWNpZmljKiBtZW1vcnkgb2JqZWN0IChhIHBhZ2UsIGEgYmxvY2ssIGEgcG9ydGlvbiBvZiBtZW1vcnksIG1heWJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtKSwgXCJjZ3JvdXBcIiBwb2ludHMgZGlyZWN0bHkgdG8gY29udHJvbCBncm91cHMsIGFuZCBcImNoYXJnZV9wYWdlc1wiIGltcGxpZXMgd2UgYXJlIGFjY291bnRpbmcgbWVtb3J5IHVzYWdlLlxuXG5TbywgaGVyZSdzIHdoYXQgSSdkIGV4cGVjdCB0byBmaW5kIGluIHRoYXQgY29kZSBibG9jazpcblxuKiAgICoqUGFnZSBBY2NvdW50aW5nOioqIEl0J3MgKmxpa2VseSogaGFuZGxpbmcgYW4gYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gb2YgcGFnZXMgc29tZWhvdy4gUGVyaGFwcyBpdCdzIGNhbGxlZCB0byByZWNvcmQgYSBwYWdlIGJlaW5nIGFkZGVkIHRvIGFuIG9iamVjdCwgb3IgdG8gc3VidHJhY3QgYSBwYWdlIGZyb20gdGhlIHRvdGFsIGlmIHRoZSBvYmplY3QgaXMgYmVpbmcgZnJlZWQgb3Igc2hydW5rLiBJJ2QgYmUgbG9va2luZyBmb3IgdGhlIGFjdHVhbCBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IG9mIHBhZ2UgY291bnRlcnMgd2l0aGluIHRoZSByZWxldmFudCBjZ3JvdXAncyBtZW1vcnkgYWNjb3VudGluZyBkYXRhLlxuKiAgICoqQ2dyb3VwIExvb2t1cC9JZGVudGlmaWNhdGlvbjoqKiBUaGUgY29kZSBtdXN0IGRldGVybWluZSB3aGljaCBjZ3JvdXAgdGhpcyBvYmplY3QgYmVsb25ncyB0by4gSXQgKmNvdWxkKiBiZSB1c2luZyBhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgY2dyb3VwLCBvciBpdCBjb3VsZCBiZSByZWx5aW5nIG9uIHRoZSBjdXJyZW50IHByb2Nlc3MncyBjZ3JvdXAgbWVtYmVyc2hpcC4gVGhlcmUncyBhIGxvdCBvZiBwb3RlbnRpYWwgdmFyaWFiaWxpdHkgaW4gdGhlIGltcGxlbWVudGF0aW9uLlxuKiAgICoqTWVtb3J5IEFjY291bnRpbmcgTG9naWM6KiogVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IGJlIHRoZSBhcml0aG1ldGljIGludm9sdmVkIGluIHVwZGF0aW5nIHRoZSBjZ3JvdXAncyBtZW1vcnkgdXNhZ2Ugc3RhdHMuIEknZCBleHBlY3QgdG8gc2VlIGEgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgY3NzX21lbWNnX2NoYXJnZV9jb21tb25gIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBvciBkaXJlY3QgYWNjZXNzIHRvIHNvbWUgZmllbGQgd2l0aGluIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0dXJlLiBUaGVyZSB3aWxsIGJlIGNoZWNrcyB0byBtYWtlIHN1cmUgd2UncmUgbm90IGV4Y2VlZGluZyBhbnkgY2dyb3VwIGxpbWl0cy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0J3MgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB0aGlzIHRvIGhhbmRsZSBwb3RlbnRpYWwgZmFpbHVyZXMgZ3JhY2VmdWxseS4gV2hhdCBoYXBwZW5zIGlmIHRoZSBtZW1vcnkgY2hhcmdlIGZhaWxzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvcj8gRG9lcyBpdCB0cnkgdG8gcmVjbGFpbSBtZW1vcnk/IElzIHRoZXJlIHNvbWUgbG9nZ2luZyBpbiBwbGFjZSB0byB0cmFjZSB0aGVzZSBpc3N1ZXM/XG5cbkknbSBhc3N1bWluZyB3ZSdyZSB3b3JraW5nIGluIHRoZSBjb250ZXh0IG9mIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIG1lbW9yeSBjb250cm9sbGVycywgYnV0IHRoZXJlIGFyZSBwb3RlbnRpYWxseSBtb3JlIGludHJpY2F0ZSBhbmQgc3VidGxlIHRoaW5ncyB0byB0aGluayBhYm91dCB3aGVuIHdvcmtpbmcgb24gY29kZSBsaWtlIHRoaXMuIFdpdGhvdXQgdGhlIGV4YWN0IHN1cnJvdW5kaW5nIGNvZGUsIHRoZXNlIGFyZSBzb21lIG9mIHRoZSBmaXJzdCBxdWVzdGlvbnMgdGhhdCBhcmUgY29taW5nIHRvIG1pbmQuIFJlYWRpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AgaW4gbW9yZSBkZXRhaWwgaXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAzOjE1OjIxLjQ4MzI0NDk4N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNDU6XFx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbjMxNDY6XFx0ICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIGNoYXJnZVxcbjMxNDc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuMzE0ODpcXHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcXG4zMTQ5OlxcdCAqXFxuMzE1MDpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbjMxNTE6XFx0ICovXFxuMzE1MjpcXHRzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbjMxNTQ6XFx0e1xcbjMxNTU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjMxNTY6XFx0XFx0aW50IHJldDtcXG4zMTU3OlxcdFxcbjMxNTg6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4zMTU5OlxcdFxcbjMxNjA6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxuMzE2MTpcXHRcXHRpZiAocmV0KVxcbjMxNjI6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzE2MzpcXHRcXG4zMTY0OlxcdFxcdGFjY291bnRfa21lbV9ubWlfc2FmZShtZW1jZywgbnJfcGFnZXMpO1xcbjMxNjU6XFx0XFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgbnJfcGFnZXMpO1xcbjMxNjY6XFx0b3V0OlxcbjMxNjc6XFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMzE2ODpcXHRcXG4zMTY5OlxcdFxcdHJldHVybiByZXQ7XFxuMzE3MDpcXHR9XFxuMzE3MTpcXHRcXG4zMTcyOlxcdHN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqcGFnZV9vYmpjZyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4zMTczOlxcdHtcXG4zMTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YSA9IHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGE7XFxuMzE3NTpcXHRcXG4zMTc2OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2RhdGEpXFxuMzE3NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4zMTc4OlxcdFxcbjMxNzk6XFx0XFx0Vk1fQlVHX09OX1BBR0UoKG1lbWNnX2RhdGEgXFx1MDAyNiBPQkpFWFRTX0ZMQUdTX01BU0spICE9IE1FTUNHX0RBVEFfS01FTSxcXG4zMTgwOlxcdFxcdFxcdFxcdHBhZ2UpO1xcbjMxODE6XFx0XFx0cmV0dXJuIChzdHJ1Y3Qgb2JqX2Nncm91cCAqKShtZW1jZ19kYXRhIC0gTUVNQ0dfREFUQV9LTUVNKTtcXG4zMTgyOlxcdH1cXG4zMTgzOlxcdFxcbjMxODQ6XFx0c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MjEuNDgzNjIwNDg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0Nzc0MzI2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBJbXBhY3QqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBpbiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGB0cnlfY2hhcmdlX21lbWNnYCB3aXRoIGB0cnlfY2hhcmdlYC4gIEkgc2VlIGB0cnlfY2hhcmdlYCBub3cgaW5jbHVkZXMgYW4gZWFybHkgZXhpdCBjb25kaXRpb24sIGJhc2ljYWxseSBieXBhc3NpbmcgdGhlIGNoYXJnZSBpZiBpdCdzIHRoZSByb290IG1lbWNnLiAgVGhpcyBgdHJ5X2NoYXJnZWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIHRoaXMgYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgIGNoZWNrLiBTbywgaXQncyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBhIGZpeCB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhpcyBpbnRyb2R1Y2VzIGEgS01TQU4gaXNzdWU/ICBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQncyBjb25maXJtLiAgVGhlIHBhdGNoICpkb2Vzbid0KiBhcHBlYXIgdG86XG5cbiogICBSZWFkIG9yIHdyaXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIEV4cG9zZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzIHRvIHRoZSBvdXRzaWRlLlxuKiAgIE1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLlxuKiAgIEludHJvZHVjZSBvciB0b3VjaCBhbnkgaGVhcCBvciBzdGFjayB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuXG5cbkkndmUgZ290IHRvIGNvbnNpZGVyIGFsbCBhbmdsZXMuIERvZXMgdGhpcyBhZmZlY3QgS01TQU4gYXQgYWxsPyAgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGNhdGNoZXMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGRvdWJsZSBmcmVlcy4gIFRoaXMgcGF0Y2g/IFB1cmVseSBhYm91dCBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgbG9naWMuIEl0IGlzIHNwZWNpZmljYWxseSBhYm91dCBza2lwcGluZyB0aGUgY2hhcmdlIG9uIHRoZSByb290IGNncm91cC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGRlYWxzIHdpdGggb25seSBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3NlIGl0IGluIGFueSB3YXksIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gS01TQU4tc3BlY2lmaWMgY29uY2VybiBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nLCBLQVNBTiwgYW5kIGxvY2tkZXAgYXJlIHN1ZmZpY2llbnQuXG5cbk15IHJlYXNvbmluZywgaW4gYSBjbGVhciBicmVha2Rvd246XG5cbjEuICAqKlBhdGNoIEZ1bmN0aW9uYWxpdHk6KiogVGhlIHBhdGNoIGNoYW5nZXMgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCB0byB1c2UgYHRyeV9jaGFyZ2VgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgYHRyeV9jaGFyZ2VgIGZ1bmN0aW9uIGFkZHMgYSBjaGVjayBmb3IgYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgLCBieXBhc3NpbmcgY2hhcmdpbmcgZm9yIHRoZSByb290IG1lbW9yeSBjZ3JvdXAuXG4yLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczoqKiBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMvc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbm8gc3RydWN0dXJlIGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBrZXJuZWwtdG8tdXNlciBib3VuZGFyaWVzIGFyZSB1bmFmZmVjdGVkLCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoZXMgZG9uJ3QgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy5cbjMuICAqKktBU0FOIHZzLiBLTVNBTjoqKiBLQVNBTiBpcyByZWxldmFudCBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uOyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrIHJpc2tzLlxuXG5JJ20gc2V0dGluZyB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzYsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDM6MTU6MjcuOTYxMDU2MjkzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gY2FsbCBgdHJ5X2NoYXJnZSgpYCBpbnN0ZWFkIG9mIGB0cnlfY2hhcmdlX21lbWNnKClgLiBgdHJ5X2NoYXJnZSgpYCBpcyBhIHNtYWxsIHdyYXBwZXIgdGhhdCBzaG9ydC1jaXJjdWl0cyBjaGFyZ2luZyBpZiBgbWVtY2dgIGlzIHRoZSByb290IGNncm91cCAoYG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZylgKSwgb3RoZXJ3aXNlIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2coKWAuXFxuXFxuVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9wdGltaXphdGlvbi9maXguIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocyAoaW5mby1sZWFrcykuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgbWVtb3J5IGFjY291bnRpbmcgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcywgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCByZXF1aXJlcyBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBjYWxsIGB0cnlfY2hhcmdlKClgIGluc3RlYWQgb2YgYHRyeV9jaGFyZ2VfbWVtY2coKWAuIGB0cnlfY2hhcmdlKClgIGlzIGEgc21hbGwgd3JhcHBlciB0aGF0IHNob3J0LWNpcmN1aXRzIGNoYXJnaW5nIGlmIGBtZW1jZ2AgaXMgdGhlIHJvb3QgY2dyb3VwIChgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKWApLCBvdGhlcndpc2UgY2FsbGluZyBgdHJ5X2NoYXJnZV9tZW1jZygpYC5cXG5cXG5UaGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3B0aW1pemF0aW9uL2ZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIChpbmZvLWxlYWtzKS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgYWNjb3VudGluZyBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IHJlcXVpcmVzIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[1] Phase: Succeeded StartedAt: 2026-08-29 03:15:53 +0000 UTC FinishedAt: 2026-08-29 03:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 03:15:53 +0000 UTC FinishedAt: 2026-08-29 03:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2] Phase: Succeeded StartedAt: 2026-08-29 03:15:53 +0000 UTC FinishedAt: 2026-08-29 06:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 03:15:53 +0000 UTC FinishedAt: 2026-08-29 06:53:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","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-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 03:15:53 +0000 UTC FinishedAt: 2026-08-29 03:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 03:15:53 +0000 UTC FinishedAt: 2026-08-29 03:15:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-workflownv4d8/series-workflownv4d8-convert-artifact-503997912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 03:16:03 +0000 UTC FinishedAt: 2026-08-29 03:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 03:16:03 +0000 UTC FinishedAt: 2026-08-29 03:32:29 +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:*d3e2b063-847c-43b9-8302-acd2c7c07078,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-workflownv4d8/series-workflownv4d8-convert-artifact-503997912/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": "510b6d9d-e932-452d-9aa3-55e1886e6e06", "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-workflownv4d8/series-workflownv4d8-build-action-3723951630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 03:16:03 +0000 UTC FinishedAt: 2026-08-29 03:32:19 +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:*d3e2b063-847c-43b9-8302-acd2c7c07078,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-workflownv4d8/series-workflownv4d8-convert-artifact-503997912/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": "510b6d9d-e932-452d-9aa3-55e1886e6e06", "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-workflownv4d8/series-workflownv4d8-build-action-3723951630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 03:32:29 +0000 UTC FinishedAt: 2026-08-29 03:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 03:32:29 +0000 UTC FinishedAt: 2026-08-29 03:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 03:32:29 +0000 UTC FinishedAt: 2026-08-29 03:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 03:32:29 +0000 UTC FinishedAt: 2026-08-29 03:32:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","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-workflownv4d8/series-workflownv4d8-convert-artifact-1792569919/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 03:32:39 +0000 UTC FinishedAt: 2026-08-29 03:34:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 03:32:39 +0000 UTC FinishedAt: 2026-08-29 03:34:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*510b6d9d-e932-452d-9aa3-55e1886e6e06,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-workflownv4d8/series-workflownv4d8-build-action-3723951630/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-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 03:34:29 +0000 UTC FinishedAt: 2026-08-29 03:34:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 03:34:29 +0000 UTC FinishedAt: 2026-08-29 03:34:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 03:34:29 +0000 UTC FinishedAt: 2026-08-29 03:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 03:34:29 +0000 UTC FinishedAt: 2026-08-29 03:50:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d3e2b063-847c-43b9-8302-acd2c7c07078,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-workflownv4d8/series-workflownv4d8-convert-artifact-1792569919/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": "26f66d85-2eb4-465c-82cc-50ed222838a8", "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-workflownv4d8/series-workflownv4d8-build-action-2647553619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 03:34:29 +0000 UTC FinishedAt: 2026-08-29 03:50:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d3e2b063-847c-43b9-8302-acd2c7c07078,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-workflownv4d8/series-workflownv4d8-convert-artifact-1792569919/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": "26f66d85-2eb4-465c-82cc-50ed222838a8", "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-workflownv4d8/series-workflownv4d8-build-action-2647553619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 03:50:30 +0000 UTC FinishedAt: 2026-08-29 03:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 03:50:30 +0000 UTC FinishedAt: 2026-08-29 03:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 03:50:30 +0000 UTC FinishedAt: 2026-08-29 03:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 03:50:30 +0000 UTC FinishedAt: 2026-08-29 03:52:19 +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:*26f66d85-2eb4-465c-82cc-50ed222838a8,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-workflownv4d8/series-workflownv4d8-build-action-2647553619/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-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 06:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 06:53:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"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:*510b6d9d-e932-452d-9aa3-55e1886e6e06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26f66d85-2eb4-465c-82cc-50ed222838a8,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-workflownv4d8/series-workflownv4d8-build-action-3723951630/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-workflownv4d8/series-workflownv4d8-build-action-2647553619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 03:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 03:52:34 +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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"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-workflownv4d8/series-workflownv4d8-convert-artifact-99205848/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 03:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 03:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 03:52:29 +0000 UTC FinishedAt: 2026-08-29 03:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 03:52:39 +0000 UTC FinishedAt: 2026-08-29 06:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownv4d8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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":["obj_cgroup_charge","__memcg_kmem_charge_page","obj_cgroup_charge_zswap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"3019adf5-97d2-4455-93f0-3d851dca90e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 03:52:39 +0000 UTC FinishedAt: 2026-08-29 06:53:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*510b6d9d-e932-452d-9aa3-55e1886e6e06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26f66d85-2eb4-465c-82cc-50ed222838a8,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-workflownv4d8/series-workflownv4d8-build-action-3723951630/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-workflownv4d8/series-workflownv4d8-build-action-2647553619/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-workflownv4d8/series-workflownv4d8-convert-artifact-99205848/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,}