Name: series-workflow28v7b Phase: Succeeded StartedAt: 2026-09-11 12:23:05 +0000 UTC FinishedAt: 2026-09-11 16:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[0] Phase: Succeeded StartedAt: 2026-09-11 12:23:05 +0000 UTC FinishedAt: 2026-09-11 12:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 12:23:05 +0000 UTC FinishedAt: 2026-09-11 12:45:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "4a7172c7-6e49-4071-b118-e8b7581418b8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_dump_mcaddr", "rtnl_dump_mcaddr_dev", "rtnl_fill_mcaddr", "rtnl_valid_dump_mcaddr_req" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRubF9kdW1wX21jYWRkciBhbmQgcnRubF9maWxsX21jYWRkci5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuMS4gYHN0cnVjdCBpZmFkZHJtc2dgIHBheWxvYWQ6IEFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHN0cnVjdCBjb250YWlucyA0IGBfX3U4YCBmaWVsZHMgYW5kIDEgYF9fdTMyYCBmaWVsZCB0b3RhbGluZyA4IGJ5dGVzIHdpdGggemVybyBwYWRkaW5nIGJ5dGVzLlxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXHUwMDNlYWRkcmAgb2YgbGVuZ3RoIGBkZXYtXHUwMDNlYWRkcl9sZW5gKS5cbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5ldGxpbmssIGltcGxlbWVudGluZyByZXF1ZXN0IHZhbGlkYXRpb24sIGRldmljZSB0cmF2ZXJzYWwsIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhpcyByZWFjaGFibGUgbmV0bGluayBpbnRlcmZhY2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYWJhMTI4MjA3YjNmOWNjMjE1YzdlOWExMzg1NjE0YTA3MTM2ZWI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDM6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLjFhMTdlNTVkMWNjYTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiAmIzQzOzc3LDggQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgICBuYW1lOiBtY2F1dG9qb2luXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICYjNDM7MTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxuLSAgICAgICAgdHlwZTogYmluYXJ5XG4mIzQzOyAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcHJvdG9cbiAgICAgICAgIHR5cGU6IHU4XG5AQCAtMTY4LDcgJiM0MzsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbiYjNDM7ICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IG11c3Qgc2VsZWN0IHRoZSBhZGRyZXNzXG4mIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb25cbiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCBleHBsaWNpdGx5LCBlLmcuIHdpdGhcbiYjNDM7ICAgICAgICBTSU9DQURETVVMVEkgb3IgXCYjMzQ7YnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcJiMzNDssIHJhdGhlciB0aGFuIGJ5IGFcbiYjNDM7ICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuXG4gICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRyc1xuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXG4gICAgICAgZG86XG5AQCAtMTgxLDEwICYjNDM7MTg5LDEzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXG4gICAgICAgICAgICAgLSBjYWNoZWluZm9cbiYjNDM7ICAgICAgICAgICAgLSBmbGFnc1xuJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXVxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgICAgcmVwbHk6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IDdmYjYzMGI3ZmUzMTEuLjBhMWFkOWViYjQ3YmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5AQCAtNTcsNiAmIzQzOzU3LDcgQEAgZW51bSB7XG4gI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFXHQweDIwMFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlx0MHg0MDBcbiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZXHQweDgwMFxuJiM0MzsjZGVmaW5lIElGQV9GX0dMT0JBTFx0XHQweDEwMDBcbiBcbiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XG4gXHRfX3UzMlx0aWZhX3ByZWZlcmVkO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmQ1MWQ3NzNiOTNjNmQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC00NTY2LDYgJiM0Mzs0NTY2LDE3OCBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbiYjNDM7XHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XG4mIzQzO1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuJiM0MztcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuJiM0MztcbiYjNDM7XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuJiM0MztcdFx0XHRmbGFncyk7XG4mIzQzO1x0aWYgKCFubGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuJiM0MztcdC8qIGlmbS1cdTAwM2VpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi9cbiYjNDM7XHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XG4mIzQzO1x0aWYgKChuZXRuc2lkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIG5sYV9wdXRfczMyKHNrYiwgSUZBX1RBUkdFVF9ORVROU0lELCBuZXRuc2lkKSkgfHxcbiYjNDM7XHQgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVx1MDAzZXJlZmNvdW50KSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhX2ZsYWdzKSkge1xuJiM0MztcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRubG1zZ19lbmQoc2tiLCBubGgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4mIzQzO1x0aW50IGFkZHJfaWR4ID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuJiM0MztcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuJiM0MztcdFx0XHRhZGRyX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuJiM0MztcbiYjNDM7XHQqc19hZGRyX2lkeCA9IGVyciBcdTAwM2MgMCA/IGFkZHJfaWR4IDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xuJiM0MztcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcbiYjNDM7XHRpbnQgbmV0bnNpZDtcbiYjNDM7XHRpbnQgaWZpbmRleDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG5sX21jYWRkcl9kdW1wX3BvbGljeVtJRkFfTUFYICYjNDM7IDFdID0ge1xuJiM0MztcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICYjNDM7IDFdO1xuJiM0MztcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcbiYjNDM7XHRpZiAoIWlmbSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXHUwMDNlaWZhX3Njb3BlKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXG4mIzQzO1x0XHRcdCAgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3ksIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4mIzQzO1xuJiM0MztcdFx0ZmlsdGVyLVx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcbiYjNDM7XHRcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXHUwMDNlbmV0bnNpZCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG5ldCkpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG5ldCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2ZmlsdGVyLVx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbiYjNDM7XHRcdC50Z3RfbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKSxcbiYjNDM7XHRcdC5uZXRuc2lkID0gLTEsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuJiM0MztcdFx0aW50IGFkZHJfaWR4O1xuJiM0MztcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBza2ItXHUwMDNlc2ssIFx1MDAyNmZpbHRlcixcbiYjNDM7XHRcdFx0XHRcdCBjYi1cdTAwM2VleHRhY2spO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChmaWx0ZXIuaWZpbmRleCkge1xuJiM0MztcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4mIzQzO1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuJiM0MztcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTtcbiYjNDM7XHRcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzX2lmaW5kZXggPSBjdHgtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0LyogVGhlIGRldmljZSB0aGUgZHVtcCBzdG9wcGVkIGF0IGlzIGdvbmUsIGRvIG5vdCBza2lwXG4mIzQzO1x0XHQgKiBlbnRyaWVzIG9mIHRoZSBuZXh0IG9uZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VpZmluZGV4ICE9IHNfaWZpbmRleClcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZWFkZHJfaWR4ID0gMDtcbiYjNDM7XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7b3V0OlxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdGlmIChmaWx0ZXIubmV0bnNpZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRwdXRfbmV0X3RyYWNrKGZpbHRlci50Z3RfbmV0LCBcdTAwMjZmaWx0ZXIubnNfdHJhY2tlcik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuIFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG5AQCAtNzI1MSw2ICYjNDM7NzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuJiM0MztcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbiYjNDM7XHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4gXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0xLDE3ICYjNDM7MSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4mIzQzO2ltcG9ydCBlcnJub1xuIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1xceGUwXFx4MDBcXHgwMFxceDAxJiMzOTtcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XFx4ZWZcXHgwMVxceDAxXFx4MDEmIzM5O1xuIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OylcbiYjNDM7RVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7MDEwMDVlMDAwMDAxJiMzOTspXG4mIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTtcbiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKVxuIFxuIFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcbkBAIC0xMDUsNiAmIzQzOzEwOSw3MCBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4mIzQzO2RlZiBkdW1wX21jYWRkcl9sMl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzLCB0aGUgZ2xvYmFsIGZsYWcgYW5kXG4mIzQzOyAgICB0YXJnZXQtbmV0bnNpZC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluIChcJiMzNDtkdW1teTFcJiMzNDssIFwmIzM0O2R1bW15MlwmIzM0Oyk6XG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cFwmIzM0OylcbiYjNDM7ICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFwmIzM0O2R1bW15MVwmIzM0OylcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuJiM0MzsgICAgICAgIGRlZmVyKHJ0bmwuY2xvc2UpXG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdChcbiYjNDM7ICAgICAgICAgICAgICAgIHtcJiMzNDtpZmEtZmFtaWx5XCYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCBcJiMzNDtpZmEtaW5kZXhcJiMzNDs6IGRldl9pZHh9LFxuJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICByYWlzZVxuJiM0MztcbiYjNDM7ICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkXG4mIzQzOyAgICAgICAga3NmdF9lcSh7YWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICBlbnRyaWVzID0ge2FkZHJbJiMzOTttdWx0aWNhc3QmIzM5O106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxuJiM0MztcbiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcbiYjNDM7ICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXG4mIzQzOyAgICAgICAgYWxsX2hvc3RzID0gZW50cmllcy5nZXQoRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QpXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhbGxfaG9zdHMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wmIzM0OylcbiYjNDM7ICAgICAgICBpZiBhbGxfaG9zdHMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7Z2xvYmFsJiMzOTssIGFsbF9ob3N0c1smIzM5O2ZsYWdzJiMzOTtdLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVClcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKHN0YXRpYywgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIHN0YXRpYyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcShzdGF0aWNbJiMzOTttYy11c2VycyYjMzk7XSwgMSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDt1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGtzZnRfaW4oJiMzOTtnbG9iYWwmIzM5Oywgc3RhdGljWyYjMzk7ZmxhZ3MmIzM5O10sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7U0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XG4mIzQzOyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6XG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDtuZXRucyBzZXQge3BlZXJ9IDVcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcJiMzNDssIG5zPXBlZXIpXG4mIzQzOyAgICAgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGR1bW15MyB1cFwmIzM0OywgbnM9cGVlcilcbiYjNDM7ICAgICAgICAgICAgcGVlcl9pZHggPSBpcChcJiMzNDtsaW5rIHNob3cgZHVtbXkzXCYjMzQ7LCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWyYjMzk7aWZpbmRleCYjMzk7XVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXG4mIzQzOyAgICAgICAgICAgICAgICB7XCYjMzQ7aWZhLWZhbWlseVwmIzM0Ozogc29ja2V0LkFGX1BBQ0tFVCwgXCYjMzQ7dGFyZ2V0LW5ldG5zaWRcJiMzNDs6IDV9LFxuJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSwgYWRkclsmIzM5O3RhcmdldC1uZXRuc2lkJiMzOTtdKVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcbkBAIC0zMTUsNyAmIzQzOzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuIFxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDssCiAgICAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRuZXRsaW5rLCBpbXBsZW1lbnRpbmcgcmVxdWVzdCB2YWxpZGF0aW9uLCBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoaXMgcmVhY2hhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmFiYTEyODIwN2IzZjljYzIxNWM3ZTlhMTM4NTYxNGEwNzEzNmViNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjQzOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uMWExN2U1NWQxY2NhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3MKJiM0MzsgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uCiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZQomIzQzOyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aAomIzQzOyAgICAgICAgU0lPQ0FERE1VTFRJIG9yICYjMzQ7YnJpZGdlIGZkYiBhZGQgLi4uIHNlbGYmIzM0OywgcmF0aGVyIHRoYW4gYnkgYQomIzQzOyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LgogICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRycwogICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2cKICAgICAgIGRvOgpAQCAtMTgxLDEwICYjNDM7MTg5LDEzIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIG11bHRpY2FzdAogICAgICAgICAgICAgLSBtYy11c2VycwogICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIGZsYWdzCiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogNTgKLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXQomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWQKICAgICAgICAgcmVwbHk6CiAgICAgICAgICAgdmFsdWU6IDU4CiAgICAgICAgICAgYXR0cmlidXRlczogKm1jYWRkci1hdHRycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC01Nyw2ICYjNDM7NTcsNyBAQCBlbnVtIHsKICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURQkweDIwMAogI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOCTB4NDAwCiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZCTB4ODAwCiYjNDM7I2RlZmluZSBJRkFfRl9HTE9CQUwJCTB4MTAwMAogCiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7CiAJX191MzIJaWZhX3ByZWZlcmVkOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA4MWM1YTYxMDRkZWExLi5kNTFkNzczYjkzYzZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU2Niw2ICYjNDM7NDU2NiwxNzggQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAlyZXR1cm4gc2tiLSZndDtsZW4gPyA6IHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLAomIzQzOwkJCSAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJdTMyIGlmYV9mbGFncyA9IGhhLSZndDtnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CS8qIGlmbS0mZ3Q7aWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovCiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAoKG5ldG5zaWQgJmd0Oz0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fAomIzQzOwkgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7CiYjNDM7CQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlubG1zZ19lbmQoc2tiLCBubGgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiYjNDM7CWludCBhZGRyX2lkeCA9IDA7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgewomIzQzOwkJaWYgKGFkZHJfaWR4ICZsdDsgKnNfYWRkcl9pZHgpIHsKJiM0MzsJCQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiYjNDM7CQkJCSAgICAgICBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiYjNDM7CiYjNDM7CSpzX2FkZHJfaWR4ID0gZXJyICZsdDsgMCA/IGFkZHJfaWR4IDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHsKJiM0MzsJc3RydWN0IG5ldCAqdGd0X25ldDsKJiM0MzsJbmV0bnNfdHJhY2tlciBuc190cmFja2VyOwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCW5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCAmYW1wO2ZpbHRlci0mZ3Q7bnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlmaWx0ZXItJmd0O3RndF9uZXQgPSBuZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmlsdGVyLSZndDtpZmluZGV4ID0gaWZtLSZndDtpZmFfaW5kZXg7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHsKJiM0MzsJCS50Z3RfbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayksCiYjNDM7CQkubmV0bnNpZCA9IC0xLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwl1bnNpZ25lZCBsb25nIHNfaWZpbmRleDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgc2tiLSZndDtzaywgJmFtcDtmaWx0ZXIsCiYjNDM7CQkJCQkgY2ItJmd0O2V4dGFjayk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwlpZiAoZmlsdGVyLmlmaW5kZXgpIHsKJiM0MzsJCWNiLSZndDthbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDsKJiM0MzsJCWZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpOwomIzQzOwkJaWYgKCFkZXYpIHsKJiM0MzsJCQllcnIgPSAtRU5PREVWOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc19pZmluZGV4ID0gY3R4LSZndDtpZmluZGV4OwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtJmd0O2lmaW5kZXgpIHsKJiM0MzsJCS8qIFRoZSBkZXZpY2UgdGhlIGR1bXAgc3RvcHBlZCBhdCBpcyBnb25lLCBkbyBub3Qgc2tpcAomIzQzOwkJICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChkZXYtJmd0O2lmaW5kZXggIT0gc19pZmluZGV4KQomIzQzOwkJCWN0eC0mZ3Q7YWRkcl9pZHggPSAwOwomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXRfdHJhY2soZmlsdGVyLnRndF9uZXQsICZhbXA7ZmlsdGVyLm5zX3RyYWNrZXIpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNzAgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O2lmYS1pbmRleCYjMzQ7OiBkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKQomIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZToKJiM0MzsgICAgICAgICAgICBpZiBlLmVycm9yID09IGVycm5vLkVPUE5PVFNVUFA6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCYjMzQ7KQomIzQzOyAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkCiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBlbnRyaWVzID0ge2FkZHJbJiMzOTttdWx0aWNhc3QmIzM5O106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfQomIzQzOwomIzQzOyAgICAgICAgIyBCcmluZ2luZyBhbiBFdGhlcm5ldCBkZXZpY2UgdXAgam9pbnMgMjI0LjAuMC4xLCB3aGljaCBtYXBzCiYjNDM7ICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuCiYjNDM7ICAgICAgICBhbGxfaG9zdHMgPSBlbnRyaWVzLmdldChFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYWxsX2hvc3RzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBpZiBhbGxfaG9zdHMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtnbG9iYWwmIzM5OywgYWxsX2hvc3RzWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWwmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoc3RhdGljLCAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoc3RhdGljWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgICAgIGtzZnRfaW4oJiMzOTtnbG9iYWwmIzM5Oywgc3RhdGljWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O1NJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdAomIzQzOyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6CiYjNDM7ICAgICAgICAgICAgaXAoZiYjMzQ7bmV0bnMgc2V0IHtwZWVyfSA1JiMzNDspCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15JiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkdW1teTMgdXAmIzM0OywgbnM9cGVlcikKJiM0MzsgICAgICAgICAgICBwZWVyX2lkeCA9IGlwKCYjMzQ7bGluayBzaG93IGR1bW15MyYjMzQ7LCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWyYjMzk7aWZpbmRleCYjMzk7XQomIzQzOwomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7dGFyZ2V0LW5ldG5zaWQmIzM0OzogNX0sCiYjNDM7ICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSkKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSwgYWRkclsmIzM5O3RhcmdldC1uZXRuc2lkJiMzOTtdKQomIzQzOyAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHsocGVlcl9pZHgsIDUpfSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7dGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7CiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rCkBAIC0zMTUsNyAmIzQzOzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKIAogCiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjaywKJiM0MzsgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksCiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQxMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJ0bmV0bGluayBNdWx0aWNhc3QgQWRkcmVzcyBEdW1wIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCkgb3ZlciBydG5ldGxpbmsuIFRoYXQmIzM5O3MgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSAoYHJ0LWFkZHIueWFtbGApLCBhIG5ldyBmbGFnIGluIGBpZl9hZGRyLmhgIChgSUZBX0ZfR0xPQkFMYCksIGFuZCB0aGUgY29yZSBsb2dpYyBpbiBgcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIG5ldyBmdW5jdGlvbnMgZm9yIGZpbGxpbmcsIGR1bXBpbmcsIHZhbGlkYXRpbmcsIGFuZCBoYW5kbGluZyB0aGUgbXVsdGljYXN0IGFkZHJlc3MgcmVxdWVzdC4gV2UmIzM5O3ZlIGdvdCB0aGUgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2UgaGFuZGxpbmcgc3RydWN0dXJlIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmV3IGBSVE1fR0VUTVVMVElDQVNUYCBtZXNzYWdlIHR5cGUuIEdvb2QuIEFuZCwgb2YgY291cnNlLCB0aGUgb2JsaWdhdG9yeSBzZWxmdGVzdHMgaW4gYHJ0bmV0bGluay5weWAuIE1ha2VzIHNlbnNlLCB3ZSBoYXZlIGEgdGVzdCBzdWl0ZS4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/IExldCYjMzk7cyBzZWUuLi4gdGhlIHRhcmdldCBpcyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCByaWdodCB3aGVyZSB0aGUgY29yZSBuZXRsaW5rIHN0dWZmIGxpdmVzLiBUaGUgcGF0Y2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgcnRuZXRsaW5rIHNvY2tldCB1c2luZyBgUlRNX0dFVE1VTFRJQ0FTVGAgd2l0aCBgZmFtaWx5ID0gQUZfUEFDS0VUYC4gWWVwLCBzdGFuZGFyZCBuZXRsaW5rLCBhY2Nlc3NpYmxlIGZyb20gZWl0aGVyIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkIHVzZXIgc3BhY2UuIEFuZCwgb2YgY291cnNlLCB3ZSBjYW4gaGl0IGl0IGluIFFFTVUsIG9yIGV2ZW4gb24gYSBzdGFuZGFyZCBMaW51eCBzZXR1cCwgYW5kIGZyb20gd2l0aGluIG5ldHdvcmsgbmFtZXNwYWNlcy4gV2UgaGF2ZSBsb2dpYyBhZGRlZCBmb3IgdmFsaWRhdGlvbiwgYW5kIGl0ZXJhdGluZyBhY3Jvc3MgZGV2aWNlcyB1c2luZyBlc3RhYmxpc2hlZCBmdW5jdGlvbnMuIFRoZXJlJiMzOTtzIGFsc28gbmV0bnMgdHJhY2tpbmcgYW5kIHJ0bmwgbWVzc2FnZSBjb25zdHJ1Y3Rpb24uIFRoaXMgaGFzIGFsbCBvZiB0aGUgdHlwaWNhbCBlbGVtZW50cyBvZiBhIGdvb2QgZnV6eiB0YXJnZXQuCgpTbywgKldvcnRoRnV6emluZyogaXMgYSByZXNvdW5kaW5nICYjMzQ7eWVzJiMzNDsuIFdlJiMzOTt2ZSBnb3QgYSBuZXcgbmV0bGluayBtZXNzYWdlLCBzb21lIG5ldyBmdW5jdGlvbnMsIGFuZCBpdCYjMzk7cyBhbGwgcmVhY2hhYmxlLiAKCkZpbmFsbHksIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbi4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLVxcJC4qcnRuZXRsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBMb2NhdGlvbiBvZiBgcnRuZXRsaW5rLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGZvciBgcnRuZXRsaW5rLmNgIHJlc2lkZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3RydWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHRvIGNoZWNrIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBzaW5jZSBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29tcG9uZW50LCB0aGUgYnVpbGQgc3lzdGVtIHdvdWxkIG1vc3QgbGlrZWx5IGRlZmluZSBpdHMgaW5jbHVzaW9uIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIHJldmVhbHMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2ggZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBydG5ldGxpbmsgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcnRuZXRsaW5rLm9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGluY2x1c2lvbi4gUmlnaHQsIGl0JiMzOTtzIGJ1aWx0IHdpdGggYG9iai15YCBpbiB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBzdGF0aWNhbGx5IGxpbmtlZCwgYW5kIHRoZSBwcmVyZXF1aXNpdGUgZm9yIHRoYXQgaXMgYENPTkZJR19ORVRgLiBHb3QgaXQuIE5vdywgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlJiMzOTtzIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0aW5nIGtleSBmdW5jdGlvbnMgd2l0aGluIGBydG5ldGxpbmsuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgYHJ0bmxfZHVtcF9tY2FkZHJgIG9yIGBuZXRuc190cmFja2VyYC4gVGhhdCB3b3VsZCBiZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgdGhleSYjMzk7cmUgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhcyByZWxhdGVkIHRvIG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRyYWNraW5nLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBmdW5jdGlvbnMgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTY2Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuNDU2NzpcdH1cbjQ1Njg6XHRcbjQ1Njk6XHRzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjQ1NzA6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbjQ1NzE6XHRcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbjQ1NzI6XHR7XG40NTczOlx0XHR1MzIgaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XG40NTc0Olx0XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG40NTc1Olx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbjQ1NzY6XHRcbjQ1Nzc6XHRcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG40NTc4Olx0XHRcdFx0ZmxhZ3MpO1xuNDU3OTpcdFx0aWYgKCFubGgpXG40NTgwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG40NTgxOlx0XG40NTgyOlx0XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG40NTgzOlx0XHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbjQ1ODQ6XHRcdGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcbjQ1ODU6XHRcdC8qIGlmbS1cdTAwM2VpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi9cbjQ1ODY6XHRcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XG40NTg3Olx0XHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbjQ1ODg6XHRcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbjQ1ODk6XHRcbjQ1OTA6XHRcdGlmICgobmV0bnNpZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG40NTkxOlx0XHQgICAgIG5sYV9wdXRfczMyKHNrYiwgSUZBX1RBUkdFVF9ORVROU0lELCBuZXRuc2lkKSkgfHxcbjQ1OTI6XHRcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuNDU5MzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBoYS1cdTAwM2VyZWZjb3VudCkgfHxcbjQ1OTQ6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhX2ZsYWdzKSkge1xuNDU5NTpcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuNDU5NjpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuNDU5NzpcdFx0fVxuNDU5ODpcdFxuNDU5OTpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbjQ2MDA6XHRcdHJldHVybiAwO1xuNDYwMTpcdH1cbjQ2MDI6XHRcbjQ2MDM6XHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG40NjA0Olx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbjQ2MDU6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG40NjA2Olx0e1xuNDYwNzpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbjQ2MDg6XHRcdGludCBhZGRyX2lkeCA9IDA7XG40NjA5Olx0XHRpbnQgZXJyID0gMDtcbjQ2MTA6XHRcbjQ2MTE6XHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuNDYxMjpcdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuNDYxMzpcdFx0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG40NjE0Olx0XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuNDYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIFBsdW1iaW5nKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgNDYxNiB0aHJvdWdoIDQ3NDAuIFRoYXQgcmFuZ2UgdXN1YWxseSBlbmNvbXBhc3NlcyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgYSBjcml0aWNhbCBwYXJ0IG9mIGEgbGFyZ2VyIG9uZSBkZWFsaW5nIHdpdGggcm91dGUgbmV0bGluayBtZXNzYWdpbmcsIHByb2JhYmx5LiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdXNlciBzcGFjZS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gcHJlY2lzZSB3aXRoIHRoaXMgc2VjdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGhvbGRzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjE2Olx0XHRcdH1cbjQ2MTc6XHRcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG40NjE4Olx0XHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuNDYxOTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuNDYyMDpcdFx0XHRcdGJyZWFrO1xuNDYyMTpcdFx0XHRhZGRyX2lkeCYjNDM7JiM0Mzs7XG40NjIyOlx0XHR9XG40NjIzOlx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuNDYyNDpcdFxuNDYyNTpcdFx0KnNfYWRkcl9pZHggPSBlcnIgXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XG40NjI2Olx0XG40NjI3Olx0XHRyZXR1cm4gZXJyO1xuNDYyODpcdH1cbjQ2Mjk6XHRcbjQ2MzA6XHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xuNDYzMTpcdFx0c3RydWN0IG5ldCAqdGd0X25ldDtcbjQ2MzI6XHRcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcbjQ2MzM6XHRcdGludCBuZXRuc2lkO1xuNDYzNDpcdFx0aW50IGlmaW5kZXg7XG40NjM1Olx0fTtcbjQ2MzY6XHRcbjQ2Mzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHtcbjQ2Mzg6XHRcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG40NjM5Olx0fTtcbjQ2NDA6XHRcbjQ2NDE6XHRzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuNDY0MjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxuNDY0MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG40NjQ0Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG40NjQ1Olx0e1xuNDY0NjpcdFx0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTtcbjQ2NDc6XHRcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbjQ2NDg6XHRcdGludCBlcnI7XG40NjQ5Olx0XG40NjUwOlx0XHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcbjQ2NTE6XHRcdGlmICghaWZtKSB7XG40NjUyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjQ2NTM6XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcJiMzNDspO1xuNDY1NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NTU6XHRcdH1cbjQ2NTY6XHRcbjQ2NTc6XHRcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbjQ2NTg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuNDY1OTpcdFx0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuNDY2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NjE6XHRcdH1cbjQ2NjI6XHRcbjQ2NjM6XHRcdGVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCxcbjQ2NjQ6XHRcdFx0XHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xuNDY2NTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjQ2NjY6XHRcdFx0cmV0dXJuIGVycjtcbjQ2Njc6XHRcbjQ2Njg6XHRcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XG40NjY5Olx0XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjQ2NzA6XHRcbjQ2NzE6XHRcdFx0ZmlsdGVyLVx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcbjQ2NzI6XHRcdFx0bmV0ID0gcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc2ssIGZpbHRlci1cdTAwM2VuZXRuc2lkKTtcbjQ2NzM6XHRcdFx0aWYgKElTX0VSUihuZXQpKSB7XG40Njc0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuNDY3NTpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXCYjMzQ7KTtcbjQ2NzY6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXQpO1xuNDY3NzpcdFx0XHR9XG40Njc4Olx0XHRcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCBcdTAwMjZmaWx0ZXItXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG40Njc5Olx0XHRcdGZpbHRlci1cdTAwM2V0Z3RfbmV0ID0gbmV0O1xuNDY4MDpcdFx0fVxuNDY4MTpcdFxuNDY4MjpcdFx0ZmlsdGVyLVx1MDAzZWlmaW5kZXggPSBpZm0tXHUwMDNlaWZhX2luZGV4O1xuNDY4MzpcdFxuNDY4NDpcdFx0cmV0dXJuIDA7XG40Njg1Olx0fVxuNDY4NjpcdFxuNDY4NzpcdHN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG40Njg4Olx0e1xuNDY4OTpcdFx0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbjQ2OTA6XHRcdFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuNDY5MTpcdFx0XHQubmV0bnNpZCA9IC0xLFxuNDY5MjpcdFx0fTtcbjQ2OTM6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuNDY5NDpcdFx0c3RydWN0IHtcbjQ2OTU6XHRcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuNDY5NjpcdFx0XHRpbnQgYWRkcl9pZHg7XG40Njk3Olx0XHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjQ2OTg6XHRcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuNDY5OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjQ3MDA6XHRcdGludCBlcnI7XG40NzAxOlx0XG40NzAyOlx0XHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuNDcwMzpcdFx0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbjQ3MDQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG40NzA1Olx0XHRcdHJldHVybiBlcnI7XG40NzA2Olx0XG40NzA3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NzA4Olx0XG40NzA5Olx0XHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbjQ3MTA6XHRcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG40NzExOlx0XHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG40NzEyOlx0XHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG40NzEzOlx0XHRcdGlmICghZGV2KSB7XG40NzE0Olx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjQ3MTU6XHRcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgZnVuY3Rpb25hbGl0eSBiZXR0ZXIuIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgYWRkZWQ6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBkdW1waW5nLCB2YWxpZGF0aW5nLCBhbmQgZmlsbGluZyBtdWx0aWNhc3QgYWRkcmVzcyBkYXRhIHdpdGhpbiB0aGUgcm91dGluZyBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgYXJlIHRoZXNlIHRoZSBvbmx5IGJ1aWxkaW5nIGJsb2Nrcz8gTGV0JiMzOTtzIHZlcmlmeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBBIHF1aWNrIGNoZWNrIG9mIGBDT05GSUdfTkVUYCBpcyBpbiBvcmRlci4gSXQmIzM5O3MgdGhlIGJhc2VsaW5lIGZvciBuZXR3b3JraW5nLCBvZiBjb3Vyc2UsIGJ1dCBpcyBpdCAqc3VmZmljaWVudCo/IFdlIG9mdGVuIHNlZSBvdGhlciBjb25maWd1cmF0aW9ucyB0aWVkIGludG8gc3BlY2lmaWMgZmVhdHVyZXMuCgpNeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSB3aWxsIGJlIG5ldHdvcmsgbmFtZXNwYWNlcy4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IG5ldG5zIGF3YXJlPyBJJiMzOTtsbCBsb29rIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVG8gaW52ZXN0aWdhdGUsIEkmIzM5O2xsIGBncmVwYCB0aGUgY29kZWJhc2UgZm9yIGBuZXRuc190cmFja2VyX2FsbG9jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG5hbWVzcGFjZS1zcGVjaWZpYyB0cmFja2luZyBnb2luZyBvbi4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW50ZWdyYXRlcyB3aXRoIG5ldHdvcmsgaXNvbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRuc190cmFja2VyX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM1OT1zdGF0aWMgaW5saW5lIGJvb2wgbmV0X2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzYzLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNjUtXHRcdFx0XHRcdCBuZXRuc190cmFja2VyICp0cmFja2VyLFxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNzUtXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzc2OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgbmV0bnNfdHJhY2tlciAqdHJhY2tlcixcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNzctXHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwKVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3OC17XG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzc5Olx0X19uZXRuc190cmFja2VyX2FsbG9jKG5ldCwgdHJhY2tlciwgdHJ1ZSwgZ2ZwKTtcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODAtfVxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0zOTI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpnZXRfbmV0X3RyYWNrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzk1LVx0Z2V0X25ldChuZXQpO1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM5NjpcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCB0cmFja2VyLCBnZnApO1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM5Ny1cdHJldHVybiBuZXQ7XG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTI2Nz1zdGF0aWMgaW5saW5lIGJvb2wgdGNmX2V4dHNfZ2V0X25ldChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI3MS1cdGlmIChleHRzLVx1MDAzZW5ldClcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyNzI6XHRcdG5ldG5zX3RyYWNrZXJfYWxsb2MoZXh0cy1cdTAwM2VuZXQsIFx1MDAyNmV4dHMtXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjczLVx0cmV0dXJuIGV4dHMtXHUwMDNlbmV0ICE9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDgwCgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDYxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUlRORVRMSU5LIE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgZmVhdHVyZSwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCBgTkVUREVWSUNFU2Agb3IgYE5FVGAuIFNpbmNlIHRoZSBiYXNlIGNvbmZpZyBpcyBgQ09ORklHX05FVGAsIGl0JiMzOTtzIGxpa2VseSBsaW5rZWQgdG8gdGhlIGBORVRgIHN0YW5kYXJkLiBUaGF0IHNlZW1zIHRvIGJlIGEgc2FmZSBhc3N1bXB0aW9uLgoKTm93LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlc2UgZm91ciBmdW5jdGlvbnM6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBkeW5hbWljYWxseSBsaW5rZWQgb3Igc3RhdGljYWxseSBjb21waWxlZC4gQSBxdWljayBjaGVjayBvZiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGNvbmZpcm1zIHRoYXQgYWxsIGZvdXIgYXJlLCBpbiBmYWN0LCBzdGF0aWNhbGx5IGNvbXBpbGVkLiBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGFuZCBgcnRubF9kdW1wX21jYWRkcmAgYXJlICphbGwqIHN0YXRpYyBmdW5jdGlvbnMuIFRob3VnaCB0aGUgbGFzdCBpcyBhc3NpZ25lZCB0byBgLmR1bXBpdGAgaW4gYHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc2AKCk5leHQsIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBhcmVhcyBvZiB0aGUga2VybmVsIGhhdmUgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEEgZGlmZiBjaGVjayByZXZlYWxzIG1vZGlmaWNhdGlvbnMgdG8gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAsIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weWAuIE5vIG90aGVyIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZC4KClRoaXMgZ2l2ZXMgbWUgdGhlIGZvbGxvd2luZyBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFRydWUuCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LCAmIzM0O3J0bmxfZHVtcF9tY2FkZHJfZGV2JiMzNDssICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LCAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzKio6IGBbJiMzNDtORVQmIzM0O11gCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBQRl9QQUNLRVQgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIHZpYSBydG5ldGxpbmsgKGBSVE1fR0VUTVVMVElDQVNUYCkuIEl0IGluY2x1ZGVzIGhhbmRsZXJzIHN1Y2ggYXMgYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBkZW1hbmRzIGZ1enppbmcuCgpCZWZvcmUgSSBwdXNoIHRoaXMsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmb3JtYXQgYWdhaW5zdCBteSBlc3RhYmxpc2hlZCBydWxlcy4gSXQgbG9va3MgY29ycmVjdDogYXJyYXlzIG9mIHN0cmluZ3Mgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCBmb3IgZW5hYmxlZCBjb25maWd1cmF0aW9ucywgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmb3IgZm9jdXNlZCBzeW1ib2xzLCBhIGJvb2xlYW4gZm9yIHdoZXRoZXIgaXQgaXMgd29ydGggZnV6emluZywgYW5kIGEgc3RyaW5nIGZvciBteSByZWFzb25pbmcuIExvb2tzIGdvb2QuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmV0bGluaywgaW1wbGVtZW50aW5nIHJlcXVlc3QgdmFsaWRhdGlvbiwgZGV2aWNlIHRyYXZlcnNhbCwgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGludGVyZmFjZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDssCiAgICAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRuZXRsaW5rLCBpbXBsZW1lbnRpbmcgcmVxdWVzdCB2YWxpZGF0aW9uLCBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoaXMgcmVhY2hhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5sX2R1bXBfbWNhZGRyIGFuZCBydG5sX2ZpbGxfbWNhZGRyLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgaW5pdGlhbGl6YXRpb246XG4xLiBgc3RydWN0IGlmYWRkcm1zZ2AgcGF5bG9hZDogQWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgc3RydWN0IGNvbnRhaW5zIDQgYF9fdThgIGZpZWxkcyBhbmQgMSBgX191MzJgIGZpZWxkIHRvdGFsaW5nIDggYnl0ZXMgd2l0aCB6ZXJvIHBhZGRpbmcgYnl0ZXMuXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXHUwMDNlcmVmY291bnRgLCBgaWZhX2ZsYWdzYCwgYW5kIGBoYS1cdTAwM2VhZGRyYCBvZiBsZW5ndGggYGRldi1cdTAwM2VhZGRyX2xlbmApLlxuMy4gTG9jYWwgdmFyaWFibGVzIGFuZCBmaWx0ZXJzOiBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBpcyBpbml0aWFsaXplZCB1c2luZyBDIHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYGN0eGAgaXMgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgZnJhbWV3b3JrLCBhbmQgYWxsIHZhbGlkYXRpb24gdmFyaWFibGVzIGFyZSBzYWZlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmFiYTEyODIwN2IzZjljYzIxNWM3ZTlhMTM4NTYxNGEwNzEzNmViNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjQzOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uMWExN2U1NWQxY2NhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3MKJiM0MzsgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uCiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZQomIzQzOyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aAomIzQzOyAgICAgICAgU0lPQ0FERE1VTFRJIG9yICYjMzQ7YnJpZGdlIGZkYiBhZGQgLi4uIHNlbGYmIzM0OywgcmF0aGVyIHRoYW4gYnkgYQomIzQzOyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LgogICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRycwogICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2cKICAgICAgIGRvOgpAQCAtMTgxLDEwICYjNDM7MTg5LDEzIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIG11bHRpY2FzdAogICAgICAgICAgICAgLSBtYy11c2VycwogICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIGZsYWdzCiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogNTgKLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXQomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWQKICAgICAgICAgcmVwbHk6CiAgICAgICAgICAgdmFsdWU6IDU4CiAgICAgICAgICAgYXR0cmlidXRlczogKm1jYWRkci1hdHRycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC01Nyw2ICYjNDM7NTcsNyBAQCBlbnVtIHsKICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURQkweDIwMAogI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOCTB4NDAwCiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZCTB4ODAwCiYjNDM7I2RlZmluZSBJRkFfRl9HTE9CQUwJCTB4MTAwMAogCiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7CiAJX191MzIJaWZhX3ByZWZlcmVkOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA4MWM1YTYxMDRkZWExLi5kNTFkNzczYjkzYzZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU2Niw2ICYjNDM7NDU2NiwxNzggQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAlyZXR1cm4gc2tiLSZndDtsZW4gPyA6IHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLAomIzQzOwkJCSAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJdTMyIGlmYV9mbGFncyA9IGhhLSZndDtnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CS8qIGlmbS0mZ3Q7aWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovCiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAoKG5ldG5zaWQgJmd0Oz0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fAomIzQzOwkgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7CiYjNDM7CQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlubG1zZ19lbmQoc2tiLCBubGgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiYjNDM7CWludCBhZGRyX2lkeCA9IDA7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgewomIzQzOwkJaWYgKGFkZHJfaWR4ICZsdDsgKnNfYWRkcl9pZHgpIHsKJiM0MzsJCQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiYjNDM7CQkJCSAgICAgICBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiYjNDM7CiYjNDM7CSpzX2FkZHJfaWR4ID0gZXJyICZsdDsgMCA/IGFkZHJfaWR4IDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHsKJiM0MzsJc3RydWN0IG5ldCAqdGd0X25ldDsKJiM0MzsJbmV0bnNfdHJhY2tlciBuc190cmFja2VyOwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCW5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCAmYW1wO2ZpbHRlci0mZ3Q7bnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlmaWx0ZXItJmd0O3RndF9uZXQgPSBuZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmlsdGVyLSZndDtpZmluZGV4ID0gaWZtLSZndDtpZmFfaW5kZXg7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHsKJiM0MzsJCS50Z3RfbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayksCiYjNDM7CQkubmV0bnNpZCA9IC0xLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwl1bnNpZ25lZCBsb25nIHNfaWZpbmRleDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgc2tiLSZndDtzaywgJmFtcDtmaWx0ZXIsCiYjNDM7CQkJCQkgY2ItJmd0O2V4dGFjayk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwlpZiAoZmlsdGVyLmlmaW5kZXgpIHsKJiM0MzsJCWNiLSZndDthbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDsKJiM0MzsJCWZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpOwomIzQzOwkJaWYgKCFkZXYpIHsKJiM0MzsJCQllcnIgPSAtRU5PREVWOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc19pZmluZGV4ID0gY3R4LSZndDtpZmluZGV4OwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtJmd0O2lmaW5kZXgpIHsKJiM0MzsJCS8qIFRoZSBkZXZpY2UgdGhlIGR1bXAgc3RvcHBlZCBhdCBpcyBnb25lLCBkbyBub3Qgc2tpcAomIzQzOwkJICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChkZXYtJmd0O2lmaW5kZXggIT0gc19pZmluZGV4KQomIzQzOwkJCWN0eC0mZ3Q7YWRkcl9pZHggPSAwOwomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXRfdHJhY2soZmlsdGVyLnRndF9uZXQsICZhbXA7ZmlsdGVyLm5zX3RyYWNrZXIpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNzAgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O2lmYS1pbmRleCYjMzQ7OiBkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKQomIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZToKJiM0MzsgICAgICAgICAgICBpZiBlLmVycm9yID09IGVycm5vLkVPUE5PVFNVUFA6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCYjMzQ7KQomIzQzOyAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkCiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBlbnRyaWVzID0ge2FkZHJbJiMzOTttdWx0aWNhc3QmIzM5O106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfQomIzQzOwomIzQzOyAgICAgICAgIyBCcmluZ2luZyBhbiBFdGhlcm5ldCBkZXZpY2UgdXAgam9pbnMgMjI0LjAuMC4xLCB3aGljaCBtYXBzCiYjNDM7ICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuCiYjNDM7ICAgICAgICBhbGxfaG9zdHMgPSBlbnRyaWVzLmdldChFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYWxsX2hvc3RzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBpZiBhbGxfaG9zdHMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtnbG9iYWwmIzM5OywgYWxsX2hvc3RzWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWwmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoc3RhdGljLCAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoc3RhdGljWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgICAgIGtzZnRfaW4oJiMzOTtnbG9iYWwmIzM5Oywgc3RhdGljWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O1NJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdAomIzQzOyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6CiYjNDM7ICAgICAgICAgICAgaXAoZiYjMzQ7bmV0bnMgc2V0IHtwZWVyfSA1JiMzNDspCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15JiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkdW1teTMgdXAmIzM0OywgbnM9cGVlcikKJiM0MzsgICAgICAgICAgICBwZWVyX2lkeCA9IGlwKCYjMzQ7bGluayBzaG93IGR1bW15MyYjMzQ7LCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWyYjMzk7aWZpbmRleCYjMzk7XQomIzQzOwomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7dGFyZ2V0LW5ldG5zaWQmIzM0OzogNX0sCiYjNDM7ICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSkKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSwgYWRkclsmIzM5O3RhcmdldC1uZXRuc2lkJiMzOTtdKQomIzQzOyAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHsocGVlcl9pZHgsIDUpfSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7dGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7CiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rCkBAIC0zMTUsNyAmIzQzOzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKIAogCiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjaywKJiM0MzsgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksCiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gYXBwbHkgdGhlIGVzdGFibGlzaGVkIHJ1bGVzIHRvIHRoZSBjb2RlIGNoYW5nZXMuIEkga25vdyB0aGF0IEtBU0FOIGRlYWxzIHdpdGggbWVtb3J5IGVycm9ycyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGRvdWJsZSBmcmVlcywgYnV0IEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMg4oCTIHNwZWNpZmljYWxseSBvbiB0aGUgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMg4oCTIGFuZCBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm9ybWF0aW9uIGxlYWtzLgoKVGhlIHJ1bGVzIGFyZSBwcmV0dHkgY2xlYXI6IEtNU0FOIGZ1enppbmcgaXMgb25seSBuZWVkZWQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGNvZGUgdGhhdCBkb2VzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6IDEpIFNlbmRzIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIHBvdGVudGlhbGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGlzIGNvdmVycyBjYXNlcyB1c2luZyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiAyKSBVc2VzIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzLiAzKSBBbGxvY2F0ZXMgb3IgaW5pdGlhbGl6ZXMgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gNCkgSW50cm9kdWNlcyBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBhZGRzIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIGR1bXAgc3VwcG9ydCB0aHJvdWdoIHRoZSBgcnRubF9kdW1wX21jYWRkcmAgZnVuY3Rpb24uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBydG5sX2ZpbGxfbWNhZGRyYCBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvZGUsIHBhcnRpY3VsYXJseSB3aXRoaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4KCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCB0aGUgY29kZSBkb2VzOiBJdCBjb25zdHJ1Y3RzIGFuIGBpZmFkZHJtc2dgIG1lc3NhZ2UgdG8gc2VuZCBtdWx0aWNhc3QgYWRkcmVzcyBpbmZvcm1hdGlvbiBvdmVyIG5ldGxpbmsuIFRoZSBjb2RlIGZpbGxzIHRoZSBgaWZhZGRybXNnYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gdXNlcyBgbmxhX3B1dGAgdG8gYWRkIE5ldGxpbmsgYXR0cmlidXRlcyB0byB0aGUgU0tCLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjaGVjayBgc3RydWN0IGlmYWRkcm1zZ2AgdG8gc2VlIHdoYXQgZmllbGRzIGl0IGNvbnRhaW5zLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZ2V0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGlmYWRkcm1zZyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDo4OnN0cnVjdCBpZmFkZHJtc2cge1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC05LVx0X191OFx0XHRpZmFfZmFtaWx5O1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNy1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtOS1cdF9fdThcdFx0aWZhX2ZhbWlseTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gaWZfYWRkci5oKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbGlrZWx5IHN0YXJ0cyBkZWZpbmluZyB0aGUgc3RydWN0dXJlcyBvciBjb25zdGFudHMgcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzIGluZm9ybWF0aW9uLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBsaWtlIGBpZmFkZHJtc2dgLCBvciBwZXJoYXBzIHNvbWUga2V5IGZsYWcgZGVmaW5pdGlvbnMgdGhhdCBnb3Zlcm4gaG93IGFkZHJlc3NlcyBhcmUgaGFuZGxlZCBpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCByZWxhdGUgdG8gYWRkcmVzcyBmYW1pbGllcywgYWRkcmVzcyBsZW5ndGhzLCBhbmQgYXR0cmlidXRlIGNvZGVzLiBJJiMzOTttIGFudGljaXBhdGluZyBwb3NzaWJseSBzZWVpbmcgc29tZSBlbnVtcy4gQW55dGhpbmcgdGhhdCBkaWN0YXRlcyB0aGUgZm9ybWF0IG9yIHByb3BlcnRpZXMgb2YgbmV0d29yayBhZGRyZXNzZXMgaXMgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIGluaXRpYWxseS4gSSYjMzk7bSBrZWVuIHRvIGVuc3VyZSBpdCYjMzk7cyB1cCB0byBkYXRlIHdpdGggdGhlIGxhdGVzdCBzdGFuZGFyZHMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbiAgIDI6XHQjaWZuZGVmIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcbiAgIDM6XHQjZGVmaW5lIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IGlmYWRkcm1zZyB7XG4gICA5Olx0XHRfX3U4XHRcdGlmYV9mYW1pbHk7XG4gIDEwOlx0XHRfX3U4XHRcdGlmYV9wcmVmaXhsZW47XHQvKiBUaGUgcHJlZml4IGxlbmd0aFx0XHQqL1xuICAxMTpcdFx0X191OFx0XHRpZmFfZmxhZ3M7XHQvKiBGbGFnc1x0XHRcdCovXG4gIDEyOlx0XHRfX3U4XHRcdGlmYV9zY29wZTtcdC8qIEFkZHJlc3Mgc2NvcGVcdFx0Ki9cbiAgMTM6XHRcdF9fdTMyXHRcdGlmYV9pbmRleDtcdC8qIExpbmsgaW5kZXhcdFx0XHQqL1xuICAxNDpcdH07XG4gIDE1Olx0XG4gIDE2Olx0LypcbiAgMTc6XHQgKiBJbXBvcnRhbnQgY29tbWVudDpcbiAgMTg6XHQgKiBJRkFfQUREUkVTUyBpcyBwcmVmaXggYWRkcmVzcywgcmF0aGVyIHRoYW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MuXG4gIDE5Olx0ICogSXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBmb3Igbm9ybWFsbHkgY29uZmlndXJlZCBicm9hZGNhc3QgaW50ZXJmYWNlcyxcbiAgMjA6XHQgKiBidXQgZm9yIHBvaW50LXRvLXBvaW50IElGQV9BRERSRVNTIGlzIERFU1RJTkFUSU9OIGFkZHJlc3MsXG4gIDIxOlx0ICogbG9jYWwgYWRkcmVzcyBpcyBzdXBwbGllZCBpbiBJRkFfTE9DQUwgYXR0cmlidXRlLlxuICAyMjpcdCAqXG4gIDIzOlx0ICogSUZBX0ZMQUdTIGlzIGEgdTMyIGF0dHJpYnV0ZSB0aGF0IGV4dGVuZHMgdGhlIHU4IGZpZWxkIGlmYV9mbGFncy5cbiAgMjQ6XHQgKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cbiAgMjU6XHQgKi9cbiAgMjY6XHRlbnVtIHtcbiAgMjc6XHRcdElGQV9VTlNQRUMsXG4gIDI4Olx0XHRJRkFfQUREUkVTUyxcbiAgMjk6XHRcdElGQV9MT0NBTCxcbiAgMzA6XHRcdElGQV9MQUJFTCxcbiAgMzE6XHRcdElGQV9CUk9BRENBU1QsXG4gIDMyOlx0XHRJRkFfQU5ZQ0FTVCxcbiAgMzM6XHRcdElGQV9DQUNIRUlORk8sXG4gIDM0Olx0XHRJRkFfTVVMVElDQVNULFxuICAzNTpcdFx0SUZBX0ZMQUdTLFxuICAzNjpcdFx0SUZBX1JUX1BSSU9SSVRZLFx0LyogdTMyLCBwcmlvcml0eS9tZXRyaWMgZm9yIHByZWZpeCByb3V0ZSAqL1xuICAzNzpcdFx0SUZBX1RBUkdFVF9ORVROU0lELFxuICAzODpcdFx0SUZBX1BST1RPLFx0XHQvKiB1OCwgYWRkcmVzcyBwcm90b2NvbCAqL1xuICAzOTpcdFx0SUZBX01DX1VTRVJTLFx0XHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xuICA0MDpcdFx0X19JRkFfTUFYLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODYzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGlmYWRkcm1zZ2AgU3RydWN0dXJlIGFuZCBpdHMgVXNhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBsYXlvdXQgb2YgYHN0cnVjdCBpZmFkZHJtc2dgOiBgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBhbmQgYGlmYV9pbmRleGAuIEl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDsgdGhvc2UgYXJlIHRoZSBjb3JlIGZpZWxkcy4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgdG90YWwgc2l6ZSBvZiA4IGJ5dGVzIGlzIHdoYXQgSSBleHBlY3RlZCwgYW5kIHRoZSBsYWNrIG9mIHBhZGRpbmcgaXMgZ29vZDsgaXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBjb25uZWN0IHRoaXMgdG8gdGhlIGBydG5sX2ZpbGxfbWNhZGRyYCBmdW5jdGlvbi4gSSBzZWUgaG93IGl0IGluaXRpYWxpemVzIGFuIGBpZmFkZHJtc2dgIGluc3RhbmNlIGBpZm1gLiBgQUZfUEFDS0VUYCBmb3IgdGhlIGZhbWlseSwgYDBgIGZvciB0aGUgcHJlZml4IGxlbmd0aC4uLiBzZWVtcyBzdGFuZGFyZC4gQWgsIHRoZSBgaWZhX2ZsYWdzYCBmaWVsZCBpcyBhIGJ5dGUsIGFuZCB0aGUgKmZ1bGwqIHZhbHVlIGlzIHN0b3JlZCBpbiBgSUZBX0ZMQUdTYC4gR29vZCB0byBrZWVwIGluIG1pbmQuIFNjb3BlIGlzIHNldCB0byBgUlRfU0NPUEVfTElOS2AsIGFuZCB0aGUgaW5kZXggaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlLiBBbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCwgd2hpY2ggaXMgYXMgaXQgc2hvdWxkIGJlLgoKT2theSwgbmV4dCBxdWVzdGlvbjogd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBoYS0mZ3Q7YWRkcmAgYW5kIGBkZXYtJmd0O2FkZHJfbGVuYD8gIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgc3RydWN0IG5ldGRldl9od19hZGRyYCBhbmQgaG93IHRoYXQgYWRkcmVzcyBkYXRhIGlzIGFjdHVhbGx5IHN0b3JlZCB3aXRoaW4gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgaG93IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRkZXZfaHdfYWRkciBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMzU9c3RydWN0IHNrX2J1ZmY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjM3LiBJJiMzOTttIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIEkmIzM5O20gbG9va2luZyBmb3IgcmVnYXJkaW5nIHRoZSBiYXNpYyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBzZXR1cCByb3V0aW5lcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZWxlbWVudHMgbGlrZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHF1ZXVlcywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHBvaW50ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRzdHJ1Y3Qgc2tfYnVmZjtcbiAyMzY6XHRcbiAyMzc6XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xuIDIzODpcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiAyMzk6XHRcdHN0cnVjdCByYl9ub2RlXHRcdG5vZGU7XG4gMjQwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdGFkZHJbTUFYX0FERFJfTEVOXTtcbiAyNDE6XHRcdHVuc2lnbmVkIGNoYXJcdFx0dHlwZTtcbiAyNDI6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXHRcdDFcbiAyNDM6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfU0FOXHRcdDJcbiAyNDQ6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVFx0M1xuIDI0NTpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1RcdDRcbiAyNDY6XHRcdGJvb2xcdFx0XHRnbG9iYWxfdXNlO1xuIDI0NzpcdFx0aW50XHRcdFx0c3luY19jbnQ7XG4gMjQ4Olx0XHRpbnRcdFx0XHRyZWZjb3VudDtcbiAyNDk6XHRcdGludFx0XHRcdHN5bmNlZDtcbiAyNTA6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3VfaGVhZDtcbiAyNTE6XHR9O1xuIDI1MjpcdFxuIDI1MzpcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0IHtcbiAyNTQ6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjU1Olx0XHRpbnRcdFx0XHRjb3VudDtcbiAyNTY6XHRcbiAyNTc6XHRcdC8qIEF1eGlsaWFyeSB0cmVlIGZvciBmYXN0ZXIgbG9va3VwIG9uIGFkZGl0aW9uIGFuZCBkZWxldGlvbiAqL1xuIDI1ODpcdFx0c3RydWN0IHJiX3Jvb3RcdFx0dHJlZTtcbiAyNTk6XHR9O1xuIDI2MDpcdFxuIDI2MTpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSAoKGwpLVx1MDAzZWNvdW50KVxuIDI2MjpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9lbXB0eShsKSAobmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSA9PSAwKVxuIDI2MzpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcbiAyNjQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNihsKS1cdTAwM2VsaXN0LCBsaXN0KVxuIDI2NTpcdFxuIDI2NjpcdCNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcdTAwMjYoZGV2KS1cdTAwM2V1YylcbiAyNjc6XHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjY4Olx0I2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSBcXFxuIDI2OTpcdFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjcwOlx0I2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfc3luY2VkX3VjX2FkZHIoX2hhLCBfZGV2KSBcXFxuIDI3MTpcdFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoKF9oYSksIChfZGV2KSkgXFxcbiAyNzI6XHRcdFx0aWYgKChfaGEpLVx1MDAzZXN5bmNfY250KVxuIDI3MzpcdFxuIDI3NDpcdCNkZWZpbmUgbmV0ZGV2X21jX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcdTAwMjYoZGV2KS1cdTAwM2VtYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBbGxvY2F0aW9uIGFuZCBBZGRpdGlvbiBvZiBgaGFgIHRvIGBkZXYtJmd0O21jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBgaGFgIHZhcmlhYmxlIGlzIGFsbG9jYXRlZCBhbmQgdGhlbiBhZGRlZCB0byBgZGV2LSZndDttY2AuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIG1hdHRlciwgYW5kIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGZ1bmN0aW9uIHRoYXQgbGlrZWx5IGhhbmRsZXMgdGhpcyBhZGRpbmcgcHJvY2Vzcy4gVGhpbmtpbmcgYWJvdXQgbmFtaW5nIGNvbnZlbnRpb25zLCBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBgZGV2X21jX2FkZGAsIG9yIGFueXRoaW5nIHNpbWlsYXIgdGhhdCB3b3VsZCBzdWdnZXN0IGFkZGluZyBhbiBhZGRyZXNzIHRvIHRoZSBtdWx0aWNhc3QgbGlzdCBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuIEEgcXVpY2sgZ3JlcCBvZiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LCBlc3BlY2lhbGx5IHdpdGhpbiBgZGV2X2FkZHJfbGlzdHMuY2AsIGlzIG15IGluaXRpYWwgdGFyZ2V0LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19od19hZGRyX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM0LVx0XHRcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc6XHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cdFx0XHRcdDAsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXHRcdHJldHVybiBlcnI7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYF9faHdfYWRkcl9jcmVhdGVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgYF9faHdfYWRkcl9jcmVhdGVgLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gaGFyZHdhcmUgYWRkcmVzcyBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudC4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYCwgdGhhdCBsb2NhdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIGhhdmUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0b3JpbmcgYW5kIG1hbmlwdWxhdGluZyBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2UgYWRkcmVzc2VzLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBtYW5hZ2VzIHRoZSB1bmRlcmx5aW5nIGRldGFpbHMgb2YgY3JlYXRpbmcgYW5kIHJlZ2lzdGVyaW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzZXMgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGltZSB0byBsb29rIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0fVxuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG4gIDUzOlx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4gIDU0Olx0XHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuICA1NzpcdFx0aW50IGFsbG9jX3NpemU7XG4gIDU4Olx0XG4gIDU5Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XG4gIDYwOlx0XHRpZiAoYWxsb2Nfc2l6ZSBcdTAwM2MgTDFfQ0FDSEVfQllURVMpXG4gIDYxOlx0XHRcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcbiAgNjI6XHRcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcbiAgNjM6XHRcdGlmICghaGEpXG4gIDY0Olx0XHRcdHJldHVybiBOVUxMO1xuICA2NTpcdFx0bWVtY3B5KGhhLVx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcbiAgNjY6XHRcdGhhLVx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XG4gIDY3Olx0XHRoYS1cdTAwM2VyZWZjb3VudCA9IDE7XG4gIDY4Olx0XHRoYS1cdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xuICA2OTpcdFx0aGEtXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xuICA3MDpcdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIGhhO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW50IF9faHdfYWRkcl9hZGRfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG4gIDc2Olx0XHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbiAgNzc6XHRcdFx0XHQgICAgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMsXG4gIDc4Olx0XHRcdFx0ICAgIGludCBzeW5jX2NvdW50LCBib29sIGV4Y2x1c2l2ZSlcbiAgNzk6XHR7XG4gIDgwOlx0XHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFx1MDAyNmxpc3QtXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcbiAgODE6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDgyOlx0XG4gIDgzOlx0XHRpZiAoYWRkcl9sZW4gXHUwMDNlIE1BWF9BRERSX0xFTilcbiAgODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDg1Olx0XG4gIDg2Olx0XHR3aGlsZSAoKmluc19wb2ludCkge1xuICA4NzpcdFx0XHRpbnQgZGlmZjtcbiAgODg6XHRcbiAgODk6XHRcdFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgd2l0aGluIGBfX2h3X2FkZHJfY3JlYXRlYCwgd2UmIzM5O3JlIHVzaW5nIGBtZW1jcHlgIHRvIGNvcHkgYGFkZHJfbGVuYCBieXRlcyBmcm9tIHRoZSBzb3VyY2UgYGFkZHJgIGludG8gYGhhLSZndDthZGRyYC4gVGhlbiwgaW4gYHJ0bmxfZmlsbF9tY2FkZHJgIHdoZW4gZGVhbGluZyB3aXRoIG5ldGxpbmssIHdlJiMzOTtyZSB1c2luZyBgbmxhX3B1dGAgdG8gcGxhY2UgdGhlIG11bHRpY2FzdCBhZGRyZXNzLiBTcGVjaWZpY2FsbHksIGBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LSZndDthZGRyX2xlbiwgaGEtJmd0O2FkZHIpYC4gQ3JpdGljYWxseSwgYGFkZHJfbGVuYCBmb3IgYGhhYCBpcyBzZXQgdG8gYGRldi0mZ3Q7YWRkcl9sZW5gIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgYGhhYCAoY29taW5nIGZyb20gYF9fZGV2X21jX2FkZGAgb3IgYGRldl9tY19hZGRfZXhjbGApLiBTbywgdGhlcmUmIzM5O3MgYSAqZGlyZWN0KiBjb3JyZXNwb25kZW5jZTogd2UgY29weSBwcmVjaXNlbHkgYGRldi0mZ3Q7YWRkcl9sZW5gIGJ5dGVzIGludG8gdGhlIGBoYS0mZ3Q7YWRkcmAgYnVmZmVyLCBhbmQgd2Ugc2VuZCBleGFjdGx5IGBkZXYtJmd0O2FkZHJfbGVuYCBieXRlcyBhcyB0aGUgYElGQV9NVUxUSUNBU1RgIGF0dHJpYnV0ZSBpbiB0aGUgbmV0bGluayBtZXNzYWdlLiBUaGlzIGFwcGVhcnMgY29uc2lzdGVudC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRvIGxvb2sgZm9yIHJlbGF0ZWQgY29udGV4dHMgYW5kIHBvdGVudGlhbCB2YXJpYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGR1bXBpbmcgbWVjaGFuaXNtIHdpdGggYHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBuZWVkcyBzY3J1dGlueS4gSSBzZWUgdGhlIHN0cnVjdHVyZSwgd2hpY2ggY29udGFpbnMgYHRndF9uZXRgLCBgbmV0bnNfdHJhY2tlcmAsIGBuZXRuc2lkYCwgYW5kIGBpZmluZGV4YC4gSW4gdGhlIGR1bXBpbmcgcHJvY2VzcyBpdHNlbGYgKGBydG5sX2R1bXBfbWNhZGRyYCksIHdlIGluaXRpYWxpemUgYGZpbHRlcmAgd2l0aCBgdGd0X25ldGAgYW5kIGBuZXRuc2lkYC4gSW50ZXJlc3RpbmcuLi4gQW5kIHRoZSBjb250ZXh0IHByb3ZpZGVkIHRvIHRoZSBjYWxsYmFjayAoYGNiLSZndDtjdHhgKSBhcHBlYXJzIHRvIGNvbnRhaW4gYW4gYGlmaW5kZXhgIGFuZCBhbiBgYWRkcl9pZHhgIGVsZW1lbnQuCgpOb3csIHRoYXQgYGNiLSZndDtjdHhgIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgbmV0bGluaywgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgbmV0bGluayBmcmFtZXdvcmsgemVyby1pbml0aWFsaXplcyB0aGUgY2FsbGJhY2sgY29udGV4dCB3aGVuIHRoZSBkdW1wIHN0YXJ0cywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgZGlyZWN0bHkuIEEgcXVpY2sgdmVyaWZpY2F0aW9uIG9mIGhvdyBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzIGZ1bmN0aW9uIHdpbGwgY2xhcmlmeSB0aGlzIGRldGFpbCBhbmQgc29saWRpZnkgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGR1bXBpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ItXHUwMDNlY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmM9Mjc9c3RhdGljIHN0cnVjdCBuZXRkZXZfbmxfZHVtcF9jdHggKm5ldGRldl9kdW1wX2N0eChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMC1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MzE6XHRyZXR1cm4gKHN0cnVjdCBuZXRkZXZfbmxfZHVtcF9jdHggKiljYi1cdTAwM2VjdHg7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMyLX1cbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jPTgxPW5ldGRldl9ubF9wYWdlX3Bvb2xfZ2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtODMte1xubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYzo4NDpcdHN0cnVjdCBwYWdlX3Bvb2xfZHVtcF9jYiAqc3RhdGUgPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtODUtXHRjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvID0gZ2VubF9pbmZvX2R1bXAoY2IpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1NDQ9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTUzLVx0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTU0Olx0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTU1LVx0c3RydWN0IG5ldCAqdGd0X25ldCA9IG5ldDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00Njg3PXN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5Ni1cdFx0aW50IGFkZHJfaWR4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDY5NzpcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5OC1cdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTUxNjQ9c3RhdGljIGludCBubG1zZ19wb3B1bGF0ZV9mZGIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MTY5LXtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUxNzA6XHRzdHJ1Y3QgbmRvX2ZkYl9kdW1wX2NvbnRleHQgKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTE3MS1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMxNj1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMTgtXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IE5VTEwsICpjb3BzID0gTlVMTDtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUzMTk6XHRzdHJ1Y3QgbmRvX2ZkYl9kdW1wX2NvbnRleHQgKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMyMC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICpicl9kZXYgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTY2NDk9c3RhdGljIGludCBydG5sX3N0YXRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NTktXHRcdGludCBwcml2aWR4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjY2MDpcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjY2MS1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NjgzMT1zdGF0aWMgaW50IHJ0bmxfbWRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjgzMi17XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo2ODMzOlx0c3RydWN0IHJ0bmxfbWRiX2R1bXBfY3R4ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4MzQtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4NjEtXHRcdCAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6Njg2MjpcdFx0bWVtc2V0KGNiLVx1MDAzZWN0eCwgMCwgc2l6ZW9mKGNiLVx1MDAzZWN0eCkpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjg2My1cdFx0Y2ItXHUwMDNlcHJldl9zZXEgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBzcGVjaWZpYyBjb2RlIGNoZWNrLCB0aGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nOgoKKipEZWNvbnN0cnVjdGluZyBgbmV0bGlua19kdW1wYCBhbmQgaXRzIENhbGxiYWNrKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBjYmAgKGxpa2VseSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24pIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0bGlua19kdW1wYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmNgLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIGBuZXRsaW5rX2R1bXBgLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IEhvdyBpcyB0aGF0IGNhbGxiYWNrIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5IHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZHVtcGluZyBuZXRsaW5rIG1lc3NhZ2VzPyBJcyBpdCBhIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbiBwb2ludGVyPyBJcyBpdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrPyBIZWFwPyBJcyB0aGVyZSBhIHN0cnVjdHVyZSBjb250YWluaW5nIGl0LCBhbmQgaG93IGlzICp0aGF0KiBzdHJ1Y3R1cmUgaGFuZGxlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBob3cgaXQgaXMgdXNlZCBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgYSBub24tdHJpdmlhbCBsaWZldGltZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGxpZmVjeWNsZSB0byBlbnN1cmUgSSBjb21wcmVoZW5kIGl0cyB1c2UsIHBvc3NpYmxlIGxpZmV0aW1lLCBhbmQgYW55IGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyYWNpbmcgdGhlIGRhdGEgZmxvdyBvZiB0aGF0IGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiBgbmV0bGlua19kdW1wYC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGFzIHRoaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBuZXRsaW5rIGlzIGludm9rZWQuIEkgZXhwZWN0IHRoZSBjb2RlIHdpbGwgYmUgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldGxpbmsgc29ja2V0JiMzOTtzIHN0YXRlLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgcGVyc3BlY3RpdmUgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0bGlua19kdW1wXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz05OD1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmxrX2NiX211dGV4X2tleV9zdHJpbmdzW01BWF9MSU5LUyAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMTMzLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzNDpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbik7XG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMTM1LVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0xOTA3PXN0YXRpYyBpbnQgbmV0bGlua19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMTk4MS1cdCAgICBhdG9taWNfcmVhZChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2M9IHNrLVx1MDAzZXNrX3JjdmJ1ZiAvIDIpIHtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxOTgyOlx0XHRyZXQgPSBuZXRsaW5rX2R1bXAoc2ssIGZhbHNlKTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xOTgzLVx0XHRpZiAocmV0KSB7XG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIyMzE9c3RhdGljIGludCBuZXRsaW5rX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyNTgtXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjI1OTpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbilcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjYwLXtcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjM5Mj1pbnQgX19uZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjQ0NS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyNDQ2Olx0cmV0ID0gbmV0bGlua19kdW1wKHNrLCB0cnVlKTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yNDQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldGxpbmsgRHVtcCBQcm9jZXNzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgYF9fbmV0bGlua19kdW1wX3N0YXJ0YCBpbiBgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCBtZWNoYW5pY3Mgb2YgdGhlIG5ldGxpbmsgZHVtcGluZyBwcm9jZXNzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpbml0aWF0ZXMgYSBkdW1wLCB0aGUgY29udGV4dCBzZXR1cCwgYW5kIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBzdGFydCBkaXNzZWN0aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBuZXRsaW5rIGZhbWlseSBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O2xsIGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGZyb20gdGhlIHRvcCBkb3duLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBOZXRsaW5rIG1lc3NhZ2UgcXVldWUsIGFueSBidWZmZXIgbWFuYWdlbWVudCB0aGF0JiMzOTtzIGhhcHBlbmluZywgYW5kIGhvdyB0aGUgZHVtcCYjMzk7cyBzdGF0ZSBpcyBpbml0aWFsaXplZC4gSSBleHBlY3QgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIGNvcmUgZHVtcCBsb29wIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSBwcm9iYWJseSBjcml0aWNhbCB0byB0aGlzIHdob2xlIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBhbGwgaW50aW1hdGVseSB0aWVkIHRvIG5ldGxpbmsmIzM5O3MgYXN5bmNocm9ub3VzIG5hdHVyZSwgc28gSeKAmW0gcmVhbGx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgY29uY3VycmVuY3kgYW5kIGhvdyB0aGUgZHVtcCBpcyBwcm9wZXJseSBzaWduYWxlZCB0byBjb21wbGV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQyMDpcdFx0fVxuMjQyMTpcdFxuMjQyMjpcdFx0Y2IgPSBcdTAwMjZubGstXHUwMDNlY2I7XG4yNDIzOlx0XHRtZW1zZXQoY2IsIDAsIHNpemVvZigqY2IpKTtcbjI0MjQ6XHRcdGNiLVx1MDAzZWR1bXAgPSBjb250cm9sLVx1MDAzZWR1bXA7XG4yNDI1Olx0XHRjYi1cdTAwM2Vkb25lID0gY29udHJvbC1cdTAwM2Vkb25lO1xuMjQyNjpcdFx0Y2ItXHUwMDNlbmxoID0gbmxoO1xuMjQyNzpcdFx0Y2ItXHUwMDNlZGF0YSA9IGNvbnRyb2wtXHUwMDNlZGF0YTtcbjI0Mjg6XHRcdGNiLVx1MDAzZW1vZHVsZSA9IGNvbnRyb2wtXHUwMDNlbW9kdWxlO1xuMjQyOTpcdFx0Y2ItXHUwMDNlbWluX2R1bXBfYWxsb2MgPSBjb250cm9sLVx1MDAzZW1pbl9kdW1wX2FsbG9jO1xuMjQzMDpcdFx0Y2ItXHUwMDNlZmxhZ3MgPSBjb250cm9sLVx1MDAzZWZsYWdzO1xuMjQzMTpcdFx0Y2ItXHUwMDNlc2tiID0gc2tiO1xuMjQzMjpcdFxuMjQzMzpcdFx0Y2ItXHUwMDNlc3RyaWN0X2NoZWNrID0gbmxrX3Rlc3RfYml0KFNUUklDVF9DSEssIE5FVExJTktfQ0Ioc2tiKS5zayk7XG4yNDM0Olx0XG4yNDM1Olx0XHRpZiAoY29udHJvbC1cdTAwM2VzdGFydCkge1xuMjQzNjpcdFx0XHRjYi1cdTAwM2VleHRhY2sgPSBjb250cm9sLVx1MDAzZWV4dGFjaztcbjI0Mzc6XHRcdFx0cmV0ID0gY29udHJvbC1cdTAwM2VzdGFydChjYik7XG4yNDM4Olx0XHRcdGNiLVx1MDAzZWV4dGFjayA9IE5VTEw7XG4yNDM5Olx0XHRcdGlmIChyZXQpXG4yNDQwOlx0XHRcdFx0Z290byBlcnJvcl9wdXQ7XG4yNDQxOlx0XHR9XG4yNDQyOlx0XG4yNDQzOlx0XHRXUklURV9PTkNFKG5say1cdTAwM2VjYl9ydW5uaW5nLCB0cnVlKTtcbjI0NDQ6XHRcdG5say1cdTAwM2VkdW1wX2RvbmVfZXJybm8gPSBJTlRfTUFYO1xuMjQ0NTpcdFxuMjQ0NjpcdFx0cmV0ID0gbmV0bGlua19kdW1wKHNrLCB0cnVlKTtcbjI0NDc6XHRcbjI0NDg6XHRcdHNvY2tfcHV0KHNrKTtcbjI0NDk6XHRcbjI0NTA6XHRcdGlmIChyZXQpXG4yNDUxOlx0XHRcdHJldHVybiByZXQ7XG4yNDUyOlx0XG4yNDUzOlx0XHQvKiBXZSBzdWNjZXNzZnVsbHkgc3RhcnRlZCBhIGR1bXAsIGJ5IHJldHVybmluZyAtRUlOVFIgd2VcbjI0NTQ6XHRcdCAqIHNpZ25hbCBub3QgdG8gc2VuZCBBQ0sgZXZlbiBpZiBpdCB3YXMgcmVxdWVzdGVkLlxuMjQ1NTpcdFx0ICovXG4yNDU2Olx0XHRyZXR1cm4gLUVJTlRSO1xuMjQ1NzpcdFxuMjQ1ODpcdGVycm9yX3B1dDpcbjI0NTk6XHRcdG1vZHVsZV9wdXQoY29udHJvbC1cdTAwM2Vtb2R1bGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU1NwoJCQkJCQkJb3V0cHV0OiAzNDgKCQkJCQkJCXRob3VnaHRzOiAyNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgTXVsdGljYXN0IEFkZHJlc3MgRHVtcGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJJiMzOTt2ZSBleGFtaW5lZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyBjb2RlIGluIGRldGFpbCB0byBlbnN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhZHMgdG8gbGVha3Mgb3IgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYGNiLSZndDtjdHhgLCB1c2VkIGZvciB0cmFja2luZyB0aGUgZHVtcCYjMzk7cyBzdGF0ZSwgaXMgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCwgZW5zdXJpbmcgbm8gZ2FyYmFnZSBkYXRhIGlzIGNhcnJpZWQgb3ZlciBiZXR3ZWVuIGR1bXBzLgoKVGhlbiwgSSB3ZW50IHRocm91Z2ggdGhlIGNvcmUgZnVuY3Rpb24gYHJ0bmxfZmlsbF9tY2FkZHJgIGxpbmUtYnktbGluZS4gVGhlIGBpZmFkZHJtc2dgIHN0cnVjdHVyZSwgdGhlIGZvdW5kYXRpb24gb2YgdGhlIG1lc3NhZ2UsIGhhcyBhbGwgaXRzIGZpZWxkcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBlbGltaW5hdGluZyBhbnkgcmlza3Mgd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGUgbmV0bGluayBhdHRyaWJ1dGVzIGFyZSBwb3B1bGF0ZWQgd2l0aCB2YWx1ZXMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdCBzY2FsYXJzIG9yIGNvcGllcyBvZiBkYXRhIHRoYXQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChsaWtlIHRoZSBkZXZpY2UmIzM5O3MgaGFyZHdhcmUgYWRkcmVzcykuIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb25zLCBlc3NlbnRpYWwgZm9yIGluc2VydGluZyB0aGVzZSBhdHRyaWJ1dGVzIGludG8gdGhlIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlIGFueSBuZWNlc3NhcnkgcGFkZGluZywgcHJldmVudGluZyB1bmludGVuZGVkIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuCgpJIGNoZWNrZWQgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCB3aGljaCB2YWxpZGF0ZXMgdGhlIHJlcXVlc3QuIFRoZSBjb2RlIGNhcmVmdWxseSBwYXJzZXMgdGhlIGluY29taW5nIG5ldGxpbmsgbWVzc2FnZSBhbmQgaW5pdGlhbGl6ZXMgbG9jYWwgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBkYXRhLiBUaGUgYHRiYCBhcnJheSwgdXNlZCB0byBob2xkIHBhcnNlZCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlzIHBvcHVsYXRlZCB0aHJvdWdoIHRoZSBgbmxtc2dfcGFyc2VgIGZ1bmN0aW9uIGFuZCBpcyBzYWZlLiBUaGUgYGZpbHRlcmAgc3RydWN0dXJlLCB3aGljaCBkZWZpbmVzIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgZm9yIHRoZSBkdW1wLCBpcyBhbHNvIGNvbnNpc3RlbnRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdW5tZW50aW9uZWQgZmllbGRzLCB3aXRoIGNhcmVmdWwgaGFuZGxpbmcgb2YgdGhlIHBvdGVudGlhbGx5IG5ldG5zLXNwZWNpZmljIGZpbHRlcmluZy4KCkluIHRoZSBgcnRubF9kdW1wX21jYWRkcmAgZnVuY3Rpb24sIHdoaWNoIG9yY2hlc3RyYXRlcyB0aGUgZHVtcCBwcm9jZXNzLCB0aGUgYGZpbHRlcmAgc3RydWN0IGlzIGNvbnNpc3RlbnRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBpdGVyYXRpb24gdGhyb3VnaCBkZXZpY2VzIGlzIGNhcmVmdWxseSBtYW5hZ2VkLCBhbG9uZyB3aXRoIG5ldG5zIGhhbmRsaW5nLiBUaGUgYGN0eGAgdmFyaWFibGUgKGEgcG9pbnRlciB0byB0aGUgY2FsbGJhY2sgY29udGV4dCkgaGFzIGl0cyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBjbGVhcmVkLCBhbmQgdGhlIGxvb3AgbG9naWMgZW5zdXJlcyBubyB1bmluaXRpYWxpemVkIHZhbHVlcyBhcmUgcmVhZC4KCk15IGNvbXByZWhlbnNpdmUgcmV2aWV3IGhhcyBjb25maXJtZWQgdGhhdDoKCjEuICBBbGwgdmFyaWFibGVzIGludm9sdmVkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgZWl0aGVyIGRpcmVjdGx5LCB0aHJvdWdoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBvciBieSB0aGUgbmV0bGluayBjb3JlIGZ1bmN0aW9ucy4KMi4gIE5vIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBvciB1bmluaXRpYWxpemVkIGRhdGEgaXMgZXZlciBzZW50IHRvIHVzZXJzcGFjZS4KMy4gIENvbmRpdGlvbmFsIGJyYW5jaGluZyBkb2VzIG5vdCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KNC4gIFN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIGFkZXF1YXRlIHRvIGNhdGNoIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMgaW4gdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByaXNrIGlzIHJlbGF0ZWQgdG8gUkNVIGlzc3VlcywgbG9ja2luZyBpc3N1ZXMgb3Igb3V0LW9mLWJvdW5kcyBpbiBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgdGhlc2UgZXJyb3JzIGNhbiBiZSBjYXVnaHQgd2l0aCBLQVNBTi4KClRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIG5vdCBhIGNhbmRpZGF0ZSBmb3IgS01TQU4tc3BlY2lmaWMgZnV6emluZy4gVGhlIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIHBvc3NpYmxlIG1lbW9yeSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRubF9kdW1wX21jYWRkciBhbmQgcnRubF9maWxsX21jYWRkci5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuMS4gYHN0cnVjdCBpZmFkZHJtc2dgIHBheWxvYWQ6IEFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHN0cnVjdCBjb250YWlucyA0IGBfX3U4YCBmaWVsZHMgYW5kIDEgYF9fdTMyYCBmaWVsZCB0b3RhbGluZyA4IGJ5dGVzIHdpdGggemVybyBwYWRkaW5nIGJ5dGVzLlxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXHUwMDNlYWRkcmAgb2YgbGVuZ3RoIGBkZXYtXHUwMDNlYWRkcl9sZW5gKS5cbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRubF9kdW1wX21jYWRkciBhbmQgcnRubF9maWxsX21jYWRkci5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuMS4gYHN0cnVjdCBpZmFkZHJtc2dgIHBheWxvYWQ6IEFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHN0cnVjdCBjb250YWlucyA0IGBfX3U4YCBmaWVsZHMgYW5kIDEgYF9fdTMyYCBmaWVsZCB0b3RhbGluZyA4IGJ5dGVzIHdpdGggemVybyBwYWRkaW5nIGJ5dGVzLlxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXHUwMDNlYWRkcmAgb2YgbGVuZ3RoIGBkZXYtXHUwMDNlYWRkcl9sZW5gKS5cbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6MzAuMTE1Nzc5Mjc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyNDU5OTEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmxfZHVtcF9tY2FkZHIgYW5kIHJ0bmxfZmlsbF9tY2FkZHIuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxcbjEuIGBzdHJ1Y3QgaWZhZGRybXNnYCBwYXlsb2FkOiBBbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBzdHJ1Y3QgY29udGFpbnMgNCBgX191OGAgZmllbGRzIGFuZCAxIGBfX3UzMmAgZmllbGQgdG90YWxpbmcgOCBieXRlcyB3aXRoIHplcm8gcGFkZGluZyBieXRlcy5cXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXFx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXFx1MDAzZWFkZHJgIG9mIGxlbmd0aCBgZGV2LVxcdTAwM2VhZGRyX2xlbmApLlxcbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuXFxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRuZXRsaW5rLCBpbXBsZW1lbnRpbmcgcmVxdWVzdCB2YWxpZGF0aW9uLCBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoaXMgcmVhY2hhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0MzozMC4xMTU3ODM0NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzU2NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZhYmExMjgyMDdiM2Y5Y2MyMTVjN2U5YTEzODU2MTRhMDcxMzZlYjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDM6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4xYTE3ZTU1ZDFjY2EwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuQEAgLTc3LDYgKzc3LDggQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgICAgbmFtZTogbWNhdXRvam9pblxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGdsb2JhbFxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xMTksNyArMTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgdHlwZTogdTMyXFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxcbi0gICAgICAgIHR5cGU6IGJpbmFyeVxcbisgICAgICAgIHR5cGU6IHMzMlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogcHJvdG9cXG4gICAgICAgICB0eXBlOiB1OFxcbkBAIC0xNjgsNyArMTcwLDEzIEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWZhZGRyLWFsbFxcbiAgICAgLVxcbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3RcXG4tICAgICAgZG9jOiBHZXQgLyBkdW1wIElQdjQvSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzLlxcbisgICAgICBkb2M6IHxcXG4rICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3NcXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxcbisgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXFxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcXFwiYnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcXFwiLCByYXRoZXIgdGhhbiBieSBhXFxuKyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LlxcbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXFxuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXFxuICAgICAgIGRvOlxcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXFxuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gZmxhZ3NcXG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXFxuICAgICAgICAgcmVwbHk6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG5pbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuQEAgLTU3LDYgKzU3LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURVxcdDB4MjAwXFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlxcdDB4NDAwXFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcXHQweDgwMFxcbisjZGVmaW5lIElGQV9GX0dMT0JBTFxcdFxcdDB4MTAwMFxcbiBcXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xcbiBcXHRfX3UzMlxcdGlmYV9wcmVmZXJlZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmQ1MWQ3NzNiOTNjNmQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC00NTY2LDYgKzQ1NjYsMTc4IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdHJldHVybiBza2ItXFx1MDAzZWxlbiA/IDogcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXFxuK1xcdFxcdFxcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxcbit7XFxuK1xcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuK1xcbitcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxcbitcXHRcXHRcXHRmbGFncyk7XFxuK1xcdGlmICghbmxoKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XFxuK1xcdC8qIGlmbS1cXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXFxuK1xcdGlmbS1cXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX2luZGV4ID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXG4rXFx0aWYgKChuZXRuc2lkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XFxuK1xcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcXG4rXFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4rXFx0aW50IGFkZHJfaWR4ID0gMDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xcbitcXHRcXHRpZiAoYWRkcl9pZHggXFx1MDAzYyAqc19hZGRyX2lkeCkge1xcbitcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHR9XFxuK1xcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XFxuK1xcbitcXHQqc19hZGRyX2lkeCA9IGVyciBcXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xcbitcXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xcbitcXHRuZXRuc190cmFja2VyIG5zX3RyYWNrZXI7XFxuK1xcdGludCBuZXRuc2lkO1xcbitcXHRpbnQgaWZpbmRleDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG5sX21jYWRkcl9kdW1wX3BvbGljeVtJRkFfTUFYICsgMV0gPSB7XFxuK1xcdFtJRkFfVEFSR0VUX05FVE5TSURdXFx0PSB7IC50eXBlID0gTkxBX1MzMiB9LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVggKyAxXTtcXG4rXFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XFxuK1xcdGlmICghaWZtKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXFx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXFx1MDAzZWlmYV9zY29wZSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXFxuK1xcdFxcdFxcdCAgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3ksIGV4dGFjayk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pIHtcXG4rXFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbitcXG4rXFx0XFx0ZmlsdGVyLVxcdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XFxuK1xcdFxcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXFx1MDAzZW5ldG5zaWQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG5ldCkpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKG5ldCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRmaWx0ZXItXFx1MDAzZXRndF9uZXQgPSBuZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZpbHRlci1cXHUwMDNlaWZpbmRleCA9IGlmbS1cXHUwMDNlaWZhX2luZGV4O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcXG4rXFx0XFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4rXFx0XFx0Lm5ldG5zaWQgPSAtMSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcXG4rXFx0XFx0aW50IGFkZHJfaWR4O1xcbitcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXFx1MDAzZW5saCwgc2tiLVxcdTAwM2VzaywgXFx1MDAyNmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VleHRhY2spO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFxuK1xcdGlmIChmaWx0ZXIuaWZpbmRleCkge1xcbitcXHRcXHRjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuK1xcdFxcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuK1xcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XFxuK1xcdFxcdGlmICghZGV2KSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRzX2lmaW5kZXggPSBjdHgtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbitcXHRcXHQvKiBUaGUgZGV2aWNlIHRoZSBkdW1wIHN0b3BwZWQgYXQgaXMgZ29uZSwgZG8gbm90IHNraXBcXG4rXFx0XFx0ICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VpZmluZGV4ICE9IHNfaWZpbmRleClcXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX2lkeCA9IDA7XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpZiAoZmlsdGVyLm5ldG5zaWQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cHV0X25ldF90cmFjayhmaWx0ZXIudGd0X25ldCwgXFx1MDAyNmZpbHRlci5uc190cmFja2VyKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCxcXG5AQCAtNzI1MSw2ICs3NDIzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID1cXG4gXFx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcXG4gXFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxcbiBcXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTElOS1BST1AsIC5kb2l0ID0gcnRubF9kZWxsaW5rcHJvcH0sXFxuK1xcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcXG4rXFx0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuIFxcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXFxuIFxcdCAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sXFxuIFxcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbkBAIC0xLDE3ICsxLDIxIEBAXFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4raW1wb3J0IGVycm5vXFxuIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBObEVycm9yLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxcbiBcXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXFxceGUwXFxcXHgwMFxcXFx4MDBcXFxceDAxJ1xcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXFxceGVmXFxcXHgwMVxcXFx4MDFcXFxceDAxJ1xcbiBJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMnKVxcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXFxuK0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAnMDE6MDA6NWU6MDE6MDE6MDEnXFxuK0VUSF9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoRVRIX1RFU1RfTVVMVElDQVNUX1NUUi5yZXBsYWNlKCc6JywgJycpKVxcbiBcXG4gXFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcXG5AQCAtMTA1LDYgKzEwOSw3MCBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgICAgICAgICAgICAgIHMyLmNsb3NlKClcXG4gXFxuIFxcbitkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBWZXJpZnkgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIGFuIEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUXFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcXG4rICAgIHRhcmdldC1uZXRuc2lkLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zLCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIGZvciBpZm5hbWUgaW4gKFxcXCJkdW1teTFcXFwiLCBcXFwiZHVtbXkyXFxcIik6XFxuKyAgICAgICAgICAgIGlwKGZcXFwibGluayBhZGQgbmFtZSB7aWZuYW1lfSB0eXBlIGR1bW15XFxcIilcXG4rICAgICAgICAgICAgaXAoZlxcXCJsaW5rIHNldCB7aWZuYW1lfSB1cFxcXCIpXFxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcXFwiZHVtbXkxXFxcIilcXG4rICAgICAgICBpcChmXFxcIm1hZGRyIGFkZCB7RVRIX1RFU1RfTVVMVElDQVNUX1NUUn0gZGV2IGR1bW15MVxcXCIpXFxuK1xcbisgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXFxuKyAgICAgICAgZGVmZXIocnRubC5jbG9zZSlcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxcbisgICAgICAgICAgICAgICAge1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX1BBQ0tFVCwgXFxcImlmYS1pbmRleFxcXCI6IGRldl9pZHh9LFxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxcbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XFxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcFxcXCIpXFxuKyAgICAgICAgICAgIHJhaXNlXFxuK1xcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcXG4rICAgICAgICBrc2Z0X2VxKHthZGRyWydpZmEtaW5kZXgnXSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXFxuKyAgICAgICAgICAgICAgICBcXFwiQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wIGlnbm9yZWQgaWZhLWluZGV4IGZpbHRlclxcXCIpXFxuK1xcbisgICAgICAgIGVudHJpZXMgPSB7YWRkclsnbXVsdGljYXN0J106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxcbitcXG4rICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcXG4rICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXFxuKyAgICAgICAgYWxsX2hvc3RzID0gZW50cmllcy5nZXQoRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhbGxfaG9zdHMsXFxuKyAgICAgICAgICAgICAgICAgICAgICBcXFwiZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcXFwiKVxcbisgICAgICAgIGlmIGFsbF9ob3N0cyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2dsb2JhbCcsIGFsbF9ob3N0c1snZmxhZ3MnXSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgXFxcInByb3RvY29sIGVudHJ5IGlzIGdsb2JhbFxcXCIpXFxuK1xcbisgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVClcXG4rICAgICAgICBrc2Z0X25vdF9ub25lKHN0YXRpYywgXFxcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X2VxKHN0YXRpY1snbWMtdXNlcnMnXSwgMSxcXG4rICAgICAgICAgICAgICAgICAgICBcXFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXFxcIilcXG4rICAgICAgICAgICAga3NmdF9pbignZ2xvYmFsJywgc3RhdGljWydmbGFncyddLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbFxcXCIpXFxuK1xcbisgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XFxuKyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6XFxuKyAgICAgICAgICAgIGlwKGZcXFwibmV0bnMgc2V0IHtwZWVyfSA1XFxcIilcXG4rICAgICAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcXFwiLCBucz1wZWVyKVxcbisgICAgICAgICAgICBpcChcXFwibGluayBzZXQgZHVtbXkzIHVwXFxcIiwgbnM9cGVlcilcXG4rICAgICAgICAgICAgcGVlcl9pZHggPSBpcChcXFwibGluayBzaG93IGR1bW15M1xcXCIsIGpzb249VHJ1ZSwgbnM9cGVlcilbMF1bJ2lmaW5kZXgnXVxcbitcXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXFxuKyAgICAgICAgICAgICAgICB7XFxcImlmYS1mYW1pbHlcXFwiOiBzb2NrZXQuQUZfUEFDS0VULCBcXFwidGFyZ2V0LW5ldG5zaWRcXFwiOiA1fSxcXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcXG4rICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJ2lmYS1pbmRleCddLCBhZGRyWyd0YXJnZXQtbmV0bnNpZCddKVxcbisgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcInRhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRuc1xcXCIpXFxuK1xcbitcXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcXG5AQCAtMzE1LDcgKzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4gXFxuIFxcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcXG4rICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjMwLjcyNDQ3NDc0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk3ODkyMjUzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5ldGxpbmssIGltcGxlbWVudGluZyByZXF1ZXN0IHZhbGlkYXRpb24sIGRldmljZSB0cmF2ZXJzYWwsIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhpcyByZWFjaGFibGUgbmV0bGluayBpbnRlcmZhY2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmFiYTEyODIwN2IzZjljYzIxNWM3ZTlhMTM4NTYxNGEwNzEzNmViNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLjFhMTdlNTVkMWNjYTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiArNzcsOCBAQCBkZWZpbml0aW9uczpcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkXG4tICAgICAgICB0eXBlOiBiaW5hcnlcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHByb3RvXG4gICAgICAgICB0eXBlOiB1OFxuQEAgLTE2OCw3ICsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBtdXN0IHNlbGVjdCB0aGUgYWRkcmVzc1xuKyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb25cbisgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXG4rICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgZXhwbGljaXRseSwgZS5nLiB3aXRoXG4rICAgICAgICBTSU9DQURETVVMVEkgb3IgXCJicmlkZ2UgZmRiIGFkZCAuLi4gc2VsZlwiLCByYXRoZXIgdGhhbiBieSBhXG4rICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuXG4gICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRyc1xuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXG4gICAgICAgZG86XG5AQCAtMTgxLDEwICsxODksMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxuICAgICAgICAgICAgIC0gbWMtdXNlcnNcbiAgICAgICAgICAgICAtIGNhY2hlaW5mb1xuKyAgICAgICAgICAgIC0gZmxhZ3NcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXVxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICAgIHJlcGx5OlxuICAgICAgICAgICB2YWx1ZTogNThcbiAgICAgICAgICAgYXR0cmlidXRlczogKm1jYWRkci1hdHRyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5pbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuQEAgLTU3LDYgKzU3LDcgQEAgZW51bSB7XG4gI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFXHQweDIwMFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlx0MHg0MDBcbiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZXHQweDgwMFxuKyNkZWZpbmUgSUZBX0ZfR0xPQkFMXHRcdDB4MTAwMFxuIFxuIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHtcbiBcdF9fdTMyXHRpZmFfcHJlZmVyZWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggODFjNWE2MTA0ZGVhMS4uZDUxZDc3M2I5M2M2ZCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTQ1NjYsNiArNDU2NiwxNzggQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdHJldHVybiBza2ItXHUwMDNlbGVuID8gOiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuK1x0XHRcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuK3tcbitcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDtcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuK1xuK1x0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcbitcdFx0XHRmbGFncyk7XG4rXHRpZiAoIW5saClcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcbitcdGlmbS1cdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xuK1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuK1x0LyogaWZtLVx1MDAzZWlmYV9mbGFncyBob2xkcyA4IGJpdHMsIHRoZSBmdWxsIHZhbHVlIGlzIGluIElGQV9GTEFHUyAqL1xuK1x0aWZtLVx1MDAzZWlmYV9mbGFncyA9IChfX3U4KWlmYV9mbGFncztcbitcdGlmbS1cdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xuK1x0aWZtLVx1MDAzZWlmYV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuK1xuK1x0aWYgKChuZXRuc2lkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fFxuK1x0ICAgIG5sYV9wdXQoc2tiLCBJRkFfTVVMVElDQVNULCBkZXYtXHUwMDNlYWRkcl9sZW4sIGhhLVx1MDAzZWFkZHIpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVx1MDAzZXJlZmNvdW50KSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7XG4rXHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4rXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuK1x0aW50IGFkZHJfaWR4ID0gMDtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4rXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4rXHRcdGlmIChhZGRyX2lkeCBcdTAwM2MgKnNfYWRkcl9pZHgpIHtcbitcdFx0XHRhZGRyX2lkeCsrO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuK1x0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdFx0YWRkcl9pZHgrKztcbitcdH1cbitcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4rXG4rXHQqc19hZGRyX2lkeCA9IGVyciBcdTAwM2MgMCA/IGFkZHJfaWR4IDogMDtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlciB7XG4rXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xuK1x0bmV0bnNfdHJhY2tlciBuc190cmFja2VyO1xuK1x0aW50IG5ldG5zaWQ7XG4rXHRpbnQgaWZpbmRleDtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG5sX21jYWRkcl9kdW1wX3BvbGljeVtJRkFfTUFYICsgMV0gPSB7XG4rXHRbSUZBX1RBUkdFVF9ORVROU0lEXVx0PSB7IC50eXBlID0gTkxBX1MzMiB9LFxuK307XG4rXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlciAqZmlsdGVyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVggKyAxXTtcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcdGludCBlcnI7XG4rXG4rXHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcbitcdGlmICghaWZtKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdFwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoaWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXHUwMDNlaWZhX3Njb3BlKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0ZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLFxuK1x0XHRcdCAgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3ksIGV4dGFjayk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pIHtcbitcdFx0c3RydWN0IG5ldCAqbmV0O1xuK1xuK1x0XHRmaWx0ZXItXHUwMDNlbmV0bnNpZCA9IG5sYV9nZXRfczMyKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pO1xuK1x0XHRuZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLVx1MDAzZW5ldG5zaWQpO1xuK1x0XHRpZiAoSVNfRVJSKG5ldCkpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFwiKTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXQpO1xuK1x0XHR9XG4rXHRcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCBcdTAwMjZmaWx0ZXItXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4rXHRcdGZpbHRlci1cdTAwM2V0Z3RfbmV0ID0gbmV0O1xuK1x0fVxuK1xuK1x0ZmlsdGVyLVx1MDAzZWlmaW5kZXggPSBpZm0tXHUwMDNlaWZhX2luZGV4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbitcdFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuK1x0XHQubmV0bnNpZCA9IC0xLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuK1x0c3RydWN0IHtcbitcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuK1x0XHRpbnQgYWRkcl9pZHg7XG4rXHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbitcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuK1x0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRzX2lmaW5kZXggPSBjdHgtXHUwMDNlaWZpbmRleDtcbitcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG4rXHRcdC8qIFRoZSBkZXZpY2UgdGhlIGR1bXAgc3RvcHBlZCBhdCBpcyBnb25lLCBkbyBub3Qgc2tpcFxuK1x0XHQgKiBlbnRyaWVzIG9mIHRoZSBuZXh0IG9uZS5cbitcdFx0ICovXG4rXHRcdGlmIChkZXYtXHUwMDNlaWZpbmRleCAhPSBzX2lmaW5kZXgpXG4rXHRcdFx0Y3R4LVx1MDAzZWFkZHJfaWR4ID0gMDtcbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICBmaWx0ZXIubmV0bnNpZCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rb3V0OlxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZmlsdGVyLm5ldG5zaWQgXHUwMDNlPSAwKVxuK1x0XHRwdXRfbmV0X3RyYWNrKGZpbHRlci50Z3RfbmV0LCBcdTAwMjZmaWx0ZXIubnNfdHJhY2tlcik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuIFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG5AQCAtNzI1MSw2ICs3NDIzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID1cbiBcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXG4gXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sXG4gXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTElOS1BST1AsIC5kb2l0ID0gcnRubF9kZWxsaW5rcHJvcH0sXG4rXHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXG4rXHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4gXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0xLDE3ICsxLDIxIEBAXG4gIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbitpbXBvcnQgZXJybm9cbiBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBObEVycm9yLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyXG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXHhlMFxceDAwXFx4MDBcXHgwMSdcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXHhlZlxceDAxXFx4MDFcXHgwMSdcbiBJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMnKVxuK0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnMDEwMDVlMDAwMDAxJylcbitFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJzAxOjAwOjVlOjAxOjAxOjAxJ1xuK0VUSF9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoRVRIX1RFU1RfTVVMVElDQVNUX1NUUi5yZXBsYWNlKCc6JywgJycpKVxuIFxuIFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcbkBAIC0xMDUsNiArMTA5LDcwIEBAIGRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgIHMyLmNsb3NlKClcbiBcbiBcbitkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBWZXJpZnkgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIGFuIEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUXG4rICAgIGR1bXA6IHRoZSBpZmEtaW5kZXggZmlsdGVyLCBtYy11c2VycywgdGhlIGdsb2JhbCBmbGFnIGFuZFxuKyAgICB0YXJnZXQtbmV0bnNpZC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGZvciBpZm5hbWUgaW4gKFwiZHVtbXkxXCIsIFwiZHVtbXkyXCIpOlxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgYWRkIG5hbWUge2lmbmFtZX0gdHlwZSBkdW1teVwiKVxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgc2V0IHtpZm5hbWV9IHVwXCIpXG4rICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFwiZHVtbXkxXCIpXG4rICAgICAgICBpcChmXCJtYWRkciBhZGQge0VUSF9URVNUX01VTFRJQ0FTVF9TVFJ9IGRldiBkdW1teTFcIilcbitcbisgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4rICAgICAgICBkZWZlcihydG5sLmNsb3NlKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAgYWxsX2hvc3RzID0gZW50cmllcy5nZXQoRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGFsbF9ob3N0cyxcbisgICAgICAgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAgaWYgYWxsX2hvc3RzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdnbG9iYWwnLCBhbGxfaG9zdHNbJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcIilcbitcbisgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVClcbisgICAgICAgIGtzZnRfbm90X25vbmUoc3RhdGljLCBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoc3RhdGljWydtYy11c2VycyddLCAxLFxuKyAgICAgICAgICAgICAgICAgICAgXCJ1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBzdGF0aWNbJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgICAgICBcIlNJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsXCIpXG4rXG4rICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdFxuKyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6XG4rICAgICAgICAgICAgaXAoZlwibmV0bnMgc2V0IHtwZWVyfSA1XCIpXG4rICAgICAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15XCIsIG5zPXBlZXIpXG4rICAgICAgICAgICAgaXAoXCJsaW5rIHNldCBkdW1teTMgdXBcIiwgbnM9cGVlcilcbisgICAgICAgICAgICBwZWVyX2lkeCA9IGlwKFwibGluayBzaG93IGR1bW15M1wiLCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWydpZmluZGV4J11cbitcbisgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdChcbisgICAgICAgICAgICAgICAge1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfUEFDS0VULCBcInRhcmdldC1uZXRuc2lkXCI6IDV9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJ2lmYS1pbmRleCddLCBhZGRyWyd0YXJnZXQtbmV0bnNpZCddKVxuKyAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHsocGVlcl9pZHgsIDUpfSxcbisgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zXCIpXG4rXG4rXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIlxuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcbkBAIC0zMTUsNyArMzgzLDggQEAgZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4gXG4gXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXG4rICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0MzozMC43MjQ0NzcxMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA2MTQ5MTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJ0bmV0bGluayBNdWx0aWNhc3QgQWRkcmVzcyBEdW1wIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCkgb3ZlciBydG5ldGxpbmsuIFRoYXQncyBhIHNvbGlkIGFkZGl0aW9uLCBhbmQgdGhlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlIChgcnQtYWRkci55YW1sYCksIGEgbmV3IGZsYWcgaW4gYGlmX2FkZHIuaGAgKGBJRkFfRl9HTE9CQUxgKSwgYW5kIHRoZSBjb3JlIGxvZ2ljIGluIGBydG5ldGxpbmsuY2AuIFNwZWNpZmljYWxseSwgbmV3IGZ1bmN0aW9ucyBmb3IgZmlsbGluZywgZHVtcGluZywgdmFsaWRhdGluZywgYW5kIGhhbmRsaW5nIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyByZXF1ZXN0LiBXZSd2ZSBnb3QgdGhlIHN0YW5kYXJkIHJ0bmV0bGluayBtZXNzYWdlIGhhbmRsaW5nIHN0cnVjdHVyZSB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5ldyBgUlRNX0dFVE1VTFRJQ0FTVGAgbWVzc2FnZSB0eXBlLiBHb29kLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG9ibGlnYXRvcnkgc2VsZnRlc3RzIGluIGBydG5ldGxpbmsucHlgLiBNYWtlcyBzZW5zZSwgd2UgaGF2ZSBhIHRlc3Qgc3VpdGUuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/IExldCdzIHNlZS4uLiB0aGUgdGFyZ2V0IGlzIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHJpZ2h0IHdoZXJlIHRoZSBjb3JlIG5ldGxpbmsgc3R1ZmYgbGl2ZXMuIFRoZSBwYXRjaCBpcyByZWFjaGFibGUgdmlhIHRoZSBydG5ldGxpbmsgc29ja2V0IHVzaW5nIGBSVE1fR0VUTVVMVElDQVNUYCB3aXRoIGBmYW1pbHkgPSBBRl9QQUNLRVRgLiBZZXAsIHN0YW5kYXJkIG5ldGxpbmssIGFjY2Vzc2libGUgZnJvbSBlaXRoZXIgcHJpdmlsZWdlZCBvciB1bnByaXZpbGVnZWQgdXNlciBzcGFjZS4gQW5kLCBvZiBjb3Vyc2UsIHdlIGNhbiBoaXQgaXQgaW4gUUVNVSwgb3IgZXZlbiBvbiBhIHN0YW5kYXJkIExpbnV4IHNldHVwLCBhbmQgZnJvbSB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBXZSBoYXZlIGxvZ2ljIGFkZGVkIGZvciB2YWxpZGF0aW9uLCBhbmQgaXRlcmF0aW5nIGFjcm9zcyBkZXZpY2VzIHVzaW5nIGVzdGFibGlzaGVkIGZ1bmN0aW9ucy4gVGhlcmUncyBhbHNvIG5ldG5zIHRyYWNraW5nIGFuZCBydG5sIG1lc3NhZ2UgY29uc3RydWN0aW9uLiBUaGlzIGhhcyBhbGwgb2YgdGhlIHR5cGljYWwgZWxlbWVudHMgb2YgYSBnb29kIGZ1enogdGFyZ2V0LlxuXG5TbywgKldvcnRoRnV6emluZyogaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuIFdlJ3ZlIGdvdCBhIG5ldyBuZXRsaW5rIG1lc3NhZ2UsIHNvbWUgbmV3IGZ1bmN0aW9ucywgYW5kIGl0J3MgYWxsIHJlYWNoYWJsZS4gXG5cbkZpbmFsbHksIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBnbyBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24uIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQxMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjQyLjc4NTk3MTY2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc5Mjc3OTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJC4qcnRuZXRsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Mzo0My4xMjM5MDU2NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjk3MDk3MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBMb2NhdGlvbiBvZiBgcnRuZXRsaW5rLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGUgc291cmNlIGNvZGUgZm9yIGBydG5ldGxpbmsuY2AgcmVzaWRlcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzdHJ1Y3R1cmUuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdG8gY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIEknbSBhc3N1bWluZyB0aGF0IHNpbmNlIGl0J3MgYSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIGNvbXBvbmVudCwgdGhlIGJ1aWxkIHN5c3RlbSB3b3VsZCBtb3N0IGxpa2VseSBkZWZpbmUgaXRzIGluY2x1c2lvbiB0aGVyZS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIHJldmVhbHMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2ggZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NDYuNDIxMDA1MTQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTc3MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmV0bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Mzo0Ni40OTcxODg3NDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODYwNjYwODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBydG5ldGxpbmsgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHJ0bmV0bGluay5vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBpbmNsdXNpb24uIFJpZ2h0LCBpdCdzIGJ1aWx0IHdpdGggYG9iai15YCBpbiB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhhdCBtZWFucyBpdCdzIHN0YXRpY2FsbHkgbGlua2VkLCBhbmQgdGhlIHByZXJlcXVpc2l0ZSBmb3IgdGhhdCBpcyBgQ09ORklHX05FVGAuIEdvdCBpdC4gTm93LCB3aGF0J3MgZHJpdmluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSdzIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0aW5nIGtleSBmdW5jdGlvbnMgd2l0aGluIGBydG5ldGxpbmsuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgYHJ0bmxfZHVtcF9tY2FkZHJgIG9yIGBuZXRuc190cmFja2VyYC4gVGhhdCB3b3VsZCBiZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgdGhleSdyZSBwb3RlbnRpYWxseSBjb21wbGV4IGFyZWFzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdHJhY2tpbmcuIEkgbmVlZCB0byBzZWUgaWYgYW55IG9mIHRob3NlIGZ1bmN0aW9ucyBoYXZlIGFueSBkZXBlbmRlbmNpZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NDkuMzU3ODU0NTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4ODA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTY2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTY2OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbiA/IDogcmV0O1xcbjQ1Njc6XFx0fVxcbjQ1Njg6XFx0XFxuNDU2OTpcXHRzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG40NTcwOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxcbjQ1NzE6XFx0XFx0XFx0XFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuNDU3MjpcXHR7XFxuNDU3MzpcXHRcXHR1MzIgaWZhX2ZsYWdzID0gaGEtXFx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwO1xcbjQ1NzQ6XFx0XFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xcbjQ1NzU6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuNDU3NjpcXHRcXG40NTc3OlxcdFxcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXFxuNDU3ODpcXHRcXHRcXHRcXHRmbGFncyk7XFxuNDU3OTpcXHRcXHRpZiAoIW5saClcXG40NTgwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuNDU4MTpcXHRcXG40NTgyOlxcdFxcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcXG40NTgzOlxcdFxcdGlmbS1cXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcXG40NTg0OlxcdFxcdGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XFxuNDU4NTpcXHRcXHQvKiBpZm0tXFx1MDAzZWlmYV9mbGFncyBob2xkcyA4IGJpdHMsIHRoZSBmdWxsIHZhbHVlIGlzIGluIElGQV9GTEFHUyAqL1xcbjQ1ODY6XFx0XFx0aWZtLVxcdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XFxuNDU4NzpcXHRcXHRpZm0tXFx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XFxuNDU4ODpcXHRcXHRpZm0tXFx1MDAzZWlmYV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG40NTg5OlxcdFxcbjQ1OTA6XFx0XFx0aWYgKChuZXRuc2lkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjZcXG40NTkxOlxcdFxcdCAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fFxcbjQ1OTI6XFx0XFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfTVVMVElDQVNULCBkZXYtXFx1MDAzZWFkZHJfbGVuLCBoYS1cXHUwMDNlYWRkcikgfHxcXG40NTkzOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSB8fFxcbjQ1OTQ6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7XFxuNDU5NTpcXHRcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbjQ1OTY6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG40NTk3OlxcdFxcdH1cXG40NTk4OlxcdFxcbjQ1OTk6XFx0XFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG40NjAwOlxcdFxcdHJldHVybiAwO1xcbjQ2MDE6XFx0fVxcbjQ2MDI6XFx0XFxuNDYwMzpcXHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuNDYwNDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcXG40NjA1OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuNDYwNjpcXHR7XFxuNDYwNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbjQ2MDg6XFx0XFx0aW50IGFkZHJfaWR4ID0gMDtcXG40NjA5OlxcdFxcdGludCBlcnIgPSAwO1xcbjQ2MTA6XFx0XFxuNDYxMTpcXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG40NjEyOlxcdFxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcXG40NjEzOlxcdFxcdFxcdGlmIChhZGRyX2lkeCBcXHUwMDNjICpzX2FkZHJfaWR4KSB7XFxuNDYxNDpcXHRcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbjQ2MTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjQ5LjM1OTA0NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTcwMDU0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIE5ldHdvcmsgUGx1bWJpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBsZXQncyB6ZXJvIGluIG9uIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyA0NjE2IHRocm91Z2ggNDc0MC4gVGhhdCByYW5nZSB1c3VhbGx5IGVuY29tcGFzc2VzIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBhIGNyaXRpY2FsIHBhcnQgb2YgYSBsYXJnZXIgb25lIGRlYWxpbmcgd2l0aCByb3V0ZSBuZXRsaW5rIG1lc3NhZ2luZywgcHJvYmFibHkuIEhvcGVmdWxseSwgdGhhdCdsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGhhcHBlbnMsIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gcHJlY2lzZSB3aXRoIHRoaXMgc2VjdGlvbi4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaG9sZHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NTEuMzI5MTA0MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NjE2OlxcdFxcdFxcdH1cXG40NjE3OlxcdFxcdFxcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG40NjE4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcXG40NjE5OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjQ2MjA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYyMTpcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbjQ2MjI6XFx0XFx0fVxcbjQ2MjM6XFx0XFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcXG40NjI0OlxcdFxcbjQ2MjU6XFx0XFx0KnNfYWRkcl9pZHggPSBlcnIgXFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xcbjQ2MjY6XFx0XFxuNDYyNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjQ2Mjg6XFx0fVxcbjQ2Mjk6XFx0XFxuNDYzMDpcXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xcbjQ2MzE6XFx0XFx0c3RydWN0IG5ldCAqdGd0X25ldDtcXG40NjMyOlxcdFxcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcXG40NjMzOlxcdFxcdGludCBuZXRuc2lkO1xcbjQ2MzQ6XFx0XFx0aW50IGlmaW5kZXg7XFxuNDYzNTpcXHR9O1xcbjQ2MzY6XFx0XFxuNDYzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCArIDFdID0ge1xcbjQ2Mzg6XFx0XFx0W0lGQV9UQVJHRVRfTkVUTlNJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXFxuNDYzOTpcXHR9O1xcbjQ2NDA6XFx0XFxuNDY0MTpcXHRzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbjQ2NDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxcbjQ2NDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXFxuNDY0NDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuNDY0NTpcXHR7XFxuNDY0NjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICsgMV07XFxuNDY0NzpcXHRcXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XFxuNDY0ODpcXHRcXHRpbnQgZXJyO1xcbjQ2NDk6XFx0XFxuNDY1MDpcXHRcXHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcXG40NjUxOlxcdFxcdGlmICghaWZtKSB7XFxuNDY1MjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuNDY1MzpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XFxcIik7XFxuNDY1NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NjU1OlxcdFxcdH1cXG40NjU2OlxcdFxcbjQ2NTc6XFx0XFx0aWYgKGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXFx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXFx1MDAzZWlmYV9zY29wZSkge1xcbjQ2NTg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjQ2NTk6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcXFwiKTtcXG40NjYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ2NjE6XFx0XFx0fVxcbjQ2NjI6XFx0XFxuNDY2MzpcXHRcXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXFxuNDY2NDpcXHRcXHRcXHRcXHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xcbjQ2NjU6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNDY2NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjQ2Njc6XFx0XFxuNDY2ODpcXHRcXHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xcbjQ2Njk6XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjQ2NzA6XFx0XFxuNDY3MTpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcXG40NjcyOlxcdFxcdFxcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXFx1MDAzZW5ldG5zaWQpO1xcbjQ2NzM6XFx0XFx0XFx0aWYgKElTX0VSUihuZXQpKSB7XFxuNDY3NDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuNDY3NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXFxcIik7XFxuNDY3NjpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuZXQpO1xcbjQ2Nzc6XFx0XFx0XFx0fVxcbjQ2Nzg6XFx0XFx0XFx0bmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbjQ2Nzk6XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V0Z3RfbmV0ID0gbmV0O1xcbjQ2ODA6XFx0XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRcXHRmaWx0ZXItXFx1MDAzZWlmaW5kZXggPSBpZm0tXFx1MDAzZWlmYV9pbmRleDtcXG40NjgzOlxcdFxcbjQ2ODQ6XFx0XFx0cmV0dXJuIDA7XFxuNDY4NTpcXHR9XFxuNDY4NjpcXHRcXG40Njg3OlxcdHN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuNDY4ODpcXHR7XFxuNDY4OTpcXHRcXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xcbjQ2OTA6XFx0XFx0XFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG40NjkxOlxcdFxcdFxcdC5uZXRuc2lkID0gLTEsXFxuNDY5MjpcXHRcXHR9O1xcbjQ2OTM6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XFxuNDY5NDpcXHRcXHRzdHJ1Y3Qge1xcbjQ2OTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbjQ2OTY6XFx0XFx0XFx0aW50IGFkZHJfaWR4O1xcbjQ2OTc6XFx0XFx0fSAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjQ2OTg6XFx0XFx0dW5zaWduZWQgbG9uZyBzX2lmaW5kZXg7XFxuNDY5OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjQ3MDA6XFx0XFx0aW50IGVycjtcXG40NzAxOlxcdFxcbjQ3MDI6XFx0XFx0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXFx1MDAzZW5saCwgc2tiLVxcdTAwM2VzaywgXFx1MDAyNmZpbHRlcixcXG40NzAzOlxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlZXh0YWNrKTtcXG40NzA0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjQ3MDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG40NzA2OlxcdFxcbjQ3MDc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ3MDg6XFx0XFxuNDcwOTpcXHRcXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcXG40NzEwOlxcdFxcdFxcdGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG40NzExOlxcdFxcdFxcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuNDcxMjpcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpO1xcbjQ3MTM6XFx0XFx0XFx0aWYgKCFkZXYpIHtcXG40NzE0OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuNDcxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NTEuMzI5MzUwOTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNDM2NDI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgZnVuY3Rpb25hbGl0eSBiZXR0ZXIuIEZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyBhZGRlZDogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIGR1bXBpbmcsIHZhbGlkYXRpbmcsIGFuZCBmaWxsaW5nIG11bHRpY2FzdCBhZGRyZXNzIGRhdGEgd2l0aGluIHRoZSByb3V0aW5nIG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5Ob3csIGFyZSB0aGVzZSB0aGUgb25seSBidWlsZGluZyBibG9ja3M/IExldCdzIHZlcmlmeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEEgcXVpY2sgY2hlY2sgb2YgYENPTkZJR19ORVRgIGlzIGluIG9yZGVyLiBJdCdzIHRoZSBiYXNlbGluZSBmb3IgbmV0d29ya2luZywgb2YgY291cnNlLCBidXQgaXMgaXQgKnN1ZmZpY2llbnQqPyBXZSBvZnRlbiBzZWUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGllZCBpbnRvIHNwZWNpZmljIGZlYXR1cmVzLlxuXG5NeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSB3aWxsIGJlIG5ldHdvcmsgbmFtZXNwYWNlcy4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IG5ldG5zIGF3YXJlPyBJJ2xsIGxvb2sgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUbyBpbnZlc3RpZ2F0ZSwgSSdsbCBgZ3JlcGAgdGhlIGNvZGViYXNlIGZvciBgbmV0bnNfdHJhY2tlcl9hbGxvY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG5hbWVzcGFjZS1zcGVjaWZpYyB0cmFja2luZyBnb2luZyBvbi4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW50ZWdyYXRlcyB3aXRoIG5ldHdvcmsgaXNvbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU4NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjU0LjE2MzcxNzc5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMDA1ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldG5zX3RyYWNrZXJfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM1OT1zdGF0aWMgaW5saW5lIGJvb2wgbmV0X2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNjMtXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzY1LVxcdFxcdFxcdFxcdFxcdCBuZXRuc190cmFja2VyICp0cmFja2VyLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3NS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzc2OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgbmV0bnNfdHJhY2tlciAqdHJhY2tlcixcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzc3LVxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnApXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3OC17XFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM3OTpcXHRfX25ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCB0cmFja2VyLCB0cnVlLCBnZnApO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODAtfVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM5Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdldF9uZXRfdHJhY2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM5NS1cXHRnZXRfbmV0KG5ldCk7XFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM5NjpcXHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgdHJhY2tlciwgZ2ZwKTtcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzk3LVxcdHJldHVybiBuZXQ7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MjY3PXN0YXRpYyBpbmxpbmUgYm9vbCB0Y2ZfZXh0c19nZXRfbmV0KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcXG4tLVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yNzEtXFx0aWYgKGV4dHMtXFx1MDAzZW5ldClcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6MjcyOlxcdFxcdG5ldG5zX3RyYWNrZXJfYWxsb2MoZXh0cy1cXHUwMDNlbmV0LCBcXHUwMDI2ZXh0cy1cXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI3My1cXHRyZXR1cm4gZXh0cy1cXHUwMDNlbmV0ICE9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjU0LjQxNjczMDMyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTU3NTI5OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBSVE5FVExJTksgTXVsdGljYXN0IEFkZHJlc3MgRHVtcGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBmZWF0dXJlLCBzbyBJJ2xsIHN0YXJ0IHdpdGggYE5FVERFVklDRVNgIG9yIGBORVRgLiBTaW5jZSB0aGUgYmFzZSBjb25maWcgaXMgYENPTkZJR19ORVRgLCBpdCdzIGxpa2VseSBsaW5rZWQgdG8gdGhlIGBORVRgIHN0YW5kYXJkLiBUaGF0IHNlZW1zIHRvIGJlIGEgc2FmZSBhc3N1bXB0aW9uLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gY2VudGVyIGFyb3VuZCB0aGVzZSBmb3VyIGZ1bmN0aW9uczogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGR5bmFtaWNhbGx5IGxpbmtlZCBvciBzdGF0aWNhbGx5IGNvbXBpbGVkLiBBIHF1aWNrIGNoZWNrIG9mIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgY29uZmlybXMgdGhhdCBhbGwgZm91ciBhcmUsIGluIGZhY3QsIHN0YXRpY2FsbHkgY29tcGlsZWQuIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2R1bXBfbWNhZGRyYCBhcmUgKmFsbCogc3RhdGljIGZ1bmN0aW9ucy4gVGhvdWdoIHRoZSBsYXN0IGlzIGFzc2lnbmVkIHRvIGAuZHVtcGl0YCBpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYFxuXG5OZXh0LCBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgYXJlYXMgb2YgdGhlIGtlcm5lbCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBBIGRpZmYgY2hlY2sgcmV2ZWFscyBtb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCwgYGluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhgLCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgLiBObyBvdGhlciBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cblRoaXMgZ2l2ZXMgbWUgdGhlIGZvbGxvd2luZyBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wicnRubF9kdW1wX21jYWRkclwiLCBcInJ0bmxfZHVtcF9tY2FkZHJfZGV2XCIsIFwicnRubF9maWxsX21jYWRkclwiLCBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiTkVUXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkdW1waW5nIFBGX1BBQ0tFVCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgdmlhIHJ0bmV0bGluayAoYFJUTV9HRVRNVUxUSUNBU1RgKS4gSXQgaW5jbHVkZXMgaGFuZGxlcnMgc3VjaCBhcyBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGFuZCBgcnRubF9maWxsX21jYWRkcmAuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5ldGxpbmsgc29ja2V0cyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGRlbWFuZHMgZnV6emluZy5cblxuQmVmb3JlIEkgcHVzaCB0aGlzLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmb3JtYXQgYWdhaW5zdCBteSBlc3RhYmxpc2hlZCBydWxlcy4gSXQgbG9va3MgY29ycmVjdDogYXJyYXlzIG9mIHN0cmluZ3Mgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCBmb3IgZW5hYmxlZCBjb25maWd1cmF0aW9ucywgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmb3IgZm9jdXNlZCBzeW1ib2xzLCBhIGJvb2xlYW4gZm9yIHdoZXRoZXIgaXQgaXMgd29ydGggZnV6emluZywgYW5kIGEgc3RyaW5nIGZvciBteSByZWFzb25pbmcuIExvb2tzIGdvb2QuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ4MCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MDAuMzc0MjYzMTE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDMyNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmV0bGluaywgaW1wbGVtZW50aW5nIHJlcXVlc3QgdmFsaWRhdGlvbiwgZGV2aWNlIHRyYXZlcnNhbCwgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGludGVyZmFjZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmV0bGluaywgaW1wbGVtZW50aW5nIHJlcXVlc3QgdmFsaWRhdGlvbiwgZGV2aWNlIHRyYXZlcnNhbCwgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGludGVyZmFjZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MDAuNTEzNzA0ODQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg0ODA1Mjk2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjAwLjUxNDI0Mjk1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyODQ3NTA4OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmxfZHVtcF9tY2FkZHIgYW5kIHJ0bmxfZmlsbF9tY2FkZHIuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxcbjEuIGBzdHJ1Y3QgaWZhZGRybXNnYCBwYXlsb2FkOiBBbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBzdHJ1Y3QgY29udGFpbnMgNCBgX191OGAgZmllbGRzIGFuZCAxIGBfX3UzMmAgZmllbGQgdG90YWxpbmcgOCBieXRlcyB3aXRoIHplcm8gcGFkZGluZyBieXRlcy5cXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXFx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXFx1MDAzZWFkZHJgIG9mIGxlbmd0aCBgZGV2LVxcdTAwM2VhZGRyX2xlbmApLlxcbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuXFxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZhYmExMjgyMDdiM2Y5Y2MyMTVjN2U5YTEzODU2MTRhMDcxMzZlYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMjo0MzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4xYTE3ZTU1ZDFjY2EwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTc3LDYgKzc3LDggQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgICBuYW1lOiBtY2F1dG9qb2luXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBnbG9iYWxcbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xMTksNyArMTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxuLSAgICAgICAgdHlwZTogYmluYXJ5XG4rICAgICAgICB0eXBlOiBzMzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwcm90b1xuICAgICAgICAgdHlwZTogdThcbkBAIC0xNjgsNyArMTcwLDEzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsXG4gICAgIC1cbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3Rcbi0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuXG4rICAgICAgZG9jOiB8XG4rICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3NcbisgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uXG4rICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxuKyAgICAgICAgU0lPQ0FERE1VTFRJIG9yIFwiYnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcIiwgcmF0aGVyIHRoYW4gYnkgYVxuKyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LlxuICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnNcbiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZ1xuICAgICAgIGRvOlxuQEAgLTE4MSwxMCArMTg5LDEzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXG4gICAgICAgICAgICAgLSBjYWNoZWluZm9cbisgICAgICAgICAgICAtIGZsYWdzXG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogNThcbi0gICAgICAgICAgYXR0cmlidXRlczogW11cbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgICByZXBseTpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC01Nyw2ICs1Nyw3IEBAIGVudW0ge1xuICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURVx0MHgyMDBcbiAjZGVmaW5lIElGQV9GX01DQVVUT0pPSU5cdDB4NDAwXG4gI2RlZmluZSBJRkFfRl9TVEFCTEVfUFJJVkFDWVx0MHg4MDBcbisjZGVmaW5lIElGQV9GX0dMT0JBTFx0XHQweDEwMDBcbiBcbiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XG4gXHRfX3UzMlx0aWZhX3ByZWZlcmVkO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmQ1MWQ3NzNiOTNjNmQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC00NTY2LDYgKzQ1NjYsMTc4IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbitcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbit7XG4rXHR1MzIgaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XG4rXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4rXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbitcbitcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG4rXHRcdFx0ZmxhZ3MpO1xuK1x0aWYgKCFubGgpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4rXHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbitcdGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcbitcdC8qIGlmbS1cdTAwM2VpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi9cbitcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XG4rXHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbitcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbitcbitcdGlmICgobmV0bnNpZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIG5sYV9wdXRfczMyKHNrYiwgSUZBX1RBUkdFVF9ORVROU0lELCBuZXRuc2lkKSkgfHxcbitcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBoYS1cdTAwM2VyZWZjb3VudCkgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhX2ZsYWdzKSkge1xuK1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0fVxuK1xuK1x0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbitcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4re1xuK1x0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbitcdGludCBhZGRyX2lkeCA9IDA7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuK1x0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuK1x0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG4rXHRcdFx0YWRkcl9pZHgrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbitcdFx0XHRcdCAgICAgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncywgbmV0bnNpZCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGFkZHJfaWR4Kys7XG4rXHR9XG4rXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuK1xuK1x0KnNfYWRkcl9pZHggPSBlcnIgXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xuK1x0c3RydWN0IG5ldCAqdGd0X25ldDtcbitcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcbitcdGludCBuZXRuc2lkO1xuK1x0aW50IGlmaW5kZXg7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCArIDFdID0ge1xuK1x0W0lGQV9UQVJHRVRfTkVUTlNJRF1cdD0geyAudHlwZSA9IE5MQV9TMzIgfSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlcixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICsgMV07XG4rXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG4rXHRpZiAoIWlmbSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuIHx8IGlmbS1cdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVx1MDAzZWlmYV9zY29wZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCxcbitcdFx0XHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XG4rXHRcdHN0cnVjdCBuZXQgKm5ldDtcbitcbitcdFx0ZmlsdGVyLVx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcbitcdFx0bmV0ID0gcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc2ssIGZpbHRlci1cdTAwM2VuZXRuc2lkKTtcbitcdFx0aWYgKElTX0VSUihuZXQpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiSW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWRcIik7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIobmV0KTtcbitcdFx0fVxuK1x0XHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2ZmlsdGVyLVx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuK1x0XHRmaWx0ZXItXHUwMDNldGd0X25ldCA9IG5ldDtcbitcdH1cbitcbitcdGZpbHRlci1cdTAwM2VpZmluZGV4ID0gaWZtLVx1MDAzZWlmYV9pbmRleDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlciBmaWx0ZXIgPSB7XG4rXHRcdC50Z3RfbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKSxcbitcdFx0Lm5ldG5zaWQgPSAtMSxcbitcdH07XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbitcdHN0cnVjdCB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcbitcdFx0aW50IGFkZHJfaWR4O1xuK1x0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4rXHR1bnNpZ25lZCBsb25nIHNfaWZpbmRleDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBza2ItXHUwMDNlc2ssIFx1MDAyNmZpbHRlcixcbitcdFx0XHRcdFx0IGNiLVx1MDAzZWV4dGFjayk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0aWYgKGZpbHRlci5pZmluZGV4KSB7XG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpO1xuK1x0XHRpZiAoIWRldikge1xuK1x0XHRcdGVyciA9IC1FTk9ERVY7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICBmaWx0ZXIubmV0bnNpZCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0c19pZmluZGV4ID0gY3R4LVx1MDAzZWlmaW5kZXg7XG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHQvKiBUaGUgZGV2aWNlIHRoZSBkdW1wIHN0b3BwZWQgYXQgaXMgZ29uZSwgZG8gbm90IHNraXBcbitcdFx0ICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoZGV2LVx1MDAzZWlmaW5kZXggIT0gc19pZmluZGV4KVxuK1x0XHRcdGN0eC1cdTAwM2VhZGRyX2lkeCA9IDA7XG4rXHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbitcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGZpbHRlci5uZXRuc2lkIFx1MDAzZT0gMClcbitcdFx0cHV0X25ldF90cmFjayhmaWx0ZXIudGd0X25ldCwgXHUwMDI2ZmlsdGVyLm5zX3RyYWNrZXIpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNjYTE0YzQwMDhjZjUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw3MCBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcbisgICAgdGFyZ2V0LW5ldG5zaWQuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgZGVmZXIocnRubC5jbG9zZSlcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdChcbisgICAgICAgICAgICAgICAge1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfUEFDS0VULCBcImlmYS1pbmRleFwiOiBkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuKyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbisgICAgICAgICAgICBpZiBlLmVycm9yID09IGVycm5vLkVPUE5PVFNVUFA6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXG4rICAgICAgICAgICAgICAgICAgICBcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcFwiKVxuKyAgICAgICAgICAgIHJhaXNlXG4rXG4rICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkXG4rICAgICAgICBrc2Z0X2VxKHthZGRyWydpZmEtaW5kZXgnXSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXG4rICAgICAgICAgICAgICAgIFwiQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wIGlnbm9yZWQgaWZhLWluZGV4IGZpbHRlclwiKVxuK1xuKyAgICAgICAgZW50cmllcyA9IHthZGRyWydtdWx0aWNhc3QnXTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XG4rXG4rICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcbisgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cbisgICAgICAgIGFsbF9ob3N0cyA9IGVudHJpZXMuZ2V0KEVUSF9BTExfSE9TVFNfTVVMVElDQVNUKVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhbGxfaG9zdHMsXG4rICAgICAgICAgICAgICAgICAgICAgIFwiZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcIilcbisgICAgICAgIGlmIGFsbF9ob3N0cyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZ2xvYmFsJywgYWxsX2hvc3RzWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2wgZW50cnkgaXMgZ2xvYmFsXCIpXG4rXG4rICAgICAgICBzdGF0aWMgPSBlbnRyaWVzLmdldChFVEhfVEVTVF9NVUxUSUNBU1QpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKHN0YXRpYywgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgIGlmIHN0YXRpYyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKHN0YXRpY1snbWMtdXNlcnMnXSwgMSxcbisgICAgICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICAgICAga3NmdF9pbignZ2xvYmFsJywgc3RhdGljWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbFwiKVxuK1xuKyAgICAgICAgIyB0YXJnZXQtbmV0bnNpZCBkdW1wcyBhbm90aGVyIG5ldG5zLCBpZmEtaW5kZXggaXMgcmVsYXRpdmUgdG8gaXRcbisgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOlxuKyAgICAgICAgICAgIGlwKGZcIm5ldG5zIHNldCB7cGVlcn0gNVwiKVxuKyAgICAgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTMgdHlwZSBkdW1teVwiLCBucz1wZWVyKVxuKyAgICAgICAgICAgIGlwKFwibGluayBzZXQgZHVtbXkzIHVwXCIsIG5zPXBlZXIpXG4rICAgICAgICAgICAgcGVlcl9pZHggPSBpcChcImxpbmsgc2hvdyBkdW1teTNcIiwganNvbj1UcnVlLCBucz1wZWVyKVswXVsnaWZpbmRleCddXG4rXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXG4rICAgICAgICAgICAgICAgIHtcImlmYS1mYW1pbHlcIjogc29ja2V0LkFGX1BBQ0tFVCwgXCJ0YXJnZXQtbmV0bnNpZFwiOiA1fSxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuKyAgICAgICAgICAgIGtzZnRfZXEoeyhhZGRyWydpZmEtaW5kZXgnXSwgYWRkclsndGFyZ2V0LW5ldG5zaWQnXSlcbisgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sXG4rICAgICAgICAgICAgICAgICAgICBcInRhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRuc1wiKVxuK1xuK1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgKzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuIFxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGR1bXBfbWNhZGRyX2wyX2NoZWNrLFxuKyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MDAuNTE0MjQ0MTYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyODczMTU2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGFwcGx5IHRoZSBlc3RhYmxpc2hlZCBydWxlcyB0byB0aGUgY29kZSBjaGFuZ2VzLiBJIGtub3cgdGhhdCBLQVNBTiBkZWFscyB3aXRoIG1lbW9yeSBlcnJvcnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBkb3VibGUgZnJlZXMsIGJ1dCBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIOKAkyBzcGVjaWZpY2FsbHkgb24gdGhlIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIOKAkyBhbmQgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlIHJ1bGVzIGFyZSBwcmV0dHkgY2xlYXI6IEtNU0FOIGZ1enppbmcgaXMgb25seSBuZWVkZWQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGNvZGUgdGhhdCBkb2VzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6IDEpIFNlbmRzIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIHBvdGVudGlhbGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGlzIGNvdmVycyBjYXNlcyB1c2luZyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiAyKSBVc2VzIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzLiAzKSBBbGxvY2F0ZXMgb3IgaW5pdGlhbGl6ZXMgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gNCkgSW50cm9kdWNlcyBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQgYWRkcyBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCBkdW1wIHN1cHBvcnQgdGhyb3VnaCB0aGUgYHJ0bmxfZHVtcF9tY2FkZHJgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgcnRubF9maWxsX21jYWRkcmAgYW5kIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuXG5cbk9rYXksIGhlcmUncyB3aGF0IHRoZSBjb2RlIGRvZXM6IEl0IGNvbnN0cnVjdHMgYW4gYGlmYWRkcm1zZ2AgbWVzc2FnZSB0byBzZW5kIG11bHRpY2FzdCBhZGRyZXNzIGluZm9ybWF0aW9uIG92ZXIgbmV0bGluay4gVGhlIGNvZGUgZmlsbHMgdGhlIGBpZmFkZHJtc2dgIHN0cnVjdHVyZSBhbmQgdGhlbiB1c2VzIGBubGFfcHV0YCB0byBhZGQgTmV0bGluayBhdHRyaWJ1dGVzIHRvIHRoZSBTS0IuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2hlY2sgYHN0cnVjdCBpZmFkZHJtc2dgIHRvIHNlZSB3aGF0IGZpZWxkcyBpdCBjb250YWlucy4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZ2V0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjA1LjgwMTU2NDMyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyODk4NzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaWZhZGRybXNnIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNy1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjg6c3RydWN0IGlmYWRkcm1zZyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC05LVxcdF9fdThcXHRcXHRpZmFfZmFtaWx5O1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXFx0X191OFxcdFxcdGlmYV9mYW1pbHk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjA4LjUzMDU1NzMyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTEzMjI2Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGlmX2FkZHIuaCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgYGluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDguIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCBsaWtlbHkgc3RhcnRzIGRlZmluaW5nIHRoZSBzdHJ1Y3R1cmVzIG9yIGNvbnN0YW50cyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIGFkZHJlc3MgaW5mb3JtYXRpb24uIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBgaWZhZGRybXNnYCwgb3IgcGVyaGFwcyBzb21lIGtleSBmbGFnIGRlZmluaXRpb25zIHRoYXQgZ292ZXJuIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gcXVpY2tseSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHJlbGF0ZSB0byBhZGRyZXNzIGZhbWlsaWVzLCBhZGRyZXNzIGxlbmd0aHMsIGFuZCBhdHRyaWJ1dGUgY29kZXMuIEknbSBhbnRpY2lwYXRpbmcgcG9zc2libHkgc2VlaW5nIHNvbWUgZW51bXMuIEFueXRoaW5nIHRoYXQgZGljdGF0ZXMgdGhlIGZvcm1hdCBvciBwcm9wZXJ0aWVzIG9mIG5ldHdvcmsgYWRkcmVzc2VzIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGluaXRpYWxseS4gSSdtIGtlZW4gdG8gZW5zdXJlIGl0J3MgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoxMi4wNDM4MDk0MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfVUFQSV9fTElOVVhfSUZfQUREUl9IXFxuICAgMzpcXHQjZGVmaW5lIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgaWZhZGRybXNnIHtcXG4gICA5OlxcdFxcdF9fdThcXHRcXHRpZmFfZmFtaWx5O1xcbiAgMTA6XFx0XFx0X191OFxcdFxcdGlmYV9wcmVmaXhsZW47XFx0LyogVGhlIHByZWZpeCBsZW5ndGhcXHRcXHQqL1xcbiAgMTE6XFx0XFx0X191OFxcdFxcdGlmYV9mbGFncztcXHQvKiBGbGFnc1xcdFxcdFxcdCovXFxuICAxMjpcXHRcXHRfX3U4XFx0XFx0aWZhX3Njb3BlO1xcdC8qIEFkZHJlc3Mgc2NvcGVcXHRcXHQqL1xcbiAgMTM6XFx0XFx0X191MzJcXHRcXHRpZmFfaW5kZXg7XFx0LyogTGluayBpbmRleFxcdFxcdFxcdCovXFxuICAxNDpcXHR9O1xcbiAgMTU6XFx0XFxuICAxNjpcXHQvKlxcbiAgMTc6XFx0ICogSW1wb3J0YW50IGNvbW1lbnQ6XFxuICAxODpcXHQgKiBJRkFfQUREUkVTUyBpcyBwcmVmaXggYWRkcmVzcywgcmF0aGVyIHRoYW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MuXFxuICAxOTpcXHQgKiBJdCBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciBub3JtYWxseSBjb25maWd1cmVkIGJyb2FkY2FzdCBpbnRlcmZhY2VzLFxcbiAgMjA6XFx0ICogYnV0IGZvciBwb2ludC10by1wb2ludCBJRkFfQUREUkVTUyBpcyBERVNUSU5BVElPTiBhZGRyZXNzLFxcbiAgMjE6XFx0ICogbG9jYWwgYWRkcmVzcyBpcyBzdXBwbGllZCBpbiBJRkFfTE9DQUwgYXR0cmlidXRlLlxcbiAgMjI6XFx0ICpcXG4gIDIzOlxcdCAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXFxuICAyNDpcXHQgKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cXG4gIDI1OlxcdCAqL1xcbiAgMjY6XFx0ZW51bSB7XFxuICAyNzpcXHRcXHRJRkFfVU5TUEVDLFxcbiAgMjg6XFx0XFx0SUZBX0FERFJFU1MsXFxuICAyOTpcXHRcXHRJRkFfTE9DQUwsXFxuICAzMDpcXHRcXHRJRkFfTEFCRUwsXFxuICAzMTpcXHRcXHRJRkFfQlJPQURDQVNULFxcbiAgMzI6XFx0XFx0SUZBX0FOWUNBU1QsXFxuICAzMzpcXHRcXHRJRkFfQ0FDSEVJTkZPLFxcbiAgMzQ6XFx0XFx0SUZBX01VTFRJQ0FTVCxcXG4gIDM1OlxcdFxcdElGQV9GTEFHUyxcXG4gIDM2OlxcdFxcdElGQV9SVF9QUklPUklUWSxcXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXFxuICAzNzpcXHRcXHRJRkFfVEFSR0VUX05FVE5TSUQsXFxuICAzODpcXHRcXHRJRkFfUFJPVE8sXFx0XFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cXG4gIDM5OlxcdFxcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbiAgNDA6XFx0XFx0X19JRkFfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoxMi4wNDM5MTQ1NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4NDk1ODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpZmFkZHJtc2dgIFN0cnVjdHVyZSBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGxheW91dCBvZiBgc3RydWN0IGlmYWRkcm1zZ2A6IGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGFuZCBgaWZhX2luZGV4YC4gSXQncyBzdHJhaWdodGZvcndhcmQ7IHRob3NlIGFyZSB0aGUgY29yZSBmaWVsZHMuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIHRvdGFsIHNpemUgb2YgOCBieXRlcyBpcyB3aGF0IEkgZXhwZWN0ZWQsIGFuZCB0aGUgbGFjayBvZiBwYWRkaW5nIGlzIGdvb2Q7IGl0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIGNvbm5lY3QgdGhpcyB0byB0aGUgYHJ0bmxfZmlsbF9tY2FkZHJgIGZ1bmN0aW9uLiBJIHNlZSBob3cgaXQgaW5pdGlhbGl6ZXMgYW4gYGlmYWRkcm1zZ2AgaW5zdGFuY2UgYGlmbWAuIGBBRl9QQUNLRVRgIGZvciB0aGUgZmFtaWx5LCBgMGAgZm9yIHRoZSBwcmVmaXggbGVuZ3RoLi4uIHNlZW1zIHN0YW5kYXJkLiBBaCwgdGhlIGBpZmFfZmxhZ3NgIGZpZWxkIGlzIGEgYnl0ZSwgYW5kIHRoZSAqZnVsbCogdmFsdWUgaXMgc3RvcmVkIGluIGBJRkFfRkxBR1NgLiBHb29kIHRvIGtlZXAgaW4gbWluZC4gU2NvcGUgaXMgc2V0IHRvIGBSVF9TQ09QRV9MSU5LYCwgYW5kIHRoZSBpbmRleCBpcyB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UuIEFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkLCB3aGljaCBpcyBhcyBpdCBzaG91bGQgYmUuXG5cbk9rYXksIG5leHQgcXVlc3Rpb246IHdoYXQncyBnb2luZyBvbiB3aXRoIGBoYS1cdTAwM2VhZGRyYCBhbmQgYGRldi1cdTAwM2VhZGRyX2xlbmA/ICBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAgYW5kIGhvdyB0aGF0IGFkZHJlc3MgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgd2l0aGluIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZS4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgaG93IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoxNS45Mjg4NzQ4MzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzQ5NzUxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGRldl9od19hZGRyIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjM1PXN0cnVjdCBza19idWZmO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjE4LjUwMzg1NTc3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjI2NDUzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRGV2aWNlIEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCdzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDIzNy4gSSdtIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIEknbSBsb29raW5nIGZvciByZWdhcmRpbmcgdGhlIGJhc2ljIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBvciBwZXJoYXBzIHRoZSBpbml0aWFsIHNldHVwIHJvdXRpbmVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGVsZW1lbnRzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzIGZvciBxdWV1ZXMsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciBwb3RlbnRpYWxseSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwb2ludGVycy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MjIuODI2NTA0NDk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRzdHJ1Y3Qgc2tfYnVmZjtcXG4gMjM2OlxcdFxcbiAyMzc6XFx0c3RydWN0IG5ldGRldl9od19hZGRyIHtcXG4gMjM4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAyMzk6XFx0XFx0c3RydWN0IHJiX25vZGVcXHRcXHRub2RlO1xcbiAyNDA6XFx0XFx0dW5zaWduZWQgY2hhclxcdFxcdGFkZHJbTUFYX0FERFJfTEVOXTtcXG4gMjQxOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR0eXBlO1xcbiAyNDI6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX0xBTlxcdFxcdDFcXG4gMjQzOlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9TQU5cXHRcXHQyXFxuIDI0NDpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVFxcdDNcXG4gMjQ1OlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1RcXHQ0XFxuIDI0NjpcXHRcXHRib29sXFx0XFx0XFx0Z2xvYmFsX3VzZTtcXG4gMjQ3OlxcdFxcdGludFxcdFxcdFxcdHN5bmNfY250O1xcbiAyNDg6XFx0XFx0aW50XFx0XFx0XFx0cmVmY291bnQ7XFxuIDI0OTpcXHRcXHRpbnRcXHRcXHRcXHRzeW5jZWQ7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3VfaGVhZDtcXG4gMjUxOlxcdH07XFxuIDI1MjpcXHRcXG4gMjUzOlxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0IHtcXG4gMjU0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAyNTU6XFx0XFx0aW50XFx0XFx0XFx0Y291bnQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qIEF1eGlsaWFyeSB0cmVlIGZvciBmYXN0ZXIgbG9va3VwIG9uIGFkZGl0aW9uIGFuZCBkZWxldGlvbiAqL1xcbiAyNTg6XFx0XFx0c3RydWN0IHJiX3Jvb3RcXHRcXHR0cmVlO1xcbiAyNTk6XFx0fTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0I2RlZmluZSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KGwpICgobCktXFx1MDAzZWNvdW50KVxcbiAyNjI6XFx0I2RlZmluZSBuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KGwpIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KGwpID09IDApXFxuIDI2MzpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIGwpIFxcXFxcXG4gMjY0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFxcdTAwMjYobCktXFx1MDAzZWxpc3QsIGxpc3QpXFxuIDI2NTpcXHRcXG4gMjY2OlxcdCNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcXHUwMDI2KGRldiktXFx1MDAzZXVjKVxcbiAyNjc6XFx0I2RlZmluZSBuZXRkZXZfdWNfZW1wdHkoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI2ODpcXHQjZGVmaW5lIG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIFxcXFxcXG4gMjY5OlxcdFxcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI3MDpcXHQjZGVmaW5lIG5ldGRldl9mb3JfZWFjaF9zeW5jZWRfdWNfYWRkcihfaGEsIF9kZXYpIFxcXFxcXG4gMjcxOlxcdFxcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKChfaGEpLCAoX2RldikpIFxcXFxcXG4gMjcyOlxcdFxcdFxcdGlmICgoX2hhKS1cXHUwMDNlc3luY19jbnQpXFxuIDI3MzpcXHRcXG4gMjc0OlxcdCNkZWZpbmUgbmV0ZGV2X21jX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcXHUwMDI2KGRldiktXFx1MDAzZW1jKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoyMi44MjcwMDE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzY1Njc5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQWxsb2NhdGlvbiBhbmQgQWRkaXRpb24gb2YgYGhhYCB0byBgZGV2LVx1MDAzZW1jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgYGhhYCB2YXJpYWJsZSBpcyBhbGxvY2F0ZWQgYW5kIHRoZW4gYWRkZWQgdG8gYGRldi1cdTAwM2VtY2AuIFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLCBhbmQgSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gdGhhdCBsaWtlbHkgaGFuZGxlcyB0aGlzIGFkZGluZyBwcm9jZXNzLiBUaGlua2luZyBhYm91dCBuYW1pbmcgY29udmVudGlvbnMsIEknbGwgc3RhcnQgd2l0aCBhIHNlYXJjaCBmb3IgYGRldl9tY19hZGRgLCBvciBhbnl0aGluZyBzaW1pbGFyIHRoYXQgd291bGQgc3VnZ2VzdCBhZGRpbmcgYW4gYWRkcmVzcyB0byB0aGUgbXVsdGljYXN0IGxpc3QgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSB3aXRoaW4gYGRldl9hZGRyX2xpc3RzLmNgLCBpcyBteSBpbml0aWFsIHRhcmdldC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoyNy45MDM1NzMzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MzM1Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NTM9X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzU6c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3OlxcdHJldHVybiBfX2h3X2FkZHJfYWRkX2V4KGxpc3QsIGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGZhbHNlLCBmYWxzZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cXHRcXHRcXHRcXHQwLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE3LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgodG9fbGlzdCwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuLCBoYS1cXHUwMDNldHlwZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxOS1cXHRcXHRcXHQgICAgICAgZmFsc2UsIHRydWUsIGhhLVxcdTAwM2VzeW5jX2NudCwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njg5OlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzI5PWludCBkZXZfYWRkcl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzM4LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3Mzk6XFx0ZXJyID0gX19od19hZGRyX2FkZChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sIGFkZHJfdHlwZSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXFx0aWYgKCFlcnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5Ni1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc5NzpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04MTU9aW50IGRldl91Y19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODE5LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNldWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MjEtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk3Nz1pbnQgZGV2X21jX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk4MjpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTgzLVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgdHJ1ZSwgZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTctXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5OTg6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjI4LjIyMjkxNDA0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc1OTA4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgX19od19hZGRyX2NyZWF0ZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrIGJldHRlci4gTGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgYF9faHdfYWRkcl9jcmVhdGVgLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gaGFyZHdhcmUgYWRkcmVzcyBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudC4gSSdsbCBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNgLCB0aGF0IGxvY2F0aW9uIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUsIEkgYW50aWNpcGF0ZSB0aGlzIGZpbGUgd2lsbCBoYXZlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdG9yaW5nIGFuZCBtYW5pcHVsYXRpbmcgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgbWFuYWdlcyB0aGUgdW5kZXJseWluZyBkZXRhaWxzIG9mIGNyZWF0aW5nIGFuZCByZWdpc3RlcmluZyB0aGUgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciBuZXR3b3JrIGludGVyZmFjZXMuIFRpbWUgdG8gbG9vayBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDozMC4wOTg4MjQ3MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0fVxcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgc3RydWN0IG5ldGRldl9od19hZGRyKlxcbiAgNTM6XFx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuICA1NDpcXHRcXHRcXHQgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiAgNTc6XFx0XFx0aW50IGFsbG9jX3NpemU7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGFsbG9jX3NpemUgPSBzaXplb2YoKmhhKTtcXG4gIDYwOlxcdFxcdGlmIChhbGxvY19zaXplIFxcdTAwM2MgTDFfQ0FDSEVfQllURVMpXFxuICA2MTpcXHRcXHRcXHRhbGxvY19zaXplID0gTDFfQ0FDSEVfQllURVM7XFxuICA2MjpcXHRcXHRoYSA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuICA2MzpcXHRcXHRpZiAoIWhhKVxcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2NTpcXHRcXHRtZW1jcHkoaGEtXFx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcXG4gIDY2OlxcdFxcdGhhLVxcdTAwM2V0eXBlID0gYWRkcl90eXBlO1xcbiAgNjc6XFx0XFx0aGEtXFx1MDAzZXJlZmNvdW50ID0gMTtcXG4gIDY4OlxcdFxcdGhhLVxcdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xcbiAgNjk6XFx0XFx0aGEtXFx1MDAzZXN5bmNlZCA9IHN5bmMgPyAxIDogMDtcXG4gIDcwOlxcdFxcdGhhLVxcdTAwM2VzeW5jX2NudCA9IDA7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiBoYTtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4gIDc3OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYyxcXG4gIDc4OlxcdFxcdFxcdFxcdCAgICBpbnQgc3luY19jb3VudCwgYm9vbCBleGNsdXNpdmUpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFxcdTAwMjZsaXN0LVxcdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xcbiAgODE6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2UgTUFYX0FERFJfTEVOKVxcbiAgODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHdoaWxlICgqaW5zX3BvaW50KSB7XFxuICA4NzpcXHRcXHRcXHRpbnQgZGlmZjtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0XFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDozMC4wOTg5NTkzMThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4OTcxODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgd2l0aGluIGBfX2h3X2FkZHJfY3JlYXRlYCwgd2UncmUgdXNpbmcgYG1lbWNweWAgdG8gY29weSBgYWRkcl9sZW5gIGJ5dGVzIGZyb20gdGhlIHNvdXJjZSBgYWRkcmAgaW50byBgaGEtXHUwMDNlYWRkcmAuIFRoZW4sIGluIGBydG5sX2ZpbGxfbWNhZGRyYCB3aGVuIGRlYWxpbmcgd2l0aCBuZXRsaW5rLCB3ZSdyZSB1c2luZyBgbmxhX3B1dGAgdG8gcGxhY2UgdGhlIG11bHRpY2FzdCBhZGRyZXNzLiBTcGVjaWZpY2FsbHksIGBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKWAuIENyaXRpY2FsbHksIGBhZGRyX2xlbmAgZm9yIGBoYWAgaXMgc2V0IHRvIGBkZXYtXHUwMDNlYWRkcl9sZW5gIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgYGhhYCAoY29taW5nIGZyb20gYF9fZGV2X21jX2FkZGAgb3IgYGRldl9tY19hZGRfZXhjbGApLiBTbywgdGhlcmUncyBhICpkaXJlY3QqIGNvcnJlc3BvbmRlbmNlOiB3ZSBjb3B5IHByZWNpc2VseSBgZGV2LVx1MDAzZWFkZHJfbGVuYCBieXRlcyBpbnRvIHRoZSBgaGEtXHUwMDNlYWRkcmAgYnVmZmVyLCBhbmQgd2Ugc2VuZCBleGFjdGx5IGBkZXYtXHUwMDNlYWRkcl9sZW5gIGJ5dGVzIGFzIHRoZSBgSUZBX01VTFRJQ0FTVGAgYXR0cmlidXRlIGluIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIFRoaXMgYXBwZWFycyBjb25zaXN0ZW50LlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGFsd2F5cyB0byBsb29rIGZvciByZWxhdGVkIGNvbnRleHRzIGFuZCBwb3RlbnRpYWwgdmFyaWF0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGR1bXBpbmcgbWVjaGFuaXNtIHdpdGggYHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBuZWVkcyBzY3J1dGlueS4gSSBzZWUgdGhlIHN0cnVjdHVyZSwgd2hpY2ggY29udGFpbnMgYHRndF9uZXRgLCBgbmV0bnNfdHJhY2tlcmAsIGBuZXRuc2lkYCwgYW5kIGBpZmluZGV4YC4gSW4gdGhlIGR1bXBpbmcgcHJvY2VzcyBpdHNlbGYgKGBydG5sX2R1bXBfbWNhZGRyYCksIHdlIGluaXRpYWxpemUgYGZpbHRlcmAgd2l0aCBgdGd0X25ldGAgYW5kIGBuZXRuc2lkYC4gSW50ZXJlc3RpbmcuLi4gQW5kIHRoZSBjb250ZXh0IHByb3ZpZGVkIHRvIHRoZSBjYWxsYmFjayAoYGNiLVx1MDAzZWN0eGApIGFwcGVhcnMgdG8gY29udGFpbiBhbiBgaWZpbmRleGAgYW5kIGFuIGBhZGRyX2lkeGAgZWxlbWVudC5cblxuTm93LCB0aGF0IGBjYi1cdTAwM2VjdHhgIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgbmV0bGluaywgaXNuJ3QgaXQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBuZXRsaW5rIGZyYW1ld29yayB6ZXJvLWluaXRpYWxpemVzIHRoZSBjYWxsYmFjayBjb250ZXh0IHdoZW4gdGhlIGR1bXAgc3RhcnRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBkaXJlY3RseS4gQSBxdWljayB2ZXJpZmljYXRpb24gb2YgaG93IG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHRoaXMgZGV0YWlsIGFuZCBzb2xpZGlmeSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZHVtcGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM1Ljc4ODY4MjQwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyODQ4OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNiLVxcdTAwM2VjdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmM9Mjc9c3RhdGljIHN0cnVjdCBuZXRkZXZfbmxfZHVtcF9jdHggKm5ldGRldl9kdW1wX2N0eChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMwLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MzE6XFx0cmV0dXJuIChzdHJ1Y3QgbmV0ZGV2X25sX2R1bXBfY3R4ICopY2ItXFx1MDAzZWN0eDtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMyLX1cXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM9ODE9bmV0ZGV2X25sX3BhZ2VfcG9vbF9nZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jLTgzLXtcXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jOjg0OlxcdHN0cnVjdCBwYWdlX3Bvb2xfZHVtcF9jYiAqc3RhdGUgPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYy04NS1cXHRjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvID0gZ2VubF9pbmZvX2R1bXAoY2IpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjU0ND1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU1My1cXHRcXHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjU1NDpcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU1NS1cXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0ID0gbmV0O1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDY4Nz1zdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5Ni1cXHRcXHRpbnQgYWRkcl9pZHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDY5NzpcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5OC1cXHR1bnNpZ25lZCBsb25nIHNfaWZpbmRleDtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTUxNjQ9c3RhdGljIGludCBubG1zZ19wb3B1bGF0ZV9mZGIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTUxNjkte1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUxNzA6XFx0c3RydWN0IG5kb19mZGJfZHVtcF9jb250ZXh0ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTE3MS1cXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMxNj1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMxOC1cXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IE5VTEwsICpjb3BzID0gTlVMTDtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1MzE5OlxcdHN0cnVjdCBuZG9fZmRiX2R1bXBfY29udGV4dCAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMjAtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKmJyX2RldiA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz02NjQ5PXN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NTktXFx0XFx0aW50IHByaXZpZHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjY2MDpcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjY2MS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NjgzMT1zdGF0aWMgaW50IHJ0bmxfbWRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4MzIte1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjY4MzM6XFx0c3RydWN0IHJ0bmxfbWRiX2R1bXBfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjgzNC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4NjEtXFx0XFx0ICovXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6Njg2MjpcXHRcXHRtZW1zZXQoY2ItXFx1MDAzZWN0eCwgMCwgc2l6ZW9mKGNiLVxcdTAwM2VjdHgpKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy02ODYzLVxcdFxcdGNiLVxcdTAwM2VwcmV2X3NlcSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM1LjkxMTUzNTQxMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTY5NjAwODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBzcGVjaWZpYyBjb2RlIGNoZWNrLCB0aGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nOlxuXG4qKkRlY29uc3RydWN0aW5nIGBuZXRsaW5rX2R1bXBgIGFuZCBpdHMgQ2FsbGJhY2sqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgY2JgIChsaWtlbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uKSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYG5ldGxpbmtfZHVtcGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jYC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIGBuZXRsaW5rX2R1bXBgLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IEhvdyBpcyB0aGF0IGNhbGxiYWNrIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5IHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZHVtcGluZyBuZXRsaW5rIG1lc3NhZ2VzPyBJcyBpdCBhIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbiBwb2ludGVyPyBJcyBpdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrPyBIZWFwPyBJcyB0aGVyZSBhIHN0cnVjdHVyZSBjb250YWluaW5nIGl0LCBhbmQgaG93IGlzICp0aGF0KiBzdHJ1Y3R1cmUgaGFuZGxlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBob3cgaXQgaXMgdXNlZCBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgYSBub24tdHJpdmlhbCBsaWZldGltZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGxpZmVjeWNsZSB0byBlbnN1cmUgSSBjb21wcmVoZW5kIGl0cyB1c2UsIHBvc3NpYmxlIGxpZmV0aW1lLCBhbmQgYW55IGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJJ20gdHJhY2luZyB0aGUgZGF0YSBmbG93IG9mIHRoYXQgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIGBuZXRsaW5rX2R1bXBgLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhcyB0aGlzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gbmV0bGluayBpcyBpbnZva2VkLiBJIGV4cGVjdCB0aGUgY29kZSB3aWxsIGJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBuZXRsaW5rIHNvY2tldCdzIHN0YXRlLCBzbyBJJ2xsIGtlZXAgdGhhdCBwZXJzcGVjdGl2ZSBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM4Ljg4MTEzOTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzExMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGxpbmtfZHVtcFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRsaW5rL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9OTg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5sa19jYl9tdXRleF9rZXlfc3RyaW5nc1tNQVhfTElOS1MgKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xMzMtXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzNDpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbik7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTEzNS1cXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0xOTA3PXN0YXRpYyBpbnQgbmV0bGlua19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xOTgxLVxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2M9IHNrLVxcdTAwM2Vza19yY3ZidWYgLyAyKSB7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjE5ODI6XFx0XFx0cmV0ID0gbmV0bGlua19kdW1wKHNrLCBmYWxzZSk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTE5ODMtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIyMzE9c3RhdGljIGludCBuZXRsaW5rX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjI1OC1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjI1OTpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbilcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjI2MC17XFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjM5Mj1pbnQgX19uZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yNDQ1LVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyNDQ2OlxcdHJldCA9IG5ldGxpbmtfZHVtcChzaywgdHJ1ZSk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI0NDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM4LjkzODQ1NzkyNloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTMyOTczNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRsaW5rIER1bXAgUHJvY2VzcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgX19uZXRsaW5rX2R1bXBfc3RhcnRgIGluIGBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVybmFsIG1lY2hhbmljcyBvZiB0aGUgbmV0bGluayBkdW1waW5nIHByb2Nlc3MuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGluaXRpYXRlcyBhIGR1bXAsIHRoZSBjb250ZXh0IHNldHVwLCBhbmQgdGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIHN0YXJ0IGRpc3NlY3RpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIG5ldGxpbmsgZmFtaWx5IGltcGxlbWVudGF0aW9ucy4gSSdsbCBiZSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBmcm9tIHRoZSB0b3AgZG93biwga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgTmV0bGluayBtZXNzYWdlIHF1ZXVlLCBhbnkgYnVmZmVyIG1hbmFnZW1lbnQgdGhhdCdzIGhhcHBlbmluZywgYW5kIGhvdyB0aGUgZHVtcCdzIHN0YXRlIGlzIGluaXRpYWxpemVkLiBJIGV4cGVjdCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgY29yZSBkdW1wIGxvb3AgYW5kIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggYXJlIHByb2JhYmx5IGNyaXRpY2FsIHRvIHRoaXMgd2hvbGUgb3BlcmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgYWxsIGludGltYXRlbHkgdGllZCB0byBuZXRsaW5rJ3MgYXN5bmNocm9ub3VzIG5hdHVyZSwgc28gSeKAmW0gcmVhbGx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgY29uY3VycmVuY3kgYW5kIGhvdyB0aGUgZHVtcCBpcyBwcm9wZXJseSBzaWduYWxlZCB0byBjb21wbGV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY5MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjQxLjQ3MTQzNDMyMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvYWZfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MjA6XFx0XFx0fVxcbjI0MjE6XFx0XFxuMjQyMjpcXHRcXHRjYiA9IFxcdTAwMjZubGstXFx1MDAzZWNiO1xcbjI0MjM6XFx0XFx0bWVtc2V0KGNiLCAwLCBzaXplb2YoKmNiKSk7XFxuMjQyNDpcXHRcXHRjYi1cXHUwMDNlZHVtcCA9IGNvbnRyb2wtXFx1MDAzZWR1bXA7XFxuMjQyNTpcXHRcXHRjYi1cXHUwMDNlZG9uZSA9IGNvbnRyb2wtXFx1MDAzZWRvbmU7XFxuMjQyNjpcXHRcXHRjYi1cXHUwMDNlbmxoID0gbmxoO1xcbjI0Mjc6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBjb250cm9sLVxcdTAwM2VkYXRhO1xcbjI0Mjg6XFx0XFx0Y2ItXFx1MDAzZW1vZHVsZSA9IGNvbnRyb2wtXFx1MDAzZW1vZHVsZTtcXG4yNDI5OlxcdFxcdGNiLVxcdTAwM2VtaW5fZHVtcF9hbGxvYyA9IGNvbnRyb2wtXFx1MDAzZW1pbl9kdW1wX2FsbG9jO1xcbjI0MzA6XFx0XFx0Y2ItXFx1MDAzZWZsYWdzID0gY29udHJvbC1cXHUwMDNlZmxhZ3M7XFxuMjQzMTpcXHRcXHRjYi1cXHUwMDNlc2tiID0gc2tiO1xcbjI0MzI6XFx0XFxuMjQzMzpcXHRcXHRjYi1cXHUwMDNlc3RyaWN0X2NoZWNrID0gbmxrX3Rlc3RfYml0KFNUUklDVF9DSEssIE5FVExJTktfQ0Ioc2tiKS5zayk7XFxuMjQzNDpcXHRcXG4yNDM1OlxcdFxcdGlmIChjb250cm9sLVxcdTAwM2VzdGFydCkge1xcbjI0MzY6XFx0XFx0XFx0Y2ItXFx1MDAzZWV4dGFjayA9IGNvbnRyb2wtXFx1MDAzZWV4dGFjaztcXG4yNDM3OlxcdFxcdFxcdHJldCA9IGNvbnRyb2wtXFx1MDAzZXN0YXJ0KGNiKTtcXG4yNDM4OlxcdFxcdFxcdGNiLVxcdTAwM2VleHRhY2sgPSBOVUxMO1xcbjI0Mzk6XFx0XFx0XFx0aWYgKHJldClcXG4yNDQwOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3JfcHV0O1xcbjI0NDE6XFx0XFx0fVxcbjI0NDI6XFx0XFxuMjQ0MzpcXHRcXHRXUklURV9PTkNFKG5say1cXHUwMDNlY2JfcnVubmluZywgdHJ1ZSk7XFxuMjQ0NDpcXHRcXHRubGstXFx1MDAzZWR1bXBfZG9uZV9lcnJubyA9IElOVF9NQVg7XFxuMjQ0NTpcXHRcXG4yNDQ2OlxcdFxcdHJldCA9IG5ldGxpbmtfZHVtcChzaywgdHJ1ZSk7XFxuMjQ0NzpcXHRcXG4yNDQ4OlxcdFxcdHNvY2tfcHV0KHNrKTtcXG4yNDQ5OlxcdFxcbjI0NTA6XFx0XFx0aWYgKHJldClcXG4yNDUxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQ1MjpcXHRcXG4yNDUzOlxcdFxcdC8qIFdlIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGEgZHVtcCwgYnkgcmV0dXJuaW5nIC1FSU5UUiB3ZVxcbjI0NTQ6XFx0XFx0ICogc2lnbmFsIG5vdCB0byBzZW5kIEFDSyBldmVuIGlmIGl0IHdhcyByZXF1ZXN0ZWQuXFxuMjQ1NTpcXHRcXHQgKi9cXG4yNDU2OlxcdFxcdHJldHVybiAtRUlOVFI7XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdGVycm9yX3B1dDpcXG4yNDU5OlxcdFxcdG1vZHVsZV9wdXQoY29udHJvbC1cXHUwMDNlbW9kdWxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6NDEuNDcxNjI3NzIxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODkwMDk2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgTXVsdGljYXN0IEFkZHJlc3MgRHVtcGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSd2ZSBleGFtaW5lZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyBjb2RlIGluIGRldGFpbCB0byBlbnN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhZHMgdG8gbGVha3Mgb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgY2ItXHUwMDNlY3R4YCwgdXNlZCBmb3IgdHJhY2tpbmcgdGhlIGR1bXAncyBzdGF0ZSwgaXMgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCwgZW5zdXJpbmcgbm8gZ2FyYmFnZSBkYXRhIGlzIGNhcnJpZWQgb3ZlciBiZXR3ZWVuIGR1bXBzLlxuXG5UaGVuLCBJIHdlbnQgdGhyb3VnaCB0aGUgY29yZSBmdW5jdGlvbiBgcnRubF9maWxsX21jYWRkcmAgbGluZS1ieS1saW5lLiBUaGUgYGlmYWRkcm1zZ2Agc3RydWN0dXJlLCB0aGUgZm91bmRhdGlvbiBvZiB0aGUgbWVzc2FnZSwgaGFzIGFsbCBpdHMgZmllbGRzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGVsaW1pbmF0aW5nIGFueSByaXNrcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgYXJlIHBvcHVsYXRlZCB3aXRoIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgZGlyZWN0IHNjYWxhcnMgb3IgY29waWVzIG9mIGRhdGEgdGhhdCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgKGxpa2UgdGhlIGRldmljZSdzIGhhcmR3YXJlIGFkZHJlc3MpLiBUaGUgYG5sYV9wdXRgIGZ1bmN0aW9ucywgZXNzZW50aWFsIGZvciBpbnNlcnRpbmcgdGhlc2UgYXR0cmlidXRlcyBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZSBhbnkgbmVjZXNzYXJ5IHBhZGRpbmcsIHByZXZlbnRpbmcgdW5pbnRlbmRlZCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLlxuXG5JIGNoZWNrZWQgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCB3aGljaCB2YWxpZGF0ZXMgdGhlIHJlcXVlc3QuIFRoZSBjb2RlIGNhcmVmdWxseSBwYXJzZXMgdGhlIGluY29taW5nIG5ldGxpbmsgbWVzc2FnZSBhbmQgaW5pdGlhbGl6ZXMgbG9jYWwgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBkYXRhLiBUaGUgYHRiYCBhcnJheSwgdXNlZCB0byBob2xkIHBhcnNlZCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlzIHBvcHVsYXRlZCB0aHJvdWdoIHRoZSBgbmxtc2dfcGFyc2VgIGZ1bmN0aW9uIGFuZCBpcyBzYWZlLiBUaGUgYGZpbHRlcmAgc3RydWN0dXJlLCB3aGljaCBkZWZpbmVzIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgZm9yIHRoZSBkdW1wLCBpcyBhbHNvIGNvbnNpc3RlbnRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdW5tZW50aW9uZWQgZmllbGRzLCB3aXRoIGNhcmVmdWwgaGFuZGxpbmcgb2YgdGhlIHBvdGVudGlhbGx5IG5ldG5zLXNwZWNpZmljIGZpbHRlcmluZy5cblxuSW4gdGhlIGBydG5sX2R1bXBfbWNhZGRyYCBmdW5jdGlvbiwgd2hpY2ggb3JjaGVzdHJhdGVzIHRoZSBkdW1wIHByb2Nlc3MsIHRoZSBgZmlsdGVyYCBzdHJ1Y3QgaXMgY29uc2lzdGVudGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGl0ZXJhdGlvbiB0aHJvdWdoIGRldmljZXMgaXMgY2FyZWZ1bGx5IG1hbmFnZWQsIGFsb25nIHdpdGggbmV0bnMgaGFuZGxpbmcuIFRoZSBgY3R4YCB2YXJpYWJsZSAoYSBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBjb250ZXh0KSBoYXMgaXRzIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGNsZWFyZWQsIGFuZCB0aGUgbG9vcCBsb2dpYyBlbnN1cmVzIG5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSByZWFkLlxuXG5NeSBjb21wcmVoZW5zaXZlIHJldmlldyBoYXMgY29uZmlybWVkIHRoYXQ6XG5cbjEuICBBbGwgdmFyaWFibGVzIGludm9sdmVkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgZWl0aGVyIGRpcmVjdGx5LCB0aHJvdWdoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBvciBieSB0aGUgbmV0bGluayBjb3JlIGZ1bmN0aW9ucy5cbjIuICBObyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgb3IgdW5pbml0aWFsaXplZCBkYXRhIGlzIGV2ZXIgc2VudCB0byB1c2Vyc3BhY2UuXG4zLiAgQ29uZGl0aW9uYWwgYnJhbmNoaW5nIGRvZXMgbm90IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuNC4gIFN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIGFkZXF1YXRlIHRvIGNhdGNoIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMgaW4gdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByaXNrIGlzIHJlbGF0ZWQgdG8gUkNVIGlzc3VlcywgbG9ja2luZyBpc3N1ZXMgb3Igb3V0LW9mLWJvdW5kcyBpbiBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgdGhlc2UgZXJyb3JzIGNhbiBiZSBjYXVnaHQgd2l0aCBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgbm90IGEgY2FuZGlkYXRlIGZvciBLTVNBTi1zcGVjaWZpYyBmdXp6aW5nLiBUaGUgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgcG9zc2libGUgbWVtb3J5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTcsIk91dHB1dFRva2VucyI6MzQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjUzLjM2MTcyNzAxNloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5sX2R1bXBfbWNhZGRyIGFuZCBydG5sX2ZpbGxfbWNhZGRyLlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcXG4xLiBgc3RydWN0IGlmYWRkcm1zZ2AgcGF5bG9hZDogQWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgc3RydWN0IGNvbnRhaW5zIDQgYF9fdThgIGZpZWxkcyBhbmQgMSBgX191MzJgIGZpZWxkIHRvdGFsaW5nIDggYnl0ZXMgd2l0aCB6ZXJvIHBhZGRpbmcgYnl0ZXMuXFxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVxcdTAwM2VyZWZjb3VudGAsIGBpZmFfZmxhZ3NgLCBhbmQgYGhhLVxcdTAwM2VhZGRyYCBvZiBsZW5ndGggYGRldi1cXHUwMDNlYWRkcl9sZW5gKS5cXG4zLiBMb2NhbCB2YXJpYWJsZXMgYW5kIGZpbHRlcnM6IGBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXJgIGlzIGluaXRpYWxpemVkIHVzaW5nIEMgc3RydWN0IGluaXRpYWxpemF0aW9uLCBgY3R4YCBpcyB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgY29yZSBmcmFtZXdvcmssIGFuZCBhbGwgdmFsaWRhdGlvbiB2YXJpYWJsZXMgYXJlIHNhZmVseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcblxcblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmxfZHVtcF9tY2FkZHIgYW5kIHJ0bmxfZmlsbF9tY2FkZHIuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxcbjEuIGBzdHJ1Y3QgaWZhZGRybXNnYCBwYXlsb2FkOiBBbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBzdHJ1Y3QgY29udGFpbnMgNCBgX191OGAgZmllbGRzIGFuZCAxIGBfX3UzMmAgZmllbGQgdG90YWxpbmcgOCBieXRlcyB3aXRoIHplcm8gcGFkZGluZyBieXRlcy5cXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXFx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXFx1MDAzZWFkZHJgIG9mIGxlbmd0aCBgZGV2LVxcdTAwM2VhZGRyX2xlbmApLlxcbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuXFxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow28v7b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 12:23:05 +0000 UTC FinishedAt: 2026-09-11 12:44:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "0a96d0d726cd380423ac38e2c28f538db2940a1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "4a7172c7-6e49-4071-b118-e8b7581418b8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_dump_mcaddr", "rtnl_dump_mcaddr_dev", "rtnl_fill_mcaddr", "rtnl_valid_dump_mcaddr_req" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRubF9kdW1wX21jYWRkciBhbmQgcnRubF9maWxsX21jYWRkci5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuMS4gYHN0cnVjdCBpZmFkZHJtc2dgIHBheWxvYWQ6IEFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHN0cnVjdCBjb250YWlucyA0IGBfX3U4YCBmaWVsZHMgYW5kIDEgYF9fdTMyYCBmaWVsZCB0b3RhbGluZyA4IGJ5dGVzIHdpdGggemVybyBwYWRkaW5nIGJ5dGVzLlxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXHUwMDNlYWRkcmAgb2YgbGVuZ3RoIGBkZXYtXHUwMDNlYWRkcl9sZW5gKS5cbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5ldGxpbmssIGltcGxlbWVudGluZyByZXF1ZXN0IHZhbGlkYXRpb24sIGRldmljZSB0cmF2ZXJzYWwsIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhpcyByZWFjaGFibGUgbmV0bGluayBpbnRlcmZhY2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYWJhMTI4MjA3YjNmOWNjMjE1YzdlOWExMzg1NjE0YTA3MTM2ZWI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDM6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLjFhMTdlNTVkMWNjYTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiAmIzQzOzc3LDggQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgICBuYW1lOiBtY2F1dG9qb2luXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICYjNDM7MTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxuLSAgICAgICAgdHlwZTogYmluYXJ5XG4mIzQzOyAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcHJvdG9cbiAgICAgICAgIHR5cGU6IHU4XG5AQCAtMTY4LDcgJiM0MzsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbiYjNDM7ICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IG11c3Qgc2VsZWN0IHRoZSBhZGRyZXNzXG4mIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb25cbiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCBleHBsaWNpdGx5LCBlLmcuIHdpdGhcbiYjNDM7ICAgICAgICBTSU9DQURETVVMVEkgb3IgXCYjMzQ7YnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcJiMzNDssIHJhdGhlciB0aGFuIGJ5IGFcbiYjNDM7ICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuXG4gICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRyc1xuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXG4gICAgICAgZG86XG5AQCAtMTgxLDEwICYjNDM7MTg5LDEzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXG4gICAgICAgICAgICAgLSBjYWNoZWluZm9cbiYjNDM7ICAgICAgICAgICAgLSBmbGFnc1xuJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXVxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgICAgcmVwbHk6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IDdmYjYzMGI3ZmUzMTEuLjBhMWFkOWViYjQ3YmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5AQCAtNTcsNiAmIzQzOzU3LDcgQEAgZW51bSB7XG4gI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFXHQweDIwMFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlx0MHg0MDBcbiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZXHQweDgwMFxuJiM0MzsjZGVmaW5lIElGQV9GX0dMT0JBTFx0XHQweDEwMDBcbiBcbiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XG4gXHRfX3UzMlx0aWZhX3ByZWZlcmVkO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmQ1MWQ3NzNiOTNjNmQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC00NTY2LDYgJiM0Mzs0NTY2LDE3OCBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbiYjNDM7XHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XG4mIzQzO1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuJiM0MztcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuJiM0MztcbiYjNDM7XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuJiM0MztcdFx0XHRmbGFncyk7XG4mIzQzO1x0aWYgKCFubGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuJiM0MztcdC8qIGlmbS1cdTAwM2VpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi9cbiYjNDM7XHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XG4mIzQzO1x0aWYgKChuZXRuc2lkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIG5sYV9wdXRfczMyKHNrYiwgSUZBX1RBUkdFVF9ORVROU0lELCBuZXRuc2lkKSkgfHxcbiYjNDM7XHQgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVx1MDAzZXJlZmNvdW50KSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhX2ZsYWdzKSkge1xuJiM0MztcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRubG1zZ19lbmQoc2tiLCBubGgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4mIzQzO1x0aW50IGFkZHJfaWR4ID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuJiM0MztcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuJiM0MztcdFx0XHRhZGRyX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuJiM0MztcbiYjNDM7XHQqc19hZGRyX2lkeCA9IGVyciBcdTAwM2MgMCA/IGFkZHJfaWR4IDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xuJiM0MztcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcbiYjNDM7XHRpbnQgbmV0bnNpZDtcbiYjNDM7XHRpbnQgaWZpbmRleDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG5sX21jYWRkcl9kdW1wX3BvbGljeVtJRkFfTUFYICYjNDM7IDFdID0ge1xuJiM0MztcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICYjNDM7IDFdO1xuJiM0MztcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcbiYjNDM7XHRpZiAoIWlmbSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXHUwMDNlaWZhX3Njb3BlKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXG4mIzQzO1x0XHRcdCAgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3ksIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4mIzQzO1xuJiM0MztcdFx0ZmlsdGVyLVx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcbiYjNDM7XHRcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXHUwMDNlbmV0bnNpZCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG5ldCkpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG5ldCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2ZmlsdGVyLVx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbiYjNDM7XHRcdC50Z3RfbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKSxcbiYjNDM7XHRcdC5uZXRuc2lkID0gLTEsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuJiM0MztcdFx0aW50IGFkZHJfaWR4O1xuJiM0MztcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBza2ItXHUwMDNlc2ssIFx1MDAyNmZpbHRlcixcbiYjNDM7XHRcdFx0XHRcdCBjYi1cdTAwM2VleHRhY2spO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChmaWx0ZXIuaWZpbmRleCkge1xuJiM0MztcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4mIzQzO1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuJiM0MztcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTtcbiYjNDM7XHRcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzX2lmaW5kZXggPSBjdHgtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0LyogVGhlIGRldmljZSB0aGUgZHVtcCBzdG9wcGVkIGF0IGlzIGdvbmUsIGRvIG5vdCBza2lwXG4mIzQzO1x0XHQgKiBlbnRyaWVzIG9mIHRoZSBuZXh0IG9uZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VpZmluZGV4ICE9IHNfaWZpbmRleClcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZWFkZHJfaWR4ID0gMDtcbiYjNDM7XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7b3V0OlxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdGlmIChmaWx0ZXIubmV0bnNpZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRwdXRfbmV0X3RyYWNrKGZpbHRlci50Z3RfbmV0LCBcdTAwMjZmaWx0ZXIubnNfdHJhY2tlcik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuIFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG5AQCAtNzI1MSw2ICYjNDM7NzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuJiM0MztcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbiYjNDM7XHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4gXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0xLDE3ICYjNDM7MSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4mIzQzO2ltcG9ydCBlcnJub1xuIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1xceGUwXFx4MDBcXHgwMFxceDAxJiMzOTtcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XFx4ZWZcXHgwMVxceDAxXFx4MDEmIzM5O1xuIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OylcbiYjNDM7RVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7MDEwMDVlMDAwMDAxJiMzOTspXG4mIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTtcbiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKVxuIFxuIFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcbkBAIC0xMDUsNiAmIzQzOzEwOSw3MCBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4mIzQzO2RlZiBkdW1wX21jYWRkcl9sMl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzLCB0aGUgZ2xvYmFsIGZsYWcgYW5kXG4mIzQzOyAgICB0YXJnZXQtbmV0bnNpZC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluIChcJiMzNDtkdW1teTFcJiMzNDssIFwmIzM0O2R1bW15MlwmIzM0Oyk6XG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cFwmIzM0OylcbiYjNDM7ICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFwmIzM0O2R1bW15MVwmIzM0OylcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuJiM0MzsgICAgICAgIGRlZmVyKHJ0bmwuY2xvc2UpXG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdChcbiYjNDM7ICAgICAgICAgICAgICAgIHtcJiMzNDtpZmEtZmFtaWx5XCYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCBcJiMzNDtpZmEtaW5kZXhcJiMzNDs6IGRldl9pZHh9LFxuJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICByYWlzZVxuJiM0MztcbiYjNDM7ICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkXG4mIzQzOyAgICAgICAga3NmdF9lcSh7YWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICBlbnRyaWVzID0ge2FkZHJbJiMzOTttdWx0aWNhc3QmIzM5O106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxuJiM0MztcbiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcbiYjNDM7ICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXG4mIzQzOyAgICAgICAgYWxsX2hvc3RzID0gZW50cmllcy5nZXQoRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QpXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhbGxfaG9zdHMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wmIzM0OylcbiYjNDM7ICAgICAgICBpZiBhbGxfaG9zdHMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7Z2xvYmFsJiMzOTssIGFsbF9ob3N0c1smIzM5O2ZsYWdzJiMzOTtdLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVClcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKHN0YXRpYywgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIHN0YXRpYyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcShzdGF0aWNbJiMzOTttYy11c2VycyYjMzk7XSwgMSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDt1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGtzZnRfaW4oJiMzOTtnbG9iYWwmIzM5Oywgc3RhdGljWyYjMzk7ZmxhZ3MmIzM5O10sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7U0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XG4mIzQzOyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6XG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDtuZXRucyBzZXQge3BlZXJ9IDVcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcJiMzNDssIG5zPXBlZXIpXG4mIzQzOyAgICAgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGR1bW15MyB1cFwmIzM0OywgbnM9cGVlcilcbiYjNDM7ICAgICAgICAgICAgcGVlcl9pZHggPSBpcChcJiMzNDtsaW5rIHNob3cgZHVtbXkzXCYjMzQ7LCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWyYjMzk7aWZpbmRleCYjMzk7XVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXG4mIzQzOyAgICAgICAgICAgICAgICB7XCYjMzQ7aWZhLWZhbWlseVwmIzM0Ozogc29ja2V0LkFGX1BBQ0tFVCwgXCYjMzQ7dGFyZ2V0LW5ldG5zaWRcJiMzNDs6IDV9LFxuJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSwgYWRkclsmIzM5O3RhcmdldC1uZXRuc2lkJiMzOTtdKVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcbkBAIC0zMTUsNyAmIzQzOzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuIFxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDssCiAgICAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRuZXRsaW5rLCBpbXBsZW1lbnRpbmcgcmVxdWVzdCB2YWxpZGF0aW9uLCBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoaXMgcmVhY2hhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmFiYTEyODIwN2IzZjljYzIxNWM3ZTlhMTM4NTYxNGEwNzEzNmViNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjQzOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uMWExN2U1NWQxY2NhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3MKJiM0MzsgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uCiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZQomIzQzOyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aAomIzQzOyAgICAgICAgU0lPQ0FERE1VTFRJIG9yICYjMzQ7YnJpZGdlIGZkYiBhZGQgLi4uIHNlbGYmIzM0OywgcmF0aGVyIHRoYW4gYnkgYQomIzQzOyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LgogICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRycwogICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2cKICAgICAgIGRvOgpAQCAtMTgxLDEwICYjNDM7MTg5LDEzIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIG11bHRpY2FzdAogICAgICAgICAgICAgLSBtYy11c2VycwogICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIGZsYWdzCiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogNTgKLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXQomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWQKICAgICAgICAgcmVwbHk6CiAgICAgICAgICAgdmFsdWU6IDU4CiAgICAgICAgICAgYXR0cmlidXRlczogKm1jYWRkci1hdHRycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC01Nyw2ICYjNDM7NTcsNyBAQCBlbnVtIHsKICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURQkweDIwMAogI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOCTB4NDAwCiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZCTB4ODAwCiYjNDM7I2RlZmluZSBJRkFfRl9HTE9CQUwJCTB4MTAwMAogCiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7CiAJX191MzIJaWZhX3ByZWZlcmVkOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA4MWM1YTYxMDRkZWExLi5kNTFkNzczYjkzYzZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU2Niw2ICYjNDM7NDU2NiwxNzggQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAlyZXR1cm4gc2tiLSZndDtsZW4gPyA6IHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLAomIzQzOwkJCSAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJdTMyIGlmYV9mbGFncyA9IGhhLSZndDtnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CS8qIGlmbS0mZ3Q7aWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovCiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAoKG5ldG5zaWQgJmd0Oz0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fAomIzQzOwkgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7CiYjNDM7CQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlubG1zZ19lbmQoc2tiLCBubGgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiYjNDM7CWludCBhZGRyX2lkeCA9IDA7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgewomIzQzOwkJaWYgKGFkZHJfaWR4ICZsdDsgKnNfYWRkcl9pZHgpIHsKJiM0MzsJCQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiYjNDM7CQkJCSAgICAgICBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiYjNDM7CiYjNDM7CSpzX2FkZHJfaWR4ID0gZXJyICZsdDsgMCA/IGFkZHJfaWR4IDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHsKJiM0MzsJc3RydWN0IG5ldCAqdGd0X25ldDsKJiM0MzsJbmV0bnNfdHJhY2tlciBuc190cmFja2VyOwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCW5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCAmYW1wO2ZpbHRlci0mZ3Q7bnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlmaWx0ZXItJmd0O3RndF9uZXQgPSBuZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmlsdGVyLSZndDtpZmluZGV4ID0gaWZtLSZndDtpZmFfaW5kZXg7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHsKJiM0MzsJCS50Z3RfbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayksCiYjNDM7CQkubmV0bnNpZCA9IC0xLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwl1bnNpZ25lZCBsb25nIHNfaWZpbmRleDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgc2tiLSZndDtzaywgJmFtcDtmaWx0ZXIsCiYjNDM7CQkJCQkgY2ItJmd0O2V4dGFjayk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwlpZiAoZmlsdGVyLmlmaW5kZXgpIHsKJiM0MzsJCWNiLSZndDthbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDsKJiM0MzsJCWZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpOwomIzQzOwkJaWYgKCFkZXYpIHsKJiM0MzsJCQllcnIgPSAtRU5PREVWOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc19pZmluZGV4ID0gY3R4LSZndDtpZmluZGV4OwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtJmd0O2lmaW5kZXgpIHsKJiM0MzsJCS8qIFRoZSBkZXZpY2UgdGhlIGR1bXAgc3RvcHBlZCBhdCBpcyBnb25lLCBkbyBub3Qgc2tpcAomIzQzOwkJICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChkZXYtJmd0O2lmaW5kZXggIT0gc19pZmluZGV4KQomIzQzOwkJCWN0eC0mZ3Q7YWRkcl9pZHggPSAwOwomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXRfdHJhY2soZmlsdGVyLnRndF9uZXQsICZhbXA7ZmlsdGVyLm5zX3RyYWNrZXIpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNzAgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O2lmYS1pbmRleCYjMzQ7OiBkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKQomIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZToKJiM0MzsgICAgICAgICAgICBpZiBlLmVycm9yID09IGVycm5vLkVPUE5PVFNVUFA6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCYjMzQ7KQomIzQzOyAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkCiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBlbnRyaWVzID0ge2FkZHJbJiMzOTttdWx0aWNhc3QmIzM5O106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfQomIzQzOwomIzQzOyAgICAgICAgIyBCcmluZ2luZyBhbiBFdGhlcm5ldCBkZXZpY2UgdXAgam9pbnMgMjI0LjAuMC4xLCB3aGljaCBtYXBzCiYjNDM7ICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuCiYjNDM7ICAgICAgICBhbGxfaG9zdHMgPSBlbnRyaWVzLmdldChFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYWxsX2hvc3RzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBpZiBhbGxfaG9zdHMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtnbG9iYWwmIzM5OywgYWxsX2hvc3RzWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWwmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoc3RhdGljLCAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoc3RhdGljWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgICAgIGtzZnRfaW4oJiMzOTtnbG9iYWwmIzM5Oywgc3RhdGljWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O1NJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdAomIzQzOyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6CiYjNDM7ICAgICAgICAgICAgaXAoZiYjMzQ7bmV0bnMgc2V0IHtwZWVyfSA1JiMzNDspCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15JiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkdW1teTMgdXAmIzM0OywgbnM9cGVlcikKJiM0MzsgICAgICAgICAgICBwZWVyX2lkeCA9IGlwKCYjMzQ7bGluayBzaG93IGR1bW15MyYjMzQ7LCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWyYjMzk7aWZpbmRleCYjMzk7XQomIzQzOwomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7dGFyZ2V0LW5ldG5zaWQmIzM0OzogNX0sCiYjNDM7ICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSkKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSwgYWRkclsmIzM5O3RhcmdldC1uZXRuc2lkJiMzOTtdKQomIzQzOyAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHsocGVlcl9pZHgsIDUpfSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7dGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7CiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rCkBAIC0zMTUsNyAmIzQzOzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKIAogCiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjaywKJiM0MzsgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksCiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQxMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJ0bmV0bGluayBNdWx0aWNhc3QgQWRkcmVzcyBEdW1wIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCkgb3ZlciBydG5ldGxpbmsuIFRoYXQmIzM5O3MgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSAoYHJ0LWFkZHIueWFtbGApLCBhIG5ldyBmbGFnIGluIGBpZl9hZGRyLmhgIChgSUZBX0ZfR0xPQkFMYCksIGFuZCB0aGUgY29yZSBsb2dpYyBpbiBgcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIG5ldyBmdW5jdGlvbnMgZm9yIGZpbGxpbmcsIGR1bXBpbmcsIHZhbGlkYXRpbmcsIGFuZCBoYW5kbGluZyB0aGUgbXVsdGljYXN0IGFkZHJlc3MgcmVxdWVzdC4gV2UmIzM5O3ZlIGdvdCB0aGUgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2UgaGFuZGxpbmcgc3RydWN0dXJlIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmV3IGBSVE1fR0VUTVVMVElDQVNUYCBtZXNzYWdlIHR5cGUuIEdvb2QuIEFuZCwgb2YgY291cnNlLCB0aGUgb2JsaWdhdG9yeSBzZWxmdGVzdHMgaW4gYHJ0bmV0bGluay5weWAuIE1ha2VzIHNlbnNlLCB3ZSBoYXZlIGEgdGVzdCBzdWl0ZS4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/IExldCYjMzk7cyBzZWUuLi4gdGhlIHRhcmdldCBpcyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCByaWdodCB3aGVyZSB0aGUgY29yZSBuZXRsaW5rIHN0dWZmIGxpdmVzLiBUaGUgcGF0Y2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgcnRuZXRsaW5rIHNvY2tldCB1c2luZyBgUlRNX0dFVE1VTFRJQ0FTVGAgd2l0aCBgZmFtaWx5ID0gQUZfUEFDS0VUYC4gWWVwLCBzdGFuZGFyZCBuZXRsaW5rLCBhY2Nlc3NpYmxlIGZyb20gZWl0aGVyIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkIHVzZXIgc3BhY2UuIEFuZCwgb2YgY291cnNlLCB3ZSBjYW4gaGl0IGl0IGluIFFFTVUsIG9yIGV2ZW4gb24gYSBzdGFuZGFyZCBMaW51eCBzZXR1cCwgYW5kIGZyb20gd2l0aGluIG5ldHdvcmsgbmFtZXNwYWNlcy4gV2UgaGF2ZSBsb2dpYyBhZGRlZCBmb3IgdmFsaWRhdGlvbiwgYW5kIGl0ZXJhdGluZyBhY3Jvc3MgZGV2aWNlcyB1c2luZyBlc3RhYmxpc2hlZCBmdW5jdGlvbnMuIFRoZXJlJiMzOTtzIGFsc28gbmV0bnMgdHJhY2tpbmcgYW5kIHJ0bmwgbWVzc2FnZSBjb25zdHJ1Y3Rpb24uIFRoaXMgaGFzIGFsbCBvZiB0aGUgdHlwaWNhbCBlbGVtZW50cyBvZiBhIGdvb2QgZnV6eiB0YXJnZXQuCgpTbywgKldvcnRoRnV6emluZyogaXMgYSByZXNvdW5kaW5nICYjMzQ7eWVzJiMzNDsuIFdlJiMzOTt2ZSBnb3QgYSBuZXcgbmV0bGluayBtZXNzYWdlLCBzb21lIG5ldyBmdW5jdGlvbnMsIGFuZCBpdCYjMzk7cyBhbGwgcmVhY2hhYmxlLiAKCkZpbmFsbHksIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbi4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLVxcJC4qcnRuZXRsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBMb2NhdGlvbiBvZiBgcnRuZXRsaW5rLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGZvciBgcnRuZXRsaW5rLmNgIHJlc2lkZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3RydWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHRvIGNoZWNrIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBzaW5jZSBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29tcG9uZW50LCB0aGUgYnVpbGQgc3lzdGVtIHdvdWxkIG1vc3QgbGlrZWx5IGRlZmluZSBpdHMgaW5jbHVzaW9uIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIHJldmVhbHMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2ggZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBydG5ldGxpbmsgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcnRuZXRsaW5rLm9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGluY2x1c2lvbi4gUmlnaHQsIGl0JiMzOTtzIGJ1aWx0IHdpdGggYG9iai15YCBpbiB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBzdGF0aWNhbGx5IGxpbmtlZCwgYW5kIHRoZSBwcmVyZXF1aXNpdGUgZm9yIHRoYXQgaXMgYENPTkZJR19ORVRgLiBHb3QgaXQuIE5vdywgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlJiMzOTtzIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0aW5nIGtleSBmdW5jdGlvbnMgd2l0aGluIGBydG5ldGxpbmsuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgYHJ0bmxfZHVtcF9tY2FkZHJgIG9yIGBuZXRuc190cmFja2VyYC4gVGhhdCB3b3VsZCBiZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgdGhleSYjMzk7cmUgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhcyByZWxhdGVkIHRvIG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRyYWNraW5nLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBmdW5jdGlvbnMgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTY2Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuNDU2NzpcdH1cbjQ1Njg6XHRcbjQ1Njk6XHRzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjQ1NzA6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbjQ1NzE6XHRcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbjQ1NzI6XHR7XG40NTczOlx0XHR1MzIgaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XG40NTc0Olx0XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG40NTc1Olx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbjQ1NzY6XHRcbjQ1Nzc6XHRcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG40NTc4Olx0XHRcdFx0ZmxhZ3MpO1xuNDU3OTpcdFx0aWYgKCFubGgpXG40NTgwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG40NTgxOlx0XG40NTgyOlx0XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG40NTgzOlx0XHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbjQ1ODQ6XHRcdGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcbjQ1ODU6XHRcdC8qIGlmbS1cdTAwM2VpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi9cbjQ1ODY6XHRcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XG40NTg3Olx0XHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbjQ1ODg6XHRcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbjQ1ODk6XHRcbjQ1OTA6XHRcdGlmICgobmV0bnNpZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG40NTkxOlx0XHQgICAgIG5sYV9wdXRfczMyKHNrYiwgSUZBX1RBUkdFVF9ORVROU0lELCBuZXRuc2lkKSkgfHxcbjQ1OTI6XHRcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuNDU5MzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBoYS1cdTAwM2VyZWZjb3VudCkgfHxcbjQ1OTQ6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhX2ZsYWdzKSkge1xuNDU5NTpcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuNDU5NjpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuNDU5NzpcdFx0fVxuNDU5ODpcdFxuNDU5OTpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbjQ2MDA6XHRcdHJldHVybiAwO1xuNDYwMTpcdH1cbjQ2MDI6XHRcbjQ2MDM6XHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG40NjA0Olx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbjQ2MDU6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG40NjA2Olx0e1xuNDYwNzpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbjQ2MDg6XHRcdGludCBhZGRyX2lkeCA9IDA7XG40NjA5Olx0XHRpbnQgZXJyID0gMDtcbjQ2MTA6XHRcbjQ2MTE6XHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuNDYxMjpcdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuNDYxMzpcdFx0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG40NjE0Olx0XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuNDYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIFBsdW1iaW5nKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgNDYxNiB0aHJvdWdoIDQ3NDAuIFRoYXQgcmFuZ2UgdXN1YWxseSBlbmNvbXBhc3NlcyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgYSBjcml0aWNhbCBwYXJ0IG9mIGEgbGFyZ2VyIG9uZSBkZWFsaW5nIHdpdGggcm91dGUgbmV0bGluayBtZXNzYWdpbmcsIHByb2JhYmx5LiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdXNlciBzcGFjZS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gcHJlY2lzZSB3aXRoIHRoaXMgc2VjdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGhvbGRzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjE2Olx0XHRcdH1cbjQ2MTc6XHRcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG40NjE4Olx0XHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuNDYxOTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuNDYyMDpcdFx0XHRcdGJyZWFrO1xuNDYyMTpcdFx0XHRhZGRyX2lkeCYjNDM7JiM0Mzs7XG40NjIyOlx0XHR9XG40NjIzOlx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuNDYyNDpcdFxuNDYyNTpcdFx0KnNfYWRkcl9pZHggPSBlcnIgXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XG40NjI2Olx0XG40NjI3Olx0XHRyZXR1cm4gZXJyO1xuNDYyODpcdH1cbjQ2Mjk6XHRcbjQ2MzA6XHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xuNDYzMTpcdFx0c3RydWN0IG5ldCAqdGd0X25ldDtcbjQ2MzI6XHRcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcbjQ2MzM6XHRcdGludCBuZXRuc2lkO1xuNDYzNDpcdFx0aW50IGlmaW5kZXg7XG40NjM1Olx0fTtcbjQ2MzY6XHRcbjQ2Mzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHtcbjQ2Mzg6XHRcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG40NjM5Olx0fTtcbjQ2NDA6XHRcbjQ2NDE6XHRzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuNDY0MjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxuNDY0MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG40NjQ0Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG40NjQ1Olx0e1xuNDY0NjpcdFx0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTtcbjQ2NDc6XHRcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbjQ2NDg6XHRcdGludCBlcnI7XG40NjQ5Olx0XG40NjUwOlx0XHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcbjQ2NTE6XHRcdGlmICghaWZtKSB7XG40NjUyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjQ2NTM6XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcJiMzNDspO1xuNDY1NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NTU6XHRcdH1cbjQ2NTY6XHRcbjQ2NTc6XHRcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbjQ2NTg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuNDY1OTpcdFx0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuNDY2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NjE6XHRcdH1cbjQ2NjI6XHRcbjQ2NjM6XHRcdGVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCxcbjQ2NjQ6XHRcdFx0XHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xuNDY2NTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjQ2NjY6XHRcdFx0cmV0dXJuIGVycjtcbjQ2Njc6XHRcbjQ2Njg6XHRcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XG40NjY5Olx0XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjQ2NzA6XHRcbjQ2NzE6XHRcdFx0ZmlsdGVyLVx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcbjQ2NzI6XHRcdFx0bmV0ID0gcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc2ssIGZpbHRlci1cdTAwM2VuZXRuc2lkKTtcbjQ2NzM6XHRcdFx0aWYgKElTX0VSUihuZXQpKSB7XG40Njc0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuNDY3NTpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXCYjMzQ7KTtcbjQ2NzY6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXQpO1xuNDY3NzpcdFx0XHR9XG40Njc4Olx0XHRcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCBcdTAwMjZmaWx0ZXItXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG40Njc5Olx0XHRcdGZpbHRlci1cdTAwM2V0Z3RfbmV0ID0gbmV0O1xuNDY4MDpcdFx0fVxuNDY4MTpcdFxuNDY4MjpcdFx0ZmlsdGVyLVx1MDAzZWlmaW5kZXggPSBpZm0tXHUwMDNlaWZhX2luZGV4O1xuNDY4MzpcdFxuNDY4NDpcdFx0cmV0dXJuIDA7XG40Njg1Olx0fVxuNDY4NjpcdFxuNDY4NzpcdHN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG40Njg4Olx0e1xuNDY4OTpcdFx0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbjQ2OTA6XHRcdFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuNDY5MTpcdFx0XHQubmV0bnNpZCA9IC0xLFxuNDY5MjpcdFx0fTtcbjQ2OTM6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuNDY5NDpcdFx0c3RydWN0IHtcbjQ2OTU6XHRcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuNDY5NjpcdFx0XHRpbnQgYWRkcl9pZHg7XG40Njk3Olx0XHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjQ2OTg6XHRcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuNDY5OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjQ3MDA6XHRcdGludCBlcnI7XG40NzAxOlx0XG40NzAyOlx0XHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuNDcwMzpcdFx0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbjQ3MDQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG40NzA1Olx0XHRcdHJldHVybiBlcnI7XG40NzA2Olx0XG40NzA3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NzA4Olx0XG40NzA5Olx0XHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbjQ3MTA6XHRcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG40NzExOlx0XHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG40NzEyOlx0XHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG40NzEzOlx0XHRcdGlmICghZGV2KSB7XG40NzE0Olx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjQ3MTU6XHRcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgZnVuY3Rpb25hbGl0eSBiZXR0ZXIuIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgYWRkZWQ6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBkdW1waW5nLCB2YWxpZGF0aW5nLCBhbmQgZmlsbGluZyBtdWx0aWNhc3QgYWRkcmVzcyBkYXRhIHdpdGhpbiB0aGUgcm91dGluZyBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgYXJlIHRoZXNlIHRoZSBvbmx5IGJ1aWxkaW5nIGJsb2Nrcz8gTGV0JiMzOTtzIHZlcmlmeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBBIHF1aWNrIGNoZWNrIG9mIGBDT05GSUdfTkVUYCBpcyBpbiBvcmRlci4gSXQmIzM5O3MgdGhlIGJhc2VsaW5lIGZvciBuZXR3b3JraW5nLCBvZiBjb3Vyc2UsIGJ1dCBpcyBpdCAqc3VmZmljaWVudCo/IFdlIG9mdGVuIHNlZSBvdGhlciBjb25maWd1cmF0aW9ucyB0aWVkIGludG8gc3BlY2lmaWMgZmVhdHVyZXMuCgpNeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSB3aWxsIGJlIG5ldHdvcmsgbmFtZXNwYWNlcy4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IG5ldG5zIGF3YXJlPyBJJiMzOTtsbCBsb29rIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVG8gaW52ZXN0aWdhdGUsIEkmIzM5O2xsIGBncmVwYCB0aGUgY29kZWJhc2UgZm9yIGBuZXRuc190cmFja2VyX2FsbG9jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG5hbWVzcGFjZS1zcGVjaWZpYyB0cmFja2luZyBnb2luZyBvbi4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW50ZWdyYXRlcyB3aXRoIG5ldHdvcmsgaXNvbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRuc190cmFja2VyX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM1OT1zdGF0aWMgaW5saW5lIGJvb2wgbmV0X2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzYzLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNjUtXHRcdFx0XHRcdCBuZXRuc190cmFja2VyICp0cmFja2VyLFxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNzUtXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzc2OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgbmV0bnNfdHJhY2tlciAqdHJhY2tlcixcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNzctXHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwKVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3OC17XG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzc5Olx0X19uZXRuc190cmFja2VyX2FsbG9jKG5ldCwgdHJhY2tlciwgdHJ1ZSwgZ2ZwKTtcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODAtfVxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0zOTI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpnZXRfbmV0X3RyYWNrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzk1LVx0Z2V0X25ldChuZXQpO1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM5NjpcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCB0cmFja2VyLCBnZnApO1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM5Ny1cdHJldHVybiBuZXQ7XG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTI2Nz1zdGF0aWMgaW5saW5lIGJvb2wgdGNmX2V4dHNfZ2V0X25ldChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI3MS1cdGlmIChleHRzLVx1MDAzZW5ldClcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyNzI6XHRcdG5ldG5zX3RyYWNrZXJfYWxsb2MoZXh0cy1cdTAwM2VuZXQsIFx1MDAyNmV4dHMtXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjczLVx0cmV0dXJuIGV4dHMtXHUwMDNlbmV0ICE9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDgwCgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDYxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUlRORVRMSU5LIE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgZmVhdHVyZSwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCBgTkVUREVWSUNFU2Agb3IgYE5FVGAuIFNpbmNlIHRoZSBiYXNlIGNvbmZpZyBpcyBgQ09ORklHX05FVGAsIGl0JiMzOTtzIGxpa2VseSBsaW5rZWQgdG8gdGhlIGBORVRgIHN0YW5kYXJkLiBUaGF0IHNlZW1zIHRvIGJlIGEgc2FmZSBhc3N1bXB0aW9uLgoKTm93LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlc2UgZm91ciBmdW5jdGlvbnM6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBkeW5hbWljYWxseSBsaW5rZWQgb3Igc3RhdGljYWxseSBjb21waWxlZC4gQSBxdWljayBjaGVjayBvZiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGNvbmZpcm1zIHRoYXQgYWxsIGZvdXIgYXJlLCBpbiBmYWN0LCBzdGF0aWNhbGx5IGNvbXBpbGVkLiBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGFuZCBgcnRubF9kdW1wX21jYWRkcmAgYXJlICphbGwqIHN0YXRpYyBmdW5jdGlvbnMuIFRob3VnaCB0aGUgbGFzdCBpcyBhc3NpZ25lZCB0byBgLmR1bXBpdGAgaW4gYHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc2AKCk5leHQsIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBhcmVhcyBvZiB0aGUga2VybmVsIGhhdmUgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEEgZGlmZiBjaGVjayByZXZlYWxzIG1vZGlmaWNhdGlvbnMgdG8gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAsIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weWAuIE5vIG90aGVyIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZC4KClRoaXMgZ2l2ZXMgbWUgdGhlIGZvbGxvd2luZyBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFRydWUuCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LCAmIzM0O3J0bmxfZHVtcF9tY2FkZHJfZGV2JiMzNDssICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LCAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzKio6IGBbJiMzNDtORVQmIzM0O11gCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBQRl9QQUNLRVQgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIHZpYSBydG5ldGxpbmsgKGBSVE1fR0VUTVVMVElDQVNUYCkuIEl0IGluY2x1ZGVzIGhhbmRsZXJzIHN1Y2ggYXMgYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBkZW1hbmRzIGZ1enppbmcuCgpCZWZvcmUgSSBwdXNoIHRoaXMsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmb3JtYXQgYWdhaW5zdCBteSBlc3RhYmxpc2hlZCBydWxlcy4gSXQgbG9va3MgY29ycmVjdDogYXJyYXlzIG9mIHN0cmluZ3Mgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCBmb3IgZW5hYmxlZCBjb25maWd1cmF0aW9ucywgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmb3IgZm9jdXNlZCBzeW1ib2xzLCBhIGJvb2xlYW4gZm9yIHdoZXRoZXIgaXQgaXMgd29ydGggZnV6emluZywgYW5kIGEgc3RyaW5nIGZvciBteSByZWFzb25pbmcuIExvb2tzIGdvb2QuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmV0bGluaywgaW1wbGVtZW50aW5nIHJlcXVlc3QgdmFsaWRhdGlvbiwgZGV2aWNlIHRyYXZlcnNhbCwgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGludGVyZmFjZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDssCiAgICAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRuZXRsaW5rLCBpbXBsZW1lbnRpbmcgcmVxdWVzdCB2YWxpZGF0aW9uLCBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoaXMgcmVhY2hhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5sX2R1bXBfbWNhZGRyIGFuZCBydG5sX2ZpbGxfbWNhZGRyLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgaW5pdGlhbGl6YXRpb246XG4xLiBgc3RydWN0IGlmYWRkcm1zZ2AgcGF5bG9hZDogQWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgc3RydWN0IGNvbnRhaW5zIDQgYF9fdThgIGZpZWxkcyBhbmQgMSBgX191MzJgIGZpZWxkIHRvdGFsaW5nIDggYnl0ZXMgd2l0aCB6ZXJvIHBhZGRpbmcgYnl0ZXMuXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXHUwMDNlcmVmY291bnRgLCBgaWZhX2ZsYWdzYCwgYW5kIGBoYS1cdTAwM2VhZGRyYCBvZiBsZW5ndGggYGRldi1cdTAwM2VhZGRyX2xlbmApLlxuMy4gTG9jYWwgdmFyaWFibGVzIGFuZCBmaWx0ZXJzOiBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBpcyBpbml0aWFsaXplZCB1c2luZyBDIHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYGN0eGAgaXMgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgZnJhbWV3b3JrLCBhbmQgYWxsIHZhbGlkYXRpb24gdmFyaWFibGVzIGFyZSBzYWZlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmFiYTEyODIwN2IzZjljYzIxNWM3ZTlhMTM4NTYxNGEwNzEzNmViNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjQzOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uMWExN2U1NWQxY2NhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3MKJiM0MzsgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uCiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZQomIzQzOyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aAomIzQzOyAgICAgICAgU0lPQ0FERE1VTFRJIG9yICYjMzQ7YnJpZGdlIGZkYiBhZGQgLi4uIHNlbGYmIzM0OywgcmF0aGVyIHRoYW4gYnkgYQomIzQzOyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LgogICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRycwogICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2cKICAgICAgIGRvOgpAQCAtMTgxLDEwICYjNDM7MTg5LDEzIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIG11bHRpY2FzdAogICAgICAgICAgICAgLSBtYy11c2VycwogICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIGZsYWdzCiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogNTgKLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXQomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWQKICAgICAgICAgcmVwbHk6CiAgICAgICAgICAgdmFsdWU6IDU4CiAgICAgICAgICAgYXR0cmlidXRlczogKm1jYWRkci1hdHRycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC01Nyw2ICYjNDM7NTcsNyBAQCBlbnVtIHsKICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURQkweDIwMAogI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOCTB4NDAwCiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZCTB4ODAwCiYjNDM7I2RlZmluZSBJRkFfRl9HTE9CQUwJCTB4MTAwMAogCiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7CiAJX191MzIJaWZhX3ByZWZlcmVkOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA4MWM1YTYxMDRkZWExLi5kNTFkNzczYjkzYzZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU2Niw2ICYjNDM7NDU2NiwxNzggQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAlyZXR1cm4gc2tiLSZndDtsZW4gPyA6IHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLAomIzQzOwkJCSAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJdTMyIGlmYV9mbGFncyA9IGhhLSZndDtnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CS8qIGlmbS0mZ3Q7aWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovCiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAoKG5ldG5zaWQgJmd0Oz0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fAomIzQzOwkgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7CiYjNDM7CQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlubG1zZ19lbmQoc2tiLCBubGgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiYjNDM7CWludCBhZGRyX2lkeCA9IDA7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgewomIzQzOwkJaWYgKGFkZHJfaWR4ICZsdDsgKnNfYWRkcl9pZHgpIHsKJiM0MzsJCQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiYjNDM7CQkJCSAgICAgICBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiYjNDM7CiYjNDM7CSpzX2FkZHJfaWR4ID0gZXJyICZsdDsgMCA/IGFkZHJfaWR4IDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHsKJiM0MzsJc3RydWN0IG5ldCAqdGd0X25ldDsKJiM0MzsJbmV0bnNfdHJhY2tlciBuc190cmFja2VyOwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCW5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCAmYW1wO2ZpbHRlci0mZ3Q7bnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlmaWx0ZXItJmd0O3RndF9uZXQgPSBuZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmlsdGVyLSZndDtpZmluZGV4ID0gaWZtLSZndDtpZmFfaW5kZXg7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHsKJiM0MzsJCS50Z3RfbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayksCiYjNDM7CQkubmV0bnNpZCA9IC0xLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwl1bnNpZ25lZCBsb25nIHNfaWZpbmRleDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgc2tiLSZndDtzaywgJmFtcDtmaWx0ZXIsCiYjNDM7CQkJCQkgY2ItJmd0O2V4dGFjayk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwlpZiAoZmlsdGVyLmlmaW5kZXgpIHsKJiM0MzsJCWNiLSZndDthbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDsKJiM0MzsJCWZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpOwomIzQzOwkJaWYgKCFkZXYpIHsKJiM0MzsJCQllcnIgPSAtRU5PREVWOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc19pZmluZGV4ID0gY3R4LSZndDtpZmluZGV4OwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtJmd0O2lmaW5kZXgpIHsKJiM0MzsJCS8qIFRoZSBkZXZpY2UgdGhlIGR1bXAgc3RvcHBlZCBhdCBpcyBnb25lLCBkbyBub3Qgc2tpcAomIzQzOwkJICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChkZXYtJmd0O2lmaW5kZXggIT0gc19pZmluZGV4KQomIzQzOwkJCWN0eC0mZ3Q7YWRkcl9pZHggPSAwOwomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXRfdHJhY2soZmlsdGVyLnRndF9uZXQsICZhbXA7ZmlsdGVyLm5zX3RyYWNrZXIpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNzAgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O2lmYS1pbmRleCYjMzQ7OiBkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgZHVtcD1UcnVlKQomIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZToKJiM0MzsgICAgICAgICAgICBpZiBlLmVycm9yID09IGVycm5vLkVPUE5PVFNVUFA6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCYjMzQ7KQomIzQzOyAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkCiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBlbnRyaWVzID0ge2FkZHJbJiMzOTttdWx0aWNhc3QmIzM5O106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfQomIzQzOwomIzQzOyAgICAgICAgIyBCcmluZ2luZyBhbiBFdGhlcm5ldCBkZXZpY2UgdXAgam9pbnMgMjI0LjAuMC4xLCB3aGljaCBtYXBzCiYjNDM7ICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuCiYjNDM7ICAgICAgICBhbGxfaG9zdHMgPSBlbnRyaWVzLmdldChFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYWxsX2hvc3RzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBpZiBhbGxfaG9zdHMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtnbG9iYWwmIzM5OywgYWxsX2hvc3RzWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWwmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVCkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoc3RhdGljLCAmIzM0O2R1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoc3RhdGljWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAgICAgIGtzZnRfaW4oJiMzOTtnbG9iYWwmIzM5Oywgc3RhdGljWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O1NJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdAomIzQzOyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6CiYjNDM7ICAgICAgICAgICAgaXAoZiYjMzQ7bmV0bnMgc2V0IHtwZWVyfSA1JiMzNDspCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15JiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkdW1teTMgdXAmIzM0OywgbnM9cGVlcikKJiM0MzsgICAgICAgICAgICBwZWVyX2lkeCA9IGlwKCYjMzQ7bGluayBzaG93IGR1bW15MyYjMzQ7LCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWyYjMzk7aWZpbmRleCYjMzk7XQomIzQzOwomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7dGFyZ2V0LW5ldG5zaWQmIzM0OzogNX0sCiYjNDM7ICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSkKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsmIzM5O2lmYS1pbmRleCYjMzk7XSwgYWRkclsmIzM5O3RhcmdldC1uZXRuc2lkJiMzOTtdKQomIzQzOyAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHsocGVlcl9pZHgsIDUpfSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7dGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7CiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rCkBAIC0zMTUsNyAmIzQzOzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKIAogCiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjaywKJiM0MzsgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksCiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gYXBwbHkgdGhlIGVzdGFibGlzaGVkIHJ1bGVzIHRvIHRoZSBjb2RlIGNoYW5nZXMuIEkga25vdyB0aGF0IEtBU0FOIGRlYWxzIHdpdGggbWVtb3J5IGVycm9ycyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGRvdWJsZSBmcmVlcywgYnV0IEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMg4oCTIHNwZWNpZmljYWxseSBvbiB0aGUgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMg4oCTIGFuZCBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm9ybWF0aW9uIGxlYWtzLgoKVGhlIHJ1bGVzIGFyZSBwcmV0dHkgY2xlYXI6IEtNU0FOIGZ1enppbmcgaXMgb25seSBuZWVkZWQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGNvZGUgdGhhdCBkb2VzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6IDEpIFNlbmRzIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIHBvdGVudGlhbGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGlzIGNvdmVycyBjYXNlcyB1c2luZyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiAyKSBVc2VzIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzLiAzKSBBbGxvY2F0ZXMgb3IgaW5pdGlhbGl6ZXMgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gNCkgSW50cm9kdWNlcyBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBhZGRzIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIGR1bXAgc3VwcG9ydCB0aHJvdWdoIHRoZSBgcnRubF9kdW1wX21jYWRkcmAgZnVuY3Rpb24uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBydG5sX2ZpbGxfbWNhZGRyYCBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvZGUsIHBhcnRpY3VsYXJseSB3aXRoaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4KCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCB0aGUgY29kZSBkb2VzOiBJdCBjb25zdHJ1Y3RzIGFuIGBpZmFkZHJtc2dgIG1lc3NhZ2UgdG8gc2VuZCBtdWx0aWNhc3QgYWRkcmVzcyBpbmZvcm1hdGlvbiBvdmVyIG5ldGxpbmsuIFRoZSBjb2RlIGZpbGxzIHRoZSBgaWZhZGRybXNnYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gdXNlcyBgbmxhX3B1dGAgdG8gYWRkIE5ldGxpbmsgYXR0cmlidXRlcyB0byB0aGUgU0tCLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjaGVjayBgc3RydWN0IGlmYWRkcm1zZ2AgdG8gc2VlIHdoYXQgZmllbGRzIGl0IGNvbnRhaW5zLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZ2V0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGlmYWRkcm1zZyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDo4OnN0cnVjdCBpZmFkZHJtc2cge1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC05LVx0X191OFx0XHRpZmFfZmFtaWx5O1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNy1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtOS1cdF9fdThcdFx0aWZhX2ZhbWlseTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gaWZfYWRkci5oKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbGlrZWx5IHN0YXJ0cyBkZWZpbmluZyB0aGUgc3RydWN0dXJlcyBvciBjb25zdGFudHMgcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzIGluZm9ybWF0aW9uLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBsaWtlIGBpZmFkZHJtc2dgLCBvciBwZXJoYXBzIHNvbWUga2V5IGZsYWcgZGVmaW5pdGlvbnMgdGhhdCBnb3Zlcm4gaG93IGFkZHJlc3NlcyBhcmUgaGFuZGxlZCBpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCByZWxhdGUgdG8gYWRkcmVzcyBmYW1pbGllcywgYWRkcmVzcyBsZW5ndGhzLCBhbmQgYXR0cmlidXRlIGNvZGVzLiBJJiMzOTttIGFudGljaXBhdGluZyBwb3NzaWJseSBzZWVpbmcgc29tZSBlbnVtcy4gQW55dGhpbmcgdGhhdCBkaWN0YXRlcyB0aGUgZm9ybWF0IG9yIHByb3BlcnRpZXMgb2YgbmV0d29yayBhZGRyZXNzZXMgaXMgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIGluaXRpYWxseS4gSSYjMzk7bSBrZWVuIHRvIGVuc3VyZSBpdCYjMzk7cyB1cCB0byBkYXRlIHdpdGggdGhlIGxhdGVzdCBzdGFuZGFyZHMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbiAgIDI6XHQjaWZuZGVmIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcbiAgIDM6XHQjZGVmaW5lIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IGlmYWRkcm1zZyB7XG4gICA5Olx0XHRfX3U4XHRcdGlmYV9mYW1pbHk7XG4gIDEwOlx0XHRfX3U4XHRcdGlmYV9wcmVmaXhsZW47XHQvKiBUaGUgcHJlZml4IGxlbmd0aFx0XHQqL1xuICAxMTpcdFx0X191OFx0XHRpZmFfZmxhZ3M7XHQvKiBGbGFnc1x0XHRcdCovXG4gIDEyOlx0XHRfX3U4XHRcdGlmYV9zY29wZTtcdC8qIEFkZHJlc3Mgc2NvcGVcdFx0Ki9cbiAgMTM6XHRcdF9fdTMyXHRcdGlmYV9pbmRleDtcdC8qIExpbmsgaW5kZXhcdFx0XHQqL1xuICAxNDpcdH07XG4gIDE1Olx0XG4gIDE2Olx0LypcbiAgMTc6XHQgKiBJbXBvcnRhbnQgY29tbWVudDpcbiAgMTg6XHQgKiBJRkFfQUREUkVTUyBpcyBwcmVmaXggYWRkcmVzcywgcmF0aGVyIHRoYW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MuXG4gIDE5Olx0ICogSXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBmb3Igbm9ybWFsbHkgY29uZmlndXJlZCBicm9hZGNhc3QgaW50ZXJmYWNlcyxcbiAgMjA6XHQgKiBidXQgZm9yIHBvaW50LXRvLXBvaW50IElGQV9BRERSRVNTIGlzIERFU1RJTkFUSU9OIGFkZHJlc3MsXG4gIDIxOlx0ICogbG9jYWwgYWRkcmVzcyBpcyBzdXBwbGllZCBpbiBJRkFfTE9DQUwgYXR0cmlidXRlLlxuICAyMjpcdCAqXG4gIDIzOlx0ICogSUZBX0ZMQUdTIGlzIGEgdTMyIGF0dHJpYnV0ZSB0aGF0IGV4dGVuZHMgdGhlIHU4IGZpZWxkIGlmYV9mbGFncy5cbiAgMjQ6XHQgKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cbiAgMjU6XHQgKi9cbiAgMjY6XHRlbnVtIHtcbiAgMjc6XHRcdElGQV9VTlNQRUMsXG4gIDI4Olx0XHRJRkFfQUREUkVTUyxcbiAgMjk6XHRcdElGQV9MT0NBTCxcbiAgMzA6XHRcdElGQV9MQUJFTCxcbiAgMzE6XHRcdElGQV9CUk9BRENBU1QsXG4gIDMyOlx0XHRJRkFfQU5ZQ0FTVCxcbiAgMzM6XHRcdElGQV9DQUNIRUlORk8sXG4gIDM0Olx0XHRJRkFfTVVMVElDQVNULFxuICAzNTpcdFx0SUZBX0ZMQUdTLFxuICAzNjpcdFx0SUZBX1JUX1BSSU9SSVRZLFx0LyogdTMyLCBwcmlvcml0eS9tZXRyaWMgZm9yIHByZWZpeCByb3V0ZSAqL1xuICAzNzpcdFx0SUZBX1RBUkdFVF9ORVROU0lELFxuICAzODpcdFx0SUZBX1BST1RPLFx0XHQvKiB1OCwgYWRkcmVzcyBwcm90b2NvbCAqL1xuICAzOTpcdFx0SUZBX01DX1VTRVJTLFx0XHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xuICA0MDpcdFx0X19JRkFfTUFYLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODYzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGlmYWRkcm1zZ2AgU3RydWN0dXJlIGFuZCBpdHMgVXNhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBsYXlvdXQgb2YgYHN0cnVjdCBpZmFkZHJtc2dgOiBgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBhbmQgYGlmYV9pbmRleGAuIEl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDsgdGhvc2UgYXJlIHRoZSBjb3JlIGZpZWxkcy4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgdG90YWwgc2l6ZSBvZiA4IGJ5dGVzIGlzIHdoYXQgSSBleHBlY3RlZCwgYW5kIHRoZSBsYWNrIG9mIHBhZGRpbmcgaXMgZ29vZDsgaXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBjb25uZWN0IHRoaXMgdG8gdGhlIGBydG5sX2ZpbGxfbWNhZGRyYCBmdW5jdGlvbi4gSSBzZWUgaG93IGl0IGluaXRpYWxpemVzIGFuIGBpZmFkZHJtc2dgIGluc3RhbmNlIGBpZm1gLiBgQUZfUEFDS0VUYCBmb3IgdGhlIGZhbWlseSwgYDBgIGZvciB0aGUgcHJlZml4IGxlbmd0aC4uLiBzZWVtcyBzdGFuZGFyZC4gQWgsIHRoZSBgaWZhX2ZsYWdzYCBmaWVsZCBpcyBhIGJ5dGUsIGFuZCB0aGUgKmZ1bGwqIHZhbHVlIGlzIHN0b3JlZCBpbiBgSUZBX0ZMQUdTYC4gR29vZCB0byBrZWVwIGluIG1pbmQuIFNjb3BlIGlzIHNldCB0byBgUlRfU0NPUEVfTElOS2AsIGFuZCB0aGUgaW5kZXggaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlLiBBbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCwgd2hpY2ggaXMgYXMgaXQgc2hvdWxkIGJlLgoKT2theSwgbmV4dCBxdWVzdGlvbjogd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBoYS0mZ3Q7YWRkcmAgYW5kIGBkZXYtJmd0O2FkZHJfbGVuYD8gIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgc3RydWN0IG5ldGRldl9od19hZGRyYCBhbmQgaG93IHRoYXQgYWRkcmVzcyBkYXRhIGlzIGFjdHVhbGx5IHN0b3JlZCB3aXRoaW4gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgaG93IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRkZXZfaHdfYWRkciBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMzU9c3RydWN0IHNrX2J1ZmY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjM3LiBJJiMzOTttIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIEkmIzM5O20gbG9va2luZyBmb3IgcmVnYXJkaW5nIHRoZSBiYXNpYyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBzZXR1cCByb3V0aW5lcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZWxlbWVudHMgbGlrZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHF1ZXVlcywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHBvaW50ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRzdHJ1Y3Qgc2tfYnVmZjtcbiAyMzY6XHRcbiAyMzc6XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xuIDIzODpcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiAyMzk6XHRcdHN0cnVjdCByYl9ub2RlXHRcdG5vZGU7XG4gMjQwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdGFkZHJbTUFYX0FERFJfTEVOXTtcbiAyNDE6XHRcdHVuc2lnbmVkIGNoYXJcdFx0dHlwZTtcbiAyNDI6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXHRcdDFcbiAyNDM6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfU0FOXHRcdDJcbiAyNDQ6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVFx0M1xuIDI0NTpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1RcdDRcbiAyNDY6XHRcdGJvb2xcdFx0XHRnbG9iYWxfdXNlO1xuIDI0NzpcdFx0aW50XHRcdFx0c3luY19jbnQ7XG4gMjQ4Olx0XHRpbnRcdFx0XHRyZWZjb3VudDtcbiAyNDk6XHRcdGludFx0XHRcdHN5bmNlZDtcbiAyNTA6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3VfaGVhZDtcbiAyNTE6XHR9O1xuIDI1MjpcdFxuIDI1MzpcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0IHtcbiAyNTQ6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjU1Olx0XHRpbnRcdFx0XHRjb3VudDtcbiAyNTY6XHRcbiAyNTc6XHRcdC8qIEF1eGlsaWFyeSB0cmVlIGZvciBmYXN0ZXIgbG9va3VwIG9uIGFkZGl0aW9uIGFuZCBkZWxldGlvbiAqL1xuIDI1ODpcdFx0c3RydWN0IHJiX3Jvb3RcdFx0dHJlZTtcbiAyNTk6XHR9O1xuIDI2MDpcdFxuIDI2MTpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSAoKGwpLVx1MDAzZWNvdW50KVxuIDI2MjpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9lbXB0eShsKSAobmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSA9PSAwKVxuIDI2MzpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcbiAyNjQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNihsKS1cdTAwM2VsaXN0LCBsaXN0KVxuIDI2NTpcdFxuIDI2NjpcdCNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcdTAwMjYoZGV2KS1cdTAwM2V1YylcbiAyNjc6XHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjY4Olx0I2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSBcXFxuIDI2OTpcdFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjcwOlx0I2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfc3luY2VkX3VjX2FkZHIoX2hhLCBfZGV2KSBcXFxuIDI3MTpcdFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoKF9oYSksIChfZGV2KSkgXFxcbiAyNzI6XHRcdFx0aWYgKChfaGEpLVx1MDAzZXN5bmNfY250KVxuIDI3MzpcdFxuIDI3NDpcdCNkZWZpbmUgbmV0ZGV2X21jX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcdTAwMjYoZGV2KS1cdTAwM2VtYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBbGxvY2F0aW9uIGFuZCBBZGRpdGlvbiBvZiBgaGFgIHRvIGBkZXYtJmd0O21jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBgaGFgIHZhcmlhYmxlIGlzIGFsbG9jYXRlZCBhbmQgdGhlbiBhZGRlZCB0byBgZGV2LSZndDttY2AuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIG1hdHRlciwgYW5kIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGZ1bmN0aW9uIHRoYXQgbGlrZWx5IGhhbmRsZXMgdGhpcyBhZGRpbmcgcHJvY2Vzcy4gVGhpbmtpbmcgYWJvdXQgbmFtaW5nIGNvbnZlbnRpb25zLCBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBgZGV2X21jX2FkZGAsIG9yIGFueXRoaW5nIHNpbWlsYXIgdGhhdCB3b3VsZCBzdWdnZXN0IGFkZGluZyBhbiBhZGRyZXNzIHRvIHRoZSBtdWx0aWNhc3QgbGlzdCBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuIEEgcXVpY2sgZ3JlcCBvZiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LCBlc3BlY2lhbGx5IHdpdGhpbiBgZGV2X2FkZHJfbGlzdHMuY2AsIGlzIG15IGluaXRpYWwgdGFyZ2V0LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19od19hZGRyX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM0LVx0XHRcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc6XHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cdFx0XHRcdDAsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXHRcdHJldHVybiBlcnI7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYF9faHdfYWRkcl9jcmVhdGVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgYF9faHdfYWRkcl9jcmVhdGVgLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gaGFyZHdhcmUgYWRkcmVzcyBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudC4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYCwgdGhhdCBsb2NhdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIGhhdmUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0b3JpbmcgYW5kIG1hbmlwdWxhdGluZyBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2UgYWRkcmVzc2VzLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBtYW5hZ2VzIHRoZSB1bmRlcmx5aW5nIGRldGFpbHMgb2YgY3JlYXRpbmcgYW5kIHJlZ2lzdGVyaW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzZXMgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGltZSB0byBsb29rIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0fVxuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG4gIDUzOlx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4gIDU0Olx0XHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuICA1NzpcdFx0aW50IGFsbG9jX3NpemU7XG4gIDU4Olx0XG4gIDU5Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XG4gIDYwOlx0XHRpZiAoYWxsb2Nfc2l6ZSBcdTAwM2MgTDFfQ0FDSEVfQllURVMpXG4gIDYxOlx0XHRcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcbiAgNjI6XHRcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcbiAgNjM6XHRcdGlmICghaGEpXG4gIDY0Olx0XHRcdHJldHVybiBOVUxMO1xuICA2NTpcdFx0bWVtY3B5KGhhLVx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcbiAgNjY6XHRcdGhhLVx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XG4gIDY3Olx0XHRoYS1cdTAwM2VyZWZjb3VudCA9IDE7XG4gIDY4Olx0XHRoYS1cdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xuICA2OTpcdFx0aGEtXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xuICA3MDpcdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIGhhO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW50IF9faHdfYWRkcl9hZGRfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG4gIDc2Olx0XHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbiAgNzc6XHRcdFx0XHQgICAgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMsXG4gIDc4Olx0XHRcdFx0ICAgIGludCBzeW5jX2NvdW50LCBib29sIGV4Y2x1c2l2ZSlcbiAgNzk6XHR7XG4gIDgwOlx0XHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFx1MDAyNmxpc3QtXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcbiAgODE6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDgyOlx0XG4gIDgzOlx0XHRpZiAoYWRkcl9sZW4gXHUwMDNlIE1BWF9BRERSX0xFTilcbiAgODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDg1Olx0XG4gIDg2Olx0XHR3aGlsZSAoKmluc19wb2ludCkge1xuICA4NzpcdFx0XHRpbnQgZGlmZjtcbiAgODg6XHRcbiAgODk6XHRcdFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgd2l0aGluIGBfX2h3X2FkZHJfY3JlYXRlYCwgd2UmIzM5O3JlIHVzaW5nIGBtZW1jcHlgIHRvIGNvcHkgYGFkZHJfbGVuYCBieXRlcyBmcm9tIHRoZSBzb3VyY2UgYGFkZHJgIGludG8gYGhhLSZndDthZGRyYC4gVGhlbiwgaW4gYHJ0bmxfZmlsbF9tY2FkZHJgIHdoZW4gZGVhbGluZyB3aXRoIG5ldGxpbmssIHdlJiMzOTtyZSB1c2luZyBgbmxhX3B1dGAgdG8gcGxhY2UgdGhlIG11bHRpY2FzdCBhZGRyZXNzLiBTcGVjaWZpY2FsbHksIGBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LSZndDthZGRyX2xlbiwgaGEtJmd0O2FkZHIpYC4gQ3JpdGljYWxseSwgYGFkZHJfbGVuYCBmb3IgYGhhYCBpcyBzZXQgdG8gYGRldi0mZ3Q7YWRkcl9sZW5gIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgYGhhYCAoY29taW5nIGZyb20gYF9fZGV2X21jX2FkZGAgb3IgYGRldl9tY19hZGRfZXhjbGApLiBTbywgdGhlcmUmIzM5O3MgYSAqZGlyZWN0KiBjb3JyZXNwb25kZW5jZTogd2UgY29weSBwcmVjaXNlbHkgYGRldi0mZ3Q7YWRkcl9sZW5gIGJ5dGVzIGludG8gdGhlIGBoYS0mZ3Q7YWRkcmAgYnVmZmVyLCBhbmQgd2Ugc2VuZCBleGFjdGx5IGBkZXYtJmd0O2FkZHJfbGVuYCBieXRlcyBhcyB0aGUgYElGQV9NVUxUSUNBU1RgIGF0dHJpYnV0ZSBpbiB0aGUgbmV0bGluayBtZXNzYWdlLiBUaGlzIGFwcGVhcnMgY29uc2lzdGVudC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRvIGxvb2sgZm9yIHJlbGF0ZWQgY29udGV4dHMgYW5kIHBvdGVudGlhbCB2YXJpYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGR1bXBpbmcgbWVjaGFuaXNtIHdpdGggYHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBuZWVkcyBzY3J1dGlueS4gSSBzZWUgdGhlIHN0cnVjdHVyZSwgd2hpY2ggY29udGFpbnMgYHRndF9uZXRgLCBgbmV0bnNfdHJhY2tlcmAsIGBuZXRuc2lkYCwgYW5kIGBpZmluZGV4YC4gSW4gdGhlIGR1bXBpbmcgcHJvY2VzcyBpdHNlbGYgKGBydG5sX2R1bXBfbWNhZGRyYCksIHdlIGluaXRpYWxpemUgYGZpbHRlcmAgd2l0aCBgdGd0X25ldGAgYW5kIGBuZXRuc2lkYC4gSW50ZXJlc3RpbmcuLi4gQW5kIHRoZSBjb250ZXh0IHByb3ZpZGVkIHRvIHRoZSBjYWxsYmFjayAoYGNiLSZndDtjdHhgKSBhcHBlYXJzIHRvIGNvbnRhaW4gYW4gYGlmaW5kZXhgIGFuZCBhbiBgYWRkcl9pZHhgIGVsZW1lbnQuCgpOb3csIHRoYXQgYGNiLSZndDtjdHhgIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgbmV0bGluaywgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgbmV0bGluayBmcmFtZXdvcmsgemVyby1pbml0aWFsaXplcyB0aGUgY2FsbGJhY2sgY29udGV4dCB3aGVuIHRoZSBkdW1wIHN0YXJ0cywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgZGlyZWN0bHkuIEEgcXVpY2sgdmVyaWZpY2F0aW9uIG9mIGhvdyBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzIGZ1bmN0aW9uIHdpbGwgY2xhcmlmeSB0aGlzIGRldGFpbCBhbmQgc29saWRpZnkgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGR1bXBpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ItXHUwMDNlY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmM9Mjc9c3RhdGljIHN0cnVjdCBuZXRkZXZfbmxfZHVtcF9jdHggKm5ldGRldl9kdW1wX2N0eChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMC1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MzE6XHRyZXR1cm4gKHN0cnVjdCBuZXRkZXZfbmxfZHVtcF9jdHggKiljYi1cdTAwM2VjdHg7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMyLX1cbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jPTgxPW5ldGRldl9ubF9wYWdlX3Bvb2xfZ2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtODMte1xubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYzo4NDpcdHN0cnVjdCBwYWdlX3Bvb2xfZHVtcF9jYiAqc3RhdGUgPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtODUtXHRjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvID0gZ2VubF9pbmZvX2R1bXAoY2IpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1NDQ9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTUzLVx0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTU0Olx0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTU1LVx0c3RydWN0IG5ldCAqdGd0X25ldCA9IG5ldDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00Njg3PXN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5Ni1cdFx0aW50IGFkZHJfaWR4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDY5NzpcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5OC1cdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTUxNjQ9c3RhdGljIGludCBubG1zZ19wb3B1bGF0ZV9mZGIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MTY5LXtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUxNzA6XHRzdHJ1Y3QgbmRvX2ZkYl9kdW1wX2NvbnRleHQgKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTE3MS1cdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMxNj1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMTgtXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IE5VTEwsICpjb3BzID0gTlVMTDtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUzMTk6XHRzdHJ1Y3QgbmRvX2ZkYl9kdW1wX2NvbnRleHQgKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMyMC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICpicl9kZXYgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTY2NDk9c3RhdGljIGludCBydG5sX3N0YXRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NTktXHRcdGludCBwcml2aWR4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjY2MDpcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjY2MS1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NjgzMT1zdGF0aWMgaW50IHJ0bmxfbWRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjgzMi17XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo2ODMzOlx0c3RydWN0IHJ0bmxfbWRiX2R1bXBfY3R4ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4MzQtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4NjEtXHRcdCAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6Njg2MjpcdFx0bWVtc2V0KGNiLVx1MDAzZWN0eCwgMCwgc2l6ZW9mKGNiLVx1MDAzZWN0eCkpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjg2My1cdFx0Y2ItXHUwMDNlcHJldl9zZXEgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBzcGVjaWZpYyBjb2RlIGNoZWNrLCB0aGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nOgoKKipEZWNvbnN0cnVjdGluZyBgbmV0bGlua19kdW1wYCBhbmQgaXRzIENhbGxiYWNrKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBjYmAgKGxpa2VseSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24pIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0bGlua19kdW1wYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmNgLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIGBuZXRsaW5rX2R1bXBgLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IEhvdyBpcyB0aGF0IGNhbGxiYWNrIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5IHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZHVtcGluZyBuZXRsaW5rIG1lc3NhZ2VzPyBJcyBpdCBhIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbiBwb2ludGVyPyBJcyBpdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrPyBIZWFwPyBJcyB0aGVyZSBhIHN0cnVjdHVyZSBjb250YWluaW5nIGl0LCBhbmQgaG93IGlzICp0aGF0KiBzdHJ1Y3R1cmUgaGFuZGxlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBob3cgaXQgaXMgdXNlZCBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgYSBub24tdHJpdmlhbCBsaWZldGltZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGxpZmVjeWNsZSB0byBlbnN1cmUgSSBjb21wcmVoZW5kIGl0cyB1c2UsIHBvc3NpYmxlIGxpZmV0aW1lLCBhbmQgYW55IGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyYWNpbmcgdGhlIGRhdGEgZmxvdyBvZiB0aGF0IGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiBgbmV0bGlua19kdW1wYC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGFzIHRoaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBuZXRsaW5rIGlzIGludm9rZWQuIEkgZXhwZWN0IHRoZSBjb2RlIHdpbGwgYmUgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldGxpbmsgc29ja2V0JiMzOTtzIHN0YXRlLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgcGVyc3BlY3RpdmUgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0bGlua19kdW1wXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz05OD1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmxrX2NiX211dGV4X2tleV9zdHJpbmdzW01BWF9MSU5LUyAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMTMzLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzNDpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbik7XG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMTM1LVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0xOTA3PXN0YXRpYyBpbnQgbmV0bGlua19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMTk4MS1cdCAgICBhdG9taWNfcmVhZChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2M9IHNrLVx1MDAzZXNrX3JjdmJ1ZiAvIDIpIHtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxOTgyOlx0XHRyZXQgPSBuZXRsaW5rX2R1bXAoc2ssIGZhbHNlKTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xOTgzLVx0XHRpZiAocmV0KSB7XG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIyMzE9c3RhdGljIGludCBuZXRsaW5rX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyNTgtXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjI1OTpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbilcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjYwLXtcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjM5Mj1pbnQgX19uZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjQ0NS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyNDQ2Olx0cmV0ID0gbmV0bGlua19kdW1wKHNrLCB0cnVlKTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yNDQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldGxpbmsgRHVtcCBQcm9jZXNzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgYF9fbmV0bGlua19kdW1wX3N0YXJ0YCBpbiBgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCBtZWNoYW5pY3Mgb2YgdGhlIG5ldGxpbmsgZHVtcGluZyBwcm9jZXNzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpbml0aWF0ZXMgYSBkdW1wLCB0aGUgY29udGV4dCBzZXR1cCwgYW5kIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBzdGFydCBkaXNzZWN0aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBuZXRsaW5rIGZhbWlseSBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O2xsIGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGZyb20gdGhlIHRvcCBkb3duLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBOZXRsaW5rIG1lc3NhZ2UgcXVldWUsIGFueSBidWZmZXIgbWFuYWdlbWVudCB0aGF0JiMzOTtzIGhhcHBlbmluZywgYW5kIGhvdyB0aGUgZHVtcCYjMzk7cyBzdGF0ZSBpcyBpbml0aWFsaXplZC4gSSBleHBlY3QgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIGNvcmUgZHVtcCBsb29wIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSBwcm9iYWJseSBjcml0aWNhbCB0byB0aGlzIHdob2xlIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBhbGwgaW50aW1hdGVseSB0aWVkIHRvIG5ldGxpbmsmIzM5O3MgYXN5bmNocm9ub3VzIG5hdHVyZSwgc28gSeKAmW0gcmVhbGx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgY29uY3VycmVuY3kgYW5kIGhvdyB0aGUgZHVtcCBpcyBwcm9wZXJseSBzaWduYWxlZCB0byBjb21wbGV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQyMDpcdFx0fVxuMjQyMTpcdFxuMjQyMjpcdFx0Y2IgPSBcdTAwMjZubGstXHUwMDNlY2I7XG4yNDIzOlx0XHRtZW1zZXQoY2IsIDAsIHNpemVvZigqY2IpKTtcbjI0MjQ6XHRcdGNiLVx1MDAzZWR1bXAgPSBjb250cm9sLVx1MDAzZWR1bXA7XG4yNDI1Olx0XHRjYi1cdTAwM2Vkb25lID0gY29udHJvbC1cdTAwM2Vkb25lO1xuMjQyNjpcdFx0Y2ItXHUwMDNlbmxoID0gbmxoO1xuMjQyNzpcdFx0Y2ItXHUwMDNlZGF0YSA9IGNvbnRyb2wtXHUwMDNlZGF0YTtcbjI0Mjg6XHRcdGNiLVx1MDAzZW1vZHVsZSA9IGNvbnRyb2wtXHUwMDNlbW9kdWxlO1xuMjQyOTpcdFx0Y2ItXHUwMDNlbWluX2R1bXBfYWxsb2MgPSBjb250cm9sLVx1MDAzZW1pbl9kdW1wX2FsbG9jO1xuMjQzMDpcdFx0Y2ItXHUwMDNlZmxhZ3MgPSBjb250cm9sLVx1MDAzZWZsYWdzO1xuMjQzMTpcdFx0Y2ItXHUwMDNlc2tiID0gc2tiO1xuMjQzMjpcdFxuMjQzMzpcdFx0Y2ItXHUwMDNlc3RyaWN0X2NoZWNrID0gbmxrX3Rlc3RfYml0KFNUUklDVF9DSEssIE5FVExJTktfQ0Ioc2tiKS5zayk7XG4yNDM0Olx0XG4yNDM1Olx0XHRpZiAoY29udHJvbC1cdTAwM2VzdGFydCkge1xuMjQzNjpcdFx0XHRjYi1cdTAwM2VleHRhY2sgPSBjb250cm9sLVx1MDAzZWV4dGFjaztcbjI0Mzc6XHRcdFx0cmV0ID0gY29udHJvbC1cdTAwM2VzdGFydChjYik7XG4yNDM4Olx0XHRcdGNiLVx1MDAzZWV4dGFjayA9IE5VTEw7XG4yNDM5Olx0XHRcdGlmIChyZXQpXG4yNDQwOlx0XHRcdFx0Z290byBlcnJvcl9wdXQ7XG4yNDQxOlx0XHR9XG4yNDQyOlx0XG4yNDQzOlx0XHRXUklURV9PTkNFKG5say1cdTAwM2VjYl9ydW5uaW5nLCB0cnVlKTtcbjI0NDQ6XHRcdG5say1cdTAwM2VkdW1wX2RvbmVfZXJybm8gPSBJTlRfTUFYO1xuMjQ0NTpcdFxuMjQ0NjpcdFx0cmV0ID0gbmV0bGlua19kdW1wKHNrLCB0cnVlKTtcbjI0NDc6XHRcbjI0NDg6XHRcdHNvY2tfcHV0KHNrKTtcbjI0NDk6XHRcbjI0NTA6XHRcdGlmIChyZXQpXG4yNDUxOlx0XHRcdHJldHVybiByZXQ7XG4yNDUyOlx0XG4yNDUzOlx0XHQvKiBXZSBzdWNjZXNzZnVsbHkgc3RhcnRlZCBhIGR1bXAsIGJ5IHJldHVybmluZyAtRUlOVFIgd2VcbjI0NTQ6XHRcdCAqIHNpZ25hbCBub3QgdG8gc2VuZCBBQ0sgZXZlbiBpZiBpdCB3YXMgcmVxdWVzdGVkLlxuMjQ1NTpcdFx0ICovXG4yNDU2Olx0XHRyZXR1cm4gLUVJTlRSO1xuMjQ1NzpcdFxuMjQ1ODpcdGVycm9yX3B1dDpcbjI0NTk6XHRcdG1vZHVsZV9wdXQoY29udHJvbC1cdTAwM2Vtb2R1bGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU1NwoJCQkJCQkJb3V0cHV0OiAzNDgKCQkJCQkJCXRob3VnaHRzOiAyNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgTXVsdGljYXN0IEFkZHJlc3MgRHVtcGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJJiMzOTt2ZSBleGFtaW5lZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyBjb2RlIGluIGRldGFpbCB0byBlbnN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhZHMgdG8gbGVha3Mgb3IgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYGNiLSZndDtjdHhgLCB1c2VkIGZvciB0cmFja2luZyB0aGUgZHVtcCYjMzk7cyBzdGF0ZSwgaXMgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCwgZW5zdXJpbmcgbm8gZ2FyYmFnZSBkYXRhIGlzIGNhcnJpZWQgb3ZlciBiZXR3ZWVuIGR1bXBzLgoKVGhlbiwgSSB3ZW50IHRocm91Z2ggdGhlIGNvcmUgZnVuY3Rpb24gYHJ0bmxfZmlsbF9tY2FkZHJgIGxpbmUtYnktbGluZS4gVGhlIGBpZmFkZHJtc2dgIHN0cnVjdHVyZSwgdGhlIGZvdW5kYXRpb24gb2YgdGhlIG1lc3NhZ2UsIGhhcyBhbGwgaXRzIGZpZWxkcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBlbGltaW5hdGluZyBhbnkgcmlza3Mgd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGUgbmV0bGluayBhdHRyaWJ1dGVzIGFyZSBwb3B1bGF0ZWQgd2l0aCB2YWx1ZXMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdCBzY2FsYXJzIG9yIGNvcGllcyBvZiBkYXRhIHRoYXQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChsaWtlIHRoZSBkZXZpY2UmIzM5O3MgaGFyZHdhcmUgYWRkcmVzcykuIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb25zLCBlc3NlbnRpYWwgZm9yIGluc2VydGluZyB0aGVzZSBhdHRyaWJ1dGVzIGludG8gdGhlIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlIGFueSBuZWNlc3NhcnkgcGFkZGluZywgcHJldmVudGluZyB1bmludGVuZGVkIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuCgpJIGNoZWNrZWQgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCB3aGljaCB2YWxpZGF0ZXMgdGhlIHJlcXVlc3QuIFRoZSBjb2RlIGNhcmVmdWxseSBwYXJzZXMgdGhlIGluY29taW5nIG5ldGxpbmsgbWVzc2FnZSBhbmQgaW5pdGlhbGl6ZXMgbG9jYWwgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBkYXRhLiBUaGUgYHRiYCBhcnJheSwgdXNlZCB0byBob2xkIHBhcnNlZCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlzIHBvcHVsYXRlZCB0aHJvdWdoIHRoZSBgbmxtc2dfcGFyc2VgIGZ1bmN0aW9uIGFuZCBpcyBzYWZlLiBUaGUgYGZpbHRlcmAgc3RydWN0dXJlLCB3aGljaCBkZWZpbmVzIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgZm9yIHRoZSBkdW1wLCBpcyBhbHNvIGNvbnNpc3RlbnRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdW5tZW50aW9uZWQgZmllbGRzLCB3aXRoIGNhcmVmdWwgaGFuZGxpbmcgb2YgdGhlIHBvdGVudGlhbGx5IG5ldG5zLXNwZWNpZmljIGZpbHRlcmluZy4KCkluIHRoZSBgcnRubF9kdW1wX21jYWRkcmAgZnVuY3Rpb24sIHdoaWNoIG9yY2hlc3RyYXRlcyB0aGUgZHVtcCBwcm9jZXNzLCB0aGUgYGZpbHRlcmAgc3RydWN0IGlzIGNvbnNpc3RlbnRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBpdGVyYXRpb24gdGhyb3VnaCBkZXZpY2VzIGlzIGNhcmVmdWxseSBtYW5hZ2VkLCBhbG9uZyB3aXRoIG5ldG5zIGhhbmRsaW5nLiBUaGUgYGN0eGAgdmFyaWFibGUgKGEgcG9pbnRlciB0byB0aGUgY2FsbGJhY2sgY29udGV4dCkgaGFzIGl0cyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBjbGVhcmVkLCBhbmQgdGhlIGxvb3AgbG9naWMgZW5zdXJlcyBubyB1bmluaXRpYWxpemVkIHZhbHVlcyBhcmUgcmVhZC4KCk15IGNvbXByZWhlbnNpdmUgcmV2aWV3IGhhcyBjb25maXJtZWQgdGhhdDoKCjEuICBBbGwgdmFyaWFibGVzIGludm9sdmVkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgZWl0aGVyIGRpcmVjdGx5LCB0aHJvdWdoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBvciBieSB0aGUgbmV0bGluayBjb3JlIGZ1bmN0aW9ucy4KMi4gIE5vIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBvciB1bmluaXRpYWxpemVkIGRhdGEgaXMgZXZlciBzZW50IHRvIHVzZXJzcGFjZS4KMy4gIENvbmRpdGlvbmFsIGJyYW5jaGluZyBkb2VzIG5vdCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KNC4gIFN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIGFkZXF1YXRlIHRvIGNhdGNoIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMgaW4gdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByaXNrIGlzIHJlbGF0ZWQgdG8gUkNVIGlzc3VlcywgbG9ja2luZyBpc3N1ZXMgb3Igb3V0LW9mLWJvdW5kcyBpbiBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgdGhlc2UgZXJyb3JzIGNhbiBiZSBjYXVnaHQgd2l0aCBLQVNBTi4KClRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIG5vdCBhIGNhbmRpZGF0ZSBmb3IgS01TQU4tc3BlY2lmaWMgZnV6emluZy4gVGhlIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIHBvc3NpYmxlIG1lbW9yeSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRubF9kdW1wX21jYWRkciBhbmQgcnRubF9maWxsX21jYWRkci5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuMS4gYHN0cnVjdCBpZmFkZHJtc2dgIHBheWxvYWQ6IEFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHN0cnVjdCBjb250YWlucyA0IGBfX3U4YCBmaWVsZHMgYW5kIDEgYF9fdTMyYCBmaWVsZCB0b3RhbGluZyA4IGJ5dGVzIHdpdGggemVybyBwYWRkaW5nIGJ5dGVzLlxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXHUwMDNlYWRkcmAgb2YgbGVuZ3RoIGBkZXYtXHUwMDNlYWRkcl9sZW5gKS5cbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRubF9kdW1wX21jYWRkciBhbmQgcnRubF9maWxsX21jYWRkci5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuMS4gYHN0cnVjdCBpZmFkZHJtc2dgIHBheWxvYWQ6IEFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHN0cnVjdCBjb250YWlucyA0IGBfX3U4YCBmaWVsZHMgYW5kIDEgYF9fdTMyYCBmaWVsZCB0b3RhbGluZyA4IGJ5dGVzIHdpdGggemVybyBwYWRkaW5nIGJ5dGVzLlxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXHUwMDNlYWRkcmAgb2YgbGVuZ3RoIGBkZXYtXHUwMDNlYWRkcl9sZW5gKS5cbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6MzAuMTE1Nzc5Mjc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyNDU5OTEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmxfZHVtcF9tY2FkZHIgYW5kIHJ0bmxfZmlsbF9tY2FkZHIuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxcbjEuIGBzdHJ1Y3QgaWZhZGRybXNnYCBwYXlsb2FkOiBBbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBzdHJ1Y3QgY29udGFpbnMgNCBgX191OGAgZmllbGRzIGFuZCAxIGBfX3UzMmAgZmllbGQgdG90YWxpbmcgOCBieXRlcyB3aXRoIHplcm8gcGFkZGluZyBieXRlcy5cXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXFx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXFx1MDAzZWFkZHJgIG9mIGxlbmd0aCBgZGV2LVxcdTAwM2VhZGRyX2xlbmApLlxcbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuXFxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgcnRuZXRsaW5rLCBpbXBsZW1lbnRpbmcgcmVxdWVzdCB2YWxpZGF0aW9uLCBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoaXMgcmVhY2hhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0MzozMC4xMTU3ODM0NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzU2NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZhYmExMjgyMDdiM2Y5Y2MyMTVjN2U5YTEzODU2MTRhMDcxMzZlYjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDM6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4xYTE3ZTU1ZDFjY2EwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuQEAgLTc3LDYgKzc3LDggQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgICAgbmFtZTogbWNhdXRvam9pblxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGdsb2JhbFxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xMTksNyArMTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgdHlwZTogdTMyXFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxcbi0gICAgICAgIHR5cGU6IGJpbmFyeVxcbisgICAgICAgIHR5cGU6IHMzMlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogcHJvdG9cXG4gICAgICAgICB0eXBlOiB1OFxcbkBAIC0xNjgsNyArMTcwLDEzIEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWZhZGRyLWFsbFxcbiAgICAgLVxcbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3RcXG4tICAgICAgZG9jOiBHZXQgLyBkdW1wIElQdjQvSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzLlxcbisgICAgICBkb2M6IHxcXG4rICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3NcXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxcbisgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXFxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcXFwiYnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcXFwiLCByYXRoZXIgdGhhbiBieSBhXFxuKyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LlxcbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXFxuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXFxuICAgICAgIGRvOlxcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXFxuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gZmxhZ3NcXG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXFxuICAgICAgICAgcmVwbHk6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG5pbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuQEAgLTU3LDYgKzU3LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURVxcdDB4MjAwXFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlxcdDB4NDAwXFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcXHQweDgwMFxcbisjZGVmaW5lIElGQV9GX0dMT0JBTFxcdFxcdDB4MTAwMFxcbiBcXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xcbiBcXHRfX3UzMlxcdGlmYV9wcmVmZXJlZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmQ1MWQ3NzNiOTNjNmQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC00NTY2LDYgKzQ1NjYsMTc4IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdHJldHVybiBza2ItXFx1MDAzZWxlbiA/IDogcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXFxuK1xcdFxcdFxcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxcbit7XFxuK1xcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuK1xcbitcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxcbitcXHRcXHRcXHRmbGFncyk7XFxuK1xcdGlmICghbmxoKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XFxuK1xcdC8qIGlmbS1cXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXFxuK1xcdGlmbS1cXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX2luZGV4ID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXG4rXFx0aWYgKChuZXRuc2lkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XFxuK1xcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcXG4rXFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4rXFx0aW50IGFkZHJfaWR4ID0gMDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xcbitcXHRcXHRpZiAoYWRkcl9pZHggXFx1MDAzYyAqc19hZGRyX2lkeCkge1xcbitcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHR9XFxuK1xcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XFxuK1xcbitcXHQqc19hZGRyX2lkeCA9IGVyciBcXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xcbitcXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xcbitcXHRuZXRuc190cmFja2VyIG5zX3RyYWNrZXI7XFxuK1xcdGludCBuZXRuc2lkO1xcbitcXHRpbnQgaWZpbmRleDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG5sX21jYWRkcl9kdW1wX3BvbGljeVtJRkFfTUFYICsgMV0gPSB7XFxuK1xcdFtJRkFfVEFSR0VUX05FVE5TSURdXFx0PSB7IC50eXBlID0gTkxBX1MzMiB9LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVggKyAxXTtcXG4rXFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XFxuK1xcdGlmICghaWZtKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXFx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXFx1MDAzZWlmYV9zY29wZSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXFxuK1xcdFxcdFxcdCAgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3ksIGV4dGFjayk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pIHtcXG4rXFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbitcXG4rXFx0XFx0ZmlsdGVyLVxcdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XFxuK1xcdFxcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXFx1MDAzZW5ldG5zaWQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG5ldCkpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKG5ldCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRmaWx0ZXItXFx1MDAzZXRndF9uZXQgPSBuZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZpbHRlci1cXHUwMDNlaWZpbmRleCA9IGlmbS1cXHUwMDNlaWZhX2luZGV4O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcXG4rXFx0XFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4rXFx0XFx0Lm5ldG5zaWQgPSAtMSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcXG4rXFx0XFx0aW50IGFkZHJfaWR4O1xcbitcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXFx1MDAzZW5saCwgc2tiLVxcdTAwM2VzaywgXFx1MDAyNmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VleHRhY2spO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFxuK1xcdGlmIChmaWx0ZXIuaWZpbmRleCkge1xcbitcXHRcXHRjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuK1xcdFxcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuK1xcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XFxuK1xcdFxcdGlmICghZGV2KSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRzX2lmaW5kZXggPSBjdHgtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbitcXHRcXHQvKiBUaGUgZGV2aWNlIHRoZSBkdW1wIHN0b3BwZWQgYXQgaXMgZ29uZSwgZG8gbm90IHNraXBcXG4rXFx0XFx0ICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VpZmluZGV4ICE9IHNfaWZpbmRleClcXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX2lkeCA9IDA7XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpZiAoZmlsdGVyLm5ldG5zaWQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cHV0X25ldF90cmFjayhmaWx0ZXIudGd0X25ldCwgXFx1MDAyNmZpbHRlci5uc190cmFja2VyKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCxcXG5AQCAtNzI1MSw2ICs3NDIzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID1cXG4gXFx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcXG4gXFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxcbiBcXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTElOS1BST1AsIC5kb2l0ID0gcnRubF9kZWxsaW5rcHJvcH0sXFxuK1xcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcXG4rXFx0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuIFxcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXFxuIFxcdCAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sXFxuIFxcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbkBAIC0xLDE3ICsxLDIxIEBAXFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4raW1wb3J0IGVycm5vXFxuIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBObEVycm9yLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxcbiBcXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXFxceGUwXFxcXHgwMFxcXFx4MDBcXFxceDAxJ1xcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXFxceGVmXFxcXHgwMVxcXFx4MDFcXFxceDAxJ1xcbiBJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMnKVxcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXFxuK0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAnMDE6MDA6NWU6MDE6MDE6MDEnXFxuK0VUSF9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoRVRIX1RFU1RfTVVMVElDQVNUX1NUUi5yZXBsYWNlKCc6JywgJycpKVxcbiBcXG4gXFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcXG5AQCAtMTA1LDYgKzEwOSw3MCBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgICAgICAgICAgICAgIHMyLmNsb3NlKClcXG4gXFxuIFxcbitkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBWZXJpZnkgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIGFuIEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUXFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcXG4rICAgIHRhcmdldC1uZXRuc2lkLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zLCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIGZvciBpZm5hbWUgaW4gKFxcXCJkdW1teTFcXFwiLCBcXFwiZHVtbXkyXFxcIik6XFxuKyAgICAgICAgICAgIGlwKGZcXFwibGluayBhZGQgbmFtZSB7aWZuYW1lfSB0eXBlIGR1bW15XFxcIilcXG4rICAgICAgICAgICAgaXAoZlxcXCJsaW5rIHNldCB7aWZuYW1lfSB1cFxcXCIpXFxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcXFwiZHVtbXkxXFxcIilcXG4rICAgICAgICBpcChmXFxcIm1hZGRyIGFkZCB7RVRIX1RFU1RfTVVMVElDQVNUX1NUUn0gZGV2IGR1bW15MVxcXCIpXFxuK1xcbisgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXFxuKyAgICAgICAgZGVmZXIocnRubC5jbG9zZSlcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxcbisgICAgICAgICAgICAgICAge1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX1BBQ0tFVCwgXFxcImlmYS1pbmRleFxcXCI6IGRldl9pZHh9LFxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxcbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XFxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcFxcXCIpXFxuKyAgICAgICAgICAgIHJhaXNlXFxuK1xcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcXG4rICAgICAgICBrc2Z0X2VxKHthZGRyWydpZmEtaW5kZXgnXSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXFxuKyAgICAgICAgICAgICAgICBcXFwiQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wIGlnbm9yZWQgaWZhLWluZGV4IGZpbHRlclxcXCIpXFxuK1xcbisgICAgICAgIGVudHJpZXMgPSB7YWRkclsnbXVsdGljYXN0J106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxcbitcXG4rICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcXG4rICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXFxuKyAgICAgICAgYWxsX2hvc3RzID0gZW50cmllcy5nZXQoRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhbGxfaG9zdHMsXFxuKyAgICAgICAgICAgICAgICAgICAgICBcXFwiZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcXFwiKVxcbisgICAgICAgIGlmIGFsbF9ob3N0cyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2dsb2JhbCcsIGFsbF9ob3N0c1snZmxhZ3MnXSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgXFxcInByb3RvY29sIGVudHJ5IGlzIGdsb2JhbFxcXCIpXFxuK1xcbisgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVClcXG4rICAgICAgICBrc2Z0X25vdF9ub25lKHN0YXRpYywgXFxcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X2VxKHN0YXRpY1snbWMtdXNlcnMnXSwgMSxcXG4rICAgICAgICAgICAgICAgICAgICBcXFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXFxcIilcXG4rICAgICAgICAgICAga3NmdF9pbignZ2xvYmFsJywgc3RhdGljWydmbGFncyddLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbFxcXCIpXFxuK1xcbisgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XFxuKyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6XFxuKyAgICAgICAgICAgIGlwKGZcXFwibmV0bnMgc2V0IHtwZWVyfSA1XFxcIilcXG4rICAgICAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcXFwiLCBucz1wZWVyKVxcbisgICAgICAgICAgICBpcChcXFwibGluayBzZXQgZHVtbXkzIHVwXFxcIiwgbnM9cGVlcilcXG4rICAgICAgICAgICAgcGVlcl9pZHggPSBpcChcXFwibGluayBzaG93IGR1bW15M1xcXCIsIGpzb249VHJ1ZSwgbnM9cGVlcilbMF1bJ2lmaW5kZXgnXVxcbitcXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXFxuKyAgICAgICAgICAgICAgICB7XFxcImlmYS1mYW1pbHlcXFwiOiBzb2NrZXQuQUZfUEFDS0VULCBcXFwidGFyZ2V0LW5ldG5zaWRcXFwiOiA1fSxcXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcXG4rICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJ2lmYS1pbmRleCddLCBhZGRyWyd0YXJnZXQtbmV0bnNpZCddKVxcbisgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcInRhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRuc1xcXCIpXFxuK1xcbitcXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcXG5AQCAtMzE1LDcgKzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4gXFxuIFxcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcXG4rICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjMwLjcyNDQ3NDc0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk3ODkyMjUzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5ldGxpbmssIGltcGxlbWVudGluZyByZXF1ZXN0IHZhbGlkYXRpb24sIGRldmljZSB0cmF2ZXJzYWwsIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhpcyByZWFjaGFibGUgbmV0bGluayBpbnRlcmZhY2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmFiYTEyODIwN2IzZjljYzIxNWM3ZTlhMTM4NTYxNGEwNzEzNmViNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLjFhMTdlNTVkMWNjYTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiArNzcsOCBAQCBkZWZpbml0aW9uczpcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkXG4tICAgICAgICB0eXBlOiBiaW5hcnlcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHByb3RvXG4gICAgICAgICB0eXBlOiB1OFxuQEAgLTE2OCw3ICsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBtdXN0IHNlbGVjdCB0aGUgYWRkcmVzc1xuKyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb25cbisgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXG4rICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgZXhwbGljaXRseSwgZS5nLiB3aXRoXG4rICAgICAgICBTSU9DQURETVVMVEkgb3IgXCJicmlkZ2UgZmRiIGFkZCAuLi4gc2VsZlwiLCByYXRoZXIgdGhhbiBieSBhXG4rICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuXG4gICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRyc1xuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXG4gICAgICAgZG86XG5AQCAtMTgxLDEwICsxODksMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxuICAgICAgICAgICAgIC0gbWMtdXNlcnNcbiAgICAgICAgICAgICAtIGNhY2hlaW5mb1xuKyAgICAgICAgICAgIC0gZmxhZ3NcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiBbXVxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICAgIHJlcGx5OlxuICAgICAgICAgICB2YWx1ZTogNThcbiAgICAgICAgICAgYXR0cmlidXRlczogKm1jYWRkci1hdHRyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5pbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuQEAgLTU3LDYgKzU3LDcgQEAgZW51bSB7XG4gI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFXHQweDIwMFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlx0MHg0MDBcbiAjZGVmaW5lIElGQV9GX1NUQUJMRV9QUklWQUNZXHQweDgwMFxuKyNkZWZpbmUgSUZBX0ZfR0xPQkFMXHRcdDB4MTAwMFxuIFxuIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHtcbiBcdF9fdTMyXHRpZmFfcHJlZmVyZWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggODFjNWE2MTA0ZGVhMS4uZDUxZDc3M2I5M2M2ZCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTQ1NjYsNiArNDU2NiwxNzggQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdHJldHVybiBza2ItXHUwMDNlbGVuID8gOiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuK1x0XHRcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuK3tcbitcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDtcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuK1xuK1x0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcbitcdFx0XHRmbGFncyk7XG4rXHRpZiAoIW5saClcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcbitcdGlmbS1cdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xuK1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuK1x0LyogaWZtLVx1MDAzZWlmYV9mbGFncyBob2xkcyA4IGJpdHMsIHRoZSBmdWxsIHZhbHVlIGlzIGluIElGQV9GTEFHUyAqL1xuK1x0aWZtLVx1MDAzZWlmYV9mbGFncyA9IChfX3U4KWlmYV9mbGFncztcbitcdGlmbS1cdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xuK1x0aWZtLVx1MDAzZWlmYV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuK1xuK1x0aWYgKChuZXRuc2lkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fFxuK1x0ICAgIG5sYV9wdXQoc2tiLCBJRkFfTVVMVElDQVNULCBkZXYtXHUwMDNlYWRkcl9sZW4sIGhhLVx1MDAzZWFkZHIpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVx1MDAzZXJlZmNvdW50KSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7XG4rXHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4rXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuK1x0aW50IGFkZHJfaWR4ID0gMDtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4rXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4rXHRcdGlmIChhZGRyX2lkeCBcdTAwM2MgKnNfYWRkcl9pZHgpIHtcbitcdFx0XHRhZGRyX2lkeCsrO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuK1x0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdFx0YWRkcl9pZHgrKztcbitcdH1cbitcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4rXG4rXHQqc19hZGRyX2lkeCA9IGVyciBcdTAwM2MgMCA/IGFkZHJfaWR4IDogMDtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlciB7XG4rXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xuK1x0bmV0bnNfdHJhY2tlciBuc190cmFja2VyO1xuK1x0aW50IG5ldG5zaWQ7XG4rXHRpbnQgaWZpbmRleDtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG5sX21jYWRkcl9kdW1wX3BvbGljeVtJRkFfTUFYICsgMV0gPSB7XG4rXHRbSUZBX1RBUkdFVF9ORVROU0lEXVx0PSB7IC50eXBlID0gTkxBX1MzMiB9LFxuK307XG4rXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlciAqZmlsdGVyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVggKyAxXTtcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcdGludCBlcnI7XG4rXG4rXHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcbitcdGlmICghaWZtKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdFwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoaWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXHUwMDNlaWZhX3Njb3BlKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0ZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLFxuK1x0XHRcdCAgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3ksIGV4dGFjayk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pIHtcbitcdFx0c3RydWN0IG5ldCAqbmV0O1xuK1xuK1x0XHRmaWx0ZXItXHUwMDNlbmV0bnNpZCA9IG5sYV9nZXRfczMyKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pO1xuK1x0XHRuZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLVx1MDAzZW5ldG5zaWQpO1xuK1x0XHRpZiAoSVNfRVJSKG5ldCkpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFwiKTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXQpO1xuK1x0XHR9XG4rXHRcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCBcdTAwMjZmaWx0ZXItXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4rXHRcdGZpbHRlci1cdTAwM2V0Z3RfbmV0ID0gbmV0O1xuK1x0fVxuK1xuK1x0ZmlsdGVyLVx1MDAzZWlmaW5kZXggPSBpZm0tXHUwMDNlaWZhX2luZGV4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbitcdFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuK1x0XHQubmV0bnNpZCA9IC0xLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuK1x0c3RydWN0IHtcbitcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuK1x0XHRpbnQgYWRkcl9pZHg7XG4rXHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbitcdHVuc2lnbmVkIGxvbmcgc19pZmluZGV4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuK1x0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRzX2lmaW5kZXggPSBjdHgtXHUwMDNlaWZpbmRleDtcbitcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG4rXHRcdC8qIFRoZSBkZXZpY2UgdGhlIGR1bXAgc3RvcHBlZCBhdCBpcyBnb25lLCBkbyBub3Qgc2tpcFxuK1x0XHQgKiBlbnRyaWVzIG9mIHRoZSBuZXh0IG9uZS5cbitcdFx0ICovXG4rXHRcdGlmIChkZXYtXHUwMDNlaWZpbmRleCAhPSBzX2lmaW5kZXgpXG4rXHRcdFx0Y3R4LVx1MDAzZWFkZHJfaWR4ID0gMDtcbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICBmaWx0ZXIubmV0bnNpZCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rb3V0OlxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZmlsdGVyLm5ldG5zaWQgXHUwMDNlPSAwKVxuK1x0XHRwdXRfbmV0X3RyYWNrKGZpbHRlci50Z3RfbmV0LCBcdTAwMjZmaWx0ZXIubnNfdHJhY2tlcik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuIFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG5AQCAtNzI1MSw2ICs3NDIzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID1cbiBcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXG4gXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sXG4gXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTElOS1BST1AsIC5kb2l0ID0gcnRubF9kZWxsaW5rcHJvcH0sXG4rXHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXG4rXHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4gXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2NhMTRjNDAwOGNmNSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0xLDE3ICsxLDIxIEBAXG4gIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbitpbXBvcnQgZXJybm9cbiBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBObEVycm9yLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyXG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXHhlMFxceDAwXFx4MDBcXHgwMSdcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXHhlZlxceDAxXFx4MDFcXHgwMSdcbiBJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMnKVxuK0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnMDEwMDVlMDAwMDAxJylcbitFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJzAxOjAwOjVlOjAxOjAxOjAxJ1xuK0VUSF9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoRVRIX1RFU1RfTVVMVElDQVNUX1NUUi5yZXBsYWNlKCc6JywgJycpKVxuIFxuIFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcbkBAIC0xMDUsNiArMTA5LDcwIEBAIGRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgIHMyLmNsb3NlKClcbiBcbiBcbitkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBWZXJpZnkgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIGFuIEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUXG4rICAgIGR1bXA6IHRoZSBpZmEtaW5kZXggZmlsdGVyLCBtYy11c2VycywgdGhlIGdsb2JhbCBmbGFnIGFuZFxuKyAgICB0YXJnZXQtbmV0bnNpZC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGZvciBpZm5hbWUgaW4gKFwiZHVtbXkxXCIsIFwiZHVtbXkyXCIpOlxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgYWRkIG5hbWUge2lmbmFtZX0gdHlwZSBkdW1teVwiKVxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgc2V0IHtpZm5hbWV9IHVwXCIpXG4rICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFwiZHVtbXkxXCIpXG4rICAgICAgICBpcChmXCJtYWRkciBhZGQge0VUSF9URVNUX01VTFRJQ0FTVF9TVFJ9IGRldiBkdW1teTFcIilcbitcbisgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4rICAgICAgICBkZWZlcihydG5sLmNsb3NlKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAgYWxsX2hvc3RzID0gZW50cmllcy5nZXQoRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGFsbF9ob3N0cyxcbisgICAgICAgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAgaWYgYWxsX2hvc3RzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdnbG9iYWwnLCBhbGxfaG9zdHNbJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcIilcbitcbisgICAgICAgIHN0YXRpYyA9IGVudHJpZXMuZ2V0KEVUSF9URVNUX01VTFRJQ0FTVClcbisgICAgICAgIGtzZnRfbm90X25vbmUoc3RhdGljLCBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAgaWYgc3RhdGljIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoc3RhdGljWydtYy11c2VycyddLCAxLFxuKyAgICAgICAgICAgICAgICAgICAgXCJ1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBzdGF0aWNbJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgICAgICBcIlNJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsXCIpXG4rXG4rICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdFxuKyAgICAgICAgd2l0aCBOZXROUygpIGFzIHBlZXI6XG4rICAgICAgICAgICAgaXAoZlwibmV0bnMgc2V0IHtwZWVyfSA1XCIpXG4rICAgICAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15XCIsIG5zPXBlZXIpXG4rICAgICAgICAgICAgaXAoXCJsaW5rIHNldCBkdW1teTMgdXBcIiwgbnM9cGVlcilcbisgICAgICAgICAgICBwZWVyX2lkeCA9IGlwKFwibGluayBzaG93IGR1bW15M1wiLCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWydpZmluZGV4J11cbitcbisgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdChcbisgICAgICAgICAgICAgICAge1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfUEFDS0VULCBcInRhcmdldC1uZXRuc2lkXCI6IDV9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJ2lmYS1pbmRleCddLCBhZGRyWyd0YXJnZXQtbmV0bnNpZCddKVxuKyAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHsocGVlcl9pZHgsIDUpfSxcbisgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0LW5ldG5zaWQgZGlkIG5vdCBkdW1wIHRoZSBwZWVyIG5ldG5zXCIpXG4rXG4rXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIlxuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcbkBAIC0zMTUsNyArMzgzLDggQEAgZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4gXG4gXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXG4rICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0MzozMC43MjQ0NzcxMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA2MTQ5MTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJ0bmV0bGluayBNdWx0aWNhc3QgQWRkcmVzcyBEdW1wIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCkgb3ZlciBydG5ldGxpbmsuIFRoYXQncyBhIHNvbGlkIGFkZGl0aW9uLCBhbmQgdGhlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlIChgcnQtYWRkci55YW1sYCksIGEgbmV3IGZsYWcgaW4gYGlmX2FkZHIuaGAgKGBJRkFfRl9HTE9CQUxgKSwgYW5kIHRoZSBjb3JlIGxvZ2ljIGluIGBydG5ldGxpbmsuY2AuIFNwZWNpZmljYWxseSwgbmV3IGZ1bmN0aW9ucyBmb3IgZmlsbGluZywgZHVtcGluZywgdmFsaWRhdGluZywgYW5kIGhhbmRsaW5nIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyByZXF1ZXN0LiBXZSd2ZSBnb3QgdGhlIHN0YW5kYXJkIHJ0bmV0bGluayBtZXNzYWdlIGhhbmRsaW5nIHN0cnVjdHVyZSB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5ldyBgUlRNX0dFVE1VTFRJQ0FTVGAgbWVzc2FnZSB0eXBlLiBHb29kLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG9ibGlnYXRvcnkgc2VsZnRlc3RzIGluIGBydG5ldGxpbmsucHlgLiBNYWtlcyBzZW5zZSwgd2UgaGF2ZSBhIHRlc3Qgc3VpdGUuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/IExldCdzIHNlZS4uLiB0aGUgdGFyZ2V0IGlzIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHJpZ2h0IHdoZXJlIHRoZSBjb3JlIG5ldGxpbmsgc3R1ZmYgbGl2ZXMuIFRoZSBwYXRjaCBpcyByZWFjaGFibGUgdmlhIHRoZSBydG5ldGxpbmsgc29ja2V0IHVzaW5nIGBSVE1fR0VUTVVMVElDQVNUYCB3aXRoIGBmYW1pbHkgPSBBRl9QQUNLRVRgLiBZZXAsIHN0YW5kYXJkIG5ldGxpbmssIGFjY2Vzc2libGUgZnJvbSBlaXRoZXIgcHJpdmlsZWdlZCBvciB1bnByaXZpbGVnZWQgdXNlciBzcGFjZS4gQW5kLCBvZiBjb3Vyc2UsIHdlIGNhbiBoaXQgaXQgaW4gUUVNVSwgb3IgZXZlbiBvbiBhIHN0YW5kYXJkIExpbnV4IHNldHVwLCBhbmQgZnJvbSB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBXZSBoYXZlIGxvZ2ljIGFkZGVkIGZvciB2YWxpZGF0aW9uLCBhbmQgaXRlcmF0aW5nIGFjcm9zcyBkZXZpY2VzIHVzaW5nIGVzdGFibGlzaGVkIGZ1bmN0aW9ucy4gVGhlcmUncyBhbHNvIG5ldG5zIHRyYWNraW5nIGFuZCBydG5sIG1lc3NhZ2UgY29uc3RydWN0aW9uLiBUaGlzIGhhcyBhbGwgb2YgdGhlIHR5cGljYWwgZWxlbWVudHMgb2YgYSBnb29kIGZ1enogdGFyZ2V0LlxuXG5TbywgKldvcnRoRnV6emluZyogaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuIFdlJ3ZlIGdvdCBhIG5ldyBuZXRsaW5rIG1lc3NhZ2UsIHNvbWUgbmV3IGZ1bmN0aW9ucywgYW5kIGl0J3MgYWxsIHJlYWNoYWJsZS4gXG5cbkZpbmFsbHksIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBnbyBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24uIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQxMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjQyLjc4NTk3MTY2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc5Mjc3OTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJC4qcnRuZXRsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Mzo0My4xMjM5MDU2NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjk3MDk3MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBMb2NhdGlvbiBvZiBgcnRuZXRsaW5rLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGUgc291cmNlIGNvZGUgZm9yIGBydG5ldGxpbmsuY2AgcmVzaWRlcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzdHJ1Y3R1cmUuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdG8gY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIEknbSBhc3N1bWluZyB0aGF0IHNpbmNlIGl0J3MgYSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIGNvbXBvbmVudCwgdGhlIGJ1aWxkIHN5c3RlbSB3b3VsZCBtb3N0IGxpa2VseSBkZWZpbmUgaXRzIGluY2x1c2lvbiB0aGVyZS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIHJldmVhbHMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2ggZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NDYuNDIxMDA1MTQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTc3MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmV0bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Mzo0Ni40OTcxODg3NDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODYwNjYwODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBydG5ldGxpbmsgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHJ0bmV0bGluay5vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBpbmNsdXNpb24uIFJpZ2h0LCBpdCdzIGJ1aWx0IHdpdGggYG9iai15YCBpbiB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhhdCBtZWFucyBpdCdzIHN0YXRpY2FsbHkgbGlua2VkLCBhbmQgdGhlIHByZXJlcXVpc2l0ZSBmb3IgdGhhdCBpcyBgQ09ORklHX05FVGAuIEdvdCBpdC4gTm93LCB3aGF0J3MgZHJpdmluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSdzIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0aW5nIGtleSBmdW5jdGlvbnMgd2l0aGluIGBydG5ldGxpbmsuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgYHJ0bmxfZHVtcF9tY2FkZHJgIG9yIGBuZXRuc190cmFja2VyYC4gVGhhdCB3b3VsZCBiZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgdGhleSdyZSBwb3RlbnRpYWxseSBjb21wbGV4IGFyZWFzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgbmV0d29yayBuYW1lc3BhY2UgdHJhY2tpbmcuIEkgbmVlZCB0byBzZWUgaWYgYW55IG9mIHRob3NlIGZ1bmN0aW9ucyBoYXZlIGFueSBkZXBlbmRlbmNpZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NDkuMzU3ODU0NTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4ODA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTY2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTY2OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbiA/IDogcmV0O1xcbjQ1Njc6XFx0fVxcbjQ1Njg6XFx0XFxuNDU2OTpcXHRzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG40NTcwOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxcbjQ1NzE6XFx0XFx0XFx0XFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuNDU3MjpcXHR7XFxuNDU3MzpcXHRcXHR1MzIgaWZhX2ZsYWdzID0gaGEtXFx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwO1xcbjQ1NzQ6XFx0XFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xcbjQ1NzU6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuNDU3NjpcXHRcXG40NTc3OlxcdFxcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXFxuNDU3ODpcXHRcXHRcXHRcXHRmbGFncyk7XFxuNDU3OTpcXHRcXHRpZiAoIW5saClcXG40NTgwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuNDU4MTpcXHRcXG40NTgyOlxcdFxcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcXG40NTgzOlxcdFxcdGlmbS1cXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcXG40NTg0OlxcdFxcdGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XFxuNDU4NTpcXHRcXHQvKiBpZm0tXFx1MDAzZWlmYV9mbGFncyBob2xkcyA4IGJpdHMsIHRoZSBmdWxsIHZhbHVlIGlzIGluIElGQV9GTEFHUyAqL1xcbjQ1ODY6XFx0XFx0aWZtLVxcdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XFxuNDU4NzpcXHRcXHRpZm0tXFx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XFxuNDU4ODpcXHRcXHRpZm0tXFx1MDAzZWlmYV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG40NTg5OlxcdFxcbjQ1OTA6XFx0XFx0aWYgKChuZXRuc2lkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjZcXG40NTkxOlxcdFxcdCAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fFxcbjQ1OTI6XFx0XFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfTVVMVElDQVNULCBkZXYtXFx1MDAzZWFkZHJfbGVuLCBoYS1cXHUwMDNlYWRkcikgfHxcXG40NTkzOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSB8fFxcbjQ1OTQ6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7XFxuNDU5NTpcXHRcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbjQ1OTY6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG40NTk3OlxcdFxcdH1cXG40NTk4OlxcdFxcbjQ1OTk6XFx0XFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG40NjAwOlxcdFxcdHJldHVybiAwO1xcbjQ2MDE6XFx0fVxcbjQ2MDI6XFx0XFxuNDYwMzpcXHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuNDYwNDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcXG40NjA1OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuNDYwNjpcXHR7XFxuNDYwNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbjQ2MDg6XFx0XFx0aW50IGFkZHJfaWR4ID0gMDtcXG40NjA5OlxcdFxcdGludCBlcnIgPSAwO1xcbjQ2MTA6XFx0XFxuNDYxMTpcXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG40NjEyOlxcdFxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcXG40NjEzOlxcdFxcdFxcdGlmIChhZGRyX2lkeCBcXHUwMDNjICpzX2FkZHJfaWR4KSB7XFxuNDYxNDpcXHRcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbjQ2MTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjQ5LjM1OTA0NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTcwMDU0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIE5ldHdvcmsgUGx1bWJpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBsZXQncyB6ZXJvIGluIG9uIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyA0NjE2IHRocm91Z2ggNDc0MC4gVGhhdCByYW5nZSB1c3VhbGx5IGVuY29tcGFzc2VzIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBhIGNyaXRpY2FsIHBhcnQgb2YgYSBsYXJnZXIgb25lIGRlYWxpbmcgd2l0aCByb3V0ZSBuZXRsaW5rIG1lc3NhZ2luZywgcHJvYmFibHkuIEhvcGVmdWxseSwgdGhhdCdsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGhhcHBlbnMsIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gcHJlY2lzZSB3aXRoIHRoaXMgc2VjdGlvbi4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaG9sZHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NTEuMzI5MTA0MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NjE2OlxcdFxcdFxcdH1cXG40NjE3OlxcdFxcdFxcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG40NjE4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcXG40NjE5OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjQ2MjA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYyMTpcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbjQ2MjI6XFx0XFx0fVxcbjQ2MjM6XFx0XFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcXG40NjI0OlxcdFxcbjQ2MjU6XFx0XFx0KnNfYWRkcl9pZHggPSBlcnIgXFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xcbjQ2MjY6XFx0XFxuNDYyNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjQ2Mjg6XFx0fVxcbjQ2Mjk6XFx0XFxuNDYzMDpcXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xcbjQ2MzE6XFx0XFx0c3RydWN0IG5ldCAqdGd0X25ldDtcXG40NjMyOlxcdFxcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcXG40NjMzOlxcdFxcdGludCBuZXRuc2lkO1xcbjQ2MzQ6XFx0XFx0aW50IGlmaW5kZXg7XFxuNDYzNTpcXHR9O1xcbjQ2MzY6XFx0XFxuNDYzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCArIDFdID0ge1xcbjQ2Mzg6XFx0XFx0W0lGQV9UQVJHRVRfTkVUTlNJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXFxuNDYzOTpcXHR9O1xcbjQ2NDA6XFx0XFxuNDY0MTpcXHRzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbjQ2NDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxcbjQ2NDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXFxuNDY0NDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuNDY0NTpcXHR7XFxuNDY0NjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICsgMV07XFxuNDY0NzpcXHRcXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XFxuNDY0ODpcXHRcXHRpbnQgZXJyO1xcbjQ2NDk6XFx0XFxuNDY1MDpcXHRcXHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcXG40NjUxOlxcdFxcdGlmICghaWZtKSB7XFxuNDY1MjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuNDY1MzpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XFxcIik7XFxuNDY1NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NjU1OlxcdFxcdH1cXG40NjU2OlxcdFxcbjQ2NTc6XFx0XFx0aWYgKGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXFx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXFx1MDAzZWlmYV9zY29wZSkge1xcbjQ2NTg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjQ2NTk6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcXFwiKTtcXG40NjYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ2NjE6XFx0XFx0fVxcbjQ2NjI6XFx0XFxuNDY2MzpcXHRcXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXFxuNDY2NDpcXHRcXHRcXHRcXHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xcbjQ2NjU6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNDY2NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjQ2Njc6XFx0XFxuNDY2ODpcXHRcXHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xcbjQ2Njk6XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjQ2NzA6XFx0XFxuNDY3MTpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcXG40NjcyOlxcdFxcdFxcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXFx1MDAzZW5ldG5zaWQpO1xcbjQ2NzM6XFx0XFx0XFx0aWYgKElTX0VSUihuZXQpKSB7XFxuNDY3NDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuNDY3NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXFxcIik7XFxuNDY3NjpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuZXQpO1xcbjQ2Nzc6XFx0XFx0XFx0fVxcbjQ2Nzg6XFx0XFx0XFx0bmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbjQ2Nzk6XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V0Z3RfbmV0ID0gbmV0O1xcbjQ2ODA6XFx0XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRcXHRmaWx0ZXItXFx1MDAzZWlmaW5kZXggPSBpZm0tXFx1MDAzZWlmYV9pbmRleDtcXG40NjgzOlxcdFxcbjQ2ODQ6XFx0XFx0cmV0dXJuIDA7XFxuNDY4NTpcXHR9XFxuNDY4NjpcXHRcXG40Njg3OlxcdHN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuNDY4ODpcXHR7XFxuNDY4OTpcXHRcXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xcbjQ2OTA6XFx0XFx0XFx0LnRndF9uZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG40NjkxOlxcdFxcdFxcdC5uZXRuc2lkID0gLTEsXFxuNDY5MjpcXHRcXHR9O1xcbjQ2OTM6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XFxuNDY5NDpcXHRcXHRzdHJ1Y3Qge1xcbjQ2OTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbjQ2OTY6XFx0XFx0XFx0aW50IGFkZHJfaWR4O1xcbjQ2OTc6XFx0XFx0fSAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjQ2OTg6XFx0XFx0dW5zaWduZWQgbG9uZyBzX2lmaW5kZXg7XFxuNDY5OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjQ3MDA6XFx0XFx0aW50IGVycjtcXG40NzAxOlxcdFxcbjQ3MDI6XFx0XFx0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXFx1MDAzZW5saCwgc2tiLVxcdTAwM2VzaywgXFx1MDAyNmZpbHRlcixcXG40NzAzOlxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlZXh0YWNrKTtcXG40NzA0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjQ3MDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG40NzA2OlxcdFxcbjQ3MDc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ3MDg6XFx0XFxuNDcwOTpcXHRcXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcXG40NzEwOlxcdFxcdFxcdGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG40NzExOlxcdFxcdFxcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuNDcxMjpcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpO1xcbjQ3MTM6XFx0XFx0XFx0aWYgKCFkZXYpIHtcXG40NzE0OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuNDcxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDM6NTEuMzI5MzUwOTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNDM2NDI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgZnVuY3Rpb25hbGl0eSBiZXR0ZXIuIEZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyBhZGRlZDogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIGR1bXBpbmcsIHZhbGlkYXRpbmcsIGFuZCBmaWxsaW5nIG11bHRpY2FzdCBhZGRyZXNzIGRhdGEgd2l0aGluIHRoZSByb3V0aW5nIG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5Ob3csIGFyZSB0aGVzZSB0aGUgb25seSBidWlsZGluZyBibG9ja3M/IExldCdzIHZlcmlmeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEEgcXVpY2sgY2hlY2sgb2YgYENPTkZJR19ORVRgIGlzIGluIG9yZGVyLiBJdCdzIHRoZSBiYXNlbGluZSBmb3IgbmV0d29ya2luZywgb2YgY291cnNlLCBidXQgaXMgaXQgKnN1ZmZpY2llbnQqPyBXZSBvZnRlbiBzZWUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGllZCBpbnRvIHNwZWNpZmljIGZlYXR1cmVzLlxuXG5NeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSB3aWxsIGJlIG5ldHdvcmsgbmFtZXNwYWNlcy4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IG5ldG5zIGF3YXJlPyBJJ2xsIGxvb2sgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUbyBpbnZlc3RpZ2F0ZSwgSSdsbCBgZ3JlcGAgdGhlIGNvZGViYXNlIGZvciBgbmV0bnNfdHJhY2tlcl9hbGxvY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG5hbWVzcGFjZS1zcGVjaWZpYyB0cmFja2luZyBnb2luZyBvbi4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW50ZWdyYXRlcyB3aXRoIG5ldHdvcmsgaXNvbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU4NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjU0LjE2MzcxNzc5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMDA1ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldG5zX3RyYWNrZXJfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM1OT1zdGF0aWMgaW5saW5lIGJvb2wgbmV0X2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNjMtXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzY1LVxcdFxcdFxcdFxcdFxcdCBuZXRuc190cmFja2VyICp0cmFja2VyLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3NS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzc2OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRuc190cmFja2VyX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgbmV0bnNfdHJhY2tlciAqdHJhY2tlcixcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzc3LVxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnApXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3OC17XFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM3OTpcXHRfX25ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCB0cmFja2VyLCB0cnVlLCBnZnApO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODAtfVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM5Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdldF9uZXRfdHJhY2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM5NS1cXHRnZXRfbmV0KG5ldCk7XFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM5NjpcXHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgdHJhY2tlciwgZ2ZwKTtcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzk3LVxcdHJldHVybiBuZXQ7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MjY3PXN0YXRpYyBpbmxpbmUgYm9vbCB0Y2ZfZXh0c19nZXRfbmV0KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcXG4tLVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yNzEtXFx0aWYgKGV4dHMtXFx1MDAzZW5ldClcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6MjcyOlxcdFxcdG5ldG5zX3RyYWNrZXJfYWxsb2MoZXh0cy1cXHUwMDNlbmV0LCBcXHUwMDI2ZXh0cy1cXHUwMDNlbnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI3My1cXHRyZXR1cm4gZXh0cy1cXHUwMDNlbmV0ICE9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQzOjU0LjQxNjczMDMyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTU3NTI5OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBSVE5FVExJTksgTXVsdGljYXN0IEFkZHJlc3MgRHVtcGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBmZWF0dXJlLCBzbyBJJ2xsIHN0YXJ0IHdpdGggYE5FVERFVklDRVNgIG9yIGBORVRgLiBTaW5jZSB0aGUgYmFzZSBjb25maWcgaXMgYENPTkZJR19ORVRgLCBpdCdzIGxpa2VseSBsaW5rZWQgdG8gdGhlIGBORVRgIHN0YW5kYXJkLiBUaGF0IHNlZW1zIHRvIGJlIGEgc2FmZSBhc3N1bXB0aW9uLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gY2VudGVyIGFyb3VuZCB0aGVzZSBmb3VyIGZ1bmN0aW9uczogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGR5bmFtaWNhbGx5IGxpbmtlZCBvciBzdGF0aWNhbGx5IGNvbXBpbGVkLiBBIHF1aWNrIGNoZWNrIG9mIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgY29uZmlybXMgdGhhdCBhbGwgZm91ciBhcmUsIGluIGZhY3QsIHN0YXRpY2FsbHkgY29tcGlsZWQuIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2R1bXBfbWNhZGRyYCBhcmUgKmFsbCogc3RhdGljIGZ1bmN0aW9ucy4gVGhvdWdoIHRoZSBsYXN0IGlzIGFzc2lnbmVkIHRvIGAuZHVtcGl0YCBpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYFxuXG5OZXh0LCBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgYXJlYXMgb2YgdGhlIGtlcm5lbCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBBIGRpZmYgY2hlY2sgcmV2ZWFscyBtb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCwgYGluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhgLCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgLiBObyBvdGhlciBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cblRoaXMgZ2l2ZXMgbWUgdGhlIGZvbGxvd2luZyBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wicnRubF9kdW1wX21jYWRkclwiLCBcInJ0bmxfZHVtcF9tY2FkZHJfZGV2XCIsIFwicnRubF9maWxsX21jYWRkclwiLCBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiTkVUXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkdW1waW5nIFBGX1BBQ0tFVCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgdmlhIHJ0bmV0bGluayAoYFJUTV9HRVRNVUxUSUNBU1RgKS4gSXQgaW5jbHVkZXMgaGFuZGxlcnMgc3VjaCBhcyBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGFuZCBgcnRubF9maWxsX21jYWRkcmAuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5ldGxpbmsgc29ja2V0cyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGRlbWFuZHMgZnV6emluZy5cblxuQmVmb3JlIEkgcHVzaCB0aGlzLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmb3JtYXQgYWdhaW5zdCBteSBlc3RhYmxpc2hlZCBydWxlcy4gSXQgbG9va3MgY29ycmVjdDogYXJyYXlzIG9mIHN0cmluZ3Mgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCBmb3IgZW5hYmxlZCBjb25maWd1cmF0aW9ucywgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmb3IgZm9jdXNlZCBzeW1ib2xzLCBhIGJvb2xlYW4gZm9yIHdoZXRoZXIgaXQgaXMgd29ydGggZnV6emluZywgYW5kIGEgc3RyaW5nIGZvciBteSByZWFzb25pbmcuIExvb2tzIGdvb2QuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ4MCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MDAuMzc0MjYzMTE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDMyNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmV0bGluaywgaW1wbGVtZW50aW5nIHJlcXVlc3QgdmFsaWRhdGlvbiwgZGV2aWNlIHRyYXZlcnNhbCwgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGludGVyZmFjZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmV0bGluaywgaW1wbGVtZW50aW5nIHJlcXVlc3QgdmFsaWRhdGlvbiwgZGV2aWNlIHRyYXZlcnNhbCwgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGludGVyZmFjZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MDAuNTEzNzA0ODQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg0ODA1Mjk2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjAwLjUxNDI0Mjk1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyODQ3NTA4OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmxfZHVtcF9tY2FkZHIgYW5kIHJ0bmxfZmlsbF9tY2FkZHIuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxcbjEuIGBzdHJ1Y3QgaWZhZGRybXNnYCBwYXlsb2FkOiBBbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBzdHJ1Y3QgY29udGFpbnMgNCBgX191OGAgZmllbGRzIGFuZCAxIGBfX3UzMmAgZmllbGQgdG90YWxpbmcgOCBieXRlcyB3aXRoIHplcm8gcGFkZGluZyBieXRlcy5cXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXFx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXFx1MDAzZWFkZHJgIG9mIGxlbmd0aCBgZGV2LVxcdTAwM2VhZGRyX2xlbmApLlxcbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuXFxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZhYmExMjgyMDdiM2Y5Y2MyMTVjN2U5YTEzODU2MTRhMDcxMzZlYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMjo0MzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4xYTE3ZTU1ZDFjY2EwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTc3LDYgKzc3LDggQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgICBuYW1lOiBtY2F1dG9qb2luXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBnbG9iYWxcbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xMTksNyArMTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxuLSAgICAgICAgdHlwZTogYmluYXJ5XG4rICAgICAgICB0eXBlOiBzMzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwcm90b1xuICAgICAgICAgdHlwZTogdThcbkBAIC0xNjgsNyArMTcwLDEzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsXG4gICAgIC1cbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3Rcbi0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuXG4rICAgICAgZG9jOiB8XG4rICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgbXVzdCBzZWxlY3QgdGhlIGFkZHJlc3NcbisgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uXG4rICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxuKyAgICAgICAgU0lPQ0FERE1VTFRJIG9yIFwiYnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcIiwgcmF0aGVyIHRoYW4gYnkgYVxuKyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LlxuICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnNcbiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZ1xuICAgICAgIGRvOlxuQEAgLTE4MSwxMCArMTg5LDEzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXG4gICAgICAgICAgICAgLSBjYWNoZWluZm9cbisgICAgICAgICAgICAtIGZsYWdzXG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogNThcbi0gICAgICAgICAgYXR0cmlidXRlczogW11cbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgICByZXBseTpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC01Nyw2ICs1Nyw3IEBAIGVudW0ge1xuICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURVx0MHgyMDBcbiAjZGVmaW5lIElGQV9GX01DQVVUT0pPSU5cdDB4NDAwXG4gI2RlZmluZSBJRkFfRl9TVEFCTEVfUFJJVkFDWVx0MHg4MDBcbisjZGVmaW5lIElGQV9GX0dMT0JBTFx0XHQweDEwMDBcbiBcbiBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XG4gXHRfX3UzMlx0aWZhX3ByZWZlcmVkO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmQ1MWQ3NzNiOTNjNmQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC00NTY2LDYgKzQ1NjYsMTc4IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbitcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbit7XG4rXHR1MzIgaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XG4rXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4rXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbitcbitcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG4rXHRcdFx0ZmxhZ3MpO1xuK1x0aWYgKCFubGgpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4rXHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbitcdGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcbitcdC8qIGlmbS1cdTAwM2VpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi9cbitcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XG4rXHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbitcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbitcbitcdGlmICgobmV0bnNpZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIG5sYV9wdXRfczMyKHNrYiwgSUZBX1RBUkdFVF9ORVROU0lELCBuZXRuc2lkKSkgfHxcbitcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBoYS1cdTAwM2VyZWZjb3VudCkgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhX2ZsYWdzKSkge1xuK1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0fVxuK1xuK1x0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbitcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4re1xuK1x0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbitcdGludCBhZGRyX2lkeCA9IDA7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuK1x0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuK1x0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG4rXHRcdFx0YWRkcl9pZHgrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbitcdFx0XHRcdCAgICAgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncywgbmV0bnNpZCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGFkZHJfaWR4Kys7XG4rXHR9XG4rXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuK1xuK1x0KnNfYWRkcl9pZHggPSBlcnIgXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xuK1x0c3RydWN0IG5ldCAqdGd0X25ldDtcbitcdG5ldG5zX3RyYWNrZXIgbnNfdHJhY2tlcjtcbitcdGludCBuZXRuc2lkO1xuK1x0aW50IGlmaW5kZXg7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCArIDFdID0ge1xuK1x0W0lGQV9UQVJHRVRfTkVUTlNJRF1cdD0geyAudHlwZSA9IE5MQV9TMzIgfSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlcixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICsgMV07XG4rXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG4rXHRpZiAoIWlmbSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuIHx8IGlmbS1cdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVx1MDAzZWlmYV9zY29wZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCxcbitcdFx0XHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XG4rXHRcdHN0cnVjdCBuZXQgKm5ldDtcbitcbitcdFx0ZmlsdGVyLVx1MDAzZW5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltJRkFfVEFSR0VUX05FVE5TSURdKTtcbitcdFx0bmV0ID0gcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc2ssIGZpbHRlci1cdTAwM2VuZXRuc2lkKTtcbitcdFx0aWYgKElTX0VSUihuZXQpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiSW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWRcIik7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIobmV0KTtcbitcdFx0fVxuK1x0XHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2ZmlsdGVyLVx1MDAzZW5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuK1x0XHRmaWx0ZXItXHUwMDNldGd0X25ldCA9IG5ldDtcbitcdH1cbitcbitcdGZpbHRlci1cdTAwM2VpZmluZGV4ID0gaWZtLVx1MDAzZWlmYV9pbmRleDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlciBmaWx0ZXIgPSB7XG4rXHRcdC50Z3RfbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKSxcbitcdFx0Lm5ldG5zaWQgPSAtMSxcbitcdH07XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbitcdHN0cnVjdCB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcbitcdFx0aW50IGFkZHJfaWR4O1xuK1x0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4rXHR1bnNpZ25lZCBsb25nIHNfaWZpbmRleDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBza2ItXHUwMDNlc2ssIFx1MDAyNmZpbHRlcixcbitcdFx0XHRcdFx0IGNiLVx1MDAzZWV4dGFjayk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0aWYgKGZpbHRlci5pZmluZGV4KSB7XG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpO1xuK1x0XHRpZiAoIWRldikge1xuK1x0XHRcdGVyciA9IC1FTk9ERVY7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICBmaWx0ZXIubmV0bnNpZCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0c19pZmluZGV4ID0gY3R4LVx1MDAzZWlmaW5kZXg7XG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHQvKiBUaGUgZGV2aWNlIHRoZSBkdW1wIHN0b3BwZWQgYXQgaXMgZ29uZSwgZG8gbm90IHNraXBcbitcdFx0ICogZW50cmllcyBvZiB0aGUgbmV4dCBvbmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoZGV2LVx1MDAzZWlmaW5kZXggIT0gc19pZmluZGV4KVxuK1x0XHRcdGN0eC1cdTAwM2VhZGRyX2lkeCA9IDA7XG4rXHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbitcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGZpbHRlci5uZXRuc2lkIFx1MDAzZT0gMClcbitcdFx0cHV0X25ldF90cmFjayhmaWx0ZXIudGd0X25ldCwgXHUwMDI2ZmlsdGVyLm5zX3RyYWNrZXIpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzQyMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNjYTE0YzQwMDhjZjUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw3MCBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcbisgICAgdGFyZ2V0LW5ldG5zaWQuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgZGVmZXIocnRubC5jbG9zZSlcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdChcbisgICAgICAgICAgICAgICAge1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfUEFDS0VULCBcImlmYS1pbmRleFwiOiBkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuKyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbisgICAgICAgICAgICBpZiBlLmVycm9yID09IGVycm5vLkVPUE5PVFNVUFA6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXG4rICAgICAgICAgICAgICAgICAgICBcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcFwiKVxuKyAgICAgICAgICAgIHJhaXNlXG4rXG4rICAgICAgICAjIGR1bW15MiBoYXMgZW50cmllcyBhcyB3ZWxsLCBvbmx5IGR1bW15MSBtYXkgYmUgbGlzdGVkXG4rICAgICAgICBrc2Z0X2VxKHthZGRyWydpZmEtaW5kZXgnXSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXG4rICAgICAgICAgICAgICAgIFwiQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wIGlnbm9yZWQgaWZhLWluZGV4IGZpbHRlclwiKVxuK1xuKyAgICAgICAgZW50cmllcyA9IHthZGRyWydtdWx0aWNhc3QnXTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XG4rXG4rICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcbisgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cbisgICAgICAgIGFsbF9ob3N0cyA9IGVudHJpZXMuZ2V0KEVUSF9BTExfSE9TVFNfTVVMVElDQVNUKVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhbGxfaG9zdHMsXG4rICAgICAgICAgICAgICAgICAgICAgIFwiZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcIilcbisgICAgICAgIGlmIGFsbF9ob3N0cyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZ2xvYmFsJywgYWxsX2hvc3RzWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2wgZW50cnkgaXMgZ2xvYmFsXCIpXG4rXG4rICAgICAgICBzdGF0aWMgPSBlbnRyaWVzLmdldChFVEhfVEVTVF9NVUxUSUNBU1QpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKHN0YXRpYywgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgIGlmIHN0YXRpYyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKHN0YXRpY1snbWMtdXNlcnMnXSwgMSxcbisgICAgICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICAgICAga3NmdF9pbignZ2xvYmFsJywgc3RhdGljWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbFwiKVxuK1xuKyAgICAgICAgIyB0YXJnZXQtbmV0bnNpZCBkdW1wcyBhbm90aGVyIG5ldG5zLCBpZmEtaW5kZXggaXMgcmVsYXRpdmUgdG8gaXRcbisgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOlxuKyAgICAgICAgICAgIGlwKGZcIm5ldG5zIHNldCB7cGVlcn0gNVwiKVxuKyAgICAgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTMgdHlwZSBkdW1teVwiLCBucz1wZWVyKVxuKyAgICAgICAgICAgIGlwKFwibGluayBzZXQgZHVtbXkzIHVwXCIsIG5zPXBlZXIpXG4rICAgICAgICAgICAgcGVlcl9pZHggPSBpcChcImxpbmsgc2hvdyBkdW1teTNcIiwganNvbj1UcnVlLCBucz1wZWVyKVswXVsnaWZpbmRleCddXG4rXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXG4rICAgICAgICAgICAgICAgIHtcImlmYS1mYW1pbHlcIjogc29ja2V0LkFGX1BBQ0tFVCwgXCJ0YXJnZXQtbmV0bnNpZFwiOiA1fSxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxuKyAgICAgICAgICAgIGtzZnRfZXEoeyhhZGRyWydpZmEtaW5kZXgnXSwgYWRkclsndGFyZ2V0LW5ldG5zaWQnXSlcbisgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sXG4rICAgICAgICAgICAgICAgICAgICBcInRhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRuc1wiKVxuK1xuK1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgKzM4Myw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuIFxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGR1bXBfbWNhZGRyX2wyX2NoZWNrLFxuKyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MDAuNTE0MjQ0MTYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyODczMTU2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGFwcGx5IHRoZSBlc3RhYmxpc2hlZCBydWxlcyB0byB0aGUgY29kZSBjaGFuZ2VzLiBJIGtub3cgdGhhdCBLQVNBTiBkZWFscyB3aXRoIG1lbW9yeSBlcnJvcnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBkb3VibGUgZnJlZXMsIGJ1dCBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIOKAkyBzcGVjaWZpY2FsbHkgb24gdGhlIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIOKAkyBhbmQgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlIHJ1bGVzIGFyZSBwcmV0dHkgY2xlYXI6IEtNU0FOIGZ1enppbmcgaXMgb25seSBuZWVkZWQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGNvZGUgdGhhdCBkb2VzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6IDEpIFNlbmRzIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIHBvdGVudGlhbGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGlzIGNvdmVycyBjYXNlcyB1c2luZyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiAyKSBVc2VzIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzLiAzKSBBbGxvY2F0ZXMgb3IgaW5pdGlhbGl6ZXMgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gNCkgSW50cm9kdWNlcyBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQgYWRkcyBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCBkdW1wIHN1cHBvcnQgdGhyb3VnaCB0aGUgYHJ0bmxfZHVtcF9tY2FkZHJgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgcnRubF9maWxsX21jYWRkcmAgYW5kIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuXG5cbk9rYXksIGhlcmUncyB3aGF0IHRoZSBjb2RlIGRvZXM6IEl0IGNvbnN0cnVjdHMgYW4gYGlmYWRkcm1zZ2AgbWVzc2FnZSB0byBzZW5kIG11bHRpY2FzdCBhZGRyZXNzIGluZm9ybWF0aW9uIG92ZXIgbmV0bGluay4gVGhlIGNvZGUgZmlsbHMgdGhlIGBpZmFkZHJtc2dgIHN0cnVjdHVyZSBhbmQgdGhlbiB1c2VzIGBubGFfcHV0YCB0byBhZGQgTmV0bGluayBhdHRyaWJ1dGVzIHRvIHRoZSBTS0IuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2hlY2sgYHN0cnVjdCBpZmFkZHJtc2dgIHRvIHNlZSB3aGF0IGZpZWxkcyBpdCBjb250YWlucy4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZ2V0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjA1LjgwMTU2NDMyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyODk4NzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaWZhZGRybXNnIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNy1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjg6c3RydWN0IGlmYWRkcm1zZyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC05LVxcdF9fdThcXHRcXHRpZmFfZmFtaWx5O1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXFx0X191OFxcdFxcdGlmYV9mYW1pbHk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjA4LjUzMDU1NzMyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTEzMjI2Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGlmX2FkZHIuaCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgYGluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDguIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCBsaWtlbHkgc3RhcnRzIGRlZmluaW5nIHRoZSBzdHJ1Y3R1cmVzIG9yIGNvbnN0YW50cyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIGFkZHJlc3MgaW5mb3JtYXRpb24uIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBgaWZhZGRybXNnYCwgb3IgcGVyaGFwcyBzb21lIGtleSBmbGFnIGRlZmluaXRpb25zIHRoYXQgZ292ZXJuIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gcXVpY2tseSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHJlbGF0ZSB0byBhZGRyZXNzIGZhbWlsaWVzLCBhZGRyZXNzIGxlbmd0aHMsIGFuZCBhdHRyaWJ1dGUgY29kZXMuIEknbSBhbnRpY2lwYXRpbmcgcG9zc2libHkgc2VlaW5nIHNvbWUgZW51bXMuIEFueXRoaW5nIHRoYXQgZGljdGF0ZXMgdGhlIGZvcm1hdCBvciBwcm9wZXJ0aWVzIG9mIG5ldHdvcmsgYWRkcmVzc2VzIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGluaXRpYWxseS4gSSdtIGtlZW4gdG8gZW5zdXJlIGl0J3MgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoxMi4wNDM4MDk0MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfVUFQSV9fTElOVVhfSUZfQUREUl9IXFxuICAgMzpcXHQjZGVmaW5lIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgaWZhZGRybXNnIHtcXG4gICA5OlxcdFxcdF9fdThcXHRcXHRpZmFfZmFtaWx5O1xcbiAgMTA6XFx0XFx0X191OFxcdFxcdGlmYV9wcmVmaXhsZW47XFx0LyogVGhlIHByZWZpeCBsZW5ndGhcXHRcXHQqL1xcbiAgMTE6XFx0XFx0X191OFxcdFxcdGlmYV9mbGFncztcXHQvKiBGbGFnc1xcdFxcdFxcdCovXFxuICAxMjpcXHRcXHRfX3U4XFx0XFx0aWZhX3Njb3BlO1xcdC8qIEFkZHJlc3Mgc2NvcGVcXHRcXHQqL1xcbiAgMTM6XFx0XFx0X191MzJcXHRcXHRpZmFfaW5kZXg7XFx0LyogTGluayBpbmRleFxcdFxcdFxcdCovXFxuICAxNDpcXHR9O1xcbiAgMTU6XFx0XFxuICAxNjpcXHQvKlxcbiAgMTc6XFx0ICogSW1wb3J0YW50IGNvbW1lbnQ6XFxuICAxODpcXHQgKiBJRkFfQUREUkVTUyBpcyBwcmVmaXggYWRkcmVzcywgcmF0aGVyIHRoYW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MuXFxuICAxOTpcXHQgKiBJdCBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciBub3JtYWxseSBjb25maWd1cmVkIGJyb2FkY2FzdCBpbnRlcmZhY2VzLFxcbiAgMjA6XFx0ICogYnV0IGZvciBwb2ludC10by1wb2ludCBJRkFfQUREUkVTUyBpcyBERVNUSU5BVElPTiBhZGRyZXNzLFxcbiAgMjE6XFx0ICogbG9jYWwgYWRkcmVzcyBpcyBzdXBwbGllZCBpbiBJRkFfTE9DQUwgYXR0cmlidXRlLlxcbiAgMjI6XFx0ICpcXG4gIDIzOlxcdCAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXFxuICAyNDpcXHQgKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cXG4gIDI1OlxcdCAqL1xcbiAgMjY6XFx0ZW51bSB7XFxuICAyNzpcXHRcXHRJRkFfVU5TUEVDLFxcbiAgMjg6XFx0XFx0SUZBX0FERFJFU1MsXFxuICAyOTpcXHRcXHRJRkFfTE9DQUwsXFxuICAzMDpcXHRcXHRJRkFfTEFCRUwsXFxuICAzMTpcXHRcXHRJRkFfQlJPQURDQVNULFxcbiAgMzI6XFx0XFx0SUZBX0FOWUNBU1QsXFxuICAzMzpcXHRcXHRJRkFfQ0FDSEVJTkZPLFxcbiAgMzQ6XFx0XFx0SUZBX01VTFRJQ0FTVCxcXG4gIDM1OlxcdFxcdElGQV9GTEFHUyxcXG4gIDM2OlxcdFxcdElGQV9SVF9QUklPUklUWSxcXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXFxuICAzNzpcXHRcXHRJRkFfVEFSR0VUX05FVE5TSUQsXFxuICAzODpcXHRcXHRJRkFfUFJPVE8sXFx0XFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cXG4gIDM5OlxcdFxcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbiAgNDA6XFx0XFx0X19JRkFfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoxMi4wNDM5MTQ1NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4NDk1ODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpZmFkZHJtc2dgIFN0cnVjdHVyZSBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGxheW91dCBvZiBgc3RydWN0IGlmYWRkcm1zZ2A6IGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGFuZCBgaWZhX2luZGV4YC4gSXQncyBzdHJhaWdodGZvcndhcmQ7IHRob3NlIGFyZSB0aGUgY29yZSBmaWVsZHMuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIHRvdGFsIHNpemUgb2YgOCBieXRlcyBpcyB3aGF0IEkgZXhwZWN0ZWQsIGFuZCB0aGUgbGFjayBvZiBwYWRkaW5nIGlzIGdvb2Q7IGl0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIGNvbm5lY3QgdGhpcyB0byB0aGUgYHJ0bmxfZmlsbF9tY2FkZHJgIGZ1bmN0aW9uLiBJIHNlZSBob3cgaXQgaW5pdGlhbGl6ZXMgYW4gYGlmYWRkcm1zZ2AgaW5zdGFuY2UgYGlmbWAuIGBBRl9QQUNLRVRgIGZvciB0aGUgZmFtaWx5LCBgMGAgZm9yIHRoZSBwcmVmaXggbGVuZ3RoLi4uIHNlZW1zIHN0YW5kYXJkLiBBaCwgdGhlIGBpZmFfZmxhZ3NgIGZpZWxkIGlzIGEgYnl0ZSwgYW5kIHRoZSAqZnVsbCogdmFsdWUgaXMgc3RvcmVkIGluIGBJRkFfRkxBR1NgLiBHb29kIHRvIGtlZXAgaW4gbWluZC4gU2NvcGUgaXMgc2V0IHRvIGBSVF9TQ09QRV9MSU5LYCwgYW5kIHRoZSBpbmRleCBpcyB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UuIEFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkLCB3aGljaCBpcyBhcyBpdCBzaG91bGQgYmUuXG5cbk9rYXksIG5leHQgcXVlc3Rpb246IHdoYXQncyBnb2luZyBvbiB3aXRoIGBoYS1cdTAwM2VhZGRyYCBhbmQgYGRldi1cdTAwM2VhZGRyX2xlbmA/ICBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAgYW5kIGhvdyB0aGF0IGFkZHJlc3MgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgd2l0aGluIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZS4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgaG93IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoxNS45Mjg4NzQ4MzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzQ5NzUxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGRldl9od19hZGRyIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjM1PXN0cnVjdCBza19idWZmO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjE4LjUwMzg1NTc3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjI2NDUzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRGV2aWNlIEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCdzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDIzNy4gSSdtIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIEknbSBsb29raW5nIGZvciByZWdhcmRpbmcgdGhlIGJhc2ljIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBvciBwZXJoYXBzIHRoZSBpbml0aWFsIHNldHVwIHJvdXRpbmVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGVsZW1lbnRzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzIGZvciBxdWV1ZXMsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciBwb3RlbnRpYWxseSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwb2ludGVycy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6MjIuODI2NTA0NDk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRzdHJ1Y3Qgc2tfYnVmZjtcXG4gMjM2OlxcdFxcbiAyMzc6XFx0c3RydWN0IG5ldGRldl9od19hZGRyIHtcXG4gMjM4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAyMzk6XFx0XFx0c3RydWN0IHJiX25vZGVcXHRcXHRub2RlO1xcbiAyNDA6XFx0XFx0dW5zaWduZWQgY2hhclxcdFxcdGFkZHJbTUFYX0FERFJfTEVOXTtcXG4gMjQxOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR0eXBlO1xcbiAyNDI6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX0xBTlxcdFxcdDFcXG4gMjQzOlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9TQU5cXHRcXHQyXFxuIDI0NDpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVFxcdDNcXG4gMjQ1OlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1RcXHQ0XFxuIDI0NjpcXHRcXHRib29sXFx0XFx0XFx0Z2xvYmFsX3VzZTtcXG4gMjQ3OlxcdFxcdGludFxcdFxcdFxcdHN5bmNfY250O1xcbiAyNDg6XFx0XFx0aW50XFx0XFx0XFx0cmVmY291bnQ7XFxuIDI0OTpcXHRcXHRpbnRcXHRcXHRcXHRzeW5jZWQ7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3VfaGVhZDtcXG4gMjUxOlxcdH07XFxuIDI1MjpcXHRcXG4gMjUzOlxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0IHtcXG4gMjU0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAyNTU6XFx0XFx0aW50XFx0XFx0XFx0Y291bnQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qIEF1eGlsaWFyeSB0cmVlIGZvciBmYXN0ZXIgbG9va3VwIG9uIGFkZGl0aW9uIGFuZCBkZWxldGlvbiAqL1xcbiAyNTg6XFx0XFx0c3RydWN0IHJiX3Jvb3RcXHRcXHR0cmVlO1xcbiAyNTk6XFx0fTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0I2RlZmluZSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KGwpICgobCktXFx1MDAzZWNvdW50KVxcbiAyNjI6XFx0I2RlZmluZSBuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KGwpIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KGwpID09IDApXFxuIDI2MzpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIGwpIFxcXFxcXG4gMjY0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFxcdTAwMjYobCktXFx1MDAzZWxpc3QsIGxpc3QpXFxuIDI2NTpcXHRcXG4gMjY2OlxcdCNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcXHUwMDI2KGRldiktXFx1MDAzZXVjKVxcbiAyNjc6XFx0I2RlZmluZSBuZXRkZXZfdWNfZW1wdHkoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI2ODpcXHQjZGVmaW5lIG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIFxcXFxcXG4gMjY5OlxcdFxcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI3MDpcXHQjZGVmaW5lIG5ldGRldl9mb3JfZWFjaF9zeW5jZWRfdWNfYWRkcihfaGEsIF9kZXYpIFxcXFxcXG4gMjcxOlxcdFxcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKChfaGEpLCAoX2RldikpIFxcXFxcXG4gMjcyOlxcdFxcdFxcdGlmICgoX2hhKS1cXHUwMDNlc3luY19jbnQpXFxuIDI3MzpcXHRcXG4gMjc0OlxcdCNkZWZpbmUgbmV0ZGV2X21jX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcXHUwMDI2KGRldiktXFx1MDAzZW1jKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoyMi44MjcwMDE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzY1Njc5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQWxsb2NhdGlvbiBhbmQgQWRkaXRpb24gb2YgYGhhYCB0byBgZGV2LVx1MDAzZW1jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgYGhhYCB2YXJpYWJsZSBpcyBhbGxvY2F0ZWQgYW5kIHRoZW4gYWRkZWQgdG8gYGRldi1cdTAwM2VtY2AuIFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLCBhbmQgSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gdGhhdCBsaWtlbHkgaGFuZGxlcyB0aGlzIGFkZGluZyBwcm9jZXNzLiBUaGlua2luZyBhYm91dCBuYW1pbmcgY29udmVudGlvbnMsIEknbGwgc3RhcnQgd2l0aCBhIHNlYXJjaCBmb3IgYGRldl9tY19hZGRgLCBvciBhbnl0aGluZyBzaW1pbGFyIHRoYXQgd291bGQgc3VnZ2VzdCBhZGRpbmcgYW4gYWRkcmVzcyB0byB0aGUgbXVsdGljYXN0IGxpc3QgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSB3aXRoaW4gYGRldl9hZGRyX2xpc3RzLmNgLCBpcyBteSBpbml0aWFsIHRhcmdldC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDoyNy45MDM1NzMzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MzM1Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NTM9X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzU6c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3OlxcdHJldHVybiBfX2h3X2FkZHJfYWRkX2V4KGxpc3QsIGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGZhbHNlLCBmYWxzZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cXHRcXHRcXHRcXHQwLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE3LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgodG9fbGlzdCwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuLCBoYS1cXHUwMDNldHlwZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxOS1cXHRcXHRcXHQgICAgICAgZmFsc2UsIHRydWUsIGhhLVxcdTAwM2VzeW5jX2NudCwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njg5OlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzI5PWludCBkZXZfYWRkcl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzM4LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3Mzk6XFx0ZXJyID0gX19od19hZGRyX2FkZChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sIGFkZHJfdHlwZSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXFx0aWYgKCFlcnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5Ni1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc5NzpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04MTU9aW50IGRldl91Y19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODE5LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNldWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MjEtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk3Nz1pbnQgZGV2X21jX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk4MjpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTgzLVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgdHJ1ZSwgZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTctXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5OTg6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjI4LjIyMjkxNDA0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc1OTA4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgX19od19hZGRyX2NyZWF0ZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrIGJldHRlci4gTGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgYF9faHdfYWRkcl9jcmVhdGVgLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gaGFyZHdhcmUgYWRkcmVzcyBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudC4gSSdsbCBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNgLCB0aGF0IGxvY2F0aW9uIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUsIEkgYW50aWNpcGF0ZSB0aGlzIGZpbGUgd2lsbCBoYXZlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdG9yaW5nIGFuZCBtYW5pcHVsYXRpbmcgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgbWFuYWdlcyB0aGUgdW5kZXJseWluZyBkZXRhaWxzIG9mIGNyZWF0aW5nIGFuZCByZWdpc3RlcmluZyB0aGUgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciBuZXR3b3JrIGludGVyZmFjZXMuIFRpbWUgdG8gbG9vayBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDozMC4wOTg4MjQ3MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0fVxcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgc3RydWN0IG5ldGRldl9od19hZGRyKlxcbiAgNTM6XFx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuICA1NDpcXHRcXHRcXHQgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiAgNTc6XFx0XFx0aW50IGFsbG9jX3NpemU7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGFsbG9jX3NpemUgPSBzaXplb2YoKmhhKTtcXG4gIDYwOlxcdFxcdGlmIChhbGxvY19zaXplIFxcdTAwM2MgTDFfQ0FDSEVfQllURVMpXFxuICA2MTpcXHRcXHRcXHRhbGxvY19zaXplID0gTDFfQ0FDSEVfQllURVM7XFxuICA2MjpcXHRcXHRoYSA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuICA2MzpcXHRcXHRpZiAoIWhhKVxcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2NTpcXHRcXHRtZW1jcHkoaGEtXFx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcXG4gIDY2OlxcdFxcdGhhLVxcdTAwM2V0eXBlID0gYWRkcl90eXBlO1xcbiAgNjc6XFx0XFx0aGEtXFx1MDAzZXJlZmNvdW50ID0gMTtcXG4gIDY4OlxcdFxcdGhhLVxcdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xcbiAgNjk6XFx0XFx0aGEtXFx1MDAzZXN5bmNlZCA9IHN5bmMgPyAxIDogMDtcXG4gIDcwOlxcdFxcdGhhLVxcdTAwM2VzeW5jX2NudCA9IDA7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiBoYTtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4gIDc3OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYyxcXG4gIDc4OlxcdFxcdFxcdFxcdCAgICBpbnQgc3luY19jb3VudCwgYm9vbCBleGNsdXNpdmUpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFxcdTAwMjZsaXN0LVxcdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xcbiAgODE6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2UgTUFYX0FERFJfTEVOKVxcbiAgODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHdoaWxlICgqaW5zX3BvaW50KSB7XFxuICA4NzpcXHRcXHRcXHRpbnQgZGlmZjtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0XFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NDozMC4wOTg5NTkzMThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4OTcxODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgd2l0aGluIGBfX2h3X2FkZHJfY3JlYXRlYCwgd2UncmUgdXNpbmcgYG1lbWNweWAgdG8gY29weSBgYWRkcl9sZW5gIGJ5dGVzIGZyb20gdGhlIHNvdXJjZSBgYWRkcmAgaW50byBgaGEtXHUwMDNlYWRkcmAuIFRoZW4sIGluIGBydG5sX2ZpbGxfbWNhZGRyYCB3aGVuIGRlYWxpbmcgd2l0aCBuZXRsaW5rLCB3ZSdyZSB1c2luZyBgbmxhX3B1dGAgdG8gcGxhY2UgdGhlIG11bHRpY2FzdCBhZGRyZXNzLiBTcGVjaWZpY2FsbHksIGBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKWAuIENyaXRpY2FsbHksIGBhZGRyX2xlbmAgZm9yIGBoYWAgaXMgc2V0IHRvIGBkZXYtXHUwMDNlYWRkcl9sZW5gIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgYGhhYCAoY29taW5nIGZyb20gYF9fZGV2X21jX2FkZGAgb3IgYGRldl9tY19hZGRfZXhjbGApLiBTbywgdGhlcmUncyBhICpkaXJlY3QqIGNvcnJlc3BvbmRlbmNlOiB3ZSBjb3B5IHByZWNpc2VseSBgZGV2LVx1MDAzZWFkZHJfbGVuYCBieXRlcyBpbnRvIHRoZSBgaGEtXHUwMDNlYWRkcmAgYnVmZmVyLCBhbmQgd2Ugc2VuZCBleGFjdGx5IGBkZXYtXHUwMDNlYWRkcl9sZW5gIGJ5dGVzIGFzIHRoZSBgSUZBX01VTFRJQ0FTVGAgYXR0cmlidXRlIGluIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIFRoaXMgYXBwZWFycyBjb25zaXN0ZW50LlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGFsd2F5cyB0byBsb29rIGZvciByZWxhdGVkIGNvbnRleHRzIGFuZCBwb3RlbnRpYWwgdmFyaWF0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGR1bXBpbmcgbWVjaGFuaXNtIHdpdGggYHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBuZWVkcyBzY3J1dGlueS4gSSBzZWUgdGhlIHN0cnVjdHVyZSwgd2hpY2ggY29udGFpbnMgYHRndF9uZXRgLCBgbmV0bnNfdHJhY2tlcmAsIGBuZXRuc2lkYCwgYW5kIGBpZmluZGV4YC4gSW4gdGhlIGR1bXBpbmcgcHJvY2VzcyBpdHNlbGYgKGBydG5sX2R1bXBfbWNhZGRyYCksIHdlIGluaXRpYWxpemUgYGZpbHRlcmAgd2l0aCBgdGd0X25ldGAgYW5kIGBuZXRuc2lkYC4gSW50ZXJlc3RpbmcuLi4gQW5kIHRoZSBjb250ZXh0IHByb3ZpZGVkIHRvIHRoZSBjYWxsYmFjayAoYGNiLVx1MDAzZWN0eGApIGFwcGVhcnMgdG8gY29udGFpbiBhbiBgaWZpbmRleGAgYW5kIGFuIGBhZGRyX2lkeGAgZWxlbWVudC5cblxuTm93LCB0aGF0IGBjYi1cdTAwM2VjdHhgIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgbmV0bGluaywgaXNuJ3QgaXQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBuZXRsaW5rIGZyYW1ld29yayB6ZXJvLWluaXRpYWxpemVzIHRoZSBjYWxsYmFjayBjb250ZXh0IHdoZW4gdGhlIGR1bXAgc3RhcnRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBkaXJlY3RseS4gQSBxdWljayB2ZXJpZmljYXRpb24gb2YgaG93IG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHRoaXMgZGV0YWlsIGFuZCBzb2xpZGlmeSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZHVtcGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM1Ljc4ODY4MjQwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyODQ4OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNiLVxcdTAwM2VjdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmM9Mjc9c3RhdGljIHN0cnVjdCBuZXRkZXZfbmxfZHVtcF9jdHggKm5ldGRldl9kdW1wX2N0eChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMwLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MzE6XFx0cmV0dXJuIChzdHJ1Y3QgbmV0ZGV2X25sX2R1bXBfY3R4ICopY2ItXFx1MDAzZWN0eDtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMyLX1cXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM9ODE9bmV0ZGV2X25sX3BhZ2VfcG9vbF9nZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jLTgzLXtcXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jOjg0OlxcdHN0cnVjdCBwYWdlX3Bvb2xfZHVtcF9jYiAqc3RhdGUgPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYy04NS1cXHRjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvID0gZ2VubF9pbmZvX2R1bXAoY2IpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjU0ND1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU1My1cXHRcXHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjU1NDpcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU1NS1cXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0ID0gbmV0O1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDY4Nz1zdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5Ni1cXHRcXHRpbnQgYWRkcl9pZHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDY5NzpcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY5OC1cXHR1bnNpZ25lZCBsb25nIHNfaWZpbmRleDtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTUxNjQ9c3RhdGljIGludCBubG1zZ19wb3B1bGF0ZV9mZGIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTUxNjkte1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUxNzA6XFx0c3RydWN0IG5kb19mZGJfZHVtcF9jb250ZXh0ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTE3MS1cXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMxNj1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMxOC1cXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IE5VTEwsICpjb3BzID0gTlVMTDtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1MzE5OlxcdHN0cnVjdCBuZG9fZmRiX2R1bXBfY29udGV4dCAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMjAtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKmJyX2RldiA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz02NjQ5PXN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NTktXFx0XFx0aW50IHByaXZpZHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjY2MDpcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjY2MS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NjgzMT1zdGF0aWMgaW50IHJ0bmxfbWRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4MzIte1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjY4MzM6XFx0c3RydWN0IHJ0bmxfbWRiX2R1bXBfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjgzNC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY4NjEtXFx0XFx0ICovXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6Njg2MjpcXHRcXHRtZW1zZXQoY2ItXFx1MDAzZWN0eCwgMCwgc2l6ZW9mKGNiLVxcdTAwM2VjdHgpKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy02ODYzLVxcdFxcdGNiLVxcdTAwM2VwcmV2X3NlcSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM1LjkxMTUzNTQxMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTY5NjAwODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBzcGVjaWZpYyBjb2RlIGNoZWNrLCB0aGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nOlxuXG4qKkRlY29uc3RydWN0aW5nIGBuZXRsaW5rX2R1bXBgIGFuZCBpdHMgQ2FsbGJhY2sqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgY2JgIChsaWtlbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uKSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYG5ldGxpbmtfZHVtcGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jYC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIGBuZXRsaW5rX2R1bXBgLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IEhvdyBpcyB0aGF0IGNhbGxiYWNrIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5IHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZHVtcGluZyBuZXRsaW5rIG1lc3NhZ2VzPyBJcyBpdCBhIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbiBwb2ludGVyPyBJcyBpdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrPyBIZWFwPyBJcyB0aGVyZSBhIHN0cnVjdHVyZSBjb250YWluaW5nIGl0LCBhbmQgaG93IGlzICp0aGF0KiBzdHJ1Y3R1cmUgaGFuZGxlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBob3cgaXQgaXMgdXNlZCBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgYSBub24tdHJpdmlhbCBsaWZldGltZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGxpZmVjeWNsZSB0byBlbnN1cmUgSSBjb21wcmVoZW5kIGl0cyB1c2UsIHBvc3NpYmxlIGxpZmV0aW1lLCBhbmQgYW55IGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJJ20gdHJhY2luZyB0aGUgZGF0YSBmbG93IG9mIHRoYXQgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIGBuZXRsaW5rX2R1bXBgLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhcyB0aGlzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gbmV0bGluayBpcyBpbnZva2VkLiBJIGV4cGVjdCB0aGUgY29kZSB3aWxsIGJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBuZXRsaW5rIHNvY2tldCdzIHN0YXRlLCBzbyBJJ2xsIGtlZXAgdGhhdCBwZXJzcGVjdGl2ZSBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM4Ljg4MTEzOTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzExMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGxpbmtfZHVtcFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRsaW5rL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9OTg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5sa19jYl9tdXRleF9rZXlfc3RyaW5nc1tNQVhfTElOS1MgKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xMzMtXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzNDpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbik7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTEzNS1cXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0xOTA3PXN0YXRpYyBpbnQgbmV0bGlua19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xOTgxLVxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2M9IHNrLVxcdTAwM2Vza19yY3ZidWYgLyAyKSB7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjE5ODI6XFx0XFx0cmV0ID0gbmV0bGlua19kdW1wKHNrLCBmYWxzZSk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTE5ODMtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIyMzE9c3RhdGljIGludCBuZXRsaW5rX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjI1OC1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjI1OTpzdGF0aWMgaW50IG5ldGxpbmtfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbG9ja190YWtlbilcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjI2MC17XFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjM5Mj1pbnQgX19uZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yNDQ1LVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyNDQ2OlxcdHJldCA9IG5ldGxpbmtfZHVtcChzaywgdHJ1ZSk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI0NDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjM4LjkzODQ1NzkyNloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTMyOTczNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRsaW5rIER1bXAgUHJvY2VzcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgX19uZXRsaW5rX2R1bXBfc3RhcnRgIGluIGBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVybmFsIG1lY2hhbmljcyBvZiB0aGUgbmV0bGluayBkdW1waW5nIHByb2Nlc3MuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGluaXRpYXRlcyBhIGR1bXAsIHRoZSBjb250ZXh0IHNldHVwLCBhbmQgdGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIHN0YXJ0IGRpc3NlY3RpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIG5ldGxpbmsgZmFtaWx5IGltcGxlbWVudGF0aW9ucy4gSSdsbCBiZSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBmcm9tIHRoZSB0b3AgZG93biwga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgTmV0bGluayBtZXNzYWdlIHF1ZXVlLCBhbnkgYnVmZmVyIG1hbmFnZW1lbnQgdGhhdCdzIGhhcHBlbmluZywgYW5kIGhvdyB0aGUgZHVtcCdzIHN0YXRlIGlzIGluaXRpYWxpemVkLiBJIGV4cGVjdCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgY29yZSBkdW1wIGxvb3AgYW5kIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggYXJlIHByb2JhYmx5IGNyaXRpY2FsIHRvIHRoaXMgd2hvbGUgb3BlcmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgYWxsIGludGltYXRlbHkgdGllZCB0byBuZXRsaW5rJ3MgYXN5bmNocm9ub3VzIG5hdHVyZSwgc28gSeKAmW0gcmVhbGx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgY29uY3VycmVuY3kgYW5kIGhvdyB0aGUgZHVtcCBpcyBwcm9wZXJseSBzaWduYWxlZCB0byBjb21wbGV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY5MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjQxLjQ3MTQzNDMyMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvYWZfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MjA6XFx0XFx0fVxcbjI0MjE6XFx0XFxuMjQyMjpcXHRcXHRjYiA9IFxcdTAwMjZubGstXFx1MDAzZWNiO1xcbjI0MjM6XFx0XFx0bWVtc2V0KGNiLCAwLCBzaXplb2YoKmNiKSk7XFxuMjQyNDpcXHRcXHRjYi1cXHUwMDNlZHVtcCA9IGNvbnRyb2wtXFx1MDAzZWR1bXA7XFxuMjQyNTpcXHRcXHRjYi1cXHUwMDNlZG9uZSA9IGNvbnRyb2wtXFx1MDAzZWRvbmU7XFxuMjQyNjpcXHRcXHRjYi1cXHUwMDNlbmxoID0gbmxoO1xcbjI0Mjc6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBjb250cm9sLVxcdTAwM2VkYXRhO1xcbjI0Mjg6XFx0XFx0Y2ItXFx1MDAzZW1vZHVsZSA9IGNvbnRyb2wtXFx1MDAzZW1vZHVsZTtcXG4yNDI5OlxcdFxcdGNiLVxcdTAwM2VtaW5fZHVtcF9hbGxvYyA9IGNvbnRyb2wtXFx1MDAzZW1pbl9kdW1wX2FsbG9jO1xcbjI0MzA6XFx0XFx0Y2ItXFx1MDAzZWZsYWdzID0gY29udHJvbC1cXHUwMDNlZmxhZ3M7XFxuMjQzMTpcXHRcXHRjYi1cXHUwMDNlc2tiID0gc2tiO1xcbjI0MzI6XFx0XFxuMjQzMzpcXHRcXHRjYi1cXHUwMDNlc3RyaWN0X2NoZWNrID0gbmxrX3Rlc3RfYml0KFNUUklDVF9DSEssIE5FVExJTktfQ0Ioc2tiKS5zayk7XFxuMjQzNDpcXHRcXG4yNDM1OlxcdFxcdGlmIChjb250cm9sLVxcdTAwM2VzdGFydCkge1xcbjI0MzY6XFx0XFx0XFx0Y2ItXFx1MDAzZWV4dGFjayA9IGNvbnRyb2wtXFx1MDAzZWV4dGFjaztcXG4yNDM3OlxcdFxcdFxcdHJldCA9IGNvbnRyb2wtXFx1MDAzZXN0YXJ0KGNiKTtcXG4yNDM4OlxcdFxcdFxcdGNiLVxcdTAwM2VleHRhY2sgPSBOVUxMO1xcbjI0Mzk6XFx0XFx0XFx0aWYgKHJldClcXG4yNDQwOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3JfcHV0O1xcbjI0NDE6XFx0XFx0fVxcbjI0NDI6XFx0XFxuMjQ0MzpcXHRcXHRXUklURV9PTkNFKG5say1cXHUwMDNlY2JfcnVubmluZywgdHJ1ZSk7XFxuMjQ0NDpcXHRcXHRubGstXFx1MDAzZWR1bXBfZG9uZV9lcnJubyA9IElOVF9NQVg7XFxuMjQ0NTpcXHRcXG4yNDQ2OlxcdFxcdHJldCA9IG5ldGxpbmtfZHVtcChzaywgdHJ1ZSk7XFxuMjQ0NzpcXHRcXG4yNDQ4OlxcdFxcdHNvY2tfcHV0KHNrKTtcXG4yNDQ5OlxcdFxcbjI0NTA6XFx0XFx0aWYgKHJldClcXG4yNDUxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQ1MjpcXHRcXG4yNDUzOlxcdFxcdC8qIFdlIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGEgZHVtcCwgYnkgcmV0dXJuaW5nIC1FSU5UUiB3ZVxcbjI0NTQ6XFx0XFx0ICogc2lnbmFsIG5vdCB0byBzZW5kIEFDSyBldmVuIGlmIGl0IHdhcyByZXF1ZXN0ZWQuXFxuMjQ1NTpcXHRcXHQgKi9cXG4yNDU2OlxcdFxcdHJldHVybiAtRUlOVFI7XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdGVycm9yX3B1dDpcXG4yNDU5OlxcdFxcdG1vZHVsZV9wdXQoY29udHJvbC1cXHUwMDNlbW9kdWxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDQ6NDEuNDcxNjI3NzIxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODkwMDk2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgTXVsdGljYXN0IEFkZHJlc3MgRHVtcGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSd2ZSBleGFtaW5lZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyBjb2RlIGluIGRldGFpbCB0byBlbnN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhZHMgdG8gbGVha3Mgb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgY2ItXHUwMDNlY3R4YCwgdXNlZCBmb3IgdHJhY2tpbmcgdGhlIGR1bXAncyBzdGF0ZSwgaXMgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCwgZW5zdXJpbmcgbm8gZ2FyYmFnZSBkYXRhIGlzIGNhcnJpZWQgb3ZlciBiZXR3ZWVuIGR1bXBzLlxuXG5UaGVuLCBJIHdlbnQgdGhyb3VnaCB0aGUgY29yZSBmdW5jdGlvbiBgcnRubF9maWxsX21jYWRkcmAgbGluZS1ieS1saW5lLiBUaGUgYGlmYWRkcm1zZ2Agc3RydWN0dXJlLCB0aGUgZm91bmRhdGlvbiBvZiB0aGUgbWVzc2FnZSwgaGFzIGFsbCBpdHMgZmllbGRzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGVsaW1pbmF0aW5nIGFueSByaXNrcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgYXJlIHBvcHVsYXRlZCB3aXRoIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgZGlyZWN0IHNjYWxhcnMgb3IgY29waWVzIG9mIGRhdGEgdGhhdCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgKGxpa2UgdGhlIGRldmljZSdzIGhhcmR3YXJlIGFkZHJlc3MpLiBUaGUgYG5sYV9wdXRgIGZ1bmN0aW9ucywgZXNzZW50aWFsIGZvciBpbnNlcnRpbmcgdGhlc2UgYXR0cmlidXRlcyBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZSBhbnkgbmVjZXNzYXJ5IHBhZGRpbmcsIHByZXZlbnRpbmcgdW5pbnRlbmRlZCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLlxuXG5JIGNoZWNrZWQgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCB3aGljaCB2YWxpZGF0ZXMgdGhlIHJlcXVlc3QuIFRoZSBjb2RlIGNhcmVmdWxseSBwYXJzZXMgdGhlIGluY29taW5nIG5ldGxpbmsgbWVzc2FnZSBhbmQgaW5pdGlhbGl6ZXMgbG9jYWwgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBkYXRhLiBUaGUgYHRiYCBhcnJheSwgdXNlZCB0byBob2xkIHBhcnNlZCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlzIHBvcHVsYXRlZCB0aHJvdWdoIHRoZSBgbmxtc2dfcGFyc2VgIGZ1bmN0aW9uIGFuZCBpcyBzYWZlLiBUaGUgYGZpbHRlcmAgc3RydWN0dXJlLCB3aGljaCBkZWZpbmVzIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgZm9yIHRoZSBkdW1wLCBpcyBhbHNvIGNvbnNpc3RlbnRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdW5tZW50aW9uZWQgZmllbGRzLCB3aXRoIGNhcmVmdWwgaGFuZGxpbmcgb2YgdGhlIHBvdGVudGlhbGx5IG5ldG5zLXNwZWNpZmljIGZpbHRlcmluZy5cblxuSW4gdGhlIGBydG5sX2R1bXBfbWNhZGRyYCBmdW5jdGlvbiwgd2hpY2ggb3JjaGVzdHJhdGVzIHRoZSBkdW1wIHByb2Nlc3MsIHRoZSBgZmlsdGVyYCBzdHJ1Y3QgaXMgY29uc2lzdGVudGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGl0ZXJhdGlvbiB0aHJvdWdoIGRldmljZXMgaXMgY2FyZWZ1bGx5IG1hbmFnZWQsIGFsb25nIHdpdGggbmV0bnMgaGFuZGxpbmcuIFRoZSBgY3R4YCB2YXJpYWJsZSAoYSBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBjb250ZXh0KSBoYXMgaXRzIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGNsZWFyZWQsIGFuZCB0aGUgbG9vcCBsb2dpYyBlbnN1cmVzIG5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSByZWFkLlxuXG5NeSBjb21wcmVoZW5zaXZlIHJldmlldyBoYXMgY29uZmlybWVkIHRoYXQ6XG5cbjEuICBBbGwgdmFyaWFibGVzIGludm9sdmVkIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgZWl0aGVyIGRpcmVjdGx5LCB0aHJvdWdoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBvciBieSB0aGUgbmV0bGluayBjb3JlIGZ1bmN0aW9ucy5cbjIuICBObyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgb3IgdW5pbml0aWFsaXplZCBkYXRhIGlzIGV2ZXIgc2VudCB0byB1c2Vyc3BhY2UuXG4zLiAgQ29uZGl0aW9uYWwgYnJhbmNoaW5nIGRvZXMgbm90IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuNC4gIFN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIGFkZXF1YXRlIHRvIGNhdGNoIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMgaW4gdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByaXNrIGlzIHJlbGF0ZWQgdG8gUkNVIGlzc3VlcywgbG9ja2luZyBpc3N1ZXMgb3Igb3V0LW9mLWJvdW5kcyBpbiBkZXZpY2UgdHJhdmVyc2FsLCBhbmQgdGhlc2UgZXJyb3JzIGNhbiBiZSBjYXVnaHQgd2l0aCBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgbm90IGEgY2FuZGlkYXRlIGZvciBLTVNBTi1zcGVjaWZpYyBmdXp6aW5nLiBUaGUgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgcG9zc2libGUgbWVtb3J5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTcsIk91dHB1dFRva2VucyI6MzQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ0OjUzLjM2MTcyNzAxNloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBydG5sX2R1bXBfbWNhZGRyIGFuZCBydG5sX2ZpbGxfbWNhZGRyLlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcXG4xLiBgc3RydWN0IGlmYWRkcm1zZ2AgcGF5bG9hZDogQWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgc3RydWN0IGNvbnRhaW5zIDQgYF9fdThgIGZpZWxkcyBhbmQgMSBgX191MzJgIGZpZWxkIHRvdGFsaW5nIDggYnl0ZXMgd2l0aCB6ZXJvIHBhZGRpbmcgYnl0ZXMuXFxuMi4gTmV0bGluayBhdHRyaWJ1dGVzOiBBbGwgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhcmUgY29uc3RydWN0ZWQgZnJvbSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBuZXRuc2lkYCwgYGhhLVxcdTAwM2VyZWZjb3VudGAsIGBpZmFfZmxhZ3NgLCBhbmQgYGhhLVxcdTAwM2VhZGRyYCBvZiBsZW5ndGggYGRldi1cXHUwMDNlYWRkcl9sZW5gKS5cXG4zLiBMb2NhbCB2YXJpYWJsZXMgYW5kIGZpbHRlcnM6IGBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXJgIGlzIGluaXRpYWxpemVkIHVzaW5nIEMgc3RydWN0IGluaXRpYWxpemF0aW9uLCBgY3R4YCBpcyB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgY29yZSBmcmFtZXdvcmssIGFuZCBhbGwgdmFsaWRhdGlvbiB2YXJpYWJsZXMgYXJlIHNhZmVseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcblxcblNpbmNlIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG5ldGxpbmsgbWVzc2FnZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgUkNVIGxpc3QgdHJhdmVyc2FsLCBib3VuZHMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIHJ0bmxfZHVtcF9tY2FkZHIgYW5kIHJ0bmxfZmlsbF9tY2FkZHIuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxcbjEuIGBzdHJ1Y3QgaWZhZGRybXNnYCBwYXlsb2FkOiBBbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBzdHJ1Y3QgY29udGFpbnMgNCBgX191OGAgZmllbGRzIGFuZCAxIGBfX3UzMmAgZmllbGQgdG90YWxpbmcgOCBieXRlcyB3aXRoIHplcm8gcGFkZGluZyBieXRlcy5cXG4yLiBOZXRsaW5rIGF0dHJpYnV0ZXM6IEFsbCBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcyAoYG5ldG5zaWRgLCBgaGEtXFx1MDAzZXJlZmNvdW50YCwgYGlmYV9mbGFnc2AsIGFuZCBgaGEtXFx1MDAzZWFkZHJgIG9mIGxlbmd0aCBgZGV2LVxcdTAwM2VhZGRyX2xlbmApLlxcbjMuIExvY2FsIHZhcmlhYmxlcyBhbmQgZmlsdGVyczogYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgQyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGBjdHhgIGlzIHplcm9lZCBieSB0aGUgbmV0bGluayBjb3JlIGZyYW1ld29yaywgYW5kIGFsbCB2YWxpZGF0aW9uIHZhcmlhYmxlcyBhcmUgc2FmZWx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuXFxuU2luY2UgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgbmV0bGluayBtZXNzYWdlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggbm8gdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBSQ1UgbGlzdCB0cmF2ZXJzYWwsIGJvdW5kcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow28v7b[1] Phase: Succeeded StartedAt: 2026-09-11 12:45:05 +0000 UTC FinishedAt: 2026-09-11 12:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 12:45:05 +0000 UTC FinishedAt: 2026-09-11 12:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2] Phase: Succeeded StartedAt: 2026-09-11 12:45:05 +0000 UTC FinishedAt: 2026-09-11 16:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 12:45:05 +0000 UTC FinishedAt: 2026-09-11 16:29:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 12:45:05 +0000 UTC FinishedAt: 2026-09-11 12:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 12:45:05 +0000 UTC FinishedAt: 2026-09-11 12:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow28v7b/series-workflow28v7b-convert-artifact-3409420172/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 12:45:15 +0000 UTC FinishedAt: 2026-09-11 13:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 12:45:15 +0000 UTC FinishedAt: 2026-09-11 13:04:17 +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:*d7fa707a-ea0d-405e-a525-9e11cd81be36,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-workflow28v7b/series-workflow28v7b-convert-artifact-3409420172/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": "0dc8545d-933b-46e6-95f5-f672e3f61ac1", "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-workflow28v7b/series-workflow28v7b-build-action-3788924346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 12:45:15 +0000 UTC FinishedAt: 2026-09-11 13:04:06 +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:*d7fa707a-ea0d-405e-a525-9e11cd81be36,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-workflow28v7b/series-workflow28v7b-convert-artifact-3409420172/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": "0dc8545d-933b-46e6-95f5-f672e3f61ac1", "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-workflow28v7b/series-workflow28v7b-build-action-3788924346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 13:04:17 +0000 UTC FinishedAt: 2026-09-11 13:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 13:04:17 +0000 UTC FinishedAt: 2026-09-11 13:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 13:04:17 +0000 UTC FinishedAt: 2026-09-11 13:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 13:04:17 +0000 UTC FinishedAt: 2026-09-11 13:04:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow28v7b/series-workflow28v7b-convert-artifact-2231636427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 13:04:27 +0000 UTC FinishedAt: 2026-09-11 13:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 13:04:27 +0000 UTC FinishedAt: 2026-09-11 13:06:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0dc8545d-933b-46e6-95f5-f672e3f61ac1,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-workflow28v7b/series-workflow28v7b-build-action-3788924346/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-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 13:06:20 +0000 UTC FinishedAt: 2026-09-11 13:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 13:06:20 +0000 UTC FinishedAt: 2026-09-11 13:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 13:06:20 +0000 UTC FinishedAt: 2026-09-11 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 13:06:20 +0000 UTC FinishedAt: 2026-09-11 13:22: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:*d7fa707a-ea0d-405e-a525-9e11cd81be36,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-workflow28v7b/series-workflow28v7b-convert-artifact-2231636427/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": "b2576176-8e69-4565-9e0d-4cc84a705bd0", "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-workflow28v7b/series-workflow28v7b-build-action-813839983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 13:06:20 +0000 UTC FinishedAt: 2026-09-11 13:22:10 +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:*d7fa707a-ea0d-405e-a525-9e11cd81be36,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-workflow28v7b/series-workflow28v7b-convert-artifact-2231636427/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": "b2576176-8e69-4565-9e0d-4cc84a705bd0", "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-workflow28v7b/series-workflow28v7b-build-action-813839983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 13:22:20 +0000 UTC FinishedAt: 2026-09-11 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 13:22:20 +0000 UTC FinishedAt: 2026-09-11 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 13:22:20 +0000 UTC FinishedAt: 2026-09-11 13:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 13:22:20 +0000 UTC FinishedAt: 2026-09-11 13:24:11 +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:*b2576176-8e69-4565-9e0d-4cc84a705bd0,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-workflow28v7b/series-workflow28v7b-build-action-813839983/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-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 16:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 16:29:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0dc8545d-933b-46e6-95f5-f672e3f61ac1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2576176-8e69-4565-9e0d-4cc84a705bd0,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-workflow28v7b/series-workflow28v7b-build-action-3788924346/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-workflow28v7b/series-workflow28v7b-build-action-813839983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 13:24:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 13:24:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow28v7b/series-workflow28v7b-convert-artifact-548728676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 13:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 13:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 13:24:21 +0000 UTC FinishedAt: 2026-09-11 13:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 13:24:42 +0000 UTC FinishedAt: 2026-09-11 16:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28v7b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a96d0d726cd380423ac38e2c28f538db2940a1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"4a7172c7-6e49-4071-b118-e8b7581418b8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 13:24:42 +0000 UTC FinishedAt: 2026-09-11 16:29:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0dc8545d-933b-46e6-95f5-f672e3f61ac1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2576176-8e69-4565-9e0d-4cc84a705bd0,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-workflow28v7b/series-workflow28v7b-build-action-3788924346/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-workflow28v7b/series-workflow28v7b-build-action-813839983/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-workflow28v7b/series-workflow28v7b-convert-artifact-548728676/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,}