Name: series-workflow5r5hz Phase: Succeeded StartedAt: 2026-08-07 20:02:57 +0000 UTC FinishedAt: 2026-08-07 20:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[0] Phase: Succeeded StartedAt: 2026-08-07 20:02:57 +0000 UTC FinishedAt: 2026-08-07 20:06:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 20:02:57 +0000 UTC FinishedAt: 2026-08-07 20:06:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "72d26767-7c32-4273-9b84-e476fcf9e5f4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmppc_get_compat_caps" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IgYW5kIGltcGxlbWVudHMgbmV3IGxvZ2ljIGluIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDowNDoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGUzMDAzYTI0MWQ1YjAuLmU2NTZkMTE3Y2QwYjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiAmIzQzOzY1NjYsOTUgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXG4gXG4mIzQzOzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQU1xuJiM0Mzs6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIChpbi9vdXQpXG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbiYjNDM7XG4mIzQzO0Vycm9ycyBpbmNsdWRlOlxuJiM0MztcbiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICBFRkFVTFQgICBpZiBgYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYGAgY2Fubm90IGJlIHJlYWQgZnJvbSBvclxuJiM0MzsgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4mIzQzOyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhblxuJiM0MzsgICAgICAgICAgIGBgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCwgaWYgdGhlIGBgZmxhZ3NgYCBmaWVsZFxuJiM0MzsgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbiYjNDM7ICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXNcbiYjNDM7ICBFMkJJRyAgICBpZiBgYHNpemVgYCBleGNlZWRzIGBgUEFHRV9TSVpFYGAgKHBhdGhvbG9naWNhbCBpbnB1dCBndWFyZCksXG4mIzQzOyAgICAgICAgICAgb3IgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSBhbmRcbiYjNDM7ICAgICAgICAgICB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8gKG5ldyB1c2Vyc3BhY2Ugb25cbiYjNDM7ICAgICAgICAgICBvbGQga2VybmVsIHdpdGggbm9uLWRlZmF1bHQgZmllbGRzIHNldCk7IGluIHRoZSBsYXR0ZXIgY2FzZVxuJiM0MzsgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYFxuJiM0MzsgICAgICAgICAgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXG4mIzQzOyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXG4mIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbiYjNDM7ICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcbiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXG4mIzQzO3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxuJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbiYjNDM7XG4mIzQzO1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXG4mIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbiYjNDM7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxuJiM0MztcbiYjNDM7OjpcbiYjNDM7XG4mIzQzOyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuJiM0MztcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbiYjNDM7XHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0MzsgIH07XG4mIzQzO1xuJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXG4mIzQzO2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4mIzQzO1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50XG4mIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXG4mIzQzO2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4mIzQzO1xuJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcbiYjNDM7dG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxuJiM0MztcbiYjNDM7LSBJZiBgYHNpemVgYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSxcbiYjNDM7ICBuZXcga2VybmVsKSwgdGhlIGtlcm5lbCB6ZXJvLXBhZHMgdGhlIHVua25vd24gdHJhaWxpbmcgZmllbGRzIGJlZm9yZVxuJiM0MzsgIHJldHVybmluZywgYW5kIHdyaXRlcyBiYWNrIGBgc2l6ZWBgIHVuY2hhbmdlZCBzbyB1c2Vyc3BhY2Uga25vd3MgaG93XG4mIzQzOyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC5cbiYjNDM7LSBJZiBgYHNpemVgYCBlcXVhbHMgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSwgdGhlIHN0cnVjdCBpcyBjb3BpZWRcbiYjNDM7ICB2ZXJiYXRpbS5cbiYjNDM7LSBJZiBgYHNpemVgYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplIChuZXcgdXNlcnNwYWNlLFxuJiM0MzsgIG9sZCBrZXJuZWwpIGFuZCB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgYWxsIHplcm8sIHRoZSBjYWxsXG4mIzQzOyAgc3VjY2VlZHMgYXMgaWYgdGhlIHNpemVzIG1hdGNoZWQuIElmIGFueSB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8sXG4mIzQzOyAgdGhlIGtlcm5lbCByZXR1cm5zIGBgLUUyQklHYGAgYW5kIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50b1xuJiM0MzsgIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS5cbiYjNDM7XG4mIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlXG4mIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uXG4mIzQzO1xuJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHlcbiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWNcbiYjNDM7cHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MztzaWduaWZpY2FudCBiaXQpOlxuJiM0MztcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuJiM0MztcbiYjNDM7Li4gbm90ZTo6XG4mIzQzO1xuJiM0MzsgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbiYjNDM7XG4mIzQzOyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjIpYGBcbiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYwKWBgXG4mIzQzO1xuJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4mIzQzOyAgIHRoYW4gaGFyZGNvZGluZyBiaXQgcG9zaXRpb25zLlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiAmIzQzOzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4mIzQzO1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIge1xuIFx0X191NjRcdGJlaGF2aW91cl9tYXNrO1x0XHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xuIH07XG4gXG4mIzQzOy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xuJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4mIzQzO1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuJiM0MztcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0Mzt9O1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXHQyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuXG4mIzQzOyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYyKVxuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MClcbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLXHRcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXG4gLypcbiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuJiM0MztcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzE6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbiYjNDM7XHRsb25nIHJjID0gLUVJTlZBTDtcbiYjNDM7XHR1MzIgY3B1X3ZlcnNpb24gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG4mIzQzO1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuJiM0MztcdFx0XHRjYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzO1xuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFwmIzM0O2NwdVwmIzM0Oykge1xuJiM0MztcdFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwmIzM0O2NwdS12ZXJzaW9uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3B1X3ZlcnNpb24pKSB7XG4mIzQzO1x0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFjcHVfdmVyc2lvbilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuJiM0MztcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2IuLjJmZTRlYTBjYTRmZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC02OTcsNiAmIzQzOzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcbiYjNDM7XHRcdHIgPSAwO1xuJiM0MztcdFx0aWYgKGh2X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcbiYjNDM7XHRcdFx0ciA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZXN2bV9vZmYoa3ZtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuJiM0MztcdFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XG4mIzQzO1x0XHR1NjQgdXNpemU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLlxuJiM0MztcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0gLUUyQklHO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHVzaXplIFx1MDAzZSBQQUdFX1NJWkUpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuJiM0MztcdFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXG4mIzQzO1x0XHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxuJiM0MztcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbiYjNDM7XHRcdCAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHlcbiYjNDM7XHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4mIzQzO1x0XHQgKiAgIHVzaXplIFx1MDAzZSAga3NpemU6IHN1Y2NlZWQgaWZmIHRyYWlsaW5nIGJ5dGVzIGFyZSB6ZXJvLCBlbHNlIC1FMkJJR1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXG4mIzQzO1x0XHRcdFx0XHQgIGFyZ3AsIHVzaXplKTtcbiYjNDM7XHRcdGlmIChyKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyXG4mIzQzO1x0XHRcdCAqIGtlcm5lbC4gV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzb1xuJiM0MztcdFx0XHQgKiB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsXG4mIzQzO1x0XHRcdCAqIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChyID09IC1FMkJJRylcbiYjNDM7XHRcdFx0XHRpZiAocHV0X3VzZXIoKF9fdTY0KXNpemVvZihob3N0X2NhcHMpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAoX191NjQgX191c2VyICopYXJncCkpXG4mIzQzO1x0XHRcdFx0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoaG9zdF9jYXBzLmZsYWdzKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0gLUVOT1RUWTtcbiYjNDM7XHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZXBvcnQgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBwb3B1bGF0ZWQgYnkgdGhlIGtlcm5lbCxcbiYjNDM7XHRcdCAqIG5vdCB1c2l6ZTogaWYgbmV3IHVzZXJzcGFjZSBwYXNzZWQgYSBsYXJnZXIgc3RydWN0IHdpdGggemVyb1xuJiM0MztcdFx0ICogdHJhaWxpbmcgYnl0ZXMsIHdlIG9ubHkgZmlsbGVkIHNpemVvZihob3N0X2NhcHMpIGJ5dGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRob3N0X2NhcHMuc2l6ZSA9IG1pbl90KHU2NCwgdXNpemUsIHNpemVvZihob3N0X2NhcHMpKTtcbiYjNDM7XHRcdHIgPSBjb3B5X3N0cnVjdF90b191c2VyKGFyZ3AsIHVzaXplLCBcdTAwMjZob3N0X2NhcHMsXG4mIzQzO1x0XHRcdFx0XHRzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRkZWZhdWx0OiB7XG4gXHRcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VhcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbkBAIC0xMzQxLDYgJiM0MzsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcbiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovXG4gI2RlZmluZSBLVk1fQVJNX1NFVF9DT1VOVEVSX09GRlNFVCBfSU9XKEtWTUlPLCAgMHhiNSwgc3RydWN0IGt2bV9hcm1fY291bnRlcl9vZmZzZXQpXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcbiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cbiYjNDM7I2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1x0X0lPKEtWTUlPLCAgMHhiOClcbiBcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cbiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFXHQgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IgYW5kIGltcGxlbWVudHMgbmV3IGxvZ2ljIGluIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMDowNDoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAppbmRleCBlMzAwM2EyNDFkNWIwLi5lNjU2ZDExN2NkMGIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CkBAIC02NTY2LDYgJiM0Mzs2NTY2LDk1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0UKICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXkKICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC4KIAomIzQzOzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0Mzs6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMKJiM0Mzs6QXJjaGl0ZWN0dXJlczogcG93ZXJwYwomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKJiM0MzsKJiM0MztFcnJvcnMgaW5jbHVkZToKJiM0MzsKJiM0MzsgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3IKJiM0MzsgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlCiYjNDM7ICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuCiYjNDM7ICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGQKJiM0MzsgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXAKJiM0MzsgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcwomIzQzOyAgRTJCSUcgICAgaWYgYGBzaXplYGAgZXhjZWVkcyBgYFBBR0VfU0laRWBgIChwYXRob2xvZ2ljYWwgaW5wdXQgZ3VhcmQpLAomIzQzOyAgICAgICAgICAgb3IgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSBhbmQKJiM0MzsgICAgICAgICAgIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybyAobmV3IHVzZXJzcGFjZSBvbgomIzQzOyAgICAgICAgICAgb2xkIGtlcm5lbCB3aXRoIG5vbi1kZWZhdWx0IGZpZWxkcyBzZXQpOyBpbiB0aGUgbGF0dGVyIGNhc2UKJiM0MzsgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYAomIzQzOyAgICAgICAgICAgZmllbGQgc28gdXNlcnNwYWNlIGNhbiByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemUKJiM0MzsgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYAomIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGUKJiM0MzsgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKQomIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmUKJiM0Mzt3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXIKJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS4KJiM0MzsKJiM0MztUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2RlcwomIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24KJiM0MztLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuCiYjNDM7CiYjNDM7OjoKJiM0MzsKJiM0MzsgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHsKJiM0MzsJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCiYjNDM7CV9fdTY0CWZsYWdzOwkJCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi8KJiM0MzsJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwomIzQzOyAgfTsKJiM0MzsKJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvCiYjNDM7YGBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGAgYW5kIHplcm8gdGhlIGBgZmxhZ3NgYCBmaWVsZC4KJiM0MztUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudAomIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlCiYjNDM7ZmllbGQgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlIHdpdGhvdXQgQUJJIGFtYmlndWl0eS4KJiM0MzsKJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGAKJiM0Mzt0byBzdXBwb3J0IGV4dGVuc2libGUgdmVyc2lvbmluZyBhY3Jvc3MgdGhyZWUgY2FzZXM6CiYjNDM7CiYjNDM7LSBJZiBgYHNpemVgYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSwKJiM0MzsgIG5ldyBrZXJuZWwpLCB0aGUga2VybmVsIHplcm8tcGFkcyB0aGUgdW5rbm93biB0cmFpbGluZyBmaWVsZHMgYmVmb3JlCiYjNDM7ICByZXR1cm5pbmcsIGFuZCB3cml0ZXMgYmFjayBgYHNpemVgYCB1bmNoYW5nZWQgc28gdXNlcnNwYWNlIGtub3dzIGhvdwomIzQzOyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC4KJiM0MzstIElmIGBgc2l6ZWBgIGVxdWFscyB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplLCB0aGUgc3RydWN0IGlzIGNvcGllZAomIzQzOyAgdmVyYmF0aW0uCiYjNDM7LSBJZiBgYHNpemVgYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplIChuZXcgdXNlcnNwYWNlLAomIzQzOyAgb2xkIGtlcm5lbCkgYW5kIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBhbGwgemVybywgdGhlIGNhbGwKJiM0MzsgIHN1Y2NlZWRzIGFzIGlmIHRoZSBzaXplcyBtYXRjaGVkLiBJZiBhbnkgdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvLAomIzQzOyAgdGhlIGtlcm5lbCByZXR1cm5zIGBgLUUyQklHYGAgYW5kIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50bwomIzQzOyAgdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplLgomIzQzOwomIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlCiYjNDM7c2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi4KJiM0MzsKJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkKJiM0Mzttb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpYwomIzQzO3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3QKJiM0MztzaWduaWZpY2FudCBiaXQpOgomIzQzOwomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZQomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCAoYml0IDMpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjExIHByb2Nlc3NvciBtb2RlCiYjNDM7CiYjNDM7Li4gbm90ZTo6CiYjNDM7CiYjNDM7ICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3QKJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczoKJiM0MzsKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgJmx0OyZsdDsgNjIpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjEpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjApYGAKJiM0MzsKJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYCZsdDtsaW51eC9rdm0uaCZndDtgYCByYXRoZXIKJiM0MzsgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy4KJiM0MzsKIC4uIF9rdm1fcnVuOgogCiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtMzE5LDYgJiM0MzszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7CiAJYm9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpOwogCWludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pOwogCWludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpOwomIzQzOwlpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaApAQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIgewogCV9fdTY0CWJlaGF2aW91cl9tYXNrOwkJLyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi8KIH07CiAKJiM0MzsvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi8KJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7CiYjNDM7CV9fdTY0CXNpemU7CQkJLyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqLwomIzQzOwlfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwlfX3U2NAljb21wYXRfY2FwYWJpbGl0aWVzOwkvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovCiYjNDM7fTsKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwCTI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy4KJiM0MzsgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5CSgxVUxMICZsdDsmbHQ7IDYyKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAJKDFVTEwgJmx0OyZsdDsgNjEpCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMQkoMVVMTCAmbHQ7Jmx0OyA2MCkKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0sJCShLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExKQogLyoKICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay4KICAqIFRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHZhbHVlcyB1c2VkIGJ5IEhfR0VUX0NQVV9DSEFSQUNURVJJU1RJQ1MuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwppbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKQEAgLTY1MTAsNiAmIzQzOzY1MTAsNjEgQEAgc3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjcHVfdmVyc2lvbikgewomIzQzOwljYXNlIFBWUl9BUkNIXzMxX1AxMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMDA6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDsKJiM0MzsJbG9uZyByYyA9IC1FSU5WQUw7CiYjNDM7CXUzMiBjcHVfdmVyc2lvbiA9IDA7CiYjNDM7CiYjNDM7CWlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHsKJiM0MzsJCWlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7CiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKJiM0MzsJCQljYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzOwomIzQzOwkJCXJjID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAmIzM0O2NwdSYjMzQ7KSB7CiYjNDM7CQkJCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7Y3B1LXZlcnNpb24mIzM0OywKJiM0MzsJCQkJCQkJICAmYW1wO2NwdV92ZXJzaW9uKSkgewomIzQzOwkJCQkJb2Zfbm9kZV9wdXQobnApOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFjcHVfdmVyc2lvbikKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkJCSAgICAmYW1wO2NhcGFiaWxpdGllcyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaG9zdF9jYXBzLSZndDtjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzICZhbXA7IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsCiAJLnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LApAQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0gewogCS5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsCiAJLmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LAogCS5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LAomIzQzOwkuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcywKIH07CiAKIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggMDAzMDIzOTlmYzM3Yi4uMmZlNGVhMGNhNGZmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTY5Nyw2ICYjNDM7Njk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJCQl9CiAJCX0KIAkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpCiYjNDM7CWNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6CiYjNDM7CQlyID0gMDsKJiM0MzsJCWlmIChodl9lbmFibGVkICZhbXA7JmFtcDsga3ZtaHZfb25fcHNlcmllcygpKQomIzQzOwkJCXIgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovCiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7c3ZtX29mZihrdm0pOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6IHsKJiM0MzsJCXN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9OwomIzQzOwkJdTY0IHVzaXplOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLgomIzQzOwkJICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LgomIzQzOwkJICovCiYjNDM7CQlyID0gLUVGQVVMVDsKJiM0MzsJCWlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJciA9IC1FMkJJRzsKJiM0MzsJCWlmICh1bmxpa2VseSh1c2l6ZSAmZ3Q7IFBBR0VfU0laRSkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbAomIzQzOwkJICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkCiYjNDM7CQkgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbAomIzQzOwkJICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy4KJiM0MzsJCSAqLwomIzQzOwkJciA9IC1FSU5WQUw7CiYjNDM7CQlpZiAodXNpemUgJmx0OyBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OgomIzQzOwkJICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weQomIzQzOwkJICogICB1c2l6ZSAmbHQ7ICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpCiYjNDM7CQkgKiAgIHVzaXplICZndDsgIGtzaXplOiBzdWNjZWVkIGlmZiB0cmFpbGluZyBieXRlcyBhcmUgemVybywgZWxzZSAtRTJCSUcKJiM0MzsJCSAqLwomIzQzOwkJciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcigmYW1wO2hvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksCiYjNDM7CQkJCQkgIGFyZ3AsIHVzaXplKTsKJiM0MzsJCWlmIChyKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlcgomIzQzOwkJCSAqIGtlcm5lbC4gV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbwomIzQzOwkJCSAqIHVzZXJzcGFjZSBrbm93cyB3aGljaCBvbGRlciBzdHJ1Y3QgdG8gcmV0cnkgd2l0aCwKJiM0MzsJCQkgKiB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHIgPT0gLUUyQklHKQomIzQzOwkJCQlpZiAocHV0X3VzZXIoKF9fdTY0KXNpemVvZihob3N0X2NhcHMpLAomIzQzOwkJCQkJICAgICAoX191NjQgX191c2VyICopYXJncCkpCiYjNDM7CQkJCQlyID0gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKGhvc3RfY2Fwcy5mbGFncykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSAtRU5PVFRZOwomIzQzOwkJaWYgKCFrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwsCiYjNDM7CQkgKiBub3QgdXNpemU6IGlmIG5ldyB1c2Vyc3BhY2UgcGFzc2VkIGEgbGFyZ2VyIHN0cnVjdCB3aXRoIHplcm8KJiM0MzsJCSAqIHRyYWlsaW5nIGJ5dGVzLCB3ZSBvbmx5IGZpbGxlZCBzaXplb2YoaG9zdF9jYXBzKSBieXRlcy4KJiM0MzsJCSAqLwomIzQzOwkJaG9zdF9jYXBzLnNpemUgPSBtaW5fdCh1NjQsIHVzaXplLCBzaXplb2YoaG9zdF9jYXBzKSk7CiYjNDM7CQlyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgJmFtcDtob3N0X2NhcHMsCiYjNDM7CQkJCQlzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCWRlZmF1bHQ6IHsKIAkJc3RydWN0IGt2bSAqa3ZtID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwogCQlyID0ga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaApAQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgewogI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDkKJiM0MzsjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MAogCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewogCV9fdTMyIGlycWNoaXA7CkBAIC0xMzQxLDYgJiM0MzsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHsKIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfQ09VTlRFUl9PRkZTRVQgKi8KICNkZWZpbmUgS1ZNX0FSTV9TRVRfQ09VTlRFUl9PRkZTRVQgX0lPVyhLVk1JTywgIDB4YjUsIHN0cnVjdCBrdm1fYXJtX2NvdW50ZXJfb2Zmc2V0KQogI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSkKJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqLwomIzQzOyNkZWZpbmUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMJX0lPKEtWTUlPLCAgMHhiOCkKIAogLyogaW9jdGwgZm9yIHZtIGZkICovCiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFCSAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgaW9jdGwgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQmIzM5O3MgYWRkZWQgdG8gS1ZNIG9uIFBvd2VyUEMsIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVk0gZmlsZSBkZXNjcmlwdG9yLiBUaGUgaW9jdGwgZXhwZWN0cyBhIGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2AgcG9pbnRlci4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiDigJMgaXQgbGl2ZXMgd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCwgd2hpY2ggY2FsbHMgYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpYC4gQW5kIGBnZXRfY29tcGF0X2NhcHNgIGlzIHRoZW4gZGVmaW5lZCBhcyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2Agd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBmdXp6YWJsZS4gQSBuZXcgaW9jdGwgaW4gS1ZNLCBzcGVjaWZpY2FsbHkgZm9yIFBvd2VyUEMuLi4gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBPa2F5LCBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLCBhcyB3ZSBjYW4gY29tcGlsZSBmb3IgUG93ZXJQQy4gQW5kLCB3YWl0LCBTeXprYWxsZXIgc3VwcG9ydHMgUG93ZXJQQyAocHBjNjRsZSksIHNvIHRoYXQmIzM5O3MgYSBiaWcgZ3JlZW4gZmxhZy4KClRoZSBpb2N0bCBpcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBjb3JlIEtWTSBsb2dpYyBmb3IgUG93ZXJQQy4gTm93LCBsZXQgbWUgc2VlLi4uIEl0JiMzOTtzIGRlZmluZWQgYXMgYF9JTyhLVk1JTywgMHhiOClgLiBIbW0sIGJ1dCBpdCB0YWtlcyBhbiBhcmd1bWVudCwgZG9lc24mIzM5O3QgaXQ/IFJpZ2h0LiBgX0lPYCBkb2VzbiYjMzk7dCBlbmNvZGUgdGhlIHNpemUsIGJ1dCB0aGUgY29kZSBkb2VzIHVzZSBgYXJncGAgYXMgYSBwb2ludGVyLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gTmVlZCB0byBleGFtaW5lIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gUmlnaHQsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIGlzIGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAsIHdoaWNoIGltcGxpZXMgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC4gVGltZSB0byBjaGVjayBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IHRvIGJ1aWxkIGFuIGVudmlyb25tZW50IHdoZXJlIHRoaXMgaXMgZXhwb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gb24gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBLVk1fQk9PSzNTXzY0X0hWYCBmZWF0dXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yeS4gVGhhdCB3b3VsZCBiZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgZGVmaW5pdGlvbiBmb3IgYEtWTV9CT09LM1NfNjRfSFZgIHdpbGwgcmVzaWRlIHRoZXJlLCBhbG9uZyB3aXRoIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQuIEtub3dpbmcgdGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBvciBtb2RpZnlpbmcgdGhlIEtWTSBzZXR1cCBvbiB0aGlzIHBsYXRmb3JtIGFuZCBJIHdpbGwgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzg6XHRcbiAgNzk6XHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4gIDgxOlx0XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXHUwMDI2XHUwMDI2IFBQQ19QT1dFUk5WXG4gIDgyOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MzpcdFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXG4gIDg0Olx0XHRzZWxlY3QgQ01BXG4gIDg1Olx0XHRoZWxwXG4gIDg2Olx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXG4gIDg3Olx0XHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxuICA4ODpcdFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxuICA4OTpcdFxuICA5MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuICA5MTpcdFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcbiAgOTI6XHRcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxuICA5MzpcdFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXG4gIDk0Olx0XHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyBMb2dpYyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGBLVk1fQk9PSzNTXzY0X0hWYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBoaW5nZXMgb24gYm90aCBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCBnb3QgaXQuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgc3BlY2lmaWMgaW9jdGwgaW1wbGVtZW50YXRpb24uIEFoYSwgdGhlIGlvY3RsIGluIHF1ZXN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBga3ZtX29wc19odmAsIHdoaWNoLCBuYXR1cmFsbHksIGlzIHRpZWQgdG8gYEtWTV9CT09LM1NfNjRfSFZgLgoKTm93LCBJJiMzOTttIGN1cmlvdXMuIERvZXMgYEtWTV9CT09LM1NfNjRfUFJgIGltcGxlbWVudCBpdCBhcyB3ZWxsPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkuIE5vcGUuIE9ubHkgYGt2bV9vcHNfaHZgIGlzIGRlZmluaW5nIGAuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFNvLCB0aGUgYm90dG9tIGxpbmUgaXMgdGhhdCB3ZSBuZWVkIGJvdGggYEtWTV9CT09LM1NfNjRfSFZgIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgS1ZNYCBlbmFibGVkLgoKVGhlIGlvY3RsIGNvZGUgaXRzZWxmIGlzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoYXTigJlzIHRoZSBrZXkgaGVyZS4gTm93LCB0aGUgZnVuY3Rpb24gSSBzaG91bGQgZm9jdXMgb24gaXMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCBidXQgSeKAmWxsIGFsc28gbmVlZCB0byBpbnZlc3RpZ2F0ZSBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gQWxzbywgZG9uJiMzOTt0IGZvcmdldCB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgd2hhdCBhY3R1YWxseSBoYW5kbGVzIHRoZSBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLgoKTm93LCBsZXQgbWUgY2hlY2sgd2hlcmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBsb2NhdGVkLiBSaWdodCwgYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTIwMDY9c3RhdGljIGludCBrdm1fdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMTUtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoyMDE2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMTcte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jPTE2OT1zdGF0aWMgaW50IGt2bV92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtMTc4LVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM6MTc5OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTE4MC17XG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmM9OTgxPWludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmMtOTg2LVxuYXJjaC9taXBzL2t2bS9taXBzLmM6OTg3OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTk4OC17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MTI0PXN0YXRpYyB2b2lkIGt2bXBwY19pcnFfYnlwYXNzX2RlbF9wcm9kdWNlcl9odihzdHJ1Y3QgaXJxX2J5cGFzc19jb25zdW1lciAqY29ucyxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNDQtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYxNDU6c3RhdGljIGludCBrdm1fYXJjaF92bV9pb2N0bF9odihzdHJ1Y3QgZmlsZSAqZmlscCxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE0Ni1cdFx0XHRcdHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTY4PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU5NS1cdC5mYXN0X3ZjcHVfa2ljayA9IGt2bXBwY19mYXN0X3ZjcHVfa2lja19odixcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU5NjpcdC5hcmNoX3ZtX2lvY3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX2h2LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTk3LVx0LmhjYWxsX2ltcGxlbWVudGVkID0ga3ZtcHBjX2hjYWxsX2ltcGxfaHYsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0yMDI2PXN0YXRpYyBpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdF9wcih2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMjAzOC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MjAzOTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX3ByKHN0cnVjdCBmaWxlICpmaWxwLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDQwLVx0XHRcdFx0dW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTIwNDU9c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfcHIgPSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDcyLVx0LmZhc3RfdmNwdV9raWNrID0ga3ZtX3ZjcHVfa2ljayxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MjA3MzpcdC5hcmNoX3ZtX2lvY3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX3ByLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDc0LSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIyOTQ9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NwdV9jaGFyKHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyICpjcClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMzYyLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjM2MzppbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMzY0LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92bS5jPTIxNT1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbi0tXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTI2Ny1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmM6MjY4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMjY5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI1OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI2LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzI0NT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI1Ny1cbmFyY2gveDg2L2t2bS94ODYuYzo3MjU4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gveDg2L2t2bS94ODYuYy03MjU5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU5ND1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1OTUtXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNTk2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU5Ny1sb25nIGt2bV9hcmNoX3ZtX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE0OD1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MzgwLVx0ZGVmYXVsdDpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM4MTpcdFx0ciA9IGt2bV9hcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xudmlydC9rdm0va3ZtX21haW4uYy01MzgyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTcwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBQQyBDb21wYXQgQ2FwYWJpbGl0aWVzIElPQ1RMKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLiBJdCYjMzk7cyBiZWVuIGFkZGVkIGludG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCB3aXRoaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gU3RyYWlnaHRmb3J3YXJkOyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZ29vZC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbiBhIGZldyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gT2YgY291cnNlLCB0aGVyZSYjMzk7cyBga3ZtX2FyY2hfdm1faW9jdGxgIGl0c2VsZiwgYnV0IHRoYXQmIzM5O3MgYSBwcmV0dHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbi4gV2VsbCwgd2FpdCwgbm8sIGl0JiMzOTtzICpub3QqIGEgaG90LXBhdGggZnVuY3Rpb24sIGl0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIuIEl0JiMzOTtzIGEgbGFyZ2UgZnVuY3Rpb24sIGJ1dCBteSBmb2N1cyBzaG91bGQgcmVtYWluIG9uIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgZm9yIG5vdy4KCkxldCBtZSBtb3ZlIG9uIHRvIGV4YW1pbmluZyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUxMz1zdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTMyLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTMzOnN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTM0LXtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1Njg9c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjA5LVx0LmNyZWF0ZV92bV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnNfaHYsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2MTA6XHQuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcyxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjYxMS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM3NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBob3N0IGhhcmR3YXJlIG9uIFBvd2VyUEMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGRldGVybWluZXMgd2hpY2ggZmVhdHVyZXMgdGhlIGd1ZXN0IGlzIGFsbG93ZWQgdG8gdXNlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgZ3Vlc3QmIzM5O3MgdmlldyBvZiB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIHRoZSBob3N0JiMzOTtzIGFjdHVhbCBjYXBhYmlsaXRpZXMsIHRha2luZyBpbnRvIGFjY291bnQgYW55IGxpbWl0YXRpb25zIGltcG9zZWQgYnkgdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LCBtYWtpbmcgc3VyZSB0aGUgZ3Vlc3QgZG9lc24mIzM5O3QgdHJ5IHRvIGFjY2VzcyBhbnl0aGluZyBpdCBzaG91bGRuJiMzOTt0LCBvciB1dGlsaXplIGEgZmVhdHVyZSBpbiBhIHdheSB0aGF0IHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW0gb3IgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gYGt2bV9wcGNfdmNwdWAsIGBrdm1fcHBjX3ByYCwgYW5kIGBrdm1fcHBjX2Jvb2szc182NGAgYXJlIHByb2JhYmx5IGludm9sdmVkLCBhbG9uZ3NpZGUgc29tZSBiaXRmaWVsZHMgcmVwcmVzZW50aW5nIHRoZSBndWVzdCYjMzk7cyBmZWF0dXJlIHNldCBhbmQgdGhlIGhvc3QmIzM5O3Mgc3VwcG9ydC4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyBmb3IgQ1BVSUQgYml0cywgTVNScywgYW5kIG90aGVyIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXMuCiogICBIb3cgZG9lcyBpdCBoYW5kbGUgZmVhdHVyZSB0cmFuc2xhdGlvbiBvciBlbXVsYXRpb24/IERvZXMgaXQgc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGUgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBob3N0JiMzOTtzIGNhcGFiaWxpdGllcywgb3IgZG9lcyBpdCBhY3RpdmVseSByZXdyaXRlIGluc3RydWN0aW9uIHNlcXVlbmNlcyBvciBkYXRhIHN0cnVjdHVyZXMgb24gdGhlIGZseT8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/CiogICBIb3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIG51YW5jZXMgb2YgZGlmZmVyZW50IFBvd2VyUEMgYXJjaGl0ZWN0dXJlcyBhbmQgbW9kZWxzPyBXZSBoYXZlIGV2ZXJ5dGhpbmcgZnJvbSBCb29rM1MgdG8gb2xkZXIgcGxhdGZvcm1zLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBjb250YWlucyBhIGxvdCBvZiBjb25kaXRpb25hbCBsb2dpYywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNoZWNrcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGhhcmR3YXJlIHJldmlzaW9uIGRldGVjdGlvbi4KKiAgIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gaG93IHRoaXMgZnVuY3Rpb24gd29ya3M/IEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgZm9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byBpbXByb3BlciBjYXBhYmlsaXR5IG1hcHBpbmcuCiogICBBcmUgdGhlcmUgYW55IGNvbXBhdGliaWxpdHkgb3B0aW9ucyBhdCB0aGUgUUVNVSBsZXZlbCB3aGljaCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgYXQgdGhlIHBvaW50IG9mIHZpcnR1YWxpemF0aW9uPwoKTGV0JiMzOTtzIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGwgZ3JhcGggYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBJIG5lZWQgdG8gc2VlIHRoaXMgZnVuY3Rpb24gYXQgd29yayB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY0OTA9c3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTItXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1MTM6c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTE0LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTU0LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NTU6XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NTYtXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Y2FwYWJpbGl0aWVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUG93ZXJQQyBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG5ldyBjb2RlIHJlbGF0ZWQgdG8gUG93ZXJQQyBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZCBhcmUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gSG1tLCB3YWl0LCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBpbmxpbmVkPyBMZXQgbWUgc2VlLi4uIEl0JiMzOTtzIG9ubHkgY2FsbGVkIG9uY2UsIHJpZ2h0IHdpdGhpbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEFoLCBidXQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGl0c2VsZiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGAuZ2V0X2NvbXBhdF9jYXBzYCwgd2hpY2ggbWVhbnMgaXQgbGlrZWx5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBTbywgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KCk5vdywgd2hlcmUgaXMgdGhpcyBhbGwgYmVpbmcgY2FsbGVkIGZyb20/IFJpZ2h0LCBga3ZtX2FyY2hfdm1faW9jdGxgIGhhbmRsZXMgdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0JiMzOTtzIGEgcHJldHR5IGJpZyBmdW5jdGlvbiwgYnV0IHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbG9jYWxpemVkIHdpdGhpbiB0aGUgYGNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6YCBibG9jay4gU28gaXQmIzM5O3Mgc3RpbGwgZmluZSB0byBqdXN0IGZvY3VzIG9uIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KCk9rYXksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkPyBBaCwgeWVzLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZC4gSXQmIzM5O3Mgbm93IHJldHVybmluZyAxIGZvciBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgYEtWTWAgYW5kIGBLVk1fQk9PSzNTXzY0X0hWYCwgb2J2aW91c2x5LiBXYWl0LCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSBpdCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTI5PWNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz00NT1jb25maWcgS1ZNX0JPT0szU18zMlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS1ZNX0JPT0szU182NF9IViBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgS1ZNX0JPT0szU182NF9IVmAg4oCTIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7ZG9lcyB0aGlzIHBhcnRpY3VsYXIgS1ZNIGNvbmZpZ3VyYXRpb24gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgYFBQQ19QT1dFUk5WYD8mIzM0OyBLbm93aW5nIHRoZSBudWFuY2VzIG9mIHRoZXNlIFBvd2VyUEMtYmFzZWQgS1ZNIGVudmlyb25tZW50cywgaXQmIzM5O3MgY3J1Y2lhbCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVzZSBhcmUgdGlnaHRseSBjb3VwbGVkLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyBvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJpc2luZyBmcm9tIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcywgYW5kIGlmIGFueSBmdXJ0aGVyIHJlc2VhcmNoIG9yIHRlc3RpbmcgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3OTpcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4gIDgwOlx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiAgODE6XHRcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NCBcdTAwMjZcdTAwMjYgUFBDX1BPV0VSTlZcbiAgODI6XHRcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG4gIDgzOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcbiAgODQ6XHRcdHNlbGVjdCBDTUFcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cbiAgODc6XHRcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXG4gIDg4Olx0XHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzgxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIGl0IGhpbmdlcyBvbiBhIGNvdXBsZSBvZiBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIHNldDogYEtWTWAsIGBLVk1fQk9PSzNTXzY0YCwgYFBQQ19QT1dFUk5WYCwgYW5kIGBLVk1fQk9PSzNTXzY0X0hWYC4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYFBQQ19QT1dFUk5WYCBpcyBhY3R1YWxseSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gSSBkb24mIzM5O3Qgd2FudCB0byBjaGFzZSBhIGRlYWQgZW5kLCBzbyB2ZXJpZnlpbmcgdGhhdCByaWdodCBub3cgd2lsbCBwcmV2ZW50IGRvd25zdHJlYW0gaXNzdWVzLiBJJiMzOTtsbCBnZXQgb24gdGhhdCBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19QT1dFUk5WJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFBQQzY0IFx1MDAyNlx1MDAyNiBQUENfQk9PSzNTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTcxCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDQ3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBhIE5ldyBLVk0gaW9jdGw6IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgeWVzLCBgUFBDX1BPV0VSTlZgIGxvb2tzIGxpa2UgYSB2YWxpZCBjb25maWd1cmF0aW9uLiBBbmQsIHdhaXQsIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyB0cmlzdGF0ZSwgbWVhbmluZyBpdCAqY2FuKiBiZSBidWlsdCBhcyBhIG1vZHVsZSwgZXhjZWxsZW50ISBUaGF0IG1lYW5zIFN5emthbGxlciBjYW4gZnV6eiBpdC4KClJpZ2h0LCB0aGUgaW9jdGwgaW4gcXVlc3Rpb24gaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgY2xlYXJseSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIE5vdywgYSBxdWljayB0aG91Z2h0IOKAkyBpcyBpdCB3b3J0aCBhZGRpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYD8gSXTigJlzIGEgZmFpcmx5IGxhcmdlIGZ1bmN0aW9uLCBidXQgdGhlIHNwZWNpZmljIGNhc2Ugd2UgY2FyZSBhYm91dCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgKmlzKiBuZXcuIEhtbW0sIHNpbmNlIGl0JiMzOTtzIGdlbmVyaWMsIGJldHRlciB0byBhdm9pZCBpdC4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gc2tldyB0aGUgZnV6emluZyB0b3dhcmRzIGFsbCBWTSBpb2N0bHMuCgpXYWl0LCBvbiBzZWNvbmQgdGhvdWdodCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIEkmIzM5O2xsIGp1c3QgYWRkIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2suIEFueXRoaW5nIGVsc2UgbW9kaWZpZWQ/IFl1cCwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGlzIGFsc28gdG91Y2hlZC4gVGhhdCYjMzk7cyBmaW5lLCBJJiMzOTtsbCBhZGQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLgoKTm93LCB0aW1lIGZvciBhIHF1aWNrIHJldmlldy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgZm9yIFBvd2VyUEMuIEl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiBJIGNhbiBnZXQgc29tZSBncmVhdCBmdXp6aW5nIGNvdmVyYWdlIGhlcmUuCgpUaGUga2V5IGZ1bmN0aW9uIGlzIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KClNvLCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggZ2l2ZXMgdXMgYSBuZXcgd2F5IHRvIGludGVyYWN0IHdpdGggUG93ZXJQQyBLVk0sIHdoaWNoIGlzIGEgYmlnIHdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBQUENfUE9XRVJOViwgS1ZNX0JPT0szU182NF9IVjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0JPT0szU182NCYjMzQ7LAogICAgJiMzNDtQUENfUE9XRVJOViYjMzQ7LAogICAgJiMzNDtLVk1fQk9PSzNTXzY0X0hWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX2dldF9jb21wYXRfY2FwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQsIFBQQ19QT1dFUk5WLCBLVk1fQk9PSzNTXzY0X0hWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMwMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4uLiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbWlzc2luZz8gVGhhdCYjMzk7cyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuLiBPa2F5LCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEZpcnN0LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlaXIgZXhpc3RlbmNlLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYWN0dWFsbHkgcHJlc2VudC4gTmVlZCB0byBydWxlIG91dCBhbnkgc2ltcGxlIG92ZXJzaWdodCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IGlzc3VlcyBsaWtlIGRlcGxveW1lbnQgc2NyaXB0cyBvciBpbmZyYXN0cnVjdHVyZSBwcm9ibGVtcy4gTGV0IG1lIHJ1biBhIHF1aWNrIGNoZWNrLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X0hWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTcyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIG9kZCBiZWhhdmlvci4gVGhlIHRvb2wsIGBzZXQtcmVzdWx0c2AsIGlzIHRlbGxpbmcgbWUgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEtWTSBmb3IgUG93ZXJQQyBkb24mIzM5O3QgZXhpc3QuIEJ1dCBJIGtub3cgdGhleSYjMzk7cmUgdGhlcmUhIEkgY2FuICpzZWUqIHRoZW0gcmlnaHQgaGVyZSBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gSXQmIzM5O3MgYSBiaXQgcGVycGxleGluZy4KCk15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhlIHRvb2wgbWlnaHQgYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBvbmx5IGNoZWNraW5nIHRoZSB4ODZfNjQgY29uZmlncywgd2hpY2ggd291bGQgZXhwbGFpbiB0aGUgZGlzY3JlcGFuY3kuIEJ1dCwgbm8sIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGVudGlyZSBrZXJuZWwgdHJlZSwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGl0LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIHN1cmUuLi4geWVwLCBzdGlsbCB0aGVyZS4KCkhtbS4uLiBQZXJoYXBzIHRoZSB0b29sIG9ubHkgbG9va3MgYXQgYEtjb25maWdgIGZpbGVzIHRoYXQgYXJlICpkaXJlY3RseSogaW5jbHVkZWQgaW4gdGhlIG1haW4gYEtjb25maWdgLiBCdXQgd2FpdCwgYGFyY2gvcG93ZXJwYy9LY29uZmlnYCAqZG9lcyogaW5jbHVkZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlIGVpdGhlciEKCk9rYXksIEkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhlIHRvb2wgbWlnaHQgYmUgdXNpbmcgYSBwcmUtZ2VuZXJhdGVkIGxpc3Qgb2YgY29uZmlncywgYW5kIG1heWJlIHRoYXQgbGlzdCBpcyB4ODZfNjQtY2VudHJpYy4gSW4gYW55IGNhc2UsIGlmIGl0IGNsYWltcyB0aGVzZSBQb3dlclBDIEtWTSBvcHRpb25zIGRvbiYjMzk7dCBleGlzdCwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGVpdGhlciBvbWl0IHRoZW0sIG9yLCBhdCBhIG1pbmltdW0sIG9ubHkgaW5jbHVkZSBgS1ZNYCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuIFRpbWUgdG8gY2hlY2sgaWYgYEtWTWAgaXRzZWxmIGlzIGV2ZW4gZGVmaW5lZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXHRib29sXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O0RldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0h5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgZXhpdCB0aW1pbmdcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXCYjMzQ7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODI2PXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04MjctXG5hcmNoL3g4Ni9LY29uZmlnOjgyODpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTMtXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNDUtXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4tLVxudmlydC9rdm0vS2NvbmZpZy02MS1cbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXG4tLVxudmlydC9rdm0vS2NvbmZpZy02Ny1cbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy03MC1cbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzMtXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XG4tLVxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctOTYtXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOTUKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgdGhlIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgdG9vbCBpcyBjaGVja2luZyBteSBjb25maWd1cmF0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBhbG1vc3QgY2VydGFpbmx5IHg4Nl82NC4gTm8gc3VycHJpc2VzIHRoZXJlLiBSaWdodCwgc28gSSBzZWUgYEtWTV9CT09LM1NfNjRgIGZsYWdnZWQgYXMgYW4gaXNzdWUuIFRoYXQmIzM5O3MgYSBQb3dlclBDLXNwZWNpZmljIHNldHRpbmcsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBnb2luZyB0byBiZSBpbiBhbiB4ODZfNjQga2VybmVsIHRyZWUuIE1ha2VzIHNlbnNlLiBJIGNhbiBjbGVhcmx5IHNpbXBsaWZ5IHRoaXM7IEkmIzM5O2xsIGp1c3Qgc3VwcGx5IGBLVk1gIGFuZCBgS1ZNX0NPTVBBVGAsIG9yIHBlcmhhcHMganVzdCBgS1ZNYC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGdlbmVyYWwgY2FzZS4gSG1tLCBidXQgd2FpdC4gVGhlIHRvb2wgaXMgbm93IGV4cGxpY2l0bHkgZmxhZ2dpbmcgdGhvc2UgY29uZmlncyBhcyBub24tZXhpc3RlbnQgd2l0aGluIHRoZSBrZXJuZWwgdHJlZS4gT2theSwgbGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlOyBgS1ZNYCBzaG91bGQgd29yaywgYW5kIHRoZSByZXN0IHNob3VsZCBiZSBmaWd1cmVkIG91dCBieSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5LiBJIGNhbiBzZWUgd2h5IHRoZSBvdGhlciBjb25maWdzIGFyZSBjYXVzaW5nIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIFZNIGZpbGUgZGVzY3JpcHRvciBhbmQgaW1wbGVtZW50cyBuZXcgbG9naWMgaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX2dldF9jb21wYXRfY2FwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2Agd2hpY2ggdGFrZXMgYSBzdHJ1Y3QgYGt2bV9wcGNfY29tcGF0X2NhcHNgIGZyb20gdXNlcnNwYWNlLCBwb3B1bGF0ZXMgaXQgd2l0aCBob3N0IGNhcGFiaWxpdGllcywgYW5kIGNvcGllcyBpdCBiYWNrLiBUaGUgc3RydWN0IGBob3N0X2NhcHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCB1c2luZyBgPSB7fWAuIFRoZSBrZXJuZWwgdXNlcyB0aGUgc3RhbmRhcmQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgaGVscGVycywgd2hpY2ggc2FmZWx5IGhhbmRsZSBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIHplcm9lcyBhbnkgdHJhaWxpbmcgYnl0ZXMgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3QgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3MsIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBlbnN1cmVzIHRoYXQgb25seSBpbml0aWFsaXplZCBieXRlcyB1cCB0byB0aGUgcmVxdWVzdGVkIHNpemUgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXJzcGFjZSwgY2xlYXJpbmcgYW55IHRyYWlsaW5nIGJ5dGVzIGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGlmIG5lY2Vzc2FyeS4gVGhlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKClgIGZ1bmN0aW9uIG9ubHkgbW9kaWZpZXMgdGhlIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBmaWVsZCB1c2luZyBmdWxseSBpbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgcGFkZGluZyBieXRlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbnZhbGlkIHVzZXIgcG9pbnRlcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWEyZmFjZDBjY2M3MTE1NWEyYTA0ODM1NDIyMzJjZDE4NGY0NWFiOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjA6MDQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKaW5kZXggZTMwMDNhMjQxZDViMC4uZTY1NmQxMTdjZDBiMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdApAQCAtNjU2Niw2ICYjNDM7NjU2Niw5NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFCiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5CiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuCiAKJiM0Mzs0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHBvd2VycGMKJiM0Mzs6VHlwZTogdm0gaW9jdGwKJiM0Mzs6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCiYjNDM7CiYjNDM7RXJyb3JzIGluY2x1ZGU6CiYjNDM7CiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yCiYjNDM7ICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZQomIzQzOyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhbgomIzQzOyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkCiYjNDM7ICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwCiYjNDM7ICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMKJiM0MzsgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGV4Y2VlZHMgYGBQQUdFX1NJWkVgYCAocGF0aG9sb2dpY2FsIGlucHV0IGd1YXJkKSwKJiM0MzsgICAgICAgICAgIG9yIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgYW5kCiYjNDM7ICAgICAgICAgICB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8gKG5ldyB1c2Vyc3BhY2Ugb24KJiM0MzsgICAgICAgICAgIG9sZCBrZXJuZWwgd2l0aCBub24tZGVmYXVsdCBmaWVsZHMgc2V0KTsgaW4gdGhlIGxhdHRlciBjYXNlCiYjNDM7ICAgICAgICAgICB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50byB0aGUgYGBzaXplYGAKJiM0MzsgICAgICAgICAgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplCiYjNDM7ICBFTk9UVFkgICBpZiB0aGUgYmFja2VuZCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBgZ2V0X2NvbXBhdF9jYXBzYGAKJiM0MzsgICAgICAgICAgIG9wZXJhdGlvbiAoZS5nLiwgb24gbm9uLUhWIEtWTSBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhlCiYjNDM7ICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSkKJiM0MzsgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlCiYjNDM7d2hlcmUgYW4gTnRoIGdlbmVyYXRpb24gcHJvY2Vzc29yIGNhbiBvcGVyYXRlIGluIG1vZGVzIGNvbnNpc3RlbnQgd2l0aCBlYXJsaWVyCiYjNDM7Z2VuZXJhdGlvbnMgc3VjaCBhcyAoTi0xKSBhbmQgKE4tMikuCiYjNDM7CiYjNDM7VGhpcyBpb2N0bCBwcm92aWRlcyB1c2Vyc3BhY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ1BVIGNvbXBhdGliaWxpdHkgbW9kZXMKJiM0MztzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaG9zdCBwcm9jZXNzb3IgZm9yIGJvb3RpbmcgdGhlIG5lc3RlZCBLVk0gZ3Vlc3RzIG9uCiYjNDM7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLgomIzQzOwomIzQzOzo6CiYjNDM7CiYjNDM7ICBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7CiYjNDM7CV9fdTY0CXNpemU7CQkJLyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqLwomIzQzOwlfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovCiYjNDM7CV9fdTY0CWNvbXBhdF9jYXBhYmlsaXRpZXM7CS8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi8KJiM0MzsgIH07CiYjNDM7CiYjNDM7QmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0bwomIzQzO2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuCiYjNDM7VGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnQKJiM0Mzt1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZQomIzQzO2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuCiYjNDM7CiYjNDM7VGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgCiYjNDM7dG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOgomIzQzOwomIzQzOy0gSWYgYGBzaXplYGAgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgKG9sZCB1c2Vyc3BhY2UsCiYjNDM7ICBuZXcga2VybmVsKSwgdGhlIGtlcm5lbCB6ZXJvLXBhZHMgdGhlIHVua25vd24gdHJhaWxpbmcgZmllbGRzIGJlZm9yZQomIzQzOyAgcmV0dXJuaW5nLCBhbmQgd3JpdGVzIGJhY2sgYGBzaXplYGAgdW5jaGFuZ2VkIHNvIHVzZXJzcGFjZSBrbm93cyBob3cKJiM0MzsgIG1hbnkgYnl0ZXMgd2VyZSBmaWxsZWQuCiYjNDM7LSBJZiBgYHNpemVgYCBlcXVhbHMgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSwgdGhlIHN0cnVjdCBpcyBjb3BpZWQKJiM0MzsgIHZlcmJhdGltLgomIzQzOy0gSWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSAobmV3IHVzZXJzcGFjZSwKJiM0MzsgIG9sZCBrZXJuZWwpIGFuZCB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgYWxsIHplcm8sIHRoZSBjYWxsCiYjNDM7ICBzdWNjZWVkcyBhcyBpZiB0aGUgc2l6ZXMgbWF0Y2hlZC4gSWYgYW55IHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybywKJiM0MzsgIHRoZSBrZXJuZWwgcmV0dXJucyBgYC1FMkJJR2BgIGFuZCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8KJiM0MzsgIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS4KJiM0MzsKJiM0MztgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZQomIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uCiYjNDM7CiYjNDM7VGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5CiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMKJiM0Mztwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7c2lnbmlmaWNhbnQgYml0KToKJiM0MzsKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlCiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZQomIzQzOwomIzQzOy4uIG5vdGU6OgomIzQzOwomIzQzOyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7ICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6CiYjNDM7CiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMICZsdDsmbHQ7IDYyKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYxKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYwKWBgCiYjNDM7CiYjNDM7ICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGAmbHQ7bGludXgva3ZtLmgmZ3Q7YGAgcmF0aGVyCiYjNDM7ICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuCiYjNDM7CiAuLiBfa3ZtX3J1bjoKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCAwOTUzZjJkYWE0NjYwLi4xNjllYTZhN2ZiYWQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKQEAgLTMxOSw2ICYjNDM7MzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMgewogCWJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTsKIAlpbnQgKCpjcmVhdGVfdm1fZGVidWdmcykoc3RydWN0IGt2bSAqa3ZtKTsKIAlpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTsKJiM0MzsJaW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMDc3YzU0MzdmNTIxOS4uOTEzYTY0YjkwMWEzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDI0IEBAIHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyIHsKIAlfX3U2NAliZWhhdmlvdXJfbWFzazsJCS8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovCiB9OwogCiYjNDM7LyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovCiYjNDM7c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgewomIzQzOwlfX3U2NAlzaXplOwkJCS8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KJiM0MzsJX191NjQJZmxhZ3M7CQkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwomIzQzO307CiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMAkyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuCiYjNDM7ICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOQkoMVVMTCAmbHQ7Jmx0OyA2MikKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwCSgxVUxMICZsdDsmbHQ7IDYxKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEJKDFVTEwgJmx0OyZsdDsgNjApCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLCQkoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFwKJiM0MzsJCQkJCSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFwKJiM0MzsJCQkJCSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSkKIC8qCiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suCiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoY3B1X3ZlcnNpb24pIHsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMV9QMTE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzAwOgomIzQzOwkJKmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwomIzQzOwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7CiYjNDM7CWxvbmcgcmMgPSAtRUlOVkFMOwomIzQzOwl1MzIgY3B1X3ZlcnNpb24gPSAwOwomIzQzOwomIzQzOwlpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7CiYjNDM7CQlpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkgewomIzQzOwkJCVdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7CiYjNDM7CQkJY2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllczsKJiM0MzsJCQlyYyA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgJiMzNDtjcHUmIzM0OykgewomIzQzOwkJCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAmIzM0O2NwdS12ZXJzaW9uJiMzNDssCiYjNDM7CQkJCQkJCSAgJmFtcDtjcHVfdmVyc2lvbikpIHsKJiM0MzsJCQkJCW9mX25vZGVfcHV0KG5wKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwkJCWlmICghY3B1X3ZlcnNpb24pCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCXJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLAomIzQzOwkJCQkJCQkgICAgJmFtcDtjYXBhYmlsaXRpZXMpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWhvc3RfY2Fwcy0mZ3Q7Y29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyAmYW1wOyBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7CiAJLmdldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzX2h2LAogCS5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odiwKQEAgLTY1NTIsNiAmIzQzOzY2MDcsNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuaGFzaF92M19wb3NzaWJsZSA9IGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlLAogCS5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odiwKIAkuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odiwKJiM0MzsJLmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsCiB9OwogCiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDAwMzAyMzk5ZmMzN2IuLjJmZTRlYTBjYTRmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC02OTcsNiAmIzQzOzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCQkJfQogCQl9CiAJCWJyZWFrOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKQomIzQzOwljYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOgomIzQzOwkJciA9IDA7CiYjNDM7CQlpZiAoaHZfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bWh2X29uX3BzZXJpZXMoKSkKJiM0MzsJCQlyID0gMTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqLwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTI0NjMsNiAmIzQzOzI0NzAsNzcgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O3N2bV9vZmYoa3ZtKTsKIAkJYnJlYWs7CiAJfQomIzQzOwljYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTsKJiM0MzsJCXU2NCB1c2l6ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci4KJiM0MzsJCSAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC4KJiM0MzsJCSAqLwomIzQzOwkJciA9IC1FRkFVTFQ7CiYjNDM7CQlpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSAtRTJCSUc7CiYjNDM7CQlpZiAodW5saWtlbHkodXNpemUgJmd0OyBQQUdFX1NJWkUpKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWwKJiM0MzsJCSAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZAomIzQzOwkJICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWwKJiM0MzsJCSAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKHVzaXplICZsdDsgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDoKJiM0MzsJCSAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHkKJiM0MzsJCSAqICAgdXNpemUgJmx0OyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKQomIzQzOwkJICogICB1c2l6ZSAmZ3Q7ICBrc2l6ZTogc3VjY2VlZCBpZmYgdHJhaWxpbmcgYnl0ZXMgYXJlIHplcm8sIGVsc2UgLUUyQklHCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoJmFtcDtob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLAomIzQzOwkJCQkJICBhcmdwLCB1c2l6ZSk7CiYjNDM7CQlpZiAocikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIKJiM0MzsJCQkgKiBrZXJuZWwuIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc28KJiM0MzsJCQkgKiB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsCiYjNDM7CQkJICogdGhlbiBmYWlsIHdpdGggLUUyQklHLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChyID09IC1FMkJJRykKJiM0MzsJCQkJaWYgKHB1dF91c2VyKChfX3U2NClzaXplb2YoaG9zdF9jYXBzKSwKJiM0MzsJCQkJCSAgICAgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKQomIzQzOwkJCQkJciA9IC1FRkFVTFQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvICovCiYjNDM7CQlyID0gLUVJTlZBTDsKJiM0MzsJCWlmIChob3N0X2NhcHMuZmxhZ3MpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlyID0gLUVOT1RUWTsKJiM0MzsJCWlmICgha3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2FwcykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKCZhbXA7aG9zdF9jYXBzKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlcG9ydCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHBvcHVsYXRlZCBieSB0aGUga2VybmVsLAomIzQzOwkJICogbm90IHVzaXplOiBpZiBuZXcgdXNlcnNwYWNlIHBhc3NlZCBhIGxhcmdlciBzdHJ1Y3Qgd2l0aCB6ZXJvCiYjNDM7CQkgKiB0cmFpbGluZyBieXRlcywgd2Ugb25seSBmaWxsZWQgc2l6ZW9mKGhvc3RfY2FwcykgYnl0ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpOwomIzQzOwkJciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsICZhbXA7aG9zdF9jYXBzLAomIzQzOwkJCQkJc2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAlkZWZhdWx0OiB7CiAJCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKIAkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDthcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDQxOTAxMTA5N2ZhOGUuLjcwZTM2ZTZhMGFkNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTAKIAogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKIAlfX3UzMiBpcnFjaGlwOwpAQCAtMTM0MSw2ICYjNDM7MTM0Miw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7CiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovCiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldCkKICNkZWZpbmUgS1ZNX0FSTV9HRVRfUkVHX1dSSVRBQkxFX01BU0tTIF9JT1IoS1ZNSU8sICAweGI2LCBzdHJ1Y3QgcmVnX21hc2tfcmFuZ2UpCiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCV9JTyhLVk1JTywgIDB4YjgpCiAKIC8qIGlvY3RsIGZvciB2bSBmZCAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRQkgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdXNlcnNwYWNlIHByb3ZpZGVzIGEgYGt2bV9wcGNfY29tcGF0X2NhcHNgIHN0cnVjdCwgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaXQsIGFuZCB0aGVuIGNvcGllcyBkYXRhIGJhY2sgdG8gdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRlc2VydmVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuCgpJJiMzOTttIHNlZWluZyBpdCByZWFkcyBhIHNpemUgdmFsdWUgZnJvbSB1c2Vyc3BhY2UsIGRvZXMgc29tZSBzaXplIGNoZWNrcyB0byBoYW5kbGUgb2xkL25ldyB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0IGFuZCB0aGVuIHVzZXMgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgdG8gcmVhZCB0aGUgc3RydWN0IGl0c2VsZi4gSXQgdGhlbiB2YWxpZGF0ZXMgc29tZSBmbGFncywgY2FsbHMgYSBga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2Fwc2AgY2FsbGJhY2ssIGFuZCBmaW5hbGx5IHVzZXMgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHRvIHdyaXRlIHRoZSBwcm9jZXNzZWQgZGF0YSBiYWNrIHRvIHVzZXJzcGFjZS4KCldhaXQgYSBzZWNvbmQuLi4gYGNvcHlfc3RydWN0X3RvX3VzZXJgPyBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIHRoYXQgZnVuY3Rpb24gYmVmb3JlLiBJcyB0aGlzIHNvbWUgbmV3IGhlbHBlcj8gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IHNwcmluZ2luZyB0byBtaW5kIGFzIGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBxdWljayBgZ3JlcGAgdG8gc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3B5X3N0cnVjdF90b191c2VyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjE3PWZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxOC1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjE5OlRoZSBpb2N0bCB1c2VzIGBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgYCBhbmQgYGBjb3B5X3N0cnVjdF90b191c2VyKClgYFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2MjAtdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIzNjM9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1MzktXHRcdGhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpO1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjU0MDpcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1NDEtXHRcdFx0XHRcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcbi0tXG5ibG9jay9ibGstaW50ZWdyaXR5LmM9NTg9aW50IGJsa19nZXRfbWV0YV9jYXAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMTE4LW91dDpcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoxMTk6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXHUwMDI2bWV0YV9jYXAsIHNpemVvZihtZXRhX2NhcCksXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMTIwLVx0XHRcdFx0ICAgTlVMTCk7XG4tLVxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2Rydi5jPTI1PXN0YXRpYyBpbnQgZXRob3N1X2lvY3RsX2Rldl9xdWVyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3VfZHJ2LmMtNDQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3VfZHJ2LmM6NDU6XHRcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHU2NF90b191c2VyX3B0cihhcmdzLVx1MDAzZXBvaW50ZXIpLFxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2Rydi5jLTQ2LVx0XHRcdFx0XHQgICBhcmdzLVx1MDAzZXNpemUsXG4tLVxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvdGVncmEyNDEtY21kcXYuYz0xMjE4PXRlZ3JhMjQxX2NtZHF2X2luaXRfdmludGZfdXNlcihzdHJ1Y3QgYXJtX3ZzbW11ICp2c21tdSxcbi0tXG5kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My90ZWdyYTI0MS1jbWRxdi5jLTEyNjgtXHRkYXRhLm91dF92aW50Zl9tbWFwX29mZnNldCA9IHZpbnRmLVx1MDAzZW1tYXBfb2Zmc2V0O1xuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvdGVncmEyNDEtY21kcXYuYzoxMjY5Olx0cmV0ID0gaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIFx1MDAyNmRhdGEsXG5kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My90ZWdyYTI0MS1jbWRxdi5jLTEyNzAtXHRcdFx0XHRcdElPTU1VX1ZJT01NVV9UWVBFX1RFR1JBMjQxX0NNRFFWLFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTc5MT1zdGF0aWMgaW50IG1vY2tfdmlvbW11X2luaXQoc3RydWN0IGlvbW11ZmRfdmlvbW11ICp2aW9tbXUsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODI0LVx0XHRkYXRhLm91dF9tbWFwX29mZnNldCA9IG1vY2tfdmlvbW11LVx1MDAzZW1tYXBfb2Zmc2V0O1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODI1Olx0XHRyYyA9IGlvbW11X2NvcHlfc3RydWN0X3RvX3VzZXIoXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy04MjYtXHRcdFx0dXNlcl9kYXRhLCBcdTAwMjZkYXRhLCBJT01NVV9WSU9NTVVfVFlQRV9TRUxGVEVTVCwgb3V0X2RhdGEpO1xuLS1cbmZzL2ZpbGVfYXR0ci5jPTM3ND1TWVNDQUxMX0RFRklORTUoZmlsZV9nZXRhdHRyLCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXG4tLVxuZnMvZmlsZV9hdHRyLmMtNDIwLVx0ZmlsZWF0dHJfdG9fZmlsZV9hdHRyKFx1MDAyNmZhLCBcdTAwMjZmYXR0cik7XG5mcy9maWxlX2F0dHIuYzo0MjE6XHRlcnJvciA9IGNvcHlfc3RydWN0X3RvX3VzZXIodWZhdHRyLCB1c2l6ZSwgXHUwMDI2ZmF0dHIsXG5mcy9maWxlX2F0dHIuYy00MjItXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBmaWxlX2F0dHIpLCBOVUxMKTtcbi0tXG5mcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTQ5NS1cdCAqL1xuZnMvcGlkZnMuYzo0OTY6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcih1aW5mbywgdXNpemUsIFx1MDAyNmtpbmZvLCBzaXplb2Yoa2luZm8pLCBOVUxMKTtcbmZzL3BpZGZzLmMtNDk3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg9NTYyPWlvbW11X2NvcHlfc3RydWN0X2Zyb21fZnVsbF91c2VyX2FycmF5KHZvaWQgKmtkc3QsIHNpemVfdCBrZHN0X2VudHJ5X3NpemUsXG4tLVxuaW5jbHVkZS9saW51eC9pb21tdS5oLTU5My0vKipcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo1OTQ6ICogX19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcbmluY2x1ZGUvbGludXgvaW9tbXUuaC01OTUtICogQGRzdF9kYXRhOiBQb2ludGVyIHRvIGEgc3RydWN0IGlvbW11X3VzZXJfZGF0YSBmb3IgdXNlciBzcGFjZSBkYXRhIGxvY2F0aW9uXG4tLVxuaW5jbHVkZS9saW51eC9pb21tdS5oPTYwND1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYwNTpfX2lvbW11X2NvcHlfc3RydWN0X3RvX3VzZXIoY29uc3Qgc3RydWN0IGlvbW11X3VzZXJfZGF0YSAqZHN0X2RhdGEsXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjA2LVx0XHRcdCAgICB2b2lkICpzcmNfZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfdHlwZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjE0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo2MTU6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcihkc3RfZGF0YS1cdTAwM2V1cHRyLCBkc3RfZGF0YS1cdTAwM2VsZW4sIHNyY19kYXRhLFxuaW5jbHVkZS9saW51eC9pb21tdS5oLTYxNi1cdFx0XHRcdCAgIGRhdGFfbGVuLCBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjE5LS8qKlxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYyMDogKiBpb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MjEtICogQHVzZXJfZGF0YTogUG9pbnRlciB0byBhIHN0cnVjdCBpb21tdV91c2VyX2RhdGEgZm9yIHVzZXIgc3BhY2UgZGF0YSBsb2NhdGlvblxuLS1cbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MjgtICovXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg6NjI5OiNkZWZpbmUgaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIGtzcmMsIGRhdGFfdHlwZSwgbWluX2xhc3QpICAgICAgICBcXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYzMDpcdF9faW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIGtzcmMsIGRhdGFfdHlwZSwgc2l6ZW9mKCprc3JjKSwgXFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MzEtXHRcdFx0XHQgICAgb2Zmc2V0b2ZlbmQodHlwZW9mKCprc3JjKSwgbWluX2xhc3QpKVxuLS1cbmluY2x1ZGUvbGludXgvc29ja3B0ci5oPTExMT1jb3B5X3N0cnVjdF90b19zb2NrcHRyKHNvY2twdHJfdCBkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCAqc3JjLFxuLS1cbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTExNC1cdGlmICghc29ja3B0cl9pc19rZXJuZWwoZHN0KSlcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oOjExNTpcdFx0cmV0dXJuIGNvcHlfc3RydWN0X3RvX3VzZXIoZHN0LnVzZXIsIHVzaXplLCBzcmMsIGtzaXplLCBpZ25vcmVkX3RyYWlsaW5nKTtcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTExNi1cbi0tXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaD0zOTM9Y29weV9zdHJ1Y3RfZnJvbV91c2VyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLFxuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTQxNy0vKipcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oOjQxODogKiBjb3B5X3N0cnVjdF90b191c2VyOiBjb3B5IGEgc3RydWN0IHRvIHVzZXJzcGFjZVxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDE5LSAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTQ2NC0gKlxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDY1OiAqICAgICAgZXJyID0gY29weV9zdHJ1Y3RfdG9fdXNlcih1YXJnLCB1c2l6ZSwgXHUwMDI2a2FyZywgc2l6ZW9mKGthcmcpLFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDY2LSAqXHRcdFx0XHQgIFx1MDAyNmlnbm9yZWRfdHJhaWxpbmcpO1xuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTQ4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oOjQ5MDpjb3B5X3N0cnVjdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCAqc3JjLFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDkxLVx0XHQgICAgc2l6ZV90IGtzaXplLCBib29sICppZ25vcmVkX3RyYWlsaW5nKVxuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTUzOD1jb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXIodm9pZCAqZHN0LCBzaXplX3QgZHN0c2l6ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC01NTYtLyoqXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaDo1NTc6ICogVGhpcyBpcyBsaWtlIGNvcHlfc3RydWN0X3RvX3VzZXIoKSwgYnV0IHRoZVxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNTU4LSAqIGRzdCBidWZmZXIgaXMgYSBrZXJuZWwgYm91bmNlIGJ1ZmZlciBpbnN0ZWFkXG4tLVxuaW9fdXJpbmcvcXVlcnkuYz02OT1zdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbi0tXG5pb191cmluZy9xdWVyeS5jLTExNi1cbmlvX3VyaW5nL3F1ZXJ5LmM6MTE3Olx0aWYgKGNvcHlfc3RydWN0X3RvX3VzZXIodWRhdGEsIHVzaXplLCBkYXRhLCBoZHIuc2l6ZSwgTlVMTCkpXG5pb191cmluZy9xdWVyeS5jLTExOC1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM9MTA2MD1TWVNDQUxMX0RFRklORTQoc2NoZWRfZ2V0YXR0ciwgcGlkX3QsIHBpZCwgc3RydWN0IHNjaGVkX2F0dHIgX191c2VyICosIHVhdHRyLFxuLS1cbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTExMDMtXHRrYXR0ci5zaXplID0gbWluKHVzaXplLCBzaXplb2Yoa2F0dHIpKTtcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjExMDQ6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcih1YXR0ciwgdXNpemUsIFx1MDAyNmthdHRyLCBzaXplb2Yoa2F0dHIpLCBOVUxMKTtcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTExMDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsgaW4gS1ZNIFBQQyBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGUgZnVuY3Rpb24gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGZyb20gYGluY2x1ZGUvbGludXgvdWFjY2Vzcy5oYCBpcyBpbnZvbHZlZCwgYW5kIGl0IGhhbmRsZXMgdGhlIHRyYW5zZmVyIG9mIGEgc3RydWN0IGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UsIHRha2luZyBzaXplIGRpZmZlcmVuY2VzIGludG8gYWNjb3VudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGBob3N0X2NhcHNgIGluIHRoaXMgS1ZNIFBQQyBjb250ZXh0LgoKRmlyc3QsIGBob3N0X2NhcHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gKGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtgKS4gIFRoYXQmIzM5O3MgZ29vZCwgbWVhbnMgYWxsIGZpZWxkcyBzdGFydCBjbGVhbi4gVGhlbiwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgY29waWVzIHVzZXItcHJvdmlkZWQgZGF0YSBpbnRvIGBob3N0X2NhcHNgLiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIHNtYWxsZXIgc2l6ZSAoYHVzaXplICZsdDsgc2l6ZW9mKGhvc3RfY2FwcylgKSwgdGhlIHRyYWlsaW5nIGJ5dGVzIG9mIGBob3N0X2NhcHNgIHdpbGwgcmVtYWluIHplcm8sIG9yIHdpbGwgYmUgZXhwbGljaXRseSB6ZXJvZWQgYnkgdGhlIGZ1bmN0aW9uLCB3aGljaCBpcyBmaW5lLgoKTm93LCB0aGUgYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHNgIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBJJiMzOTttIGNoZWNraW5nIGl0IGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gSXQgc2VlbXMgbGlrZSB0aGUgb25seSBmaWVsZCBvZiBgaG9zdF9jYXBzYCBtb2RpZmllZCBpbiB0aGlzIGZ1bmN0aW9uIGlzIGBjb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhlIHJlc3Qgc3RheXMgYXMgaXQgd2FzIGZyb20gdGhlIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNhbGwgKHBvdGVudGlhbGx5IHVzZXItcHJvdmlkZWQgZGF0YSkuCgpDcnVjaWFsbHksIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgICpvdmVyd3JpdGVzKiBgaG9zdF9jYXBzYC4gU28sIGlmIHRoZSB1c2VyIHNlbmRzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdGhhdCB1bmluaXRpYWxpemVkIGRhdGEgZW5kcyB1cCBpbiBgaG9zdF9jYXBzYC4gIFRoZW4sIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBnZXRzIG92ZXJ3cml0dGVuIHdpdGggdGhlIHZhbHVlIGZyb20gYGdldF9jb21wYXRfY2Fwc2AuIFRoZW4gdGhlIGBzaXplYCBpcyByZXdyaXR0ZW4gd2l0aCB0aGUgbWluIG9mIHRoZSBzaXplLgoKSGVyZSYjMzk7cyB0aGUga2V5OiB0aGUgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHRoZW4gY29waWVzIGBob3N0X2NhcHNgICpiYWNrKiB0byB1c2Vyc3BhY2UuICBUaGlzIG1ha2VzIG1lIGltbWVkaWF0ZWx5IGxvb2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlLgoKSG93ZXZlciwgYGhvc3RfY2Fwc2AgaXMgKnplcm8taW5pdGlhbGl6ZWQqLiBUaGVuLCB0aGUgdXNlciYjMzk7cyBkYXRhIGlzIGNvcGllZCBpbnRvIGBob3N0X2NhcHNgLiBBbnkgcmVtYWluaW5nIGJ5dGVzIGFyZSB6ZXJvZWQgYnkgdGhlIGtlcm5lbC4gVGhlbiB0aGUga2VybmVsIG92ZXJ3cml0ZXMgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGFuZCBzaXplIHdpdGgga25vd24gdmFsdWVzLiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIG5vIGxlYWsuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCBiYWNrIGVpdGhlciAqY2FtZSogZnJvbSB1c2Vyc3BhY2UsIHdhcyBleHBsaWNpdGx5IHplcm9lZCwgb3Igc2V0IGJ5IHRoZSBrZXJuZWwuCgpJJiMzOTttIGFsc28gbG9va2luZyBhdCB0aGUgc3RydWN0IGRlZmluaXRpb246CmBgYGMKc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgewoJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCglfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwoJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwp9OwpgYGAKTm8gcGFkZGluZyBiZXR3ZWVuIGZpZWxkcywgYWxsIGBfX3U2NGAsIHNvIHRoZXJlIGFyZSBubyBvcHBvcnR1bml0aWVzIGZvciBwYWRkaW5nLXJlbGF0ZWQgaXNzdWVzLiBBbmQgZXZlbiBpZiB0aGVyZSAqd2FzKiBwYWRkaW5nLCB0aGUgemVyby1pbml0aWFsaXphdGlvbiB0YWtlcyBjYXJlIG9mIGl0LiBBbHNvLCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCB3b3VsZCBvdmVyd3JpdGUgcGFkZGluZyB3aXRoIHVzZXIgZGF0YSwgd2hpY2ggaXMgZmluZSB0byBzZW5kIGJhY2suCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBgY2FwYWJpbGl0aWVzYCwgYGNwdV92ZXJzaW9uYCwgYW5kIGByY2AgYXJlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbmRpdGlvbmFscyBlaXRoZXIuIFNvIEkmIzM5O20gZ29vZCB0aGVyZS4KCk9uZSBmaW5hbCBjaGVjayBvbiBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHNpemVzLiBJZiBgdXNpemUgJmd0OyBzaXplb2YoaG9zdF9jYXBzKWAsIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNoZWNrcyBmb3IgdHJhaWxpbmcgbm9uLXplcm8gYnl0ZXMgaW4gdXNlcnNwYWNlLCBhbmQgcmV0dXJucyBgLUUyQklHYCBpZiB0aGV5IGFyZSBub3QgemVyby4gSWYgdGhleSAqYXJlKiB6ZXJvLCB0aGVuIGl0IGNvcGllcyBgc2l6ZW9mKGhvc3RfY2FwcylgIGJ5dGVzIGludG8ga2VybmVsIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCB3ZSBleHBlY3QuICBOb3csIHRoZSBjcml0aWNhbCBwYXJ0Li4uIGBjb3B5X3N0cnVjdF90b191c2VyYCBjb3BpZXMgYmFjayB0byB1c2Vyc3BhY2UuIEFuZCBpdCB0YWtlcyBgdXNpemVgIGFzIGlucHV0LiBTbyBldmVuIGlmIGB1c2l6ZSAmZ3Q7IHNpemVvZihob3N0X2NhcHMpYCwgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHdpbGwgY29weSBgc2l6ZW9mKGhvc3RfY2FwcylgIGJ5dGVzIGludG8gdXNlcnNwYWNlLCBhbmQgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2Vyc3BhY2UhCgpJJiMzOTttIG5vdyBzYXRpc2ZpZWQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBoZXJlLCBhZnRlciB0aGUgZG91YmxlIGNoZWNrIG9mIGBjb3B5X3N0cnVjdF90b191c2VyYC4gSSYjMzk7ZCB3YW50IHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCBidXQgdGhlIHNpemUgcGFyYW1ldGVycyBhcmUgZW5vdWdoIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfc3RydWN0X3RvX3VzZXJcXCh2b2lkIF9fdXNlciBcXCpkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCBcXCpzcmMsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTQ4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oOjQ5MDpjb3B5X3N0cnVjdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCAqc3JjLFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDkxLVx0XHQgICAgc2l6ZV90IGtzaXplLCBib29sICppZ25vcmVkX3RyYWlsaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZm9yIEVmZmljaWVuY3kgYW5kIFNlY3VyaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGNvcHlfc3RydWN0X3RvX3VzZXJgIHdpdGhpbiBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgd2hlbiBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIHBlcmZvcm1hbmNlOiBob3cgZWZmaWNpZW50bHkgZG9lcyBpdCB0cmFuc2ZlciB0aGUgZGF0YT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGlzc3VlcyBvciByZWR1bmRhbnQgY2hlY2tzPwoKVGhlbiwgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIGEgY2xhc3NpYyBhcmVhIGZvciB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBzY3J1dGluaXplIGFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZm9ybWF0IHN0cmluZyBidWdzLCBldmVuIGlmIHRoZXkgc2VlbSB1bmxpa2VseS4gQXJlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyByaWdvcm91c2x5IHZhbGlkYXRlZD8gV2hhdCBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoZSB1c2VyLXNwYWNlIGRhdGEgY2hhbmdlcyBjb25jdXJyZW50bHk/IEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBmdW5jdGlvbiBpbmNvcnBvcmF0ZXMgcm9idXN0IG1lY2hhbmlzbXMgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgZGF0YSBhY2Nlc3Mgb3IgY29ycnVwdGlvbi4gSXMgdGhlcmUgcHJvcGVyIGJvdW5kIGNoZWNraW5nIGltcGxlbWVudGVkPyBBbnkgcG90ZW50aWFsIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBsZWFkaW5nIHRvIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyPyBBbmQgZmluYWxseSwgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSB1bmFsaWduZWQgYWNjZXNzZXMgZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBhdCB3aGF0IGNvc3Q/IEkgY2FuIHByb2JhYmx5IG9wdGltaXplIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgaW50XG4gNDkwOlx0Y29weV9zdHJ1Y3RfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBzaXplX3QgdXNpemUsIGNvbnN0IHZvaWQgKnNyYyxcbiA0OTE6XHRcdFx0ICAgIHNpemVfdCBrc2l6ZSwgYm9vbCAqaWdub3JlZF90cmFpbGluZylcbiA0OTI6XHR7XG4gNDkzOlx0XHRzaXplX3Qgc2l6ZSA9IG1pbihrc2l6ZSwgdXNpemUpO1xuIDQ5NDpcdFx0c2l6ZV90IHJlc3QgPSBtYXgoa3NpemUsIHVzaXplKSAtIHNpemU7XG4gNDk1Olx0XG4gNDk2Olx0XHQvKiBEb3VibGUgY2hlY2sgaWYga3NpemUgaXMgbGFyZ2VyIHRoYW4gYSBrbm93biBvYmplY3Qgc2l6ZS4gKi9cbiA0OTc6XHRcdGlmIChXQVJOX09OX09OQ0Uoa3NpemUgXHUwMDNlIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzcmMsIDEpKSlcbiA0OTg6XHRcdFx0cmV0dXJuIC1FMkJJRztcbiA0OTk6XHRcbiA1MDA6XHRcdC8qIERlYWwgd2l0aCB0cmFpbGluZyBieXRlcy4gKi9cbiA1MDE6XHRcdGlmICh1c2l6ZSBcdTAwM2Uga3NpemUpIHtcbiA1MDI6XHRcdFx0aWYgKGNsZWFyX3VzZXIoZHN0ICYjNDM7IHNpemUsIHJlc3QpKVxuIDUwMzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDUwNDpcdFx0fVxuIDUwNTpcdFx0aWYgKGlnbm9yZWRfdHJhaWxpbmcpXG4gNTA2Olx0XHRcdCppZ25vcmVkX3RyYWlsaW5nID0gdXNpemUgXHUwMDNjIGtzaXplIFx1MDAyNlx1MDAyNlxuIDUwNzpcdFx0XHRcdG1lbWNocl9pbnYoc3JjICYjNDM7IHNpemUsIDAsIHJlc3QpICE9IE5VTEw7XG4gNTA4Olx0XHQvKiBDb3B5IHRoZSBpbnRlcm9wZXJhYmxlIHBhcnRzIG9mIHRoZSBzdHJ1Y3QuICovXG4gNTA5Olx0XHRpZiAoY29weV90b191c2VyKGRzdCwgc3JjLCBzaXplKSlcbiA1MTA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNTExOlx0XHRyZXR1cm4gMDtcbiA1MTI6XHR9XG4gNTEzOlx0XG4gNTE0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXG4gNTE1Olx0X19jb3B5X3N0cnVjdF9nZW5lcmljX2JvdW5jZV9idWZmZXIodm9pZCAqZHN0LCBzaXplX3QgZHN0c2l6ZSxcbiA1MTY6XHRcdFx0XHRcdCAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNzaXplLFxuIDUxNzpcdFx0XHRcdFx0ICAgIGJvb2wgKmlnbm9yZWRfdHJhaWxpbmcpXG4gNTE4Olx0e1xuIDUxOTpcdFx0c2l6ZV90IHNpemUgPSBtaW4oZHN0c2l6ZSwgc3Jjc2l6ZSk7XG4gNTIwOlx0XHRzaXplX3QgcmVzdCA9IG1heChkc3RzaXplLCBzcmNzaXplKSAtIHNpemU7XG4gNTIxOlx0XG4gNTIyOlx0XHQvKiBEZWFsIHdpdGggdHJhaWxpbmcgYnl0ZXMuICovXG4gNTIzOlx0XHRpZiAoZHN0c2l6ZSBcdTAwM2Ugc3Jjc2l6ZSlcbiA1MjQ6XHRcdFx0bWVtc2V0KGRzdCAmIzQzOyBzaXplLCAwLCByZXN0KTtcbiA1MjU6XHRcdGlmIChpZ25vcmVkX3RyYWlsaW5nKVxuIDUyNjpcdFx0XHQqaWdub3JlZF90cmFpbGluZyA9IGRzdHNpemUgXHUwMDNjIHNyY3NpemUgXHUwMDI2XHUwMDI2XG4gNTI3Olx0XHRcdFx0bWVtY2hyX2ludihzcmMgJiM0Mzsgc2l6ZSwgMCwgcmVzdCkgIT0gTlVMTDtcbiA1Mjg6XHRcdC8qIENvcHkgdGhlIGludGVyb3BlcmFibGUgcGFydHMgb2YgdGhlIHN0cnVjdC4gKi9cbiA1Mjk6XHRcdG1lbWNweShkc3QsIHNyYywgc2l6ZSk7XG4gNTMwOlx0fVxuIDUzMTpcdFxuIDUzMjpcdC8qKlxuIDUzMzpcdCAqIFRoaXMgaXMgbGlrZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSwgYnV0IHRoZVxuIDUzNDpcdCAqIHNyYyBidWZmZXIgd2FzIGFscmVhZHkgY29waWVkIGludG8gYSBrZXJuZWxcbiA1MzU6XHQgKiBib3VuY2UgYnVmZmVyLCBzbyBpdCB3aWxsIG5ldmVyIHJldHVybiAtRUZBVUxULlxuIDUzNjpcdCAqL1xuIDUzNzpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGludFxuIDUzODpcdGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcih2b2lkICpkc3QsIHNpemVfdCBkc3RzaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIGZvciBQb3RlbnRpYWwgSW5pdGlhbGl6YXRpb24gSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBmdW5jdGlvbiwgdHJ5aW5nIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCB0aGlzIGlzIHdoYXQgSSYjMzk7dmUgZ290IHNvIGZhci4KCkZpcnN0LCBJIGNvbmZpcm1lZCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgd29ya3MuIEl0IGNsZWFycyB0cmFpbGluZyBieXRlcyBpbiB1c2Vyc3BhY2UgaWYgdGhlIGNvcHkgc2l6ZSAoYHVzaXplYCkgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBzdHJ1Y3QmIzM5O3Mgc2l6ZSAoYGtzaXplYCkuICBNb3JlIGltcG9ydGFudGx5LCBpdCBjb3BpZXMgYSAqbWF4aW11bSogb2YgYG1pbihrc2l6ZSwgdXNpemUpYCBieXRlcyBmcm9tIHRoZSBzb3VyY2UgKGBzcmNgKSB0byB0aGUgZGVzdGluYXRpb24gKGBkc3RgKSwgd2hpY2ggbWVhbnMgaXQgd29uJiMzOTt0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbml0aWFsaXplZCBzb3VyY2UgbWVtb3J5LiBJbiBvdXIgY2FzZSwgdGhlIHNvdXJjZSBpcyBgJmFtcDtob3N0X2NhcHNgLCBhbmQgYGtzaXplYCBpcyBgc2l6ZW9mKGhvc3RfY2FwcylgLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZC4gU28gaXQgd2lsbCBiZSBzYWZlLgoKTm93LCBnb2luZyB0aHJvdWdoIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpdHNlbGYsIEkmIzM5O20gdHJhY2luZyB0aGUgdmFsdWVzLiBgY2FwYWJpbGl0aWVzYCBpcyBpbml0aWFsaXplZCB0byAwLCBgcmNgIHRvIGAtRUlOVkFMYCwgYW5kIGBjcHVfdmVyc2lvbmAgdG8gMC4gVGhlIGNvZGUgYnJhbmNoZXMgYmFzZWQgb24gYGt2bWh2X29uX3BzZXJpZXMoKWAuIElmIGl0JiMzOTtzIGZhbHNlLCBgcmNgIHJlbWFpbnMgYC1FSU5WQUxgLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuCgpJZiBga3ZtaHZfb25fcHNlcmllcygpYCBpcyB0cnVlIGFuZCBga3ZtaHZfaXNfbmVzdGVkdjIoKWAgaXMgYWxzbyB0cnVlLCBgY2FwYWJpbGl0aWVzYCBnZXRzIGFzc2lnbmVkIGBuZXN0ZWRfY2FwYWJpbGl0aWVzYCwgYW5kIGByY2AgaXMgc2V0IHRvIDAuICBUaGF0IGlzIGEgY29uZGl0aW9uYWwgc2V0IGZyb20gYSBwcmUtZGVmaW5lZCB2YWx1ZS4KCk90aGVyd2lzZSwgaWYgYGt2bWh2X2lzX25lc3RlZHYyKClgIGlzIGZhbHNlLCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoICYjMzQ7Y3B1JiMzNDsgbm9kZXMgdXNpbmcgYG9mX25vZGVfcHV0YC4gIEl0IGF0dGVtcHRzIHRvIHJlYWQgYSAmIzM0O2NwdS12ZXJzaW9uJiMzNDsgcHJvcGVydHkgaW50byBgY3B1X3ZlcnNpb25gLiBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIHJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuICBJbXBvcnRhbnRseSwgaWYgdGhlIHJlYWQgaXMgc3VjY2Vzc2Z1bCwgdGhlIGxvb3AgYnJlYWtzLiBTbyBpdCBlZmZlY3RpdmVseSBmaW5kcyB0aGUgKmZpcnN0KiBDUFUgbm9kZSB3aXRoIHRoZSBwcm9wZXJ0eSwgYW5kIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMuCgpJZiBubyAmIzM0O2NwdS12ZXJzaW9uJiMzNDsgcHJvcGVydHkgaXMgZm91bmQsIGBjcHVfdmVyc2lvbmAgcmVtYWlucyAwLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYC1FSU5WQUxgLiAgSWYgaXQgKmlzKiBmb3VuZCwgdGhlIG5vbi16ZXJvIGBjcHVfdmVyc2lvbmAgaXMgcGFzc2VkIHRvIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGlzIGZ1bmN0aW9uIHRoZW4gcG9wdWxhdGVzIGBjYXBhYmlsaXRpZXNgIGJhc2VkIG9uIGBjcHVfdmVyc2lvbmAsIGFuZCByZXR1cm5zIGEgdmFsdWUuIGByY2AgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hcCBmdW5jdGlvbi4KCklmIGByY2AgaXMgbmVnYXRpdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBPdGhlcndpc2UsIGl0IGJpdHdpc2UgQU5EcyBgY2FwYWJpbGl0aWVzYCB3aXRoIGBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLYCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYGhvc3RfY2Fwcy0mZ3Q7Y29tcGF0X2NhcGFiaWxpdGllc2AsIGJlZm9yZSByZXR1cm5pbmcgYHJjYCAod2hpY2ggc2hvdWxkIG5vdyBiZSAwKS4KClNvIGl0IGxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgSSBoYXZlIHJldmlld2VkIHNlZW1zIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBzdHJ1Y3QgYGhvc3RfY2Fwc2AgaXMgZGVmaW5pdGVseSB6ZXJvLWluaXRpYWxpemVkLiBJJiMzOTttIGNvbmZpZGVudCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXJgIGhhbmRsZSBjb3B5aW5nIHNhZmVseS4gVGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLgoKSSB0aGluayBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUga2V5IGFyZWFzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBwcmVjaXNlIGJlaGF2aW9yIG9mIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIG9uY2UgbW9yZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91YWNjZXNzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MzpcdGNvcHlfc3RydWN0X2Zyb21fdXNlcih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYyxcbiAzOTQ6XHRcdFx0ICAgICAgc2l6ZV90IHVzaXplKVxuIDM5NTpcdHtcbiAzOTY6XHRcdHNpemVfdCBzaXplID0gbWluKGtzaXplLCB1c2l6ZSk7XG4gMzk3Olx0XHRzaXplX3QgcmVzdCA9IG1heChrc2l6ZSwgdXNpemUpIC0gc2l6ZTtcbiAzOTg6XHRcbiAzOTk6XHRcdC8qIERvdWJsZSBjaGVjayBpZiBrc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIGtub3duIG9iamVjdCBzaXplLiAqL1xuIDQwMDpcdFx0aWYgKFdBUk5fT05fT05DRShrc2l6ZSBcdTAwM2UgX19idWlsdGluX29iamVjdF9zaXplKGRzdCwgMSkpKVxuIDQwMTpcdFx0XHRyZXR1cm4gLUUyQklHO1xuIDQwMjpcdFxuIDQwMzpcdFx0LyogRGVhbCB3aXRoIHRyYWlsaW5nIGJ5dGVzLiAqL1xuIDQwNDpcdFx0aWYgKHVzaXplIFx1MDAzYyBrc2l6ZSkge1xuIDQwNTpcdFx0XHRtZW1zZXQoZHN0ICYjNDM7IHNpemUsIDAsIHJlc3QpO1xuIDQwNjpcdFx0fSBlbHNlIGlmICh1c2l6ZSBcdTAwM2Uga3NpemUpIHtcbiA0MDc6XHRcdFx0aW50IHJldCA9IGNoZWNrX3plcm9lZF91c2VyKHNyYyAmIzQzOyBzaXplLCByZXN0KTtcbiA0MDg6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4gNDA5Olx0XHRcdFx0cmV0dXJuIHJldCA/OiAtRTJCSUc7XG4gNDEwOlx0XHR9XG4gNDExOlx0XHQvKiBDb3B5IHRoZSBpbnRlcm9wZXJhYmxlIHBhcnRzIG9mIHRoZSBzdHJ1Y3QuICovXG4gNDEyOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoZHN0LCBzcmMsIHNpemUpKVxuIDQxMzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA0MTQ6XHRcdHJldHVybiAwO1xuIDQxNTpcdH1cbiA0MTY6XHRcbiA0MTc6XHQvKipcbiA0MTg6XHQgKiBjb3B5X3N0cnVjdF90b191c2VyOiBjb3B5IGEgc3RydWN0IHRvIHVzZXJzcGFjZVxuIDQxOTpcdCAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxuIDQyMDpcdCAqICAgICAgICAgYnl0ZXMgbG9uZy5cbiA0MjE6XHQgKiBAdXNpemU6IChBbGxlZ2VkKSBzaXplIG9mIEBkc3Qgc3RydWN0LlxuIDQyMjpcdCAqIEBzcmM6ICAgU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS5cbiA0MjM6XHQgKiBAa3NpemU6IFNpemUgb2YgQHNyYyBzdHJ1Y3QuXG4gNDI0Olx0ICogQGlnbm9yZWRfdHJhaWxpbmc6IFNldCB0byAldHJ1ZSBpZiB0aGVyZSB3YXMgYSBub24temVybyBieXRlIGluIEBzcmMgdGhhdFxuIDQyNTpcdCAqIHVzZXJzcGFjZSBjYW5ub3Qgc2VlIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgYW4gc21hbGxlciBzdHJ1Y3QuXG4gNDI2Olx0ICpcbiA0Mjc6XHQgKiBDb3BpZXMgYSBzdHJ1Y3QgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlcnNwYWNlLCBpbiBhIHdheSB0aGF0IGd1YXJhbnRlZXNcbiA0Mjg6XHQgKiBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3Igc3RydWN0IHN5c2NhbGwgYXJndW1lbnRzIChhcyBsb25nIGFzIGZ1dHVyZVxuIDQyOTpcdCAqIHN0cnVjdCBleHRlbnNpb25zIGFyZSBtYWRlIHN1Y2ggdGhhdCBhbGwgbmV3IGZpZWxkcyBhcmUgKmFwcGVuZGVkKiB0byB0aGVcbiA0MzA6XHQgKiBvbGQgc3RydWN0LCBhbmQgemVyb2VkLW91dCBuZXcgZmllbGRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgb2xkXG4gNDMxOlx0ICogc3RydWN0KS5cbiA0MzI6XHQgKlxuIDQzMzpcdCAqIFNvbWUgc3lzY2FsbHMgbWF5IHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgdXNlcnNwYWNlIGtub3dzIGFib3V0IGV2ZXJ5dGhpbmcgaW5cbiA0MzQ6XHQgKiB0aGUgc3RydWN0LCBhbmQgaWYgdGhlcmUgaXMgYSBub24temVybyB2YWx1ZSB0aGF0IHVzZXJzcGNlIGRvZXNuJiMzOTt0IGtub3dcbiA0MzU6XHQgKiBhYm91dCwgdGhleSB3YW50IHRvIHJldHVybiBhbiBlcnJvciAoc3VjaCBhcyAtRU1TR1NJWkUpIG9yIGhhdmUgc29tZSBvdGhlclxuIDQzNjpcdCAqIGZhbGxiYWNrIChzdWNoIGFzIGFkZGluZyBhIFwmIzM0O3lvdSYjMzk7cmUgbWlzc2luZyBzb21lIGluZm9ybWF0aW9uXCYjMzQ7IGZsYWcpLiBJZlxuIDQzNzpcdCAqIEBpZ25vcmVkX3RyYWlsaW5nIGlzIG5vbi0lTlVMTCwgaXQgd2lsbCBiZSBzZXQgdG8gJXRydWUgaWYgdGhlcmUgd2FzIGFcbiA0Mzg6XHQgKiBub24temVybyBieXRlIHRoYXQgY291bGQgbm90IGJlIGNvcGllZCB0byB1c2Vyc3BhY2UgKGllLiB3YXMgcGFzdCBAdXNpemUpLlxuIDQzOTpcdCAqXG4gNDQwOlx0ICogV2hpbGUgdW5jb25kaXRpb25hbGx5IHJldHVybmluZyBhbiBlcnJvciBpbiB0aGlzIGNhc2UgaXMgdGhlIHNpbXBsZXN0XG4gNDQxOlx0ICogc29sdXRpb24sIGZvciBtYXhpbXVtIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgeW91IHNob3VsZCB0cnkgdG8gb25seSByZXR1cm5cbiA0NDI6XHQgKiAtRU1TR1NJWkUgaWYgdGhlIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhlIGRhdGEgdGhhdCBjb3VsZG4mIzM5O3QgYmUgY29waWVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc4NQoJCQkJCQkJb3V0cHV0OiAzMTIKCQkJCQkJCXRob3VnaHRzOiAxMDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBOb3QgSnVzdGlmaWVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEFuYWx5emluZyB0aGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IGFmdGVyIGNhcmVmdWwgZXhhbWluYXRpb24sIEkgZG9uJiMzOTt0IHNlZSBhbnkgc2lnbmlmaWNhbnQgcmlzayBoZXJlLgoKRmlyc3QsIHRoZSBgaG9zdF9jYXBzYCBzdHJ1Y3QgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIHdpdGggYD0ge31gLiBUaGlzIGd1YXJhbnRlZXMgYSBjbGVhbiBzbGF0ZSwgcmVtb3ZpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHVzZXMgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyYCBjb25zaXN0ZW50bHkuIFRoZXNlIGhlbHBlcnMgYXJlIGRlc2lnbmVkIHRvIGhhbmRsZSBwb3RlbnRpYWwgc2l6ZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB1c2Vyc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBzdHJ1Y3RzLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBpcyBjcnVjaWFsLCBiZWNhdXNlIGl0IHplcm8taW5pdGlhbGl6ZXMgdGhlIHRyYWlsaW5nIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgaWYgdGhlIHNvdXJjZSBpcyBzbWFsbGVyLiBTaW5jZSBgaG9zdF9jYXBzYCBpcyBhbHJlYWR5IHplcm9lZCwgdGhlIG1lbXNldCBpcyByZWR1bmRhbnQsIGJ1dCBoYXJtbGVzcy4gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGd1YXJhbnRlZXMgdGhhdCB3ZSYjMzk7cmUgb25seSBzZW5kaW5nIGJhY2sgdG8gdXNlcnNwYWNlIHRoZSBzaXplIHdlJiMzOTtyZSBzdXBwb3NlZCB0by4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIGFuIGluZm8tbGVhayBieSBzZW5kaW5nIGJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZ2FyYmFnZS4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgYGt2bXBwY19nZXRfY29tcGF0X2NhcHMoKWAgcG9wdWxhdGVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQsIHdoaWNoIEkga25vdyBpcyBoYW5kbGVkIHVzaW5nIGZ1bGx5IGluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gY29tcGxleCBzdHJ1Y3R1cmVzIHRvIHdvcnJ5IGFib3V0LCBub3RoaW5nIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvcm1hdGlvbiBsZWFrLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjb2RlIGlzIHNvdW5kLgoKVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIEluIG15IHByb2Zlc3Npb25hbCBvcGluaW9uLCBnaXZlbiB0aGUgc2FmZXR5IG1lY2hhbmlzbXMgYWxyZWFkeSBpbiBwbGFjZSwgc3VjaCBhcyBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCwgYW5kIHRoZSBzdGFuZGFyZCBLQVNBTiBjaGVja3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3b3VsZCBiZSBvdmVya2lsbC4gSSBkb24mIzM5O3Qgc2VlIGEgc2lnbmlmaWNhbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBkYXRhIGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA0OjMwLjI2NTI4MjAzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk3ODUxOTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJ3MsIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBlbnN1cmVzIHRoYXQgb25seSBpbml0aWFsaXplZCBieXRlcyB1cCB0byB0aGUgcmVxdWVzdGVkIHNpemUgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXJzcGFjZSwgY2xlYXJpbmcgYW55IHRyYWlsaW5nIGJ5dGVzIGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGlmIG5lY2Vzc2FyeS4gVGhlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKClgIGZ1bmN0aW9uIG9ubHkgbW9kaWZpZXMgdGhlIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBmaWVsZCB1c2luZyBmdWxseSBpbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgcGFkZGluZyBieXRlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbnZhbGlkIHVzZXIgcG9pbnRlcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDozMC4yNjUyODc5NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI4MDYwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMjA6MDQ6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuaW5kZXggZTMwMDNhMjQxZDViMC4uZTY1NmQxMTdjZDBiMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5AQCAtNjU2Niw2ICs2NTY2LDk1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXFxuIFxcbis0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcXG4rOkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXFxuK1xcbitFcnJvcnMgaW5jbHVkZTpcXG4rXFxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcXG4rICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxcbisgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW5cXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcXG4rICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXFxuKyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzXFxuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgZXhjZWVkcyBgYFBBR0VfU0laRWBgIChwYXRob2xvZ2ljYWwgaW5wdXQgZ3VhcmQpLFxcbisgICAgICAgICAgIG9yIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmRcXG4rICAgICAgICAgICB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8gKG5ldyB1c2Vyc3BhY2Ugb25cXG4rICAgICAgICAgICBvbGQga2VybmVsIHdpdGggbm9uLWRlZmF1bHQgZmllbGRzIHNldCk7IGluIHRoZSBsYXR0ZXIgY2FzZVxcbisgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYFxcbisgICAgICAgICAgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXFxuKyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcXG4rICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXFxuK3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cXG4rXFxuK1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXFxuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cXG4rS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxcbitcXG4rOjpcXG4rXFxuKyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xcbitcXHRfX3U2NFxcdHNpemU7XFx0XFx0XFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xcbitcXHRfX3U2NFxcdGZsYWdzO1xcdFxcdFxcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rICB9O1xcbitcXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xcbitgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLlxcbitUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxcbitmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LlxcbitcXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXFxuK3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nIGFjcm9zcyB0aHJlZSBjYXNlczpcXG4rXFxuKy0gSWYgYGBzaXplYGAgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSxcXG4rICBuZXcga2VybmVsKSwgdGhlIGtlcm5lbCB6ZXJvLXBhZHMgdGhlIHVua25vd24gdHJhaWxpbmcgZmllbGRzIGJlZm9yZVxcbisgIHJldHVybmluZywgYW5kIHdyaXRlcyBiYWNrIGBgc2l6ZWBgIHVuY2hhbmdlZCBzbyB1c2Vyc3BhY2Uga25vd3MgaG93XFxuKyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC5cXG4rLSBJZiBgYHNpemVgYCBlcXVhbHMgdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplLCB0aGUgc3RydWN0IGlzIGNvcGllZFxcbisgIHZlcmJhdGltLlxcbistIElmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAobmV3IHVzZXJzcGFjZSxcXG4rICBvbGQga2VybmVsKSBhbmQgdGhlIHVua25vd24gdHJhaWxpbmcgYnl0ZXMgYXJlIGFsbCB6ZXJvLCB0aGUgY2FsbFxcbisgIHN1Y2NlZWRzIGFzIGlmIHRoZSBzaXplcyBtYXRjaGVkLiBJZiBhbnkgdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvLFxcbisgIHRoZSBrZXJuZWwgcmV0dXJucyBgYC1FMkJJR2BgIGFuZCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG9cXG4rICB0aGUgYGBzaXplYGAgZmllbGQgc28gdXNlcnNwYWNlIGNhbiByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemUuXFxuK1xcbitgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxcbitcXG4rVGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XFxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXFxuK3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJ3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxcbitzaWduaWZpY2FudCBiaXQpOlxcbitcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxcbitcXG4rLi4gbm90ZTo6XFxuK1xcbisgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0XFxuKyAgIHNpZ25pZmljYW50IGJpdCkuIEluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGFyZSBkZWZpbmVkIGFzOlxcbitcXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYyKWBgXFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlgYFxcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjApYGBcXG4rXFxuKyAgIFVzZXJzcGFjZSBzaG91bGQgdXNlIHRoZSBkZWZpbmVkIGNvbnN0YW50cyBmcm9tIGBgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZWBgIHJhdGhlclxcbisgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cXG4rXFxuIC4uIF9rdm1fcnVuOlxcbiBcXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxcbkBAIC0zMTksNiArMzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMge1xcbiBcXHRib29sICgqaGFzaF92M19wb3NzaWJsZSkodm9pZCk7XFxuIFxcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXHRpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTtcXG4rXFx0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcXG4gfTtcXG4gXFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbmluZGV4IDA3N2M1NDM3ZjUyMTkuLjkxM2E2NGI5MDFhM2QgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbkBAIC00MzcsNiArNDM3LDI0IEBAIHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyIHtcXG4gXFx0X191NjRcXHRiZWhhdmlvdXJfbWFzaztcXHRcXHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xcbiB9O1xcbiBcXG4rLyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovXFxuK3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcXG4rXFx0X191NjRcXHRzaXplO1xcdFxcdFxcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cXG4rXFx0X191NjRcXHRmbGFncztcXHRcXHRcXHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xcbitcXHRfX3U2NFxcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XFx0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xcbit9O1xcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXFx0MjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi9cXG4rXFxuKy8qXFxuKyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLlxcbisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuXFxuKyAqL1xcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MilcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYxKVxcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNjApXFxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTS1xcdFxcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcXG4gLypcXG4gICogVmFsdWVzIGZvciBjaGFyYWN0ZXIgYW5kIGNoYXJhY3Rlcl9tYXNrLlxcbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xcbmluZGV4IDYxZGJlZWEzMTdmM2IuLjc3NTU4ZjZlZWQ4NjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5AQCAtNjUxMCw2ICs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxcbit7XFxuK1xcdHN3aXRjaCAoY3B1X3ZlcnNpb24pIHtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMV9QMTE6XFxuK1xcdFxcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIFBWUl9BUkNIXzMxOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMDA6XFxuK1xcdFxcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4rXFx0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xcbitcXHRsb25nIHJjID0gLUVJTlZBTDtcXG4rXFx0dTMyIGNwdV92ZXJzaW9uID0gMDtcXG4rXFxuK1xcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG4rXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcXG4rXFx0XFx0XFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFxcXCJjcHVcXFwiKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFxcXCJjcHUtdmVyc2lvblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNwdV92ZXJzaW9uKSkge1xcbitcXHRcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChucCk7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFjcHVfdmVyc2lvbilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0aG9zdF9jYXBzLVxcdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFxcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuIFxcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcXG4gXFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxcbkBAIC02NTUyLDYgKzY2MDcsNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG4gXFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcXG4gXFx0LmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LFxcbiBcXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcXG4rXFx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5pbmRleCAwMDMwMjM5OWZjMzdiLi4yZmU0ZWEwY2E0ZmYxIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5AQCAtNjk3LDYgKzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuKyNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKVxcbitcXHRjYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOlxcbitcXHRcXHRyID0gMDtcXG4rXFx0XFx0aWYgKGh2X2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYga3ZtaHZfb25fcHNlcmllcygpKVxcbitcXHRcXHRcXHRyID0gMTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI0NjMsNiArMjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlc3ZtX29mZihrdm0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9O1xcbitcXHRcXHR1NjQgdXNpemU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cXG4rXFx0XFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IC1FRkFVTFQ7XFxuK1xcdFxcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdHIgPSAtRTJCSUc7XFxuK1xcdFxcdGlmICh1bmxpa2VseSh1c2l6ZSBcXHUwMDNlIFBBR0VfU0laRSkpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxcbitcXHRcXHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcXG4rXFx0XFx0ICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWxcXG4rXFx0XFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIgPSAtRUlOVkFMO1xcbitcXHRcXHRpZiAodXNpemUgXFx1MDAzYyBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxcbitcXHRcXHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XFxuK1xcdFxcdCAqICAgdXNpemUgXFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxcbitcXHRcXHQgKiAgIHVzaXplIFxcdTAwM2UgIGtzaXplOiBzdWNjZWVkIGlmZiB0cmFpbGluZyBieXRlcyBhcmUgemVybywgZWxzZSAtRTJCSUdcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoXFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJncCwgdXNpemUpO1xcbitcXHRcXHRpZiAocikge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlclxcbitcXHRcXHRcXHQgKiBrZXJuZWwuIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc29cXG4rXFx0XFx0XFx0ICogdXNlcnNwYWNlIGtub3dzIHdoaWNoIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLFxcbitcXHRcXHRcXHQgKiB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAociA9PSAtRTJCSUcpXFxuK1xcdFxcdFxcdFxcdGlmIChwdXRfdXNlcigoX191NjQpc2l6ZW9mKGhvc3RfY2FwcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmIChob3N0X2NhcHMuZmxhZ3MpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0ciA9IC1FTk9UVFk7XFxuK1xcdFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRyID0ga3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcyhcXHUwMDI2aG9zdF9jYXBzKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwsXFxuK1xcdFxcdCAqIG5vdCB1c2l6ZTogaWYgbmV3IHVzZXJzcGFjZSBwYXNzZWQgYSBsYXJnZXIgc3RydWN0IHdpdGggemVyb1xcbitcXHRcXHQgKiB0cmFpbGluZyBieXRlcywgd2Ugb25seSBmaWxsZWQgc2l6ZW9mKGhvc3RfY2FwcykgYnl0ZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRob3N0X2NhcHMuc2l6ZSA9IG1pbl90KHU2NCwgdXNpemUsIHNpemVvZihob3N0X2NhcHMpKTtcXG4rXFx0XFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZob3N0X2NhcHMsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxcbiBcXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcXG4gXFx0X191MzIgaXJxY2hpcDtcXG5AQCAtMTM0MSw2ICsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcXG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9DT1VOVEVSX09GRlNFVCAqL1xcbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcdF9JTyhLVk1JTywgIDB4YjgpXFxuIFxcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cXG4gI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRVxcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA0OjMxLjgxODgyNDg0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjczMTM3NzkxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDowNDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggZTMwMDNhMjQxZDViMC4uZTY1NmQxMTdjZDBiMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICs2NTY2LDk1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuKzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbis6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbitcbitFcnJvcnMgaW5jbHVkZTpcbitcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbisgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbisgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgZXhjZWVkcyBgYFBBR0VfU0laRWBgIChwYXRob2xvZ2ljYWwgaW5wdXQgZ3VhcmQpLFxuKyAgICAgICAgICAgb3IgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIGFuZFxuKyAgICAgICAgICAgdGhlIHVua25vd24gdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvIChuZXcgdXNlcnNwYWNlIG9uXG4rICAgICAgICAgICBvbGQga2VybmVsIHdpdGggbm9uLWRlZmF1bHQgZmllbGRzIHNldCk7IGluIHRoZSBsYXR0ZXIgY2FzZVxuKyAgICAgICAgICAgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgXG4rICAgICAgICAgICBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZVxuKyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXG4rICAgICAgICAgICBvcGVyYXRpb24gKGUuZy4sIG9uIG5vbi1IViBLVk0gaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZVxuKyAgICAgICAgICAgcmVxdWlyZWQgS1ZNIG9wZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUpXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitJQk0gUE9XRVIgc3lzdGVtIHNlcnZlci1iYXNlZCBwcm9jZXNzb3JzIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IG1vZGUgZmVhdHVyZVxuK3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxuK2dlbmVyYXRpb25zIHN1Y2ggYXMgKE4tMSkgYW5kIChOLTIpLlxuK1xuK1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXG4rc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvblxuK0tWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy5cbitcbis6OlxuK1xuKyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuK1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuK1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cbitcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuKyAgfTtcbitcbitCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXG4rYGBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGAgYW5kIHplcm8gdGhlIGBgZmxhZ3NgYCBmaWVsZC5cbitUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxuK3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXG4rZmllbGQgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlIHdpdGhvdXQgQUJJIGFtYmlndWl0eS5cbitcbitUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcbit0byBzdXBwb3J0IGV4dGVuc2libGUgdmVyc2lvbmluZyBhY3Jvc3MgdGhyZWUgY2FzZXM6XG4rXG4rLSBJZiBgYHNpemVgYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIChvbGQgdXNlcnNwYWNlLFxuKyAgbmV3IGtlcm5lbCksIHRoZSBrZXJuZWwgemVyby1wYWRzIHRoZSB1bmtub3duIHRyYWlsaW5nIGZpZWxkcyBiZWZvcmVcbisgIHJldHVybmluZywgYW5kIHdyaXRlcyBiYWNrIGBgc2l6ZWBgIHVuY2hhbmdlZCBzbyB1c2Vyc3BhY2Uga25vd3MgaG93XG4rICBtYW55IGJ5dGVzIHdlcmUgZmlsbGVkLlxuKy0gSWYgYGBzaXplYGAgZXF1YWxzIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSwgdGhlIHN0cnVjdCBpcyBjb3BpZWRcbisgIHZlcmJhdGltLlxuKy0gSWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIChuZXcgdXNlcnNwYWNlLFxuKyAgb2xkIGtlcm5lbCkgYW5kIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBhbGwgemVybywgdGhlIGNhbGxcbisgIHN1Y2NlZWRzIGFzIGlmIHRoZSBzaXplcyBtYXRjaGVkLiBJZiBhbnkgdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvLFxuKyAgdGhlIGtlcm5lbCByZXR1cm5zIGBgLUUyQklHYGAgYW5kIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50b1xuKyAgdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplLlxuK1xuK2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlXG4rc2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi5cbitcbitUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHlcbittb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpY1xuK3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJ3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxuK3NpZ25pZmljYW50IGJpdCk6XG4rXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgKGJpdCAyKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMCBwcm9jZXNzb3IgbW9kZVxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgIChiaXQgMykgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTEgcHJvY2Vzc29yIG1vZGVcbitcbisuLiBub3RlOjpcbitcbisgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0XG4rICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6XG4rXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MilgYFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjEpYGBcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYwKWBgXG4rXG4rICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZWBgIHJhdGhlclxuKyAgIHRoYW4gaGFyZGNvZGluZyBiaXQgcG9zaXRpb25zLlxuK1xuIC4uIF9rdm1fcnVuOlxuIFxuIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXG5pbmRleCAwOTUzZjJkYWE0NjYwLi4xNjllYTZhN2ZiYWQ0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuQEAgLTMxOSw2ICszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7XG4gXHRib29sICgqaGFzaF92M19wb3NzaWJsZSkodm9pZCk7XG4gXHRpbnQgKCpjcmVhdGVfdm1fZGVidWdmcykoc3RydWN0IGt2bSAqa3ZtKTtcbiBcdGludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpO1xuK1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XG4gXHRfX3U2NFx0YmVoYXZpb3VyX21hc2s7XHRcdC8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovXG4gfTtcbiBcbisvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi9cbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4rXHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4rXHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuK307XG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFx0MjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi9cbitcbisvKlxuKyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLlxuKyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbisgKi9cbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MilcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYwKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTS1x0XHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcbiAvKlxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5pbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuQEAgLTY1MTAsNiArNjUxMCw2MSBAQCBzdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXG4re1xuK1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuK1x0Y2FzZSBQVlJfQVJDSF8zMV9QMTE6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBQVlJfQVJDSF8zMTpcbitcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMDtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFBWUl9BUkNIXzMwMDpcbitcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4rXHR1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7XG4rXHRsb25nIHJjID0gLUVJTlZBTDtcbitcdHUzMiBjcHVfdmVyc2lvbiA9IDA7XG4rXG4rXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG4rXHRcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcbitcdFx0XHRjYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzO1xuK1x0XHRcdHJjID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFwiY3B1XCIpIHtcbitcdFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwiY3B1LXZlcnNpb25cIixcbitcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3B1X3ZlcnNpb24pKSB7XG4rXHRcdFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghY3B1X3ZlcnNpb24pXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZjYXBhYmlsaXRpZXMpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJldHVybiByYztcbitcbitcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcbiBcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcbiBcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcbkBAIC02NTUyLDYgKzY2MDcsNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcbiBcdC5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsXG4gXHQuY3JlYXRlX3ZjcHVfZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92Y3B1X2RlYnVnZnNfaHYsXG4gXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcbitcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2IuLjJmZTRlYTBjYTRmZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC02OTcsNiArNjk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuKyNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKVxuK1x0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcbitcdFx0ciA9IDA7XG4rXHRcdGlmIChodl9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1odl9vbl9wc2VyaWVzKCkpXG4rXHRcdFx0ciA9IDE7XG4rXHRcdGJyZWFrO1xuKyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xuIFx0ZGVmYXVsdDpcbiBcdFx0ciA9IDA7XG4gXHRcdGJyZWFrO1xuQEAgLTI0NjMsNiArMjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZXN2bV9vZmYoa3ZtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XG4rXHRcdHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9O1xuK1x0XHR1NjQgdXNpemU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLlxuK1x0XHQgKiBzaXplIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSBzdHJ1Y3QuXG4rXHRcdCAqL1xuK1x0XHRyID0gLUVGQVVMVDtcbitcdFx0aWYgKGdldF91c2VyKHVzaXplLCAoX191NjQgX191c2VyICopYXJncCkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSAtRTJCSUc7XG4rXHRcdGlmICh1bmxpa2VseSh1c2l6ZSBcdTAwM2UgUEFHRV9TSVpFKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuK1x0XHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcbitcdFx0ICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWxcbitcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbitcdFx0ICovXG4rXHRcdHIgPSAtRUlOVkFMO1xuK1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxuK1x0XHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XG4rXHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4rXHRcdCAqICAgdXNpemUgXHUwMDNlICBrc2l6ZTogc3VjY2VlZCBpZmYgdHJhaWxpbmcgYnl0ZXMgYXJlIHplcm8sIGVsc2UgLUUyQklHXG4rXHRcdCAqL1xuK1x0XHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXG4rXHRcdFx0XHRcdCAgYXJncCwgdXNpemUpO1xuK1x0XHRpZiAocikge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXJcbitcdFx0XHQgKiBrZXJuZWwuIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc29cbitcdFx0XHQgKiB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsXG4rXHRcdFx0ICogdGhlbiBmYWlsIHdpdGggLUUyQklHLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChyID09IC1FMkJJRylcbitcdFx0XHRcdGlmIChwdXRfdXNlcigoX191NjQpc2l6ZW9mKGhvc3RfY2FwcyksXG4rXHRcdFx0XHRcdCAgICAgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdFx0XHRyID0gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHQvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvICovXG4rXHRcdHIgPSAtRUlOVkFMO1xuK1x0XHRpZiAoaG9zdF9jYXBzLmZsYWdzKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRyID0gLUVOT1RUWTtcbitcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcylcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKFx1MDAyNmhvc3RfY2Fwcyk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZXBvcnQgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBwb3B1bGF0ZWQgYnkgdGhlIGtlcm5lbCxcbitcdFx0ICogbm90IHVzaXplOiBpZiBuZXcgdXNlcnNwYWNlIHBhc3NlZCBhIGxhcmdlciBzdHJ1Y3Qgd2l0aCB6ZXJvXG4rXHRcdCAqIHRyYWlsaW5nIGJ5dGVzLCB3ZSBvbmx5IGZpbGxlZCBzaXplb2YoaG9zdF9jYXBzKSBieXRlcy5cbitcdFx0ICovXG4rXHRcdGhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpO1xuK1x0XHRyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXHUwMDI2aG9zdF9jYXBzLFxuK1x0XHRcdFx0XHRzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFx0ZGVmYXVsdDoge1xuIFx0XHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUuLjcwZTM2ZTZhMGFkNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNDEsNiArMTM0Miw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9DT1VOVEVSX09GRlNFVCAqL1xuICNkZWZpbmUgS1ZNX0FSTV9TRVRfQ09VTlRFUl9PRkZTRVQgX0lPVyhLVk1JTywgIDB4YjUsIHN0cnVjdCBrdm1fYXJtX2NvdW50ZXJfb2Zmc2V0KVxuICNkZWZpbmUgS1ZNX0FSTV9HRVRfUkVHX1dSSVRBQkxFX01BU0tTIF9JT1IoS1ZNSU8sICAweGI2LCBzdHJ1Y3QgcmVnX21hc2tfcmFuZ2UpXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cbisjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXHRfSU8oS1ZNSU8sICAweGI4KVxuIFxuIC8qIGlvY3RsIGZvciB2bSBmZCAqL1xuICNkZWZpbmUgS1ZNX0NSRUFURV9ERVZJQ0VcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDozMS44MTg4NTAyNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjYyMTczMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTIGlvY3RsIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQncyBhZGRlZCB0byBLVk0gb24gUG93ZXJQQywgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBWTSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBpb2N0bCBleHBlY3RzIGEgYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYCBwb2ludGVyLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgdGhlIGltcGxlbWVudGF0aW9uIOKAkyBpdCBsaXZlcyB3aXRoaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgLCB3aGljaCBjYWxscyBga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMoXHUwMDI2aG9zdF9jYXBzKWAuIEFuZCBgZ2V0X2NvbXBhdF9jYXBzYCBpcyB0aGVuIGRlZmluZWQgYXMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBmdXp6YWJsZS4gQSBuZXcgaW9jdGwgaW4gS1ZNLCBzcGVjaWZpY2FsbHkgZm9yIFBvd2VyUEMuLi4gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBPa2F5LCBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLCBhcyB3ZSBjYW4gY29tcGlsZSBmb3IgUG93ZXJQQy4gQW5kLCB3YWl0LCBTeXprYWxsZXIgc3VwcG9ydHMgUG93ZXJQQyAocHBjNjRsZSksIHNvIHRoYXQncyBhIGJpZyBncmVlbiBmbGFnLlxuXG5UaGUgaW9jdGwgaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBjb3JlIEtWTSBsb2dpYyBmb3IgUG93ZXJQQy4gTm93LCBsZXQgbWUgc2VlLi4uIEl0J3MgZGVmaW5lZCBhcyBgX0lPKEtWTUlPLCAweGI4KWAuIEhtbSwgYnV0IGl0IHRha2VzIGFuIGFyZ3VtZW50LCBkb2Vzbid0IGl0PyBSaWdodC4gYF9JT2AgZG9lc24ndCBlbmNvZGUgdGhlIHNpemUsIGJ1dCB0aGUgY29kZSBkb2VzIHVzZSBgYXJncGAgYXMgYSBwb2ludGVyLiBUaGF0J3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBwb2ludC5cblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gTmVlZCB0byBleGFtaW5lIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gUmlnaHQsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIGlzIGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAsIHdoaWNoIGltcGxpZXMgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC4gVGltZSB0byBjaGVjayBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IHRvIGJ1aWxkIGFuIGVudmlyb25tZW50IHdoZXJlIHRoaXMgaXMgZXhwb3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA0OjM5LjA4MTAyNzM4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAxMzY2OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDo0MC44ODI0MDA2MTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1Mzk1MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEtWTSBvbiB0aGUgUG93ZXJQQyBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYEtWTV9CT09LM1NfNjRfSFZgIGZlYXR1cmUuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGlyZWN0b3J5LiBUaGF0IHdvdWxkIGJlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGRlZmluaXRpb24gZm9yIGBLVk1fQk9PSzNTXzY0X0hWYCB3aWxsIHJlc2lkZSB0aGVyZSwgYWxvbmcgd2l0aCBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgaGVscCB0ZXh0LiBLbm93aW5nIHRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgZXNzZW50aWFsIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZ5aW5nIHRoZSBLVk0gc2V0dXAgb24gdGhpcyBwbGF0Zm9ybSBhbmQgSSB3aWxsIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NDQuMDQ3Nzk4Nzc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXFx1MDAyNlxcdTAwMjYgUFBDX1BPV0VSTlZcXG4gIDgyOlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA4MzpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcXG4gIDg0OlxcdFxcdHNlbGVjdCBDTUFcXG4gIDg1OlxcdFxcdGhlbHBcXG4gIDg2OlxcdFxcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cXG4gIDg3OlxcdFxcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXFxuICA4ODpcXHRcXHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIEtWTSB3aWxsIHVzZSB0aGUgaGFyZHdhcmUgdmlydHVhbGl6YXRpb25cXG4gIDkxOlxcdFxcdCAgZmFjaWxpdGllcyBvZiBQT1dFUjcgKGFuZCBsYXRlcikgcHJvY2Vzc29ycywgbWVhbmluZyB0aGF0XFxuICA5MjpcXHRcXHQgIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW1zIHdpbGwgcnVuIGF0IGZ1bGwgaGFyZHdhcmUgc3BlZWRcXG4gIDkzOlxcdFxcdCAgdXNpbmcgc3VwZXJ2aXNvciBhbmQgdXNlciBtb2Rlcy4gIEhvd2V2ZXIsIHRoaXMgYWxzbyBtZWFuc1xcbiAgOTQ6XFx0XFx0ICB0aGF0IEtWTSBpcyBub3QgdXNhYmxlIHVuZGVyIFBvd2VyVk0gKHBIeXApLCBpcyBvbmx5IHVzYWJsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDo0NC4wNDc4OTY2MDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzgxNDk2MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzIExvZ2ljKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBgS1ZNX0JPT0szU182NF9IVmAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGluZ2VzIG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBSaWdodCwgZ290IGl0LiBOb3csIGxldCdzIHRyYWNlIHRoaXMgc3BlY2lmaWMgaW9jdGwgaW1wbGVtZW50YXRpb24uIEFoYSwgdGhlIGlvY3RsIGluIHF1ZXN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBga3ZtX29wc19odmAsIHdoaWNoLCBuYXR1cmFsbHksIGlzIHRpZWQgdG8gYEtWTV9CT09LM1NfNjRfSFZgLlxuXG5Ob3csIEknbSBjdXJpb3VzLiBEb2VzIGBLVk1fQk9PSzNTXzY0X1BSYCBpbXBsZW1lbnQgaXQgYXMgd2VsbD8gTGV0J3MgcXVpY2tseSB2ZXJpZnkuIE5vcGUuIE9ubHkgYGt2bV9vcHNfaHZgIGlzIGRlZmluaW5nIGAuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFNvLCB0aGUgYm90dG9tIGxpbmUgaXMgdGhhdCB3ZSBuZWVkIGJvdGggYEtWTV9CT09LM1NfNjRfSFZgIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgS1ZNYCBlbmFibGVkLlxuXG5UaGUgaW9jdGwgY29kZSBpdHNlbGYgaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gVGhhdOKAmXMgdGhlIGtleSBoZXJlLiBOb3csIHRoZSBmdW5jdGlvbiBJIHNob3VsZCBmb2N1cyBvbiBpcyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AsIGJ1dCBJ4oCZbGwgYWxzbyBuZWVkIHRvIGludmVzdGlnYXRlIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBBbHNvLCBkb24ndCBmb3JnZXQgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHdoYXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC5cblxuTm93LCBsZXQgbWUgY2hlY2sgd2hlcmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBsb2NhdGVkLiBSaWdodCwgYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NDkuNDI5Mzk1MDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDI2MzI0MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdm1faW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9MjAwNj1zdGF0aWMgaW50IGt2bV92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMDE1LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjIwMTY6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMTcte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM9MTY5PXN0YXRpYyBpbnQga3ZtX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTE3OC1cXG5hcmNoL2xvb25nYXJjaC9rdm0vdm0uYzoxNzk6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTE4MC17XFxuLS1cXG5hcmNoL21pcHMva3ZtL21pcHMuYz05ODE9aW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTk4Ni1cXG5hcmNoL21pcHMva3ZtL21pcHMuYzo5ODc6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTk4OC17XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTYxMjQ9c3RhdGljIHZvaWQga3ZtcHBjX2lycV9ieXBhc3NfZGVsX3Byb2R1Y2VyX2h2KHN0cnVjdCBpcnFfYnlwYXNzX2NvbnN1bWVyICpjb25zLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTQ0LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE0NTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX2h2KHN0cnVjdCBmaWxlICpmaWxwLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE0Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTY4PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTk1LVxcdC5mYXN0X3ZjcHVfa2ljayA9IGt2bXBwY19mYXN0X3ZjcHVfa2lja19odixcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1OTY6XFx0LmFyY2hfdm1faW9jdGwgID0ga3ZtX2FyY2hfdm1faW9jdGxfaHYsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTk3LVxcdC5oY2FsbF9pbXBsZW1lbnRlZCA9IGt2bXBwY19oY2FsbF9pbXBsX2h2LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0yMDI2PXN0YXRpYyBpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdF9wcih2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDM4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MjAzOTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX3ByKHN0cnVjdCBmaWxlICpmaWxwLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMjA0MC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0yMDQ1PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX3ByID0ge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDcyLVxcdC5mYXN0X3ZjcHVfa2ljayA9IGt2bV92Y3B1X2tpY2ssXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoyMDczOlxcdC5hcmNoX3ZtX2lvY3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX3ByLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMjA3NC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIyOTQ9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NwdV9jaGFyKHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyICpjcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIzNjItXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjM2MzppbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2NC17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92bS5jPTIxNT1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMjY3LVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmM6MjY4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTI2OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI1OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzI0NT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjU3LVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MjU4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI1OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU5ND1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNTk1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE1OTY6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU5Ny1sb25nIGt2bV9hcmNoX3ZtX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MTQ4PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM4MC1cXHRkZWZhdWx0OlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM4MTpcXHRcXHRyID0ga3ZtX2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzgyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NTEuMTMyMDM0MDAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3NDk5MTU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQUEMgQ29tcGF0IENhcGFiaWxpdGllcyBJT0NUTCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0J3MgYmVlbiBhZGRlZCBpbnRvIGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuIFN0cmFpZ2h0Zm9yd2FyZDsgZGVmaW5pdGVseSByZWFjaGFibGUsIGdvb2QuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRvIGZvY3VzIG15IGVmZm9ydHMgb24gYSBmZXcgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AuIE9mIGNvdXJzZSwgdGhlcmUncyBga3ZtX2FyY2hfdm1faW9jdGxgIGl0c2VsZiwgYnV0IHRoYXQncyBhIHByZXR0eSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLiBXZWxsLCB3YWl0LCBubywgaXQncyAqbm90KiBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCdzIGFuIGlvY3RsIGhhbmRsZXIuIEl0J3MgYSBsYXJnZSBmdW5jdGlvbiwgYnV0IG15IGZvY3VzIHNob3VsZCByZW1haW4gb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCBmb3Igbm93LlxuXG5MZXQgbWUgbW92ZSBvbiB0byBleGFtaW5pbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBJJ2xsIGZpbmQgaXQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDo1NS43MDcwMjkwNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjE2ODk5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MTM9c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTMyLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjUzMzpzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MzQte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTY4PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjA5LVxcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjYxMDpcXHQuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcyxcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2MTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NTcuMjI4NzI4MjA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjUwNzY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4gZm9yIGhvdyBLVk0gaGFuZGxlcyBndWVzdCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGhvc3QgaGFyZHdhcmUgb24gUG93ZXJQQy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgZGV0ZXJtaW5lcyB3aGljaCBmZWF0dXJlcyB0aGUgZ3Vlc3QgaXMgYWxsb3dlZCB0byB1c2UuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgdGhlIGd1ZXN0J3MgdmlldyBvZiB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIHRoZSBob3N0J3MgYWN0dWFsIGNhcGFiaWxpdGllcywgdGFraW5nIGludG8gYWNjb3VudCBhbnkgbGltaXRhdGlvbnMgaW1wb3NlZCBieSB0aGUgdmlydHVhbGl6YXRpb24gbGF5ZXIuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHksIG1ha2luZyBzdXJlIHRoZSBndWVzdCBkb2Vzbid0IHRyeSB0byBhY2Nlc3MgYW55dGhpbmcgaXQgc2hvdWxkbid0LCBvciB1dGlsaXplIGEgZmVhdHVyZSBpbiBhIHdheSB0aGF0IHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW0gb3IgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6XG5cbiogICBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBtYW5pcHVsYXRpbmc/IGBrdm1fcHBjX3ZjcHVgLCBga3ZtX3BwY19wcmAsIGFuZCBga3ZtX3BwY19ib29rM3NfNjRgIGFyZSBwcm9iYWJseSBpbnZvbHZlZCwgYWxvbmdzaWRlIHNvbWUgYml0ZmllbGRzIHJlcHJlc2VudGluZyB0aGUgZ3Vlc3QncyBmZWF0dXJlIHNldCBhbmQgdGhlIGhvc3QncyBzdXBwb3J0LiBJIGV4cGVjdCB0byBzZWUgY2hlY2tzIGZvciBDUFVJRCBiaXRzLCBNU1JzLCBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcy5cbiogICBIb3cgZG9lcyBpdCBoYW5kbGUgZmVhdHVyZSB0cmFuc2xhdGlvbiBvciBlbXVsYXRpb24/IERvZXMgaXQgc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGUgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBob3N0J3MgY2FwYWJpbGl0aWVzLCBvciBkb2VzIGl0IGFjdGl2ZWx5IHJld3JpdGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIG9yIGRhdGEgc3RydWN0dXJlcyBvbiB0aGUgZmx5PyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz9cbiogICBIb3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIG51YW5jZXMgb2YgZGlmZmVyZW50IFBvd2VyUEMgYXJjaGl0ZWN0dXJlcyBhbmQgbW9kZWxzPyBXZSBoYXZlIGV2ZXJ5dGhpbmcgZnJvbSBCb29rM1MgdG8gb2xkZXIgcGxhdGZvcm1zLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBjb250YWlucyBhIGxvdCBvZiBjb25kaXRpb25hbCBsb2dpYywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNoZWNrcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGhhcmR3YXJlIHJldmlzaW9uIGRldGVjdGlvbi5cbiogICBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzPyBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgZm9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byBpbXByb3BlciBjYXBhYmlsaXR5IG1hcHBpbmcuXG4qICAgQXJlIHRoZXJlIGFueSBjb21wYXRpYmlsaXR5IG9wdGlvbnMgYXQgdGhlIFFFTVUgbGV2ZWwgd2hpY2ggbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGF0IHRoZSBwb2ludCBvZiB2aXJ0dWFsaXphdGlvbj9cblxuTGV0J3Mgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsIGdyYXBoIGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHNlZSB0aGlzIGZ1bmN0aW9uIGF0IHdvcmsgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjAxLjc1MzgwODA1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODE0OTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NDkwPXN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTEzOnN0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTQtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NTQtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTU1OlxcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU1Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjAzLjI4MTk2MjM2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDUxMTc4MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBvd2VyUEMgQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGNvZGUgcmVsYXRlZCB0byBQb3dlclBDIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ3ZlIGlkZW50aWZpZWQgYXJlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AuIEhtbSwgd2FpdCwgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgaXQncyBpbmxpbmVkPyBMZXQgbWUgc2VlLi4uIEl0J3Mgb25seSBjYWxsZWQgb25jZSwgcmlnaHQgd2l0aGluIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gQWgsIGJ1dCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaXRzZWxmIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYC5nZXRfY29tcGF0X2NhcHNgLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgd29uJ3QgYmUgaW5saW5lZC4gU28sIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cbk5vdywgd2hlcmUgaXMgdGhpcyBhbGwgYmVpbmcgY2FsbGVkIGZyb20/IFJpZ2h0LCBga3ZtX2FyY2hfdm1faW9jdGxgIGhhbmRsZXMgdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0J3MgYSBwcmV0dHkgYmlnIGZ1bmN0aW9uLCBidXQgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBsb2NhbGl6ZWQgd2l0aGluIHRoZSBgY2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzpgIGJsb2NrLiBTbyBpdCdzIHN0aWxsIGZpbmUgdG8ganVzdCBmb2N1cyBvbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cbk9rYXksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkPyBBaCwgeWVzLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZC4gSXQncyBub3cgcmV0dXJuaW5nIDEgZm9yIGBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQU2AuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgYEtWTWAgYW5kIGBLVk1fQk9PSzNTXzY0X0hWYCwgb2J2aW91c2x5LiBXYWl0LCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSBpdCByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MTAuMzMzMTQzMDY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxNzg3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yOT1jb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzUtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTQ1PWNvbmZpZyBLVk1fQk9PSzNTXzMyXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MTIuMDE0OTM2NTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTk0NTcxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtWTV9CT09LM1NfNjRfSFYgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBLVk1fQk9PSzNTXzY0X0hWYCDigJMgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiZG9lcyB0aGlzIHBhcnRpY3VsYXIgS1ZNIGNvbmZpZ3VyYXRpb24gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgYFBQQ19QT1dFUk5WYD9cIiBLbm93aW5nIHRoZSBudWFuY2VzIG9mIHRoZXNlIFBvd2VyUEMtYmFzZWQgS1ZNIGVudmlyb25tZW50cywgaXQncyBjcnVjaWFsIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSB0aWdodGx5IGNvdXBsZWQuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVkaWN0IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhcmNoaXRlY3R1cmFsIGRpZmZlcmVuY2VzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmlzaW5nIGZyb20gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlLiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzLCBhbmQgaWYgYW55IGZ1cnRoZXIgcmVzZWFyY2ggb3IgdGVzdGluZyBpcyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNToxNS42MzQzOTcwNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc5OlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuICA4MDpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFxcdTAwMjZcXHUwMDI2IFBQQ19QT1dFUk5WXFxuICA4MjpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbiAgODM6XFx0XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXFxuICA4NDpcXHRcXHRzZWxlY3QgQ01BXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXFxuICA4NzpcXHRcXHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxcbiAgODg6XFx0XFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNToxNS42MzQ0NzU1ODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NjQwNjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIGl0IGhpbmdlcyBvbiBhIGNvdXBsZSBvZiBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcncyBwcm9wZXJseSBlbmFibGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgc2V0OiBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgUFBDX1BPV0VSTlZgLCBhbmQgYEtWTV9CT09LM1NfNjRfSFZgLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBQUENfUE9XRVJOVmAgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuIEkgZG9uJ3Qgd2FudCB0byBjaGFzZSBhIGRlYWQgZW5kLCBzbyB2ZXJpZnlpbmcgdGhhdCByaWdodCBub3cgd2lsbCBwcmV2ZW50IGRvd25zdHJlYW0gaXNzdWVzLiBJJ2xsIGdldCBvbiB0aGF0IGltbWVkaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc4MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MTkuMDkwODg1MDM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMTQ5NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUENfUE9XRVJOVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBQUEM2NCBcXHUwMDI2XFx1MDAyNiBQUENfQk9PSzNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjIwLjc4MzA1NjA2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMyMjQzMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGEgTmV3IEtWTSBpb2N0bDogS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHllcywgYFBQQ19QT1dFUk5WYCBsb29rcyBsaWtlIGEgdmFsaWQgY29uZmlndXJhdGlvbi4gQW5kLCB3YWl0LCBgS1ZNX0JPT0szU182NF9IVmAgaXMgdHJpc3RhdGUsIG1lYW5pbmcgaXQgKmNhbiogYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGV4Y2VsbGVudCEgVGhhdCBtZWFucyBTeXprYWxsZXIgY2FuIGZ1enogaXQuXG5cblJpZ2h0LCB0aGUgaW9jdGwgaW4gcXVlc3Rpb24gaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgY2xlYXJseSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIE5vdywgYSBxdWljayB0aG91Z2h0IOKAkyBpcyBpdCB3b3J0aCBhZGRpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYD8gSXTigJlzIGEgZmFpcmx5IGxhcmdlIGZ1bmN0aW9uLCBidXQgdGhlIHNwZWNpZmljIGNhc2Ugd2UgY2FyZSBhYm91dCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgKmlzKiBuZXcuIEhtbW0sIHNpbmNlIGl0J3MgZ2VuZXJpYywgYmV0dGVyIHRvIGF2b2lkIGl0LiBXZSBkb24ndCB3YW50IHRvIHNrZXcgdGhlIGZ1enppbmcgdG93YXJkcyBhbGwgVk0gaW9jdGxzLlxuXG5XYWl0LCBvbiBzZWNvbmQgdGhvdWdodCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIEknbGwganVzdCBhZGQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLlxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2suIEFueXRoaW5nIGVsc2UgbW9kaWZpZWQ/IFl1cCwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGlzIGFsc28gdG91Y2hlZC4gVGhhdCdzIGZpbmUsIEknbGwgYWRkIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC5cblxuTm93LCB0aW1lIGZvciBhIHF1aWNrIHJldmlldy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgZm9yIFBvd2VyUEMuIEl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IsIGFuZCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuIEkgY2FuIGdldCBzb21lIGdyZWF0IGZ1enppbmcgY292ZXJhZ2UgaGVyZS5cblxuVGhlIGtleSBmdW5jdGlvbiBpcyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggZ2l2ZXMgdXMgYSBuZXcgd2F5IHRvIGludGVyYWN0IHdpdGggUG93ZXJQQyBLVk0sIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzEsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjI4LjYxNTMwMTUxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjMwNzY0LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBQUENfUE9XRVJOViwgS1ZNX0JPT0szU182NF9IViIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9CT09LM1NfNjRcIixcbiAgICBcIlBQQ19QT1dFUk5WXCIsXG4gICAgXCJLVk1fQk9PSzNTXzY0X0hWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IgYW5kIGltcGxlbWVudHMgbmV3IGxvZ2ljIGluIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQsIFBQQ19QT1dFUk5WLCBLVk1fQk9PSzNTXzY0X0hWXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjI4LjY5NTk0NTY0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ2MDE0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4uLiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbWlzc2luZz8gVGhhdCdzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4uIE9rYXksIGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZWlyIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGFjdHVhbGx5IHByZXNlbnQuIE5lZWQgdG8gcnVsZSBvdXQgYW55IHNpbXBsZSBvdmVyc2lnaHQgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIG1vcmUgY29tcGxleCBpc3N1ZXMgbGlrZSBkZXBsb3ltZW50IHNjcmlwdHMgb3IgaW5mcmFzdHJ1Y3R1cmUgcHJvYmxlbXMuIExldCBtZSBydW4gYSBxdWljayBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMwMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNTozMS43NDE5NjQ4MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTg3OTU2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9CT09LM1NfNjRfSFZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjMzLjQwMDc2NzAxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM5MDc3OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBvZGQgYmVoYXZpb3IuIFRoZSB0b29sLCBgc2V0LXJlc3VsdHNgLCBpcyB0ZWxsaW5nIG1lIHRoYXQgY2VydGFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gZm9yIFBvd2VyUEMgZG9uJ3QgZXhpc3QuIEJ1dCBJIGtub3cgdGhleSdyZSB0aGVyZSEgSSBjYW4gKnNlZSogdGhlbSByaWdodCBoZXJlIGluIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgLiBJdCdzIGEgYml0IHBlcnBsZXhpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhlIHRvb2wgbWlnaHQgYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBvbmx5IGNoZWNraW5nIHRoZSB4ODZfNjQgY29uZmlncywgd2hpY2ggd291bGQgZXhwbGFpbiB0aGUgZGlzY3JlcGFuY3kuIEJ1dCwgbm8sIGl0J3Mgc3VwcG9zZWQgdG8gY2hlY2sgYWdhaW5zdCB0aGUgZW50aXJlIGtlcm5lbCB0cmVlLCBzbyB0aGF0IHNob3VsZG4ndCBiZSBpdC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2Agb25lIG1vcmUgdGltZSwganVzdCB0byBiZSBzdXJlLi4uIHllcCwgc3RpbGwgdGhlcmUuXG5cbkhtbS4uLiBQZXJoYXBzIHRoZSB0b29sIG9ubHkgbG9va3MgYXQgYEtjb25maWdgIGZpbGVzIHRoYXQgYXJlICpkaXJlY3RseSogaW5jbHVkZWQgaW4gdGhlIG1haW4gYEtjb25maWdgLiBCdXQgd2FpdCwgYGFyY2gvcG93ZXJwYy9LY29uZmlnYCAqZG9lcyogaW5jbHVkZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCwgc28gdGhhdCdzIG5vdCB0aGUgaXNzdWUgZWl0aGVyIVxuXG5Pa2F5LCBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhlIHRvb2wgbWlnaHQgYmUgdXNpbmcgYSBwcmUtZ2VuZXJhdGVkIGxpc3Qgb2YgY29uZmlncywgYW5kIG1heWJlIHRoYXQgbGlzdCBpcyB4ODZfNjQtY2VudHJpYy4gSW4gYW55IGNhc2UsIGlmIGl0IGNsYWltcyB0aGVzZSBQb3dlclBDIEtWTSBvcHRpb25zIGRvbid0IGV4aXN0LCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBlaXRoZXIgb21pdCB0aGVtLCBvciwgYXQgYSBtaW5pbXVtLCBvbmx5IGluY2x1ZGUgYEtWTWAgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LiBUaW1lIHRvIGNoZWNrIGlmIGBLVk1gIGl0c2VsZiBpcyBldmVuIGRlZmluZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NzIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MzguNDM5ODQ3NTE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMTIwMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xNy1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MTg6Y29uZmlnIEtWTVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMwLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMi1cXHRib29sIFxcXCJNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI2OmNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjctXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mjk6Y29uZmlnIEtWTV9CT09LM1NfMzJfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzUtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDQtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI2OmNvbmZpZyBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNy1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI5OmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgdGltaW5nIGZvciB0aGUgUDkgZW50cnkgcG9pbnRcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0My1cXHRib29sIFxcXCJEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiTmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTcxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE1VXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiSHlwZXJ2aXNvciBQZXJmIGV2ZW50cyBmb3IgS1ZNIEJvb2szcy1IVlxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4NS1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg3OmNvbmZpZyBLVk1fRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg4LVxcdGJvb2wgXFxcIkRldGFpbGVkIGV4aXQgdGltaW5nXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5Ny1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTk4OmNvbmZpZyBLVk1fRTUwMFYyXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwdjIgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTItXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTQtXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9NUElDXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIzMC1cXHRib29sIFxcXCJLVk0gaW4ta2VybmVsIE1QSUMgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0MC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjQxOmNvbmZpZyBLVk1fWElDU1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXFx0Ym9vbCBcXFwiS1ZNIGluLWtlcm5lbCBYSUNTIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTAtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUyLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZz0yMj1zb3VyY2UgXFxcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWljcm93YXR0L0tjb25maWdcXFwiXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTIzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZzoyNDpjb25maWcgS1ZNX0dVRVNUXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIktWTSBHdWVzdCBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz04MjY9c291cmNlIFxcXCJhcmNoL3g4Ni94ZW4vS2NvbmZpZ1xcXCJcXG5hcmNoL3g4Ni9LY29uZmlnLTgyNy1cXG5hcmNoL3g4Ni9LY29uZmlnOjgyODpjb25maWcgS1ZNX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04MjktXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0zLVxcbnZpcnQva3ZtL0tjb25maWc6NDpjb25maWcgS1ZNX0NPTU1PTlxcbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0zOT1jb25maWcgTkVFRF9LVk1fRElSVFlfUklOR19XSVRIX0JJVE1BUFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy00Mi1cXG52aXJ0L2t2bS9LY29uZmlnOjQzOmNvbmZpZyBLVk1fTU1JT1xcbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTQ1LVxcbnZpcnQva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9BU1lOQ19QRlxcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNDktIyBUb2dnbGUgdG8gc3dpdGNoIGJldHdlZW4gZGlyZWN0IG5vdGlmaWNhdGlvbiBhbmQgYmF0Y2ggam9iXFxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcXG52aXJ0L2t2bS9LY29uZmlnLTUxLSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTYxLVxcbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXFxudmlydC9rdm0vS2NvbmZpZy02My0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTY3LVxcbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbnZpcnQva3ZtL0tjb25maWctNjktICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTcwLVxcbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9LY29uZmlnLTcyLSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy03My1cXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXFxudmlydC9rdm0vS2NvbmZpZy03NS0gICAgICAgZGVmX2Jvb2wgeVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctOTMtXFxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG52aXJ0L2t2bS9LY29uZmlnLTk1LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy05Ni1cXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxudmlydC9rdm0vS2NvbmZpZy05OC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctOTktXFxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG52aXJ0L2t2bS9LY29uZmlnLTEwMS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctMTAyLVxcbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjM5Ljk4MDk3MjU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDczMjQ2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkcmVzc2luZyB0aGUgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHRvb2wgaXMgY2hlY2tpbmcgbXkgY29uZmlndXJhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSB4ODZfNjQuIE5vIHN1cnByaXNlcyB0aGVyZS4gUmlnaHQsIHNvIEkgc2VlIGBLVk1fQk9PSzNTXzY0YCBmbGFnZ2VkIGFzIGFuIGlzc3VlLiBUaGF0J3MgYSBQb3dlclBDLXNwZWNpZmljIHNldHRpbmcsIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGJlIGluIGFuIHg4Nl82NCBrZXJuZWwgdHJlZS4gTWFrZXMgc2Vuc2UuIEkgY2FuIGNsZWFybHkgc2ltcGxpZnkgdGhpczsgSSdsbCBqdXN0IHN1cHBseSBgS1ZNYCBhbmQgYEtWTV9DT01QQVRgLCBvciBwZXJoYXBzIGp1c3QgYEtWTWAuIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBnZW5lcmFsIGNhc2UuIEhtbSwgYnV0IHdhaXQuIFRoZSB0b29sIGlzIG5vdyBleHBsaWNpdGx5IGZsYWdnaW5nIHRob3NlIGNvbmZpZ3MgYXMgbm9uLWV4aXN0ZW50IHdpdGhpbiB0aGUga2VybmVsIHRyZWUuIE9rYXksIGxldCdzIGtlZXAgaXQgc2ltcGxlOyBgS1ZNYCBzaG91bGQgd29yaywgYW5kIHRoZSByZXN0IHNob3VsZCBiZSBmaWd1cmVkIG91dCBieSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5LiBJIGNhbiBzZWUgd2h5IHRoZSBvdGhlciBjb25maWdzIGFyZSBjYXVzaW5nIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOTUsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjQ0Ljg4ODI5OTQ1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MzE0NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIFZNIGZpbGUgZGVzY3JpcHRvciBhbmQgaW1wbGVtZW50cyBuZXcgbG9naWMgaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIFZNIGZpbGUgZGVzY3JpcHRvciBhbmQgaW1wbGVtZW50cyBuZXcgbG9naWMgaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6NDQuOTU2NjIwMjcxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI4NzE3MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjQ0Ljk1NzExNzE0MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODI4NjY3MDc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCB3aGljaCB0YWtlcyBhIHN0cnVjdCBga3ZtX3BwY19jb21wYXRfY2Fwc2AgZnJvbSB1c2Vyc3BhY2UsIHBvcHVsYXRlcyBpdCB3aXRoIGhvc3QgY2FwYWJpbGl0aWVzLCBhbmQgY29waWVzIGl0IGJhY2suIFRoZSBzdHJ1Y3QgYGhvc3RfY2Fwc2AgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGA9IHt9YC4gVGhlIGtlcm5lbCB1c2VzIHRoZSBzdGFuZGFyZCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBoZWxwZXJzLCB3aGljaCBzYWZlbHkgaGFuZGxlIHNpemUgbWlzbWF0Y2hlcyBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQga2VybmVsIHNwYWNlLiBTcGVjaWZpY2FsbHksIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgemVyb2VzIGFueSB0cmFpbGluZyBieXRlcyBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCdzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWEyZmFjZDBjY2M3MTE1NWEyYTA0ODM1NDIyMzJjZDE4NGY0NWFiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjA6MDQ6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGUzMDAzYTI0MWQ1YjAuLmU2NTZkMTE3Y2QwYjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiArNjU2Niw5NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxuICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC5cbiBcbis0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rOkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTXG4rOkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcbis6VHlwZTogdm0gaW9jdGxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dClcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXG4rXG4rRXJyb3JzIGluY2x1ZGU6XG4rXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yXG4rICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxuKyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhblxuKyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkXG4rICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXG4rICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXNcbisgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGV4Y2VlZHMgYGBQQUdFX1NJWkVgYCAocGF0aG9sb2dpY2FsIGlucHV0IGd1YXJkKSxcbisgICAgICAgICAgIG9yIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmRcbisgICAgICAgICAgIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybyAobmV3IHVzZXJzcGFjZSBvblxuKyAgICAgICAgICAgb2xkIGtlcm5lbCB3aXRoIG5vbi1kZWZhdWx0IGZpZWxkcyBzZXQpOyBpbiB0aGUgbGF0dGVyIGNhc2VcbisgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYFxuKyAgICAgICAgICAgZmllbGQgc28gdXNlcnNwYWNlIGNhbiByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcbisgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcbit3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbitcbitUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXG4rXG4rOjpcbitcbisgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbisgIH07XG4rXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4rVGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnRcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4rXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxuK1xuKy0gSWYgYGBzaXplYGAgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSxcbisgIG5ldyBrZXJuZWwpLCB0aGUga2VybmVsIHplcm8tcGFkcyB0aGUgdW5rbm93biB0cmFpbGluZyBmaWVsZHMgYmVmb3JlXG4rICByZXR1cm5pbmcsIGFuZCB3cml0ZXMgYmFjayBgYHNpemVgYCB1bmNoYW5nZWQgc28gdXNlcnNwYWNlIGtub3dzIGhvd1xuKyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC5cbistIElmIGBgc2l6ZWBgIGVxdWFscyB0aGUga2VybmVsJ3Mgc3RydWN0IHNpemUsIHRoZSBzdHJ1Y3QgaXMgY29waWVkXG4rICB2ZXJiYXRpbS5cbistIElmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAobmV3IHVzZXJzcGFjZSxcbisgIG9sZCBrZXJuZWwpIGFuZCB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgYWxsIHplcm8sIHRoZSBjYWxsXG4rICBzdWNjZWVkcyBhcyBpZiB0aGUgc2l6ZXMgbWF0Y2hlZC4gSWYgYW55IHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybyxcbisgIHRoZSBrZXJuZWwgcmV0dXJucyBgYC1FMkJJR2BgIGFuZCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG9cbisgIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS5cbitcbitgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxuK3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uXG4rXG4rVGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XG4rbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWNcbitwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3RcbitzaWduaWZpY2FudCBiaXQpOlxuK1xuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZVxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCAoYml0IDMpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjExIHByb2Nlc3NvciBtb2RlXG4rXG4rLi4gbm90ZTo6XG4rXG4rICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxuKyAgIHNpZ25pZmljYW50IGJpdCkuIEluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGFyZSBkZWZpbmVkIGFzOlxuK1xuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjIpYGBcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYxKWBgXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MClgYFxuK1xuKyAgIFVzZXJzcGFjZSBzaG91bGQgdXNlIHRoZSBkZWZpbmVkIGNvbnN0YW50cyBmcm9tIGBgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VgYCByYXRoZXJcbisgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cbitcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiArMzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMge1xuIFx0Ym9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpO1xuIFx0aW50ICgqY3JlYXRlX3ZtX2RlYnVnZnMpKHN0cnVjdCBrdm0gKmt2bSk7XG4gXHRpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTtcbitcdGludCAoKmdldF9jb21wYXRfY2Fwcykoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcyk7XG4gfTtcbiBcbiBleHRlcm4gc3RydWN0IGt2bXBwY19vcHMgKmt2bXBwY19odl9vcHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMDc3YzU0MzdmNTIxOS4uOTEzYTY0YjkwMWEzZCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzNyw2ICs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIge1xuIFx0X191NjRcdGJlaGF2aW91cl9tYXNrO1x0XHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xuIH07XG4gXG4rLyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovXG4rc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuK1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuK1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbit9O1xuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXG4rXG4rLypcbisgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cbisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuXG4rICovXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XHQoMVVMTCBcdTAwM2NcdTAwM2MgNjIpXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMFx0KDFVTEwgXHUwMDNjXHUwMDNjIDYxKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MClcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcdFx0KEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkgfCBcXFxuK1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAgfCBcXFxuK1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXG4gLypcbiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC02NTEwLDYgKzY1MTAsNjEgQEAgc3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuK3tcbitcdHN3aXRjaCAoY3B1X3ZlcnNpb24pIHtcbitcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgUFZSX0FSQ0hfMzE6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuK1x0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xuK1x0bG9uZyByYyA9IC1FSU5WQUw7XG4rXHR1MzIgY3B1X3ZlcnNpb24gPSAwO1xuK1xuK1x0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuK1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuK1x0XHRcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XG4rXHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbitcdFx0XHRyYyA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcImNwdVwiKSB7XG4rXHRcdFx0XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcImNwdS12ZXJzaW9uXCIsXG4rXHRcdFx0XHRcdFx0XHQgIFx1MDAyNmNwdV92ZXJzaW9uKSkge1xuK1x0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWNwdV92ZXJzaW9uKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Y2FwYWJpbGl0aWVzKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRob3N0X2NhcHMtXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcbitcbitcdHJldHVybiByYztcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICs2NjA3LDcgQEAgc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuaGFzaF92M19wb3NzaWJsZSA9IGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlLFxuIFx0LmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LFxuIFx0LmNyZWF0ZV92bV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnNfaHYsXG4rXHQuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcyxcbiB9O1xuIFxuIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5pbmRleCAwMDMwMjM5OWZjMzdiLi4yZmU0ZWEwY2E0ZmYxIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5AQCAtNjk3LDYgKzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbisjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbitcdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XG4rXHRcdHIgPSAwO1xuK1x0XHRpZiAoaHZfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtaHZfb25fcHNlcmllcygpKVxuK1x0XHRcdHIgPSAxO1xuK1x0XHRicmVhaztcbisjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0yNDYzLDYgKzI0NzAsNzcgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2Vzdm1fb2ZmKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuK1x0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbitcdFx0dTY0IHVzaXplO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cbitcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuK1x0XHQgKi9cbitcdFx0ciA9IC1FRkFVTFQ7XG4rXHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRyID0gLUUyQklHO1xuK1x0XHRpZiAodW5saWtlbHkodXNpemUgXHUwMDNlIFBBR0VfU0laRSkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWxcbitcdFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXG4rXHRcdCAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsXG4rXHRcdCAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuXG4rXHRcdCAqL1xuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKHVzaXplIFx1MDAzYyBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMClcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbitcdFx0ICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weVxuK1x0XHQgKiAgIHVzaXplIFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxuK1x0XHQgKiAgIHVzaXplIFx1MDAzZSAga3NpemU6IHN1Y2NlZWQgaWZmIHRyYWlsaW5nIGJ5dGVzIGFyZSB6ZXJvLCBlbHNlIC1FMkJJR1xuK1x0XHQgKi9cbitcdFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxuK1x0XHRcdFx0XHQgIGFyZ3AsIHVzaXplKTtcbitcdFx0aWYgKHIpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyXG4rXHRcdFx0ICoga2VybmVsLiBXcml0ZSBiYWNrIGtzaXplIGluIGhvc3RfY2Fwcy5zaXplIHNvXG4rXHRcdFx0ICogdXNlcnNwYWNlIGtub3dzIHdoaWNoIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLFxuK1x0XHRcdCAqIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAociA9PSAtRTJCSUcpXG4rXHRcdFx0XHRpZiAocHV0X3VzZXIoKF9fdTY0KXNpemVvZihob3N0X2NhcHMpLFxuK1x0XHRcdFx0XHQgICAgIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcbitcdFx0XHRcdFx0ciA9IC1FRkFVTFQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ciA9IC1FTk9UVFk7XG4rXHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuK1x0XHRpZiAocilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwsXG4rXHRcdCAqIG5vdCB1c2l6ZTogaWYgbmV3IHVzZXJzcGFjZSBwYXNzZWQgYSBsYXJnZXIgc3RydWN0IHdpdGggemVyb1xuK1x0XHQgKiB0cmFpbGluZyBieXRlcywgd2Ugb25seSBmaWxsZWQgc2l6ZW9mKGhvc3RfY2FwcykgYnl0ZXMuXG4rXHRcdCAqL1xuK1x0XHRob3N0X2NhcHMuc2l6ZSA9IG1pbl90KHU2NCwgdXNpemUsIHNpemVvZihob3N0X2NhcHMpKTtcbitcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbitcdFx0XHRcdFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xuK1x0XHRicmVhaztcbitcdH1cbiBcdGRlZmF1bHQ6IHtcbiBcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWFyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlLi43MGUzNmU2YTBhZDRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XG4rI2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbkBAIC0xMzQxLDYgKzEzNDIsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfQ09VTlRFUl9PRkZTRVQgKi9cbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcbiAjZGVmaW5lIEtWTV9BUk1fR0VUX1JFR19XUklUQUJMRV9NQVNLUyBfSU9SKEtWTUlPLCAgMHhiNiwgc3RydWN0IHJlZ19tYXNrX3JhbmdlKVxuKy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTICovXG4rI2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1x0X0lPKEtWTUlPLCAgMHhiOClcbiBcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cbiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFXHQgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6NDQuOTU3MTE5NDcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzAzOTMyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBLTVNBTiBGdXp6aW5nIE5lY2Vzc2l0eSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdXNlcnNwYWNlIHByb3ZpZGVzIGEgYGt2bV9wcGNfY29tcGF0X2NhcHNgIHN0cnVjdCwgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaXQsIGFuZCB0aGVuIGNvcGllcyBkYXRhIGJhY2sgdG8gdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRlc2VydmVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC5cblxuSSdtIHNlZWluZyBpdCByZWFkcyBhIHNpemUgdmFsdWUgZnJvbSB1c2Vyc3BhY2UsIGRvZXMgc29tZSBzaXplIGNoZWNrcyB0byBoYW5kbGUgb2xkL25ldyB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0IGFuZCB0aGVuIHVzZXMgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgdG8gcmVhZCB0aGUgc3RydWN0IGl0c2VsZi4gSXQgdGhlbiB2YWxpZGF0ZXMgc29tZSBmbGFncywgY2FsbHMgYSBga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHNgIGNhbGxiYWNrLCBhbmQgZmluYWxseSB1c2VzIGBjb3B5X3N0cnVjdF90b191c2VyYCB0byB3cml0ZSB0aGUgcHJvY2Vzc2VkIGRhdGEgYmFjayB0byB1c2Vyc3BhY2UuXG5cbldhaXQgYSBzZWNvbmQuLi4gYGNvcHlfc3RydWN0X3RvX3VzZXJgPyBJIGRvbid0IHJlY2FsbCBzZWVpbmcgdGhhdCBmdW5jdGlvbiBiZWZvcmUuIElzIHRoaXMgc29tZSBuZXcgaGVscGVyPyBJdCdzIG5vdCBpbW1lZGlhdGVseSBzcHJpbmdpbmcgdG8gbWluZCBhcyBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBxdWljayBgZ3JlcGAgdG8gc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNTo1My4xODc1MTY3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDgzOTUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3N0cnVjdF90b191c2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjE3PWZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2MTgtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MTk6VGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2MjAtdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9MjM2Mz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yNTM5LVxcdFxcdGhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjI1NDA6XFx0XFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZob3N0X2NhcHMsXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjU0MS1cXHRcXHRcXHRcXHRcXHRzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7XFxuLS1cXG5ibG9jay9ibGstaW50ZWdyaXR5LmM9NTg9aW50IGJsa19nZXRfbWV0YV9jYXAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0xMTgtb3V0OlxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoxMTk6XFx0cmV0dXJuIGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZtZXRhX2NhcCwgc2l6ZW9mKG1ldGFfY2FwKSxcXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMTIwLVxcdFxcdFxcdFxcdCAgIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2Rydi5jPTI1PXN0YXRpYyBpbnQgZXRob3N1X2lvY3RsX2Rldl9xdWVyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9kcnYuYy00NC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3VfZHJ2LmM6NDU6XFx0XFx0cmV0dXJuIGNvcHlfc3RydWN0X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGFyZ3MtXFx1MDAzZXBvaW50ZXIpLFxcbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9kcnYuYy00Ni1cXHRcXHRcXHRcXHRcXHQgICBhcmdzLVxcdTAwM2VzaXplLFxcbi0tXFxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvdGVncmEyNDEtY21kcXYuYz0xMjE4PXRlZ3JhMjQxX2NtZHF2X2luaXRfdmludGZfdXNlcihzdHJ1Y3QgYXJtX3ZzbW11ICp2c21tdSxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL3RlZ3JhMjQxLWNtZHF2LmMtMTI2OC1cXHRkYXRhLm91dF92aW50Zl9tbWFwX29mZnNldCA9IHZpbnRmLVxcdTAwM2VtbWFwX29mZnNldDtcXG5kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My90ZWdyYTI0MS1jbWRxdi5jOjEyNjk6XFx0cmV0ID0gaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIFxcdTAwMjZkYXRhLFxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL3RlZ3JhMjQxLWNtZHF2LmMtMTI3MC1cXHRcXHRcXHRcXHRcXHRJT01NVV9WSU9NTVVfVFlQRV9URUdSQTI0MV9DTURRVixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTc5MT1zdGF0aWMgaW50IG1vY2tfdmlvbW11X2luaXQoc3RydWN0IGlvbW11ZmRfdmlvbW11ICp2aW9tbXUsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy04MjQtXFx0XFx0ZGF0YS5vdXRfbW1hcF9vZmZzZXQgPSBtb2NrX3Zpb21tdS1cXHUwMDNlbW1hcF9vZmZzZXQ7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODI1OlxcdFxcdHJjID0gaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcihcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy04MjYtXFx0XFx0XFx0dXNlcl9kYXRhLCBcXHUwMDI2ZGF0YSwgSU9NTVVfVklPTU1VX1RZUEVfU0VMRlRFU1QsIG91dF9kYXRhKTtcXG4tLVxcbmZzL2ZpbGVfYXR0ci5jPTM3ND1TWVNDQUxMX0RFRklORTUoZmlsZV9nZXRhdHRyLCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXFxuLS1cXG5mcy9maWxlX2F0dHIuYy00MjAtXFx0ZmlsZWF0dHJfdG9fZmlsZV9hdHRyKFxcdTAwMjZmYSwgXFx1MDAyNmZhdHRyKTtcXG5mcy9maWxlX2F0dHIuYzo0MjE6XFx0ZXJyb3IgPSBjb3B5X3N0cnVjdF90b191c2VyKHVmYXR0ciwgdXNpemUsIFxcdTAwMjZmYXR0cixcXG5mcy9maWxlX2F0dHIuYy00MjItXFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgZmlsZV9hdHRyKSwgTlVMTCk7XFxuLS1cXG5mcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL3BpZGZzLmMtNDk1LVxcdCAqL1xcbmZzL3BpZGZzLmM6NDk2OlxcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHVpbmZvLCB1c2l6ZSwgXFx1MDAyNmtpbmZvLCBzaXplb2Yoa2luZm8pLCBOVUxMKTtcXG5mcy9waWRmcy5jLTQ5Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg9NTYyPWlvbW11X2NvcHlfc3RydWN0X2Zyb21fZnVsbF91c2VyX2FycmF5KHZvaWQgKmtkc3QsIHNpemVfdCBrZHN0X2VudHJ5X3NpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNTkzLS8qKlxcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo1OTQ6ICogX19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNTk1LSAqIEBkc3RfZGF0YTogUG9pbnRlciB0byBhIHN0cnVjdCBpb21tdV91c2VyX2RhdGEgZm9yIHVzZXIgc3BhY2UgZGF0YSBsb2NhdGlvblxcbi0tXFxuaW5jbHVkZS9saW51eC9pb21tdS5oPTYwND1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo2MDU6X19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyKGNvbnN0IHN0cnVjdCBpb21tdV91c2VyX2RhdGEgKmRzdF9kYXRhLFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MDYtXFx0XFx0XFx0ICAgIHZvaWQgKnNyY19kYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV90eXBlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb21tdS5oLTYxNC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg6NjE1OlxcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKGRzdF9kYXRhLVxcdTAwM2V1cHRyLCBkc3RfZGF0YS1cXHUwMDNlbGVuLCBzcmNfZGF0YSxcXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjE2LVxcdFxcdFxcdFxcdCAgIGRhdGFfbGVuLCBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MTktLyoqXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYyMDogKiBpb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjIxLSAqIEB1c2VyX2RhdGE6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgaW9tbXVfdXNlcl9kYXRhIGZvciB1c2VyIHNwYWNlIGRhdGEgbG9jYXRpb25cXG4tLVxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MjgtICovXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYyOTojZGVmaW5lIGlvbW11X2NvcHlfc3RydWN0X3RvX3VzZXIodXNlcl9kYXRhLCBrc3JjLCBkYXRhX3R5cGUsIG1pbl9sYXN0KSAgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo2MzA6XFx0X19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyKHVzZXJfZGF0YSwga3NyYywgZGF0YV90eXBlLCBzaXplb2YoKmtzcmMpLCBcXFxcXFxuaW5jbHVkZS9saW51eC9pb21tdS5oLTYzMS1cXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2ZlbmQodHlwZW9mKCprc3JjKSwgbWluX2xhc3QpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmg9MTExPWNvcHlfc3RydWN0X3RvX3NvY2twdHIoc29ja3B0cl90IGRzdCwgc2l6ZV90IHVzaXplLCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC0xMTQtXFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChkc3QpKVxcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oOjExNTpcXHRcXHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcihkc3QudXNlciwgdXNpemUsIHNyYywga3NpemUsIGlnbm9yZWRfdHJhaWxpbmcpO1xcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTExNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTM5Mz1jb3B5X3N0cnVjdF9mcm9tX3VzZXIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC00MTctLyoqXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDE4OiAqIGNvcHlfc3RydWN0X3RvX3VzZXI6IGNvcHkgYSBzdHJ1Y3QgdG8gdXNlcnNwYWNlXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDE5LSAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxcbi0tXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDY0LSAqXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDY1OiAqICAgICAgZXJyID0gY29weV9zdHJ1Y3RfdG9fdXNlcih1YXJnLCB1c2l6ZSwgXFx1MDAyNmthcmcsIHNpemVvZihrYXJnKSxcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC00NjYtICpcXHRcXHRcXHRcXHQgIFxcdTAwMjZpZ25vcmVkX3RyYWlsaW5nKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTQ4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaDo0OTA6Y29weV9zdHJ1Y3RfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBzaXplX3QgdXNpemUsIGNvbnN0IHZvaWQgKnNyYyxcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC00OTEtXFx0XFx0ICAgIHNpemVfdCBrc2l6ZSwgYm9vbCAqaWdub3JlZF90cmFpbGluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTUzOD1jb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXIodm9pZCAqZHN0LCBzaXplX3QgZHN0c2l6ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTU1Ni0vKipcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaDo1NTc6ICogVGhpcyBpcyBsaWtlIGNvcHlfc3RydWN0X3RvX3VzZXIoKSwgYnV0IHRoZVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTU1OC0gKiBkc3QgYnVmZmVyIGlzIGEga2VybmVsIGJvdW5jZSBidWZmZXIgaW5zdGVhZFxcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYz02OT1zdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTE2LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTE3OlxcdGlmIChjb3B5X3N0cnVjdF90b191c2VyKHVkYXRhLCB1c2l6ZSwgZGF0YSwgaGRyLnNpemUsIE5VTEwpKVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTE4LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM9MTA2MD1TWVNDQUxMX0RFRklORTQoc2NoZWRfZ2V0YXR0ciwgcGlkX3QsIHBpZCwgc3RydWN0IHNjaGVkX2F0dHIgX191c2VyICosIHVhdHRyLFxcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtMTEwMy1cXHRrYXR0ci5zaXplID0gbWluKHVzaXplLCBzaXplb2Yoa2F0dHIpKTtcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYzoxMTA0OlxcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHVhdHRyLCB1c2l6ZSwgXFx1MDAyNmthdHRyLCBzaXplb2Yoa2F0dHIpLCBOVUxMKTtcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy0xMTA1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6NTQuNzgyMzY3ODkyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODM1MjM1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrIGluIEtWTSBQUEMgQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoZSBmdW5jdGlvbiBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZnJvbSBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgIGlzIGludm9sdmVkLCBhbmQgaXQgaGFuZGxlcyB0aGUgdHJhbnNmZXIgb2YgYSBzdHJ1Y3QgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZSwgdGFraW5nIHNpemUgZGlmZmVyZW5jZXMgaW50byBhY2NvdW50LiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgaG9zdF9jYXBzYCBpbiB0aGlzIEtWTSBQUEMgY29udGV4dC5cblxuRmlyc3QsIGBob3N0X2NhcHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gKGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtgKS4gIFRoYXQncyBnb29kLCBtZWFucyBhbGwgZmllbGRzIHN0YXJ0IGNsZWFuLiBUaGVuLCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBjb3BpZXMgdXNlci1wcm92aWRlZCBkYXRhIGludG8gYGhvc3RfY2Fwc2AuIElmIHRoZSB1c2VyIHByb3ZpZGVzIGEgc21hbGxlciBzaXplIChgdXNpemUgXHUwMDNjIHNpemVvZihob3N0X2NhcHMpYCksIHRoZSB0cmFpbGluZyBieXRlcyBvZiBgaG9zdF9jYXBzYCB3aWxsIHJlbWFpbiB6ZXJvLCBvciB3aWxsIGJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IHRoZSBmdW5jdGlvbiwgd2hpY2ggaXMgZmluZS5cblxuTm93LCB0aGUgYGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzYCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gSSdtIGNoZWNraW5nIGl0IGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gSXQgc2VlbXMgbGlrZSB0aGUgb25seSBmaWVsZCBvZiBgaG9zdF9jYXBzYCBtb2RpZmllZCBpbiB0aGlzIGZ1bmN0aW9uIGlzIGBjb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhlIHJlc3Qgc3RheXMgYXMgaXQgd2FzIGZyb20gdGhlIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNhbGwgKHBvdGVudGlhbGx5IHVzZXItcHJvdmlkZWQgZGF0YSkuXG5cbkNydWNpYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgKm92ZXJ3cml0ZXMqIGBob3N0X2NhcHNgLiBTbywgaWYgdGhlIHVzZXIgc2VuZHMgdW5pbml0aWFsaXplZCBkYXRhLCB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSBlbmRzIHVwIGluIGBob3N0X2NhcHNgLiAgVGhlbiwgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGdldHMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgdmFsdWUgZnJvbSBgZ2V0X2NvbXBhdF9jYXBzYC4gVGhlbiB0aGUgYHNpemVgIGlzIHJld3JpdHRlbiB3aXRoIHRoZSBtaW4gb2YgdGhlIHNpemUuXG5cbkhlcmUncyB0aGUga2V5OiB0aGUgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHRoZW4gY29waWVzIGBob3N0X2NhcHNgICpiYWNrKiB0byB1c2Vyc3BhY2UuICBUaGlzIG1ha2VzIG1lIGltbWVkaWF0ZWx5IGxvb2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlLlxuXG5Ib3dldmVyLCBgaG9zdF9jYXBzYCBpcyAqemVyby1pbml0aWFsaXplZCouIFRoZW4sIHRoZSB1c2VyJ3MgZGF0YSBpcyBjb3BpZWQgaW50byBgaG9zdF9jYXBzYC4gQW55IHJlbWFpbmluZyBieXRlcyBhcmUgemVyb2VkIGJ5IHRoZSBrZXJuZWwuIFRoZW4gdGhlIGtlcm5lbCBvdmVyd3JpdGVzIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBhbmQgc2l6ZSB3aXRoIGtub3duIHZhbHVlcy4gVGhpcyBtZWFucyB0aGVyZSdzIG5vIGxlYWsuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCBiYWNrIGVpdGhlciAqY2FtZSogZnJvbSB1c2Vyc3BhY2UsIHdhcyBleHBsaWNpdGx5IHplcm9lZCwgb3Igc2V0IGJ5IHRoZSBrZXJuZWwuXG5cbkknbSBhbHNvIGxvb2tpbmcgYXQgdGhlIHN0cnVjdCBkZWZpbml0aW9uOlxuYGBgY1xuc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuXHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG5cdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbn07XG5gYGBcbk5vIHBhZGRpbmcgYmV0d2VlbiBmaWVsZHMsIGFsbCBgX191NjRgLCBzbyB0aGVyZSBhcmUgbm8gb3Bwb3J0dW5pdGllcyBmb3IgcGFkZGluZy1yZWxhdGVkIGlzc3Vlcy4gQW5kIGV2ZW4gaWYgdGhlcmUgKndhcyogcGFkZGluZywgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gdGFrZXMgY2FyZSBvZiBpdC4gQWxzbywgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgd291bGQgb3ZlcndyaXRlIHBhZGRpbmcgd2l0aCB1c2VyIGRhdGEsIHdoaWNoIGlzIGZpbmUgdG8gc2VuZCBiYWNrLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBgY2FwYWJpbGl0aWVzYCwgYGNwdV92ZXJzaW9uYCwgYW5kIGByY2AgYXJlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbmRpdGlvbmFscyBlaXRoZXIuIFNvIEknbSBnb29kIHRoZXJlLlxuXG5PbmUgZmluYWwgY2hlY2sgb24gYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyYCBzaXplcy4gSWYgYHVzaXplIFx1MDAzZSBzaXplb2YoaG9zdF9jYXBzKWAsIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNoZWNrcyBmb3IgdHJhaWxpbmcgbm9uLXplcm8gYnl0ZXMgaW4gdXNlcnNwYWNlLCBhbmQgcmV0dXJucyBgLUUyQklHYCBpZiB0aGV5IGFyZSBub3QgemVyby4gSWYgdGhleSAqYXJlKiB6ZXJvLCB0aGVuIGl0IGNvcGllcyBgc2l6ZW9mKGhvc3RfY2FwcylgIGJ5dGVzIGludG8ga2VybmVsIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCB3ZSBleHBlY3QuICBOb3csIHRoZSBjcml0aWNhbCBwYXJ0Li4uIGBjb3B5X3N0cnVjdF90b191c2VyYCBjb3BpZXMgYmFjayB0byB1c2Vyc3BhY2UuIEFuZCBpdCB0YWtlcyBgdXNpemVgIGFzIGlucHV0LiBTbyBldmVuIGlmIGB1c2l6ZSBcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcylgLCBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgd2lsbCBjb3B5IGBzaXplb2YoaG9zdF9jYXBzKWAgYnl0ZXMgaW50byB1c2Vyc3BhY2UsIGFuZCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXJzcGFjZSFcblxuSSdtIG5vdyBzYXRpc2ZpZWQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBoZXJlLCBhZnRlciB0aGUgZG91YmxlIGNoZWNrIG9mIGBjb3B5X3N0cnVjdF90b191c2VyYC4gSSdkIHdhbnQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGJ1dCB0aGUgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBlbm91Z2ggdG8gY29uZmlybSB0aGUgY29ycmVjdCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA2OjEwLjYxNzYwNzMwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5OTIzNTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3N0cnVjdF90b191c2VyXFxcXCh2b2lkIF9fdXNlciBcXFxcKmRzdCwgc2l6ZV90IHVzaXplLCBjb25zdCB2b2lkIFxcXFwqc3JjLFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaD00ODk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgaW50XFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDkwOmNvcHlfc3RydWN0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgc2l6ZV90IHVzaXplLCBjb25zdCB2b2lkICpzcmMsXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDkxLVxcdFxcdCAgICBzaXplX3Qga3NpemUsIGJvb2wgKmlnbm9yZWRfdHJhaWxpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA2OjEzLjAxNjg1MzQ1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODg4OTU5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZm9yIEVmZmljaWVuY3kgYW5kIFNlY3VyaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBjb3B5X3N0cnVjdF90b191c2VyYCB3aXRoaW4gYGluY2x1ZGUvbGludXgvdWFjY2Vzcy5oYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGFzIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgd2hlbiBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIHBlcmZvcm1hbmNlOiBob3cgZWZmaWNpZW50bHkgZG9lcyBpdCB0cmFuc2ZlciB0aGUgZGF0YT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGlzc3VlcyBvciByZWR1bmRhbnQgY2hlY2tzP1xuXG5UaGVuLCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaXMgYSBjbGFzc2ljIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciBmb3JtYXQgc3RyaW5nIGJ1Z3MsIGV2ZW4gaWYgdGhleSBzZWVtIHVubGlrZWx5LiBBcmUgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIHJpZ29yb3VzbHkgdmFsaWRhdGVkPyBXaGF0IGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIHVzZXItc3BhY2UgZGF0YSBjaGFuZ2VzIGNvbmN1cnJlbnRseT8gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGluY29ycG9yYXRlcyByb2J1c3QgbWVjaGFuaXNtcyB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBkYXRhIGFjY2VzcyBvciBjb3JydXB0aW9uLiBJcyB0aGVyZSBwcm9wZXIgYm91bmQgY2hlY2tpbmcgaW1wbGVtZW50ZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3dzIGxlYWRpbmcgdG8gd3JpdGUgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXI/IEFuZCBmaW5hbGx5LCBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3NlcyBncmFjZWZ1bGx5LCBhbmQgaWYgc28sIGF0IHdoYXQgY29zdD8gSSBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA2OjE2LjYwNTc1MjY5NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC91YWNjZXNzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDg5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg5OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGludFxcbiA0OTA6XFx0Y29weV9zdHJ1Y3RfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBzaXplX3QgdXNpemUsIGNvbnN0IHZvaWQgKnNyYyxcXG4gNDkxOlxcdFxcdFxcdCAgICBzaXplX3Qga3NpemUsIGJvb2wgKmlnbm9yZWRfdHJhaWxpbmcpXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHRcXHRzaXplX3Qgc2l6ZSA9IG1pbihrc2l6ZSwgdXNpemUpO1xcbiA0OTQ6XFx0XFx0c2l6ZV90IHJlc3QgPSBtYXgoa3NpemUsIHVzaXplKSAtIHNpemU7XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdC8qIERvdWJsZSBjaGVjayBpZiBrc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIGtub3duIG9iamVjdCBzaXplLiAqL1xcbiA0OTc6XFx0XFx0aWYgKFdBUk5fT05fT05DRShrc2l6ZSBcXHUwMDNlIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzcmMsIDEpKSlcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdFxcdC8qIERlYWwgd2l0aCB0cmFpbGluZyBieXRlcy4gKi9cXG4gNTAxOlxcdFxcdGlmICh1c2l6ZSBcXHUwMDNlIGtzaXplKSB7XFxuIDUwMjpcXHRcXHRcXHRpZiAoY2xlYXJfdXNlcihkc3QgKyBzaXplLCByZXN0KSlcXG4gNTAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA1MDQ6XFx0XFx0fVxcbiA1MDU6XFx0XFx0aWYgKGlnbm9yZWRfdHJhaWxpbmcpXFxuIDUwNjpcXHRcXHRcXHQqaWdub3JlZF90cmFpbGluZyA9IHVzaXplIFxcdTAwM2Mga3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gNTA3OlxcdFxcdFxcdFxcdG1lbWNocl9pbnYoc3JjICsgc2l6ZSwgMCwgcmVzdCkgIT0gTlVMTDtcXG4gNTA4OlxcdFxcdC8qIENvcHkgdGhlIGludGVyb3BlcmFibGUgcGFydHMgb2YgdGhlIHN0cnVjdC4gKi9cXG4gNTA5OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIHNpemUpKVxcbiA1MTA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDUxMTpcXHRcXHRyZXR1cm4gMDtcXG4gNTEyOlxcdH1cXG4gNTEzOlxcdFxcbiA1MTQ6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXFxuIDUxNTpcXHRfX2NvcHlfc3RydWN0X2dlbmVyaWNfYm91bmNlX2J1ZmZlcih2b2lkICpkc3QsIHNpemVfdCBkc3RzaXplLFxcbiA1MTY6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNyY3NpemUsXFxuIDUxNzpcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCAqaWdub3JlZF90cmFpbGluZylcXG4gNTE4OlxcdHtcXG4gNTE5OlxcdFxcdHNpemVfdCBzaXplID0gbWluKGRzdHNpemUsIHNyY3NpemUpO1xcbiA1MjA6XFx0XFx0c2l6ZV90IHJlc3QgPSBtYXgoZHN0c2l6ZSwgc3Jjc2l6ZSkgLSBzaXplO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHQvKiBEZWFsIHdpdGggdHJhaWxpbmcgYnl0ZXMuICovXFxuIDUyMzpcXHRcXHRpZiAoZHN0c2l6ZSBcXHUwMDNlIHNyY3NpemUpXFxuIDUyNDpcXHRcXHRcXHRtZW1zZXQoZHN0ICsgc2l6ZSwgMCwgcmVzdCk7XFxuIDUyNTpcXHRcXHRpZiAoaWdub3JlZF90cmFpbGluZylcXG4gNTI2OlxcdFxcdFxcdCppZ25vcmVkX3RyYWlsaW5nID0gZHN0c2l6ZSBcXHUwMDNjIHNyY3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gNTI3OlxcdFxcdFxcdFxcdG1lbWNocl9pbnYoc3JjICsgc2l6ZSwgMCwgcmVzdCkgIT0gTlVMTDtcXG4gNTI4OlxcdFxcdC8qIENvcHkgdGhlIGludGVyb3BlcmFibGUgcGFydHMgb2YgdGhlIHN0cnVjdC4gKi9cXG4gNTI5OlxcdFxcdG1lbWNweShkc3QsIHNyYywgc2l6ZSk7XFxuIDUzMDpcXHR9XFxuIDUzMTpcXHRcXG4gNTMyOlxcdC8qKlxcbiA1MzM6XFx0ICogVGhpcyBpcyBsaWtlIGNvcHlfc3RydWN0X2Zyb21fdXNlcigpLCBidXQgdGhlXFxuIDUzNDpcXHQgKiBzcmMgYnVmZmVyIHdhcyBhbHJlYWR5IGNvcGllZCBpbnRvIGEga2VybmVsXFxuIDUzNTpcXHQgKiBib3VuY2UgYnVmZmVyLCBzbyBpdCB3aWxsIG5ldmVyIHJldHVybiAtRUZBVUxULlxcbiA1MzY6XFx0ICovXFxuIDUzNzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcXG4gNTM4OlxcdGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcih2b2lkICpkc3QsIHNpemVfdCBkc3RzaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNjoxNi42MDU4OTg1MjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5NjQ2MDg5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIGZvciBQb3RlbnRpYWwgSW5pdGlhbGl6YXRpb24gSXNzdWVzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgZnVuY3Rpb24sIHRyeWluZyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCB0aGlzIGlzIHdoYXQgSSd2ZSBnb3Qgc28gZmFyLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHdvcmtzLiBJdCBjbGVhcnMgdHJhaWxpbmcgYnl0ZXMgaW4gdXNlcnNwYWNlIGlmIHRoZSBjb3B5IHNpemUgKGB1c2l6ZWApIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgc3RydWN0J3Mgc2l6ZSAoYGtzaXplYCkuICBNb3JlIGltcG9ydGFudGx5LCBpdCBjb3BpZXMgYSAqbWF4aW11bSogb2YgYG1pbihrc2l6ZSwgdXNpemUpYCBieXRlcyBmcm9tIHRoZSBzb3VyY2UgKGBzcmNgKSB0byB0aGUgZGVzdGluYXRpb24gKGBkc3RgKSwgd2hpY2ggbWVhbnMgaXQgd29uJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGluaXRpYWxpemVkIHNvdXJjZSBtZW1vcnkuIEluIG91ciBjYXNlLCB0aGUgc291cmNlIGlzIGBcdTAwMjZob3N0X2NhcHNgLCBhbmQgYGtzaXplYCBpcyBgc2l6ZW9mKGhvc3RfY2FwcylgLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZC4gU28gaXQgd2lsbCBiZSBzYWZlLlxuXG5Ob3csIGdvaW5nIHRocm91Z2ggYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGl0c2VsZiwgSSdtIHRyYWNpbmcgdGhlIHZhbHVlcy4gYGNhcGFiaWxpdGllc2AgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYHJjYCB0byBgLUVJTlZBTGAsIGFuZCBgY3B1X3ZlcnNpb25gIHRvIDAuIFRoZSBjb2RlIGJyYW5jaGVzIGJhc2VkIG9uIGBrdm1odl9vbl9wc2VyaWVzKClgLiBJZiBpdCdzIGZhbHNlLCBgcmNgIHJlbWFpbnMgYC1FSU5WQUxgLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuXG5cbklmIGBrdm1odl9vbl9wc2VyaWVzKClgIGlzIHRydWUgYW5kIGBrdm1odl9pc19uZXN0ZWR2MigpYCBpcyBhbHNvIHRydWUsIGBjYXBhYmlsaXRpZXNgIGdldHMgYXNzaWduZWQgYG5lc3RlZF9jYXBhYmlsaXRpZXNgLCBhbmQgYHJjYCBpcyBzZXQgdG8gMC4gIFRoYXQgaXMgYSBjb25kaXRpb25hbCBzZXQgZnJvbSBhIHByZS1kZWZpbmVkIHZhbHVlLlxuXG5PdGhlcndpc2UsIGlmIGBrdm1odl9pc19uZXN0ZWR2MigpYCBpcyBmYWxzZSwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBcImNwdVwiIG5vZGVzIHVzaW5nIGBvZl9ub2RlX3B1dGAuICBJdCBhdHRlbXB0cyB0byByZWFkIGEgXCJjcHUtdmVyc2lvblwiIHByb3BlcnR5IGludG8gYGNwdV92ZXJzaW9uYC4gYG9mX3Byb3BlcnR5X3JlYWRfdTMyYCByZXR1cm5zIDAgb24gc3VjY2VzcywgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiAgSW1wb3J0YW50bHksIGlmIHRoZSByZWFkIGlzIHN1Y2Nlc3NmdWwsIHRoZSBsb29wIGJyZWFrcy4gU28gaXQgZWZmZWN0aXZlbHkgZmluZHMgdGhlICpmaXJzdCogQ1BVIG5vZGUgd2l0aCB0aGUgcHJvcGVydHksIGFuZCB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zLlxuXG5JZiBubyBcImNwdS12ZXJzaW9uXCIgcHJvcGVydHkgaXMgZm91bmQsIGBjcHVfdmVyc2lvbmAgcmVtYWlucyAwLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYC1FSU5WQUxgLiAgSWYgaXQgKmlzKiBmb3VuZCwgdGhlIG5vbi16ZXJvIGBjcHVfdmVyc2lvbmAgaXMgcGFzc2VkIHRvIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGlzIGZ1bmN0aW9uIHRoZW4gcG9wdWxhdGVzIGBjYXBhYmlsaXRpZXNgIGJhc2VkIG9uIGBjcHVfdmVyc2lvbmAsIGFuZCByZXR1cm5zIGEgdmFsdWUuIGByY2AgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hcCBmdW5jdGlvbi5cblxuSWYgYHJjYCBpcyBuZWdhdGl2ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIE90aGVyd2lzZSwgaXQgYml0d2lzZSBBTkRzIGBjYXBhYmlsaXRpZXNgIHdpdGggYEtWTV9QUENfQ09NUEFUX0JJVE1BU0tgIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBgaG9zdF9jYXBzLVx1MDAzZWNvbXBhdF9jYXBhYmlsaXRpZXNgLCBiZWZvcmUgcmV0dXJuaW5nIGByY2AgKHdoaWNoIHNob3VsZCBub3cgYmUgMCkuXG5cblNvIGl0IGxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgSSBoYXZlIHJldmlld2VkIHNlZW1zIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBzdHJ1Y3QgYGhvc3RfY2Fwc2AgaXMgZGVmaW5pdGVseSB6ZXJvLWluaXRpYWxpemVkLiBJJ20gY29uZmlkZW50IGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaGFuZGxlIGNvcHlpbmcgc2FmZWx5LiBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgaGVyZS5cblxuSSB0aGluayBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSBrZXkgYXJlYXMsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHByZWNpc2UgYmVoYXZpb3Igb2YgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgb25jZSBtb3JlIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDY6MzAuNTcwNTExNjU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdWFjY2Vzcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MzpcXHRjb3B5X3N0cnVjdF9mcm9tX3VzZXIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuIDM5NDpcXHRcXHRcXHQgICAgICBzaXplX3QgdXNpemUpXFxuIDM5NTpcXHR7XFxuIDM5NjpcXHRcXHRzaXplX3Qgc2l6ZSA9IG1pbihrc2l6ZSwgdXNpemUpO1xcbiAzOTc6XFx0XFx0c2l6ZV90IHJlc3QgPSBtYXgoa3NpemUsIHVzaXplKSAtIHNpemU7XFxuIDM5ODpcXHRcXG4gMzk5OlxcdFxcdC8qIERvdWJsZSBjaGVjayBpZiBrc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIGtub3duIG9iamVjdCBzaXplLiAqL1xcbiA0MDA6XFx0XFx0aWYgKFdBUk5fT05fT05DRShrc2l6ZSBcXHUwMDNlIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShkc3QsIDEpKSlcXG4gNDAxOlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDQwMjpcXHRcXG4gNDAzOlxcdFxcdC8qIERlYWwgd2l0aCB0cmFpbGluZyBieXRlcy4gKi9cXG4gNDA0OlxcdFxcdGlmICh1c2l6ZSBcXHUwMDNjIGtzaXplKSB7XFxuIDQwNTpcXHRcXHRcXHRtZW1zZXQoZHN0ICsgc2l6ZSwgMCwgcmVzdCk7XFxuIDQwNjpcXHRcXHR9IGVsc2UgaWYgKHVzaXplIFxcdTAwM2Uga3NpemUpIHtcXG4gNDA3OlxcdFxcdFxcdGludCByZXQgPSBjaGVja196ZXJvZWRfdXNlcihzcmMgKyBzaXplLCByZXN0KTtcXG4gNDA4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4gNDA5OlxcdFxcdFxcdFxcdHJldHVybiByZXQgPzogLUUyQklHO1xcbiA0MTA6XFx0XFx0fVxcbiA0MTE6XFx0XFx0LyogQ29weSB0aGUgaW50ZXJvcGVyYWJsZSBwYXJ0cyBvZiB0aGUgc3RydWN0LiAqL1xcbiA0MTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBzaXplKSlcXG4gNDEzOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA0MTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDQxNTpcXHR9XFxuIDQxNjpcXHRcXG4gNDE3OlxcdC8qKlxcbiA0MTg6XFx0ICogY29weV9zdHJ1Y3RfdG9fdXNlcjogY29weSBhIHN0cnVjdCB0byB1c2Vyc3BhY2VcXG4gNDE5OlxcdCAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxcbiA0MjA6XFx0ICogICAgICAgICBieXRlcyBsb25nLlxcbiA0MjE6XFx0ICogQHVzaXplOiAoQWxsZWdlZCkgc2l6ZSBvZiBAZHN0IHN0cnVjdC5cXG4gNDIyOlxcdCAqIEBzcmM6ICAgU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS5cXG4gNDIzOlxcdCAqIEBrc2l6ZTogU2l6ZSBvZiBAc3JjIHN0cnVjdC5cXG4gNDI0OlxcdCAqIEBpZ25vcmVkX3RyYWlsaW5nOiBTZXQgdG8gJXRydWUgaWYgdGhlcmUgd2FzIGEgbm9uLXplcm8gYnl0ZSBpbiBAc3JjIHRoYXRcXG4gNDI1OlxcdCAqIHVzZXJzcGFjZSBjYW5ub3Qgc2VlIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgYW4gc21hbGxlciBzdHJ1Y3QuXFxuIDQyNjpcXHQgKlxcbiA0Mjc6XFx0ICogQ29waWVzIGEgc3RydWN0IGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXJzcGFjZSwgaW4gYSB3YXkgdGhhdCBndWFyYW50ZWVzXFxuIDQyODpcXHQgKiBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3Igc3RydWN0IHN5c2NhbGwgYXJndW1lbnRzIChhcyBsb25nIGFzIGZ1dHVyZVxcbiA0Mjk6XFx0ICogc3RydWN0IGV4dGVuc2lvbnMgYXJlIG1hZGUgc3VjaCB0aGF0IGFsbCBuZXcgZmllbGRzIGFyZSAqYXBwZW5kZWQqIHRvIHRoZVxcbiA0MzA6XFx0ICogb2xkIHN0cnVjdCwgYW5kIHplcm9lZC1vdXQgbmV3IGZpZWxkcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlIG9sZFxcbiA0MzE6XFx0ICogc3RydWN0KS5cXG4gNDMyOlxcdCAqXFxuIDQzMzpcXHQgKiBTb21lIHN5c2NhbGxzIG1heSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IHVzZXJzcGFjZSBrbm93cyBhYm91dCBldmVyeXRoaW5nIGluXFxuIDQzNDpcXHQgKiB0aGUgc3RydWN0LCBhbmQgaWYgdGhlcmUgaXMgYSBub24temVybyB2YWx1ZSB0aGF0IHVzZXJzcGNlIGRvZXNuJ3Qga25vd1xcbiA0MzU6XFx0ICogYWJvdXQsIHRoZXkgd2FudCB0byByZXR1cm4gYW4gZXJyb3IgKHN1Y2ggYXMgLUVNU0dTSVpFKSBvciBoYXZlIHNvbWUgb3RoZXJcXG4gNDM2OlxcdCAqIGZhbGxiYWNrIChzdWNoIGFzIGFkZGluZyBhIFxcXCJ5b3UncmUgbWlzc2luZyBzb21lIGluZm9ybWF0aW9uXFxcIiBmbGFnKS4gSWZcXG4gNDM3OlxcdCAqIEBpZ25vcmVkX3RyYWlsaW5nIGlzIG5vbi0lTlVMTCwgaXQgd2lsbCBiZSBzZXQgdG8gJXRydWUgaWYgdGhlcmUgd2FzIGFcXG4gNDM4OlxcdCAqIG5vbi16ZXJvIGJ5dGUgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkIHRvIHVzZXJzcGFjZSAoaWUuIHdhcyBwYXN0IEB1c2l6ZSkuXFxuIDQzOTpcXHQgKlxcbiA0NDA6XFx0ICogV2hpbGUgdW5jb25kaXRpb25hbGx5IHJldHVybmluZyBhbiBlcnJvciBpbiB0aGlzIGNhc2UgaXMgdGhlIHNpbXBsZXN0XFxuIDQ0MTpcXHQgKiBzb2x1dGlvbiwgZm9yIG1heGltdW0gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB5b3Ugc2hvdWxkIHRyeSB0byBvbmx5IHJldHVyblxcbiA0NDI6XFx0ICogLUVNU0dTSVpFIGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRoZSBkYXRhIHRoYXQgY291bGRuJ3QgYmUgY29waWVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNjozMC41NzA2MTIzNzlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzMxNTE0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIE5vdCBKdXN0aWZpZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEFuYWx5emluZyB0aGlzIHBhdGNoLCBpdCdzIGNsZWFyIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBhZnRlciBjYXJlZnVsIGV4YW1pbmF0aW9uLCBJIGRvbid0IHNlZSBhbnkgc2lnbmlmaWNhbnQgcmlzayBoZXJlLlxuXG5GaXJzdCwgdGhlIGBob3N0X2NhcHNgIHN0cnVjdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgd2l0aCBgPSB7fWAuIFRoaXMgZ3VhcmFudGVlcyBhIGNsZWFuIHNsYXRlLCByZW1vdmluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiBGdXJ0aGVybW9yZSwgdGhlIGNvZGUgdXNlcyBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXJgIGNvbnNpc3RlbnRseS4gVGhlc2UgaGVscGVycyBhcmUgZGVzaWduZWQgdG8gaGFuZGxlIHBvdGVudGlhbCBzaXplIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHVzZXJzcGFjZSBhbmQga2VybmVsLXNwYWNlIHN0cnVjdHMsIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMuIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGlzIGNydWNpYWwsIGJlY2F1c2UgaXQgemVyby1pbml0aWFsaXplcyB0aGUgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpZiB0aGUgc291cmNlIGlzIHNtYWxsZXIuIFNpbmNlIGBob3N0X2NhcHNgIGlzIGFscmVhZHkgemVyb2VkLCB0aGUgbWVtc2V0IGlzIHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzLiBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZ3VhcmFudGVlcyB0aGF0IHdlJ3JlIG9ubHkgc2VuZGluZyBiYWNrIHRvIHVzZXJzcGFjZSB0aGUgc2l6ZSB3ZSdyZSBzdXBwb3NlZCB0by4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIGFuIGluZm8tbGVhayBieSBzZW5kaW5nIGJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZ2FyYmFnZS5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBwb3B1bGF0ZXMgdGhlIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBmaWVsZCwgd2hpY2ggSSBrbm93IGlzIGhhbmRsZWQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyBjb21wbGV4IHN0cnVjdHVyZXMgdG8gd29ycnkgYWJvdXQsIG5vdGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm9ybWF0aW9uIGxlYWsuIEknbSBjb25maWRlbnQgdGhhdCB0aGUgY29kZSBpcyBzb3VuZC5cblxuVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIEluIG15IHByb2Zlc3Npb25hbCBvcGluaW9uLCBnaXZlbiB0aGUgc2FmZXR5IG1lY2hhbmlzbXMgYWxyZWFkeSBpbiBwbGFjZSwgc3VjaCBhcyBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCwgYW5kIHRoZSBzdGFuZGFyZCBLQVNBTiBjaGVja3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3b3VsZCBiZSBvdmVya2lsbC4gSSBkb24ndCBzZWUgYSBzaWduaWZpY2FudCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGRhdGEgbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Nzg1LCJPdXRwdXRUb2tlbnMiOjMxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNjo0My4yNDM3NjYyMjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2Agd2hpY2ggdGFrZXMgYSBzdHJ1Y3QgYGt2bV9wcGNfY29tcGF0X2NhcHNgIGZyb20gdXNlcnNwYWNlLCBwb3B1bGF0ZXMgaXQgd2l0aCBob3N0IGNhcGFiaWxpdGllcywgYW5kIGNvcGllcyBpdCBiYWNrLiBUaGUgc3RydWN0IGBob3N0X2NhcHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCB1c2luZyBgPSB7fWAuIFRoZSBrZXJuZWwgdXNlcyB0aGUgc3RhbmRhcmQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgaGVscGVycywgd2hpY2ggc2FmZWx5IGhhbmRsZSBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIHplcm9lcyBhbnkgdHJhaWxpbmcgYnl0ZXMgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3QgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncywgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGVuc3VyZXMgdGhhdCBvbmx5IGluaXRpYWxpemVkIGJ5dGVzIHVwIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSBhcmUgY29waWVkIGJhY2sgdG8gdXNlcnNwYWNlLCBjbGVhcmluZyBhbnkgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgaWYgbmVjZXNzYXJ5LiBUaGUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHMoKWAgZnVuY3Rpb24gb25seSBtb2RpZmllcyB0aGUgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGZpZWxkIHVzaW5nIGZ1bGx5IGluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYWRkaW5nIGJ5dGVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGludmFsaWQgdXNlciBwb2ludGVycyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2Agd2hpY2ggdGFrZXMgYSBzdHJ1Y3QgYGt2bV9wcGNfY29tcGF0X2NhcHNgIGZyb20gdXNlcnNwYWNlLCBwb3B1bGF0ZXMgaXQgd2l0aCBob3N0IGNhcGFiaWxpdGllcywgYW5kIGNvcGllcyBpdCBiYWNrLiBUaGUgc3RydWN0IGBob3N0X2NhcHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCB1c2luZyBgPSB7fWAuIFRoZSBrZXJuZWwgdXNlcyB0aGUgc3RhbmRhcmQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgaGVscGVycywgd2hpY2ggc2FmZWx5IGhhbmRsZSBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIHplcm9lcyBhbnkgdHJhaWxpbmcgYnl0ZXMgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3QgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncywgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGVuc3VyZXMgdGhhdCBvbmx5IGluaXRpYWxpemVkIGJ5dGVzIHVwIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSBhcmUgY29waWVkIGJhY2sgdG8gdXNlcnNwYWNlLCBjbGVhcmluZyBhbnkgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgaWYgbmVjZXNzYXJ5LiBUaGUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHMoKWAgZnVuY3Rpb24gb25seSBtb2RpZmllcyB0aGUgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGZpZWxkIHVzaW5nIGZ1bGx5IGluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYWRkaW5nIGJ5dGVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGludmFsaWQgdXNlciBwb2ludGVycyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5r5hz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 20:02:57 +0000 UTC FinishedAt: 2026-08-07 20:06:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "72d26767-7c32-4273-9b84-e476fcf9e5f4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmppc_get_compat_caps" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IgYW5kIGltcGxlbWVudHMgbmV3IGxvZ2ljIGluIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDowNDoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGUzMDAzYTI0MWQ1YjAuLmU2NTZkMTE3Y2QwYjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiAmIzQzOzY1NjYsOTUgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXG4gXG4mIzQzOzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQU1xuJiM0Mzs6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIChpbi9vdXQpXG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbiYjNDM7XG4mIzQzO0Vycm9ycyBpbmNsdWRlOlxuJiM0MztcbiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICBFRkFVTFQgICBpZiBgYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYGAgY2Fubm90IGJlIHJlYWQgZnJvbSBvclxuJiM0MzsgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4mIzQzOyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhblxuJiM0MzsgICAgICAgICAgIGBgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCwgaWYgdGhlIGBgZmxhZ3NgYCBmaWVsZFxuJiM0MzsgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbiYjNDM7ICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXNcbiYjNDM7ICBFMkJJRyAgICBpZiBgYHNpemVgYCBleGNlZWRzIGBgUEFHRV9TSVpFYGAgKHBhdGhvbG9naWNhbCBpbnB1dCBndWFyZCksXG4mIzQzOyAgICAgICAgICAgb3IgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSBhbmRcbiYjNDM7ICAgICAgICAgICB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8gKG5ldyB1c2Vyc3BhY2Ugb25cbiYjNDM7ICAgICAgICAgICBvbGQga2VybmVsIHdpdGggbm9uLWRlZmF1bHQgZmllbGRzIHNldCk7IGluIHRoZSBsYXR0ZXIgY2FzZVxuJiM0MzsgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYFxuJiM0MzsgICAgICAgICAgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXG4mIzQzOyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXG4mIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbiYjNDM7ICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcbiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXG4mIzQzO3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxuJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbiYjNDM7XG4mIzQzO1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXG4mIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbiYjNDM7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxuJiM0MztcbiYjNDM7OjpcbiYjNDM7XG4mIzQzOyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuJiM0MztcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbiYjNDM7XHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0MzsgIH07XG4mIzQzO1xuJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXG4mIzQzO2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4mIzQzO1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50XG4mIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXG4mIzQzO2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4mIzQzO1xuJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcbiYjNDM7dG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxuJiM0MztcbiYjNDM7LSBJZiBgYHNpemVgYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSxcbiYjNDM7ICBuZXcga2VybmVsKSwgdGhlIGtlcm5lbCB6ZXJvLXBhZHMgdGhlIHVua25vd24gdHJhaWxpbmcgZmllbGRzIGJlZm9yZVxuJiM0MzsgIHJldHVybmluZywgYW5kIHdyaXRlcyBiYWNrIGBgc2l6ZWBgIHVuY2hhbmdlZCBzbyB1c2Vyc3BhY2Uga25vd3MgaG93XG4mIzQzOyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC5cbiYjNDM7LSBJZiBgYHNpemVgYCBlcXVhbHMgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSwgdGhlIHN0cnVjdCBpcyBjb3BpZWRcbiYjNDM7ICB2ZXJiYXRpbS5cbiYjNDM7LSBJZiBgYHNpemVgYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplIChuZXcgdXNlcnNwYWNlLFxuJiM0MzsgIG9sZCBrZXJuZWwpIGFuZCB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgYWxsIHplcm8sIHRoZSBjYWxsXG4mIzQzOyAgc3VjY2VlZHMgYXMgaWYgdGhlIHNpemVzIG1hdGNoZWQuIElmIGFueSB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8sXG4mIzQzOyAgdGhlIGtlcm5lbCByZXR1cm5zIGBgLUUyQklHYGAgYW5kIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50b1xuJiM0MzsgIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS5cbiYjNDM7XG4mIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlXG4mIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uXG4mIzQzO1xuJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHlcbiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWNcbiYjNDM7cHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MztzaWduaWZpY2FudCBiaXQpOlxuJiM0MztcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuJiM0MztcbiYjNDM7Li4gbm90ZTo6XG4mIzQzO1xuJiM0MzsgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbiYjNDM7XG4mIzQzOyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjIpYGBcbiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYwKWBgXG4mIzQzO1xuJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4mIzQzOyAgIHRoYW4gaGFyZGNvZGluZyBiaXQgcG9zaXRpb25zLlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiAmIzQzOzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4mIzQzO1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIge1xuIFx0X191NjRcdGJlaGF2aW91cl9tYXNrO1x0XHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xuIH07XG4gXG4mIzQzOy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xuJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4mIzQzO1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuJiM0MztcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0Mzt9O1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXHQyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuXG4mIzQzOyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYyKVxuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MClcbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLXHRcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXG4gLypcbiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuJiM0MztcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzE6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbiYjNDM7XHRsb25nIHJjID0gLUVJTlZBTDtcbiYjNDM7XHR1MzIgY3B1X3ZlcnNpb24gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG4mIzQzO1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuJiM0MztcdFx0XHRjYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzO1xuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFwmIzM0O2NwdVwmIzM0Oykge1xuJiM0MztcdFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwmIzM0O2NwdS12ZXJzaW9uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3B1X3ZlcnNpb24pKSB7XG4mIzQzO1x0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFjcHVfdmVyc2lvbilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuJiM0MztcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2IuLjJmZTRlYTBjYTRmZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC02OTcsNiAmIzQzOzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcbiYjNDM7XHRcdHIgPSAwO1xuJiM0MztcdFx0aWYgKGh2X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcbiYjNDM7XHRcdFx0ciA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZXN2bV9vZmYoa3ZtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuJiM0MztcdFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XG4mIzQzO1x0XHR1NjQgdXNpemU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLlxuJiM0MztcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0gLUUyQklHO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHVzaXplIFx1MDAzZSBQQUdFX1NJWkUpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuJiM0MztcdFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXG4mIzQzO1x0XHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxuJiM0MztcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbiYjNDM7XHRcdCAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHlcbiYjNDM7XHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4mIzQzO1x0XHQgKiAgIHVzaXplIFx1MDAzZSAga3NpemU6IHN1Y2NlZWQgaWZmIHRyYWlsaW5nIGJ5dGVzIGFyZSB6ZXJvLCBlbHNlIC1FMkJJR1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXG4mIzQzO1x0XHRcdFx0XHQgIGFyZ3AsIHVzaXplKTtcbiYjNDM7XHRcdGlmIChyKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyXG4mIzQzO1x0XHRcdCAqIGtlcm5lbC4gV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzb1xuJiM0MztcdFx0XHQgKiB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsXG4mIzQzO1x0XHRcdCAqIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChyID09IC1FMkJJRylcbiYjNDM7XHRcdFx0XHRpZiAocHV0X3VzZXIoKF9fdTY0KXNpemVvZihob3N0X2NhcHMpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAoX191NjQgX191c2VyICopYXJncCkpXG4mIzQzO1x0XHRcdFx0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoaG9zdF9jYXBzLmZsYWdzKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0gLUVOT1RUWTtcbiYjNDM7XHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZXBvcnQgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBwb3B1bGF0ZWQgYnkgdGhlIGtlcm5lbCxcbiYjNDM7XHRcdCAqIG5vdCB1c2l6ZTogaWYgbmV3IHVzZXJzcGFjZSBwYXNzZWQgYSBsYXJnZXIgc3RydWN0IHdpdGggemVyb1xuJiM0MztcdFx0ICogdHJhaWxpbmcgYnl0ZXMsIHdlIG9ubHkgZmlsbGVkIHNpemVvZihob3N0X2NhcHMpIGJ5dGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRob3N0X2NhcHMuc2l6ZSA9IG1pbl90KHU2NCwgdXNpemUsIHNpemVvZihob3N0X2NhcHMpKTtcbiYjNDM7XHRcdHIgPSBjb3B5X3N0cnVjdF90b191c2VyKGFyZ3AsIHVzaXplLCBcdTAwMjZob3N0X2NhcHMsXG4mIzQzO1x0XHRcdFx0XHRzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRkZWZhdWx0OiB7XG4gXHRcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VhcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbkBAIC0xMzQxLDYgJiM0MzsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcbiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovXG4gI2RlZmluZSBLVk1fQVJNX1NFVF9DT1VOVEVSX09GRlNFVCBfSU9XKEtWTUlPLCAgMHhiNSwgc3RydWN0IGt2bV9hcm1fY291bnRlcl9vZmZzZXQpXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcbiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cbiYjNDM7I2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1x0X0lPKEtWTUlPLCAgMHhiOClcbiBcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cbiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFXHQgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IgYW5kIGltcGxlbWVudHMgbmV3IGxvZ2ljIGluIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMDowNDoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAppbmRleCBlMzAwM2EyNDFkNWIwLi5lNjU2ZDExN2NkMGIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CkBAIC02NTY2LDYgJiM0Mzs2NTY2LDk1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0UKICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXkKICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC4KIAomIzQzOzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0Mzs6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMKJiM0Mzs6QXJjaGl0ZWN0dXJlczogcG93ZXJwYwomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKJiM0MzsKJiM0MztFcnJvcnMgaW5jbHVkZToKJiM0MzsKJiM0MzsgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3IKJiM0MzsgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlCiYjNDM7ICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuCiYjNDM7ICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGQKJiM0MzsgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXAKJiM0MzsgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcwomIzQzOyAgRTJCSUcgICAgaWYgYGBzaXplYGAgZXhjZWVkcyBgYFBBR0VfU0laRWBgIChwYXRob2xvZ2ljYWwgaW5wdXQgZ3VhcmQpLAomIzQzOyAgICAgICAgICAgb3IgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSBhbmQKJiM0MzsgICAgICAgICAgIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybyAobmV3IHVzZXJzcGFjZSBvbgomIzQzOyAgICAgICAgICAgb2xkIGtlcm5lbCB3aXRoIG5vbi1kZWZhdWx0IGZpZWxkcyBzZXQpOyBpbiB0aGUgbGF0dGVyIGNhc2UKJiM0MzsgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYAomIzQzOyAgICAgICAgICAgZmllbGQgc28gdXNlcnNwYWNlIGNhbiByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemUKJiM0MzsgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYAomIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGUKJiM0MzsgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKQomIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmUKJiM0Mzt3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXIKJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS4KJiM0MzsKJiM0MztUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2RlcwomIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24KJiM0MztLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuCiYjNDM7CiYjNDM7OjoKJiM0MzsKJiM0MzsgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHsKJiM0MzsJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCiYjNDM7CV9fdTY0CWZsYWdzOwkJCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi8KJiM0MzsJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwomIzQzOyAgfTsKJiM0MzsKJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvCiYjNDM7YGBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGAgYW5kIHplcm8gdGhlIGBgZmxhZ3NgYCBmaWVsZC4KJiM0MztUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudAomIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlCiYjNDM7ZmllbGQgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlIHdpdGhvdXQgQUJJIGFtYmlndWl0eS4KJiM0MzsKJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGAKJiM0Mzt0byBzdXBwb3J0IGV4dGVuc2libGUgdmVyc2lvbmluZyBhY3Jvc3MgdGhyZWUgY2FzZXM6CiYjNDM7CiYjNDM7LSBJZiBgYHNpemVgYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSwKJiM0MzsgIG5ldyBrZXJuZWwpLCB0aGUga2VybmVsIHplcm8tcGFkcyB0aGUgdW5rbm93biB0cmFpbGluZyBmaWVsZHMgYmVmb3JlCiYjNDM7ICByZXR1cm5pbmcsIGFuZCB3cml0ZXMgYmFjayBgYHNpemVgYCB1bmNoYW5nZWQgc28gdXNlcnNwYWNlIGtub3dzIGhvdwomIzQzOyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC4KJiM0MzstIElmIGBgc2l6ZWBgIGVxdWFscyB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplLCB0aGUgc3RydWN0IGlzIGNvcGllZAomIzQzOyAgdmVyYmF0aW0uCiYjNDM7LSBJZiBgYHNpemVgYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplIChuZXcgdXNlcnNwYWNlLAomIzQzOyAgb2xkIGtlcm5lbCkgYW5kIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBhbGwgemVybywgdGhlIGNhbGwKJiM0MzsgIHN1Y2NlZWRzIGFzIGlmIHRoZSBzaXplcyBtYXRjaGVkLiBJZiBhbnkgdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvLAomIzQzOyAgdGhlIGtlcm5lbCByZXR1cm5zIGBgLUUyQklHYGAgYW5kIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50bwomIzQzOyAgdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplLgomIzQzOwomIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlCiYjNDM7c2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi4KJiM0MzsKJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkKJiM0Mzttb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpYwomIzQzO3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3QKJiM0MztzaWduaWZpY2FudCBiaXQpOgomIzQzOwomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZQomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCAoYml0IDMpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjExIHByb2Nlc3NvciBtb2RlCiYjNDM7CiYjNDM7Li4gbm90ZTo6CiYjNDM7CiYjNDM7ICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3QKJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczoKJiM0MzsKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgJmx0OyZsdDsgNjIpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjEpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjApYGAKJiM0MzsKJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYCZsdDtsaW51eC9rdm0uaCZndDtgYCByYXRoZXIKJiM0MzsgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy4KJiM0MzsKIC4uIF9rdm1fcnVuOgogCiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtMzE5LDYgJiM0MzszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7CiAJYm9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpOwogCWludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pOwogCWludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpOwomIzQzOwlpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaApAQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIgewogCV9fdTY0CWJlaGF2aW91cl9tYXNrOwkJLyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi8KIH07CiAKJiM0MzsvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi8KJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7CiYjNDM7CV9fdTY0CXNpemU7CQkJLyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqLwomIzQzOwlfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwlfX3U2NAljb21wYXRfY2FwYWJpbGl0aWVzOwkvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovCiYjNDM7fTsKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwCTI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy4KJiM0MzsgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5CSgxVUxMICZsdDsmbHQ7IDYyKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAJKDFVTEwgJmx0OyZsdDsgNjEpCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMQkoMVVMTCAmbHQ7Jmx0OyA2MCkKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0sJCShLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExKQogLyoKICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay4KICAqIFRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHZhbHVlcyB1c2VkIGJ5IEhfR0VUX0NQVV9DSEFSQUNURVJJU1RJQ1MuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwppbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKQEAgLTY1MTAsNiAmIzQzOzY1MTAsNjEgQEAgc3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjcHVfdmVyc2lvbikgewomIzQzOwljYXNlIFBWUl9BUkNIXzMxX1AxMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMDA6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDsKJiM0MzsJbG9uZyByYyA9IC1FSU5WQUw7CiYjNDM7CXUzMiBjcHVfdmVyc2lvbiA9IDA7CiYjNDM7CiYjNDM7CWlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHsKJiM0MzsJCWlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7CiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKJiM0MzsJCQljYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzOwomIzQzOwkJCXJjID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAmIzM0O2NwdSYjMzQ7KSB7CiYjNDM7CQkJCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7Y3B1LXZlcnNpb24mIzM0OywKJiM0MzsJCQkJCQkJICAmYW1wO2NwdV92ZXJzaW9uKSkgewomIzQzOwkJCQkJb2Zfbm9kZV9wdXQobnApOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFjcHVfdmVyc2lvbikKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkJCSAgICAmYW1wO2NhcGFiaWxpdGllcyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaG9zdF9jYXBzLSZndDtjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzICZhbXA7IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsCiAJLnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LApAQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0gewogCS5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsCiAJLmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LAogCS5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LAomIzQzOwkuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcywKIH07CiAKIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggMDAzMDIzOTlmYzM3Yi4uMmZlNGVhMGNhNGZmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTY5Nyw2ICYjNDM7Njk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJCQl9CiAJCX0KIAkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpCiYjNDM7CWNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6CiYjNDM7CQlyID0gMDsKJiM0MzsJCWlmIChodl9lbmFibGVkICZhbXA7JmFtcDsga3ZtaHZfb25fcHNlcmllcygpKQomIzQzOwkJCXIgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovCiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7c3ZtX29mZihrdm0pOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6IHsKJiM0MzsJCXN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9OwomIzQzOwkJdTY0IHVzaXplOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLgomIzQzOwkJICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LgomIzQzOwkJICovCiYjNDM7CQlyID0gLUVGQVVMVDsKJiM0MzsJCWlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJciA9IC1FMkJJRzsKJiM0MzsJCWlmICh1bmxpa2VseSh1c2l6ZSAmZ3Q7IFBBR0VfU0laRSkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbAomIzQzOwkJICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkCiYjNDM7CQkgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbAomIzQzOwkJICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy4KJiM0MzsJCSAqLwomIzQzOwkJciA9IC1FSU5WQUw7CiYjNDM7CQlpZiAodXNpemUgJmx0OyBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OgomIzQzOwkJICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weQomIzQzOwkJICogICB1c2l6ZSAmbHQ7ICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpCiYjNDM7CQkgKiAgIHVzaXplICZndDsgIGtzaXplOiBzdWNjZWVkIGlmZiB0cmFpbGluZyBieXRlcyBhcmUgemVybywgZWxzZSAtRTJCSUcKJiM0MzsJCSAqLwomIzQzOwkJciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcigmYW1wO2hvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksCiYjNDM7CQkJCQkgIGFyZ3AsIHVzaXplKTsKJiM0MzsJCWlmIChyKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlcgomIzQzOwkJCSAqIGtlcm5lbC4gV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbwomIzQzOwkJCSAqIHVzZXJzcGFjZSBrbm93cyB3aGljaCBvbGRlciBzdHJ1Y3QgdG8gcmV0cnkgd2l0aCwKJiM0MzsJCQkgKiB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHIgPT0gLUUyQklHKQomIzQzOwkJCQlpZiAocHV0X3VzZXIoKF9fdTY0KXNpemVvZihob3N0X2NhcHMpLAomIzQzOwkJCQkJICAgICAoX191NjQgX191c2VyICopYXJncCkpCiYjNDM7CQkJCQlyID0gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKGhvc3RfY2Fwcy5mbGFncykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSAtRU5PVFRZOwomIzQzOwkJaWYgKCFrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwsCiYjNDM7CQkgKiBub3QgdXNpemU6IGlmIG5ldyB1c2Vyc3BhY2UgcGFzc2VkIGEgbGFyZ2VyIHN0cnVjdCB3aXRoIHplcm8KJiM0MzsJCSAqIHRyYWlsaW5nIGJ5dGVzLCB3ZSBvbmx5IGZpbGxlZCBzaXplb2YoaG9zdF9jYXBzKSBieXRlcy4KJiM0MzsJCSAqLwomIzQzOwkJaG9zdF9jYXBzLnNpemUgPSBtaW5fdCh1NjQsIHVzaXplLCBzaXplb2YoaG9zdF9jYXBzKSk7CiYjNDM7CQlyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgJmFtcDtob3N0X2NhcHMsCiYjNDM7CQkJCQlzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCWRlZmF1bHQ6IHsKIAkJc3RydWN0IGt2bSAqa3ZtID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwogCQlyID0ga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaApAQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgewogI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDkKJiM0MzsjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MAogCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewogCV9fdTMyIGlycWNoaXA7CkBAIC0xMzQxLDYgJiM0MzsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHsKIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfQ09VTlRFUl9PRkZTRVQgKi8KICNkZWZpbmUgS1ZNX0FSTV9TRVRfQ09VTlRFUl9PRkZTRVQgX0lPVyhLVk1JTywgIDB4YjUsIHN0cnVjdCBrdm1fYXJtX2NvdW50ZXJfb2Zmc2V0KQogI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSkKJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqLwomIzQzOyNkZWZpbmUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMJX0lPKEtWTUlPLCAgMHhiOCkKIAogLyogaW9jdGwgZm9yIHZtIGZkICovCiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFCSAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgaW9jdGwgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQmIzM5O3MgYWRkZWQgdG8gS1ZNIG9uIFBvd2VyUEMsIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVk0gZmlsZSBkZXNjcmlwdG9yLiBUaGUgaW9jdGwgZXhwZWN0cyBhIGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2AgcG9pbnRlci4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiDigJMgaXQgbGl2ZXMgd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCwgd2hpY2ggY2FsbHMgYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpYC4gQW5kIGBnZXRfY29tcGF0X2NhcHNgIGlzIHRoZW4gZGVmaW5lZCBhcyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2Agd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBmdXp6YWJsZS4gQSBuZXcgaW9jdGwgaW4gS1ZNLCBzcGVjaWZpY2FsbHkgZm9yIFBvd2VyUEMuLi4gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBPa2F5LCBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLCBhcyB3ZSBjYW4gY29tcGlsZSBmb3IgUG93ZXJQQy4gQW5kLCB3YWl0LCBTeXprYWxsZXIgc3VwcG9ydHMgUG93ZXJQQyAocHBjNjRsZSksIHNvIHRoYXQmIzM5O3MgYSBiaWcgZ3JlZW4gZmxhZy4KClRoZSBpb2N0bCBpcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBjb3JlIEtWTSBsb2dpYyBmb3IgUG93ZXJQQy4gTm93LCBsZXQgbWUgc2VlLi4uIEl0JiMzOTtzIGRlZmluZWQgYXMgYF9JTyhLVk1JTywgMHhiOClgLiBIbW0sIGJ1dCBpdCB0YWtlcyBhbiBhcmd1bWVudCwgZG9lc24mIzM5O3QgaXQ/IFJpZ2h0LiBgX0lPYCBkb2VzbiYjMzk7dCBlbmNvZGUgdGhlIHNpemUsIGJ1dCB0aGUgY29kZSBkb2VzIHVzZSBgYXJncGAgYXMgYSBwb2ludGVyLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gTmVlZCB0byBleGFtaW5lIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gUmlnaHQsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIGlzIGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAsIHdoaWNoIGltcGxpZXMgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC4gVGltZSB0byBjaGVjayBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IHRvIGJ1aWxkIGFuIGVudmlyb25tZW50IHdoZXJlIHRoaXMgaXMgZXhwb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gb24gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBLVk1fQk9PSzNTXzY0X0hWYCBmZWF0dXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yeS4gVGhhdCB3b3VsZCBiZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgZGVmaW5pdGlvbiBmb3IgYEtWTV9CT09LM1NfNjRfSFZgIHdpbGwgcmVzaWRlIHRoZXJlLCBhbG9uZyB3aXRoIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQuIEtub3dpbmcgdGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBvciBtb2RpZnlpbmcgdGhlIEtWTSBzZXR1cCBvbiB0aGlzIHBsYXRmb3JtIGFuZCBJIHdpbGwgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzg6XHRcbiAgNzk6XHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4gIDgxOlx0XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXHUwMDI2XHUwMDI2IFBQQ19QT1dFUk5WXG4gIDgyOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MzpcdFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXG4gIDg0Olx0XHRzZWxlY3QgQ01BXG4gIDg1Olx0XHRoZWxwXG4gIDg2Olx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXG4gIDg3Olx0XHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxuICA4ODpcdFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxuICA4OTpcdFxuICA5MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuICA5MTpcdFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcbiAgOTI6XHRcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxuICA5MzpcdFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXG4gIDk0Olx0XHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyBMb2dpYyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGBLVk1fQk9PSzNTXzY0X0hWYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBoaW5nZXMgb24gYm90aCBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCBnb3QgaXQuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgc3BlY2lmaWMgaW9jdGwgaW1wbGVtZW50YXRpb24uIEFoYSwgdGhlIGlvY3RsIGluIHF1ZXN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBga3ZtX29wc19odmAsIHdoaWNoLCBuYXR1cmFsbHksIGlzIHRpZWQgdG8gYEtWTV9CT09LM1NfNjRfSFZgLgoKTm93LCBJJiMzOTttIGN1cmlvdXMuIERvZXMgYEtWTV9CT09LM1NfNjRfUFJgIGltcGxlbWVudCBpdCBhcyB3ZWxsPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkuIE5vcGUuIE9ubHkgYGt2bV9vcHNfaHZgIGlzIGRlZmluaW5nIGAuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFNvLCB0aGUgYm90dG9tIGxpbmUgaXMgdGhhdCB3ZSBuZWVkIGJvdGggYEtWTV9CT09LM1NfNjRfSFZgIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgS1ZNYCBlbmFibGVkLgoKVGhlIGlvY3RsIGNvZGUgaXRzZWxmIGlzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoYXTigJlzIHRoZSBrZXkgaGVyZS4gTm93LCB0aGUgZnVuY3Rpb24gSSBzaG91bGQgZm9jdXMgb24gaXMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCBidXQgSeKAmWxsIGFsc28gbmVlZCB0byBpbnZlc3RpZ2F0ZSBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gQWxzbywgZG9uJiMzOTt0IGZvcmdldCB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgd2hhdCBhY3R1YWxseSBoYW5kbGVzIHRoZSBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLgoKTm93LCBsZXQgbWUgY2hlY2sgd2hlcmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBsb2NhdGVkLiBSaWdodCwgYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTIwMDY9c3RhdGljIGludCBrdm1fdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMTUtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoyMDE2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMTcte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jPTE2OT1zdGF0aWMgaW50IGt2bV92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmMtMTc4LVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM6MTc5OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTE4MC17XG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmM9OTgxPWludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmMtOTg2LVxuYXJjaC9taXBzL2t2bS9taXBzLmM6OTg3OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTk4OC17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MTI0PXN0YXRpYyB2b2lkIGt2bXBwY19pcnFfYnlwYXNzX2RlbF9wcm9kdWNlcl9odihzdHJ1Y3QgaXJxX2J5cGFzc19jb25zdW1lciAqY29ucyxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNDQtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYxNDU6c3RhdGljIGludCBrdm1fYXJjaF92bV9pb2N0bF9odihzdHJ1Y3QgZmlsZSAqZmlscCxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE0Ni1cdFx0XHRcdHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTY4PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU5NS1cdC5mYXN0X3ZjcHVfa2ljayA9IGt2bXBwY19mYXN0X3ZjcHVfa2lja19odixcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU5NjpcdC5hcmNoX3ZtX2lvY3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX2h2LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTk3LVx0LmhjYWxsX2ltcGxlbWVudGVkID0ga3ZtcHBjX2hjYWxsX2ltcGxfaHYsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0yMDI2PXN0YXRpYyBpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdF9wcih2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMjAzOC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MjAzOTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX3ByKHN0cnVjdCBmaWxlICpmaWxwLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDQwLVx0XHRcdFx0dW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTIwNDU9c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfcHIgPSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDcyLVx0LmZhc3RfdmNwdV9raWNrID0ga3ZtX3ZjcHVfa2ljayxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MjA3MzpcdC5hcmNoX3ZtX2lvY3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX3ByLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDc0LSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIyOTQ9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NwdV9jaGFyKHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyICpjcClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMzYyLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjM2MzppbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMzY0LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92bS5jPTIxNT1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbi0tXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTI2Ny1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmM6MjY4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMjY5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI1OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI2LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzI0NT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI1Ny1cbmFyY2gveDg2L2t2bS94ODYuYzo3MjU4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gveDg2L2t2bS94ODYuYy03MjU5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU5ND1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1OTUtXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNTk2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU5Ny1sb25nIGt2bV9hcmNoX3ZtX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE0OD1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MzgwLVx0ZGVmYXVsdDpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM4MTpcdFx0ciA9IGt2bV9hcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xudmlydC9rdm0va3ZtX21haW4uYy01MzgyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTcwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBQQyBDb21wYXQgQ2FwYWJpbGl0aWVzIElPQ1RMKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLiBJdCYjMzk7cyBiZWVuIGFkZGVkIGludG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCB3aXRoaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gU3RyYWlnaHRmb3J3YXJkOyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZ29vZC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbiBhIGZldyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gT2YgY291cnNlLCB0aGVyZSYjMzk7cyBga3ZtX2FyY2hfdm1faW9jdGxgIGl0c2VsZiwgYnV0IHRoYXQmIzM5O3MgYSBwcmV0dHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbi4gV2VsbCwgd2FpdCwgbm8sIGl0JiMzOTtzICpub3QqIGEgaG90LXBhdGggZnVuY3Rpb24sIGl0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIuIEl0JiMzOTtzIGEgbGFyZ2UgZnVuY3Rpb24sIGJ1dCBteSBmb2N1cyBzaG91bGQgcmVtYWluIG9uIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgZm9yIG5vdy4KCkxldCBtZSBtb3ZlIG9uIHRvIGV4YW1pbmluZyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUxMz1zdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTMyLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTMzOnN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTM0LXtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1Njg9c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjA5LVx0LmNyZWF0ZV92bV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnNfaHYsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2MTA6XHQuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcyxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjYxMS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM3NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBob3N0IGhhcmR3YXJlIG9uIFBvd2VyUEMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGRldGVybWluZXMgd2hpY2ggZmVhdHVyZXMgdGhlIGd1ZXN0IGlzIGFsbG93ZWQgdG8gdXNlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgZ3Vlc3QmIzM5O3MgdmlldyBvZiB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIHRoZSBob3N0JiMzOTtzIGFjdHVhbCBjYXBhYmlsaXRpZXMsIHRha2luZyBpbnRvIGFjY291bnQgYW55IGxpbWl0YXRpb25zIGltcG9zZWQgYnkgdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LCBtYWtpbmcgc3VyZSB0aGUgZ3Vlc3QgZG9lc24mIzM5O3QgdHJ5IHRvIGFjY2VzcyBhbnl0aGluZyBpdCBzaG91bGRuJiMzOTt0LCBvciB1dGlsaXplIGEgZmVhdHVyZSBpbiBhIHdheSB0aGF0IHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW0gb3IgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gYGt2bV9wcGNfdmNwdWAsIGBrdm1fcHBjX3ByYCwgYW5kIGBrdm1fcHBjX2Jvb2szc182NGAgYXJlIHByb2JhYmx5IGludm9sdmVkLCBhbG9uZ3NpZGUgc29tZSBiaXRmaWVsZHMgcmVwcmVzZW50aW5nIHRoZSBndWVzdCYjMzk7cyBmZWF0dXJlIHNldCBhbmQgdGhlIGhvc3QmIzM5O3Mgc3VwcG9ydC4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyBmb3IgQ1BVSUQgYml0cywgTVNScywgYW5kIG90aGVyIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXMuCiogICBIb3cgZG9lcyBpdCBoYW5kbGUgZmVhdHVyZSB0cmFuc2xhdGlvbiBvciBlbXVsYXRpb24/IERvZXMgaXQgc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGUgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBob3N0JiMzOTtzIGNhcGFiaWxpdGllcywgb3IgZG9lcyBpdCBhY3RpdmVseSByZXdyaXRlIGluc3RydWN0aW9uIHNlcXVlbmNlcyBvciBkYXRhIHN0cnVjdHVyZXMgb24gdGhlIGZseT8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/CiogICBIb3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIG51YW5jZXMgb2YgZGlmZmVyZW50IFBvd2VyUEMgYXJjaGl0ZWN0dXJlcyBhbmQgbW9kZWxzPyBXZSBoYXZlIGV2ZXJ5dGhpbmcgZnJvbSBCb29rM1MgdG8gb2xkZXIgcGxhdGZvcm1zLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBjb250YWlucyBhIGxvdCBvZiBjb25kaXRpb25hbCBsb2dpYywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNoZWNrcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGhhcmR3YXJlIHJldmlzaW9uIGRldGVjdGlvbi4KKiAgIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gaG93IHRoaXMgZnVuY3Rpb24gd29ya3M/IEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgZm9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byBpbXByb3BlciBjYXBhYmlsaXR5IG1hcHBpbmcuCiogICBBcmUgdGhlcmUgYW55IGNvbXBhdGliaWxpdHkgb3B0aW9ucyBhdCB0aGUgUUVNVSBsZXZlbCB3aGljaCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgYXQgdGhlIHBvaW50IG9mIHZpcnR1YWxpemF0aW9uPwoKTGV0JiMzOTtzIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGwgZ3JhcGggYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBJIG5lZWQgdG8gc2VlIHRoaXMgZnVuY3Rpb24gYXQgd29yayB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY0OTA9c3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTItXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1MTM6c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTE0LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTU0LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NTU6XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NTYtXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Y2FwYWJpbGl0aWVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUG93ZXJQQyBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG5ldyBjb2RlIHJlbGF0ZWQgdG8gUG93ZXJQQyBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZCBhcmUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gSG1tLCB3YWl0LCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBpbmxpbmVkPyBMZXQgbWUgc2VlLi4uIEl0JiMzOTtzIG9ubHkgY2FsbGVkIG9uY2UsIHJpZ2h0IHdpdGhpbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEFoLCBidXQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGl0c2VsZiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGAuZ2V0X2NvbXBhdF9jYXBzYCwgd2hpY2ggbWVhbnMgaXQgbGlrZWx5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBTbywgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KCk5vdywgd2hlcmUgaXMgdGhpcyBhbGwgYmVpbmcgY2FsbGVkIGZyb20/IFJpZ2h0LCBga3ZtX2FyY2hfdm1faW9jdGxgIGhhbmRsZXMgdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0JiMzOTtzIGEgcHJldHR5IGJpZyBmdW5jdGlvbiwgYnV0IHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbG9jYWxpemVkIHdpdGhpbiB0aGUgYGNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6YCBibG9jay4gU28gaXQmIzM5O3Mgc3RpbGwgZmluZSB0byBqdXN0IGZvY3VzIG9uIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KCk9rYXksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkPyBBaCwgeWVzLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZC4gSXQmIzM5O3Mgbm93IHJldHVybmluZyAxIGZvciBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgYEtWTWAgYW5kIGBLVk1fQk9PSzNTXzY0X0hWYCwgb2J2aW91c2x5LiBXYWl0LCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSBpdCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTI5PWNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz00NT1jb25maWcgS1ZNX0JPT0szU18zMlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS1ZNX0JPT0szU182NF9IViBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgS1ZNX0JPT0szU182NF9IVmAg4oCTIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7ZG9lcyB0aGlzIHBhcnRpY3VsYXIgS1ZNIGNvbmZpZ3VyYXRpb24gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgYFBQQ19QT1dFUk5WYD8mIzM0OyBLbm93aW5nIHRoZSBudWFuY2VzIG9mIHRoZXNlIFBvd2VyUEMtYmFzZWQgS1ZNIGVudmlyb25tZW50cywgaXQmIzM5O3MgY3J1Y2lhbCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVzZSBhcmUgdGlnaHRseSBjb3VwbGVkLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyBvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJpc2luZyBmcm9tIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcywgYW5kIGlmIGFueSBmdXJ0aGVyIHJlc2VhcmNoIG9yIHRlc3RpbmcgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3OTpcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4gIDgwOlx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiAgODE6XHRcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NCBcdTAwMjZcdTAwMjYgUFBDX1BPV0VSTlZcbiAgODI6XHRcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG4gIDgzOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcbiAgODQ6XHRcdHNlbGVjdCBDTUFcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cbiAgODc6XHRcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXG4gIDg4Olx0XHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzgxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIGl0IGhpbmdlcyBvbiBhIGNvdXBsZSBvZiBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIHNldDogYEtWTWAsIGBLVk1fQk9PSzNTXzY0YCwgYFBQQ19QT1dFUk5WYCwgYW5kIGBLVk1fQk9PSzNTXzY0X0hWYC4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYFBQQ19QT1dFUk5WYCBpcyBhY3R1YWxseSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gSSBkb24mIzM5O3Qgd2FudCB0byBjaGFzZSBhIGRlYWQgZW5kLCBzbyB2ZXJpZnlpbmcgdGhhdCByaWdodCBub3cgd2lsbCBwcmV2ZW50IGRvd25zdHJlYW0gaXNzdWVzLiBJJiMzOTtsbCBnZXQgb24gdGhhdCBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19QT1dFUk5WJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFBQQzY0IFx1MDAyNlx1MDAyNiBQUENfQk9PSzNTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTcxCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDQ3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBhIE5ldyBLVk0gaW9jdGw6IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgeWVzLCBgUFBDX1BPV0VSTlZgIGxvb2tzIGxpa2UgYSB2YWxpZCBjb25maWd1cmF0aW9uLiBBbmQsIHdhaXQsIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyB0cmlzdGF0ZSwgbWVhbmluZyBpdCAqY2FuKiBiZSBidWlsdCBhcyBhIG1vZHVsZSwgZXhjZWxsZW50ISBUaGF0IG1lYW5zIFN5emthbGxlciBjYW4gZnV6eiBpdC4KClJpZ2h0LCB0aGUgaW9jdGwgaW4gcXVlc3Rpb24gaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgY2xlYXJseSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIE5vdywgYSBxdWljayB0aG91Z2h0IOKAkyBpcyBpdCB3b3J0aCBhZGRpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYD8gSXTigJlzIGEgZmFpcmx5IGxhcmdlIGZ1bmN0aW9uLCBidXQgdGhlIHNwZWNpZmljIGNhc2Ugd2UgY2FyZSBhYm91dCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgKmlzKiBuZXcuIEhtbW0sIHNpbmNlIGl0JiMzOTtzIGdlbmVyaWMsIGJldHRlciB0byBhdm9pZCBpdC4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gc2tldyB0aGUgZnV6emluZyB0b3dhcmRzIGFsbCBWTSBpb2N0bHMuCgpXYWl0LCBvbiBzZWNvbmQgdGhvdWdodCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIEkmIzM5O2xsIGp1c3QgYWRkIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2suIEFueXRoaW5nIGVsc2UgbW9kaWZpZWQ/IFl1cCwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGlzIGFsc28gdG91Y2hlZC4gVGhhdCYjMzk7cyBmaW5lLCBJJiMzOTtsbCBhZGQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLgoKTm93LCB0aW1lIGZvciBhIHF1aWNrIHJldmlldy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgZm9yIFBvd2VyUEMuIEl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiBJIGNhbiBnZXQgc29tZSBncmVhdCBmdXp6aW5nIGNvdmVyYWdlIGhlcmUuCgpUaGUga2V5IGZ1bmN0aW9uIGlzIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4KClNvLCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggZ2l2ZXMgdXMgYSBuZXcgd2F5IHRvIGludGVyYWN0IHdpdGggUG93ZXJQQyBLVk0sIHdoaWNoIGlzIGEgYmlnIHdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBQUENfUE9XRVJOViwgS1ZNX0JPT0szU182NF9IVjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0JPT0szU182NCYjMzQ7LAogICAgJiMzNDtQUENfUE9XRVJOViYjMzQ7LAogICAgJiMzNDtLVk1fQk9PSzNTXzY0X0hWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX2dldF9jb21wYXRfY2FwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQsIFBQQ19QT1dFUk5WLCBLVk1fQk9PSzNTXzY0X0hWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMwMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4uLiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbWlzc2luZz8gVGhhdCYjMzk7cyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuLiBPa2F5LCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEZpcnN0LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlaXIgZXhpc3RlbmNlLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYWN0dWFsbHkgcHJlc2VudC4gTmVlZCB0byBydWxlIG91dCBhbnkgc2ltcGxlIG92ZXJzaWdodCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IGlzc3VlcyBsaWtlIGRlcGxveW1lbnQgc2NyaXB0cyBvciBpbmZyYXN0cnVjdHVyZSBwcm9ibGVtcy4gTGV0IG1lIHJ1biBhIHF1aWNrIGNoZWNrLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X0hWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTcyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIG9kZCBiZWhhdmlvci4gVGhlIHRvb2wsIGBzZXQtcmVzdWx0c2AsIGlzIHRlbGxpbmcgbWUgdGhhdCBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEtWTSBmb3IgUG93ZXJQQyBkb24mIzM5O3QgZXhpc3QuIEJ1dCBJIGtub3cgdGhleSYjMzk7cmUgdGhlcmUhIEkgY2FuICpzZWUqIHRoZW0gcmlnaHQgaGVyZSBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gSXQmIzM5O3MgYSBiaXQgcGVycGxleGluZy4KCk15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhlIHRvb2wgbWlnaHQgYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBvbmx5IGNoZWNraW5nIHRoZSB4ODZfNjQgY29uZmlncywgd2hpY2ggd291bGQgZXhwbGFpbiB0aGUgZGlzY3JlcGFuY3kuIEJ1dCwgbm8sIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGVudGlyZSBrZXJuZWwgdHJlZSwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGl0LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIHN1cmUuLi4geWVwLCBzdGlsbCB0aGVyZS4KCkhtbS4uLiBQZXJoYXBzIHRoZSB0b29sIG9ubHkgbG9va3MgYXQgYEtjb25maWdgIGZpbGVzIHRoYXQgYXJlICpkaXJlY3RseSogaW5jbHVkZWQgaW4gdGhlIG1haW4gYEtjb25maWdgLiBCdXQgd2FpdCwgYGFyY2gvcG93ZXJwYy9LY29uZmlnYCAqZG9lcyogaW5jbHVkZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlIGVpdGhlciEKCk9rYXksIEkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhlIHRvb2wgbWlnaHQgYmUgdXNpbmcgYSBwcmUtZ2VuZXJhdGVkIGxpc3Qgb2YgY29uZmlncywgYW5kIG1heWJlIHRoYXQgbGlzdCBpcyB4ODZfNjQtY2VudHJpYy4gSW4gYW55IGNhc2UsIGlmIGl0IGNsYWltcyB0aGVzZSBQb3dlclBDIEtWTSBvcHRpb25zIGRvbiYjMzk7dCBleGlzdCwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGVpdGhlciBvbWl0IHRoZW0sIG9yLCBhdCBhIG1pbmltdW0sIG9ubHkgaW5jbHVkZSBgS1ZNYCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuIFRpbWUgdG8gY2hlY2sgaWYgYEtWTWAgaXRzZWxmIGlzIGV2ZW4gZGVmaW5lZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXHRib29sXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O0RldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0h5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgZXhpdCB0aW1pbmdcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXCYjMzQ7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODI2PXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04MjctXG5hcmNoL3g4Ni9LY29uZmlnOjgyODpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTMtXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNDUtXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4tLVxudmlydC9rdm0vS2NvbmZpZy02MS1cbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXG4tLVxudmlydC9rdm0vS2NvbmZpZy02Ny1cbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy03MC1cbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzMtXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XG4tLVxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctOTYtXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOTUKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgdGhlIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgdG9vbCBpcyBjaGVja2luZyBteSBjb25maWd1cmF0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBhbG1vc3QgY2VydGFpbmx5IHg4Nl82NC4gTm8gc3VycHJpc2VzIHRoZXJlLiBSaWdodCwgc28gSSBzZWUgYEtWTV9CT09LM1NfNjRgIGZsYWdnZWQgYXMgYW4gaXNzdWUuIFRoYXQmIzM5O3MgYSBQb3dlclBDLXNwZWNpZmljIHNldHRpbmcsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBnb2luZyB0byBiZSBpbiBhbiB4ODZfNjQga2VybmVsIHRyZWUuIE1ha2VzIHNlbnNlLiBJIGNhbiBjbGVhcmx5IHNpbXBsaWZ5IHRoaXM7IEkmIzM5O2xsIGp1c3Qgc3VwcGx5IGBLVk1gIGFuZCBgS1ZNX0NPTVBBVGAsIG9yIHBlcmhhcHMganVzdCBgS1ZNYC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGdlbmVyYWwgY2FzZS4gSG1tLCBidXQgd2FpdC4gVGhlIHRvb2wgaXMgbm93IGV4cGxpY2l0bHkgZmxhZ2dpbmcgdGhvc2UgY29uZmlncyBhcyBub24tZXhpc3RlbnQgd2l0aGluIHRoZSBrZXJuZWwgdHJlZS4gT2theSwgbGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlOyBgS1ZNYCBzaG91bGQgd29yaywgYW5kIHRoZSByZXN0IHNob3VsZCBiZSBmaWd1cmVkIG91dCBieSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5LiBJIGNhbiBzZWUgd2h5IHRoZSBvdGhlciBjb25maWdzIGFyZSBjYXVzaW5nIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIFZNIGZpbGUgZGVzY3JpcHRvciBhbmQgaW1wbGVtZW50cyBuZXcgbG9naWMgaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX2dldF9jb21wYXRfY2FwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2Agd2hpY2ggdGFrZXMgYSBzdHJ1Y3QgYGt2bV9wcGNfY29tcGF0X2NhcHNgIGZyb20gdXNlcnNwYWNlLCBwb3B1bGF0ZXMgaXQgd2l0aCBob3N0IGNhcGFiaWxpdGllcywgYW5kIGNvcGllcyBpdCBiYWNrLiBUaGUgc3RydWN0IGBob3N0X2NhcHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCB1c2luZyBgPSB7fWAuIFRoZSBrZXJuZWwgdXNlcyB0aGUgc3RhbmRhcmQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgaGVscGVycywgd2hpY2ggc2FmZWx5IGhhbmRsZSBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIHplcm9lcyBhbnkgdHJhaWxpbmcgYnl0ZXMgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3QgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3MsIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBlbnN1cmVzIHRoYXQgb25seSBpbml0aWFsaXplZCBieXRlcyB1cCB0byB0aGUgcmVxdWVzdGVkIHNpemUgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXJzcGFjZSwgY2xlYXJpbmcgYW55IHRyYWlsaW5nIGJ5dGVzIGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGlmIG5lY2Vzc2FyeS4gVGhlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKClgIGZ1bmN0aW9uIG9ubHkgbW9kaWZpZXMgdGhlIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBmaWVsZCB1c2luZyBmdWxseSBpbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgcGFkZGluZyBieXRlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbnZhbGlkIHVzZXIgcG9pbnRlcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWEyZmFjZDBjY2M3MTE1NWEyYTA0ODM1NDIyMzJjZDE4NGY0NWFiOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjA6MDQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKaW5kZXggZTMwMDNhMjQxZDViMC4uZTY1NmQxMTdjZDBiMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdApAQCAtNjU2Niw2ICYjNDM7NjU2Niw5NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFCiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5CiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuCiAKJiM0Mzs0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHBvd2VycGMKJiM0Mzs6VHlwZTogdm0gaW9jdGwKJiM0Mzs6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCiYjNDM7CiYjNDM7RXJyb3JzIGluY2x1ZGU6CiYjNDM7CiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yCiYjNDM7ICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZQomIzQzOyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhbgomIzQzOyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkCiYjNDM7ICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwCiYjNDM7ICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMKJiM0MzsgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGV4Y2VlZHMgYGBQQUdFX1NJWkVgYCAocGF0aG9sb2dpY2FsIGlucHV0IGd1YXJkKSwKJiM0MzsgICAgICAgICAgIG9yIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgYW5kCiYjNDM7ICAgICAgICAgICB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8gKG5ldyB1c2Vyc3BhY2Ugb24KJiM0MzsgICAgICAgICAgIG9sZCBrZXJuZWwgd2l0aCBub24tZGVmYXVsdCBmaWVsZHMgc2V0KTsgaW4gdGhlIGxhdHRlciBjYXNlCiYjNDM7ICAgICAgICAgICB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50byB0aGUgYGBzaXplYGAKJiM0MzsgICAgICAgICAgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplCiYjNDM7ICBFTk9UVFkgICBpZiB0aGUgYmFja2VuZCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBgZ2V0X2NvbXBhdF9jYXBzYGAKJiM0MzsgICAgICAgICAgIG9wZXJhdGlvbiAoZS5nLiwgb24gbm9uLUhWIEtWTSBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhlCiYjNDM7ICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSkKJiM0MzsgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlCiYjNDM7d2hlcmUgYW4gTnRoIGdlbmVyYXRpb24gcHJvY2Vzc29yIGNhbiBvcGVyYXRlIGluIG1vZGVzIGNvbnNpc3RlbnQgd2l0aCBlYXJsaWVyCiYjNDM7Z2VuZXJhdGlvbnMgc3VjaCBhcyAoTi0xKSBhbmQgKE4tMikuCiYjNDM7CiYjNDM7VGhpcyBpb2N0bCBwcm92aWRlcyB1c2Vyc3BhY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ1BVIGNvbXBhdGliaWxpdHkgbW9kZXMKJiM0MztzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaG9zdCBwcm9jZXNzb3IgZm9yIGJvb3RpbmcgdGhlIG5lc3RlZCBLVk0gZ3Vlc3RzIG9uCiYjNDM7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLgomIzQzOwomIzQzOzo6CiYjNDM7CiYjNDM7ICBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7CiYjNDM7CV9fdTY0CXNpemU7CQkJLyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqLwomIzQzOwlfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovCiYjNDM7CV9fdTY0CWNvbXBhdF9jYXBhYmlsaXRpZXM7CS8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi8KJiM0MzsgIH07CiYjNDM7CiYjNDM7QmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0bwomIzQzO2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuCiYjNDM7VGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnQKJiM0Mzt1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZQomIzQzO2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuCiYjNDM7CiYjNDM7VGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgCiYjNDM7dG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOgomIzQzOwomIzQzOy0gSWYgYGBzaXplYGAgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgKG9sZCB1c2Vyc3BhY2UsCiYjNDM7ICBuZXcga2VybmVsKSwgdGhlIGtlcm5lbCB6ZXJvLXBhZHMgdGhlIHVua25vd24gdHJhaWxpbmcgZmllbGRzIGJlZm9yZQomIzQzOyAgcmV0dXJuaW5nLCBhbmQgd3JpdGVzIGJhY2sgYGBzaXplYGAgdW5jaGFuZ2VkIHNvIHVzZXJzcGFjZSBrbm93cyBob3cKJiM0MzsgIG1hbnkgYnl0ZXMgd2VyZSBmaWxsZWQuCiYjNDM7LSBJZiBgYHNpemVgYCBlcXVhbHMgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSwgdGhlIHN0cnVjdCBpcyBjb3BpZWQKJiM0MzsgIHZlcmJhdGltLgomIzQzOy0gSWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSAobmV3IHVzZXJzcGFjZSwKJiM0MzsgIG9sZCBrZXJuZWwpIGFuZCB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgYWxsIHplcm8sIHRoZSBjYWxsCiYjNDM7ICBzdWNjZWVkcyBhcyBpZiB0aGUgc2l6ZXMgbWF0Y2hlZC4gSWYgYW55IHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybywKJiM0MzsgIHRoZSBrZXJuZWwgcmV0dXJucyBgYC1FMkJJR2BgIGFuZCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8KJiM0MzsgIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS4KJiM0MzsKJiM0MztgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZQomIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uCiYjNDM7CiYjNDM7VGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5CiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMKJiM0Mztwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7c2lnbmlmaWNhbnQgYml0KToKJiM0MzsKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlCiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZQomIzQzOwomIzQzOy4uIG5vdGU6OgomIzQzOwomIzQzOyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7ICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6CiYjNDM7CiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMICZsdDsmbHQ7IDYyKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYxKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYwKWBgCiYjNDM7CiYjNDM7ICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGAmbHQ7bGludXgva3ZtLmgmZ3Q7YGAgcmF0aGVyCiYjNDM7ICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuCiYjNDM7CiAuLiBfa3ZtX3J1bjoKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCAwOTUzZjJkYWE0NjYwLi4xNjllYTZhN2ZiYWQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKQEAgLTMxOSw2ICYjNDM7MzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMgewogCWJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTsKIAlpbnQgKCpjcmVhdGVfdm1fZGVidWdmcykoc3RydWN0IGt2bSAqa3ZtKTsKIAlpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTsKJiM0MzsJaW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMDc3YzU0MzdmNTIxOS4uOTEzYTY0YjkwMWEzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDI0IEBAIHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyIHsKIAlfX3U2NAliZWhhdmlvdXJfbWFzazsJCS8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovCiB9OwogCiYjNDM7LyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovCiYjNDM7c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgewomIzQzOwlfX3U2NAlzaXplOwkJCS8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KJiM0MzsJX191NjQJZmxhZ3M7CQkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwomIzQzO307CiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMAkyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuCiYjNDM7ICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOQkoMVVMTCAmbHQ7Jmx0OyA2MikKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwCSgxVUxMICZsdDsmbHQ7IDYxKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEJKDFVTEwgJmx0OyZsdDsgNjApCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLCQkoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFwKJiM0MzsJCQkJCSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFwKJiM0MzsJCQkJCSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSkKIC8qCiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suCiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoY3B1X3ZlcnNpb24pIHsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMV9QMTE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzAwOgomIzQzOwkJKmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwomIzQzOwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7CiYjNDM7CWxvbmcgcmMgPSAtRUlOVkFMOwomIzQzOwl1MzIgY3B1X3ZlcnNpb24gPSAwOwomIzQzOwomIzQzOwlpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7CiYjNDM7CQlpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkgewomIzQzOwkJCVdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7CiYjNDM7CQkJY2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllczsKJiM0MzsJCQlyYyA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgJiMzNDtjcHUmIzM0OykgewomIzQzOwkJCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAmIzM0O2NwdS12ZXJzaW9uJiMzNDssCiYjNDM7CQkJCQkJCSAgJmFtcDtjcHVfdmVyc2lvbikpIHsKJiM0MzsJCQkJCW9mX25vZGVfcHV0KG5wKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwkJCWlmICghY3B1X3ZlcnNpb24pCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCXJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLAomIzQzOwkJCQkJCQkgICAgJmFtcDtjYXBhYmlsaXRpZXMpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWhvc3RfY2Fwcy0mZ3Q7Y29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyAmYW1wOyBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7CiAJLmdldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzX2h2LAogCS5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odiwKQEAgLTY1NTIsNiAmIzQzOzY2MDcsNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuaGFzaF92M19wb3NzaWJsZSA9IGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlLAogCS5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odiwKIAkuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odiwKJiM0MzsJLmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsCiB9OwogCiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDAwMzAyMzk5ZmMzN2IuLjJmZTRlYTBjYTRmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC02OTcsNiAmIzQzOzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCQkJfQogCQl9CiAJCWJyZWFrOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKQomIzQzOwljYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOgomIzQzOwkJciA9IDA7CiYjNDM7CQlpZiAoaHZfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bWh2X29uX3BzZXJpZXMoKSkKJiM0MzsJCQlyID0gMTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqLwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTI0NjMsNiAmIzQzOzI0NzAsNzcgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O3N2bV9vZmYoa3ZtKTsKIAkJYnJlYWs7CiAJfQomIzQzOwljYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTsKJiM0MzsJCXU2NCB1c2l6ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci4KJiM0MzsJCSAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC4KJiM0MzsJCSAqLwomIzQzOwkJciA9IC1FRkFVTFQ7CiYjNDM7CQlpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSAtRTJCSUc7CiYjNDM7CQlpZiAodW5saWtlbHkodXNpemUgJmd0OyBQQUdFX1NJWkUpKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWwKJiM0MzsJCSAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZAomIzQzOwkJICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWwKJiM0MzsJCSAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKHVzaXplICZsdDsgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDoKJiM0MzsJCSAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHkKJiM0MzsJCSAqICAgdXNpemUgJmx0OyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKQomIzQzOwkJICogICB1c2l6ZSAmZ3Q7ICBrc2l6ZTogc3VjY2VlZCBpZmYgdHJhaWxpbmcgYnl0ZXMgYXJlIHplcm8sIGVsc2UgLUUyQklHCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoJmFtcDtob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLAomIzQzOwkJCQkJICBhcmdwLCB1c2l6ZSk7CiYjNDM7CQlpZiAocikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIKJiM0MzsJCQkgKiBrZXJuZWwuIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc28KJiM0MzsJCQkgKiB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsCiYjNDM7CQkJICogdGhlbiBmYWlsIHdpdGggLUUyQklHLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChyID09IC1FMkJJRykKJiM0MzsJCQkJaWYgKHB1dF91c2VyKChfX3U2NClzaXplb2YoaG9zdF9jYXBzKSwKJiM0MzsJCQkJCSAgICAgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKQomIzQzOwkJCQkJciA9IC1FRkFVTFQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvICovCiYjNDM7CQlyID0gLUVJTlZBTDsKJiM0MzsJCWlmIChob3N0X2NhcHMuZmxhZ3MpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlyID0gLUVOT1RUWTsKJiM0MzsJCWlmICgha3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2FwcykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKCZhbXA7aG9zdF9jYXBzKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlcG9ydCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHBvcHVsYXRlZCBieSB0aGUga2VybmVsLAomIzQzOwkJICogbm90IHVzaXplOiBpZiBuZXcgdXNlcnNwYWNlIHBhc3NlZCBhIGxhcmdlciBzdHJ1Y3Qgd2l0aCB6ZXJvCiYjNDM7CQkgKiB0cmFpbGluZyBieXRlcywgd2Ugb25seSBmaWxsZWQgc2l6ZW9mKGhvc3RfY2FwcykgYnl0ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpOwomIzQzOwkJciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsICZhbXA7aG9zdF9jYXBzLAomIzQzOwkJCQkJc2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAlkZWZhdWx0OiB7CiAJCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKIAkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDthcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDQxOTAxMTA5N2ZhOGUuLjcwZTM2ZTZhMGFkNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTAKIAogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKIAlfX3UzMiBpcnFjaGlwOwpAQCAtMTM0MSw2ICYjNDM7MTM0Miw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7CiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovCiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldCkKICNkZWZpbmUgS1ZNX0FSTV9HRVRfUkVHX1dSSVRBQkxFX01BU0tTIF9JT1IoS1ZNSU8sICAweGI2LCBzdHJ1Y3QgcmVnX21hc2tfcmFuZ2UpCiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCV9JTyhLVk1JTywgIDB4YjgpCiAKIC8qIGlvY3RsIGZvciB2bSBmZCAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRQkgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdXNlcnNwYWNlIHByb3ZpZGVzIGEgYGt2bV9wcGNfY29tcGF0X2NhcHNgIHN0cnVjdCwgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaXQsIGFuZCB0aGVuIGNvcGllcyBkYXRhIGJhY2sgdG8gdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRlc2VydmVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuCgpJJiMzOTttIHNlZWluZyBpdCByZWFkcyBhIHNpemUgdmFsdWUgZnJvbSB1c2Vyc3BhY2UsIGRvZXMgc29tZSBzaXplIGNoZWNrcyB0byBoYW5kbGUgb2xkL25ldyB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0IGFuZCB0aGVuIHVzZXMgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgdG8gcmVhZCB0aGUgc3RydWN0IGl0c2VsZi4gSXQgdGhlbiB2YWxpZGF0ZXMgc29tZSBmbGFncywgY2FsbHMgYSBga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2Fwc2AgY2FsbGJhY2ssIGFuZCBmaW5hbGx5IHVzZXMgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHRvIHdyaXRlIHRoZSBwcm9jZXNzZWQgZGF0YSBiYWNrIHRvIHVzZXJzcGFjZS4KCldhaXQgYSBzZWNvbmQuLi4gYGNvcHlfc3RydWN0X3RvX3VzZXJgPyBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIHRoYXQgZnVuY3Rpb24gYmVmb3JlLiBJcyB0aGlzIHNvbWUgbmV3IGhlbHBlcj8gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IHNwcmluZ2luZyB0byBtaW5kIGFzIGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBxdWljayBgZ3JlcGAgdG8gc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3B5X3N0cnVjdF90b191c2VyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjE3PWZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxOC1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjE5OlRoZSBpb2N0bCB1c2VzIGBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgYCBhbmQgYGBjb3B5X3N0cnVjdF90b191c2VyKClgYFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2MjAtdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIzNjM9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1MzktXHRcdGhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpO1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjU0MDpcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1NDEtXHRcdFx0XHRcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcbi0tXG5ibG9jay9ibGstaW50ZWdyaXR5LmM9NTg9aW50IGJsa19nZXRfbWV0YV9jYXAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMTE4LW91dDpcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoxMTk6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXHUwMDI2bWV0YV9jYXAsIHNpemVvZihtZXRhX2NhcCksXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMTIwLVx0XHRcdFx0ICAgTlVMTCk7XG4tLVxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2Rydi5jPTI1PXN0YXRpYyBpbnQgZXRob3N1X2lvY3RsX2Rldl9xdWVyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3VfZHJ2LmMtNDQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3VfZHJ2LmM6NDU6XHRcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHU2NF90b191c2VyX3B0cihhcmdzLVx1MDAzZXBvaW50ZXIpLFxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2Rydi5jLTQ2LVx0XHRcdFx0XHQgICBhcmdzLVx1MDAzZXNpemUsXG4tLVxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvdGVncmEyNDEtY21kcXYuYz0xMjE4PXRlZ3JhMjQxX2NtZHF2X2luaXRfdmludGZfdXNlcihzdHJ1Y3QgYXJtX3ZzbW11ICp2c21tdSxcbi0tXG5kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My90ZWdyYTI0MS1jbWRxdi5jLTEyNjgtXHRkYXRhLm91dF92aW50Zl9tbWFwX29mZnNldCA9IHZpbnRmLVx1MDAzZW1tYXBfb2Zmc2V0O1xuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvdGVncmEyNDEtY21kcXYuYzoxMjY5Olx0cmV0ID0gaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIFx1MDAyNmRhdGEsXG5kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My90ZWdyYTI0MS1jbWRxdi5jLTEyNzAtXHRcdFx0XHRcdElPTU1VX1ZJT01NVV9UWVBFX1RFR1JBMjQxX0NNRFFWLFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTc5MT1zdGF0aWMgaW50IG1vY2tfdmlvbW11X2luaXQoc3RydWN0IGlvbW11ZmRfdmlvbW11ICp2aW9tbXUsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODI0LVx0XHRkYXRhLm91dF9tbWFwX29mZnNldCA9IG1vY2tfdmlvbW11LVx1MDAzZW1tYXBfb2Zmc2V0O1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODI1Olx0XHRyYyA9IGlvbW11X2NvcHlfc3RydWN0X3RvX3VzZXIoXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy04MjYtXHRcdFx0dXNlcl9kYXRhLCBcdTAwMjZkYXRhLCBJT01NVV9WSU9NTVVfVFlQRV9TRUxGVEVTVCwgb3V0X2RhdGEpO1xuLS1cbmZzL2ZpbGVfYXR0ci5jPTM3ND1TWVNDQUxMX0RFRklORTUoZmlsZV9nZXRhdHRyLCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXG4tLVxuZnMvZmlsZV9hdHRyLmMtNDIwLVx0ZmlsZWF0dHJfdG9fZmlsZV9hdHRyKFx1MDAyNmZhLCBcdTAwMjZmYXR0cik7XG5mcy9maWxlX2F0dHIuYzo0MjE6XHRlcnJvciA9IGNvcHlfc3RydWN0X3RvX3VzZXIodWZhdHRyLCB1c2l6ZSwgXHUwMDI2ZmF0dHIsXG5mcy9maWxlX2F0dHIuYy00MjItXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBmaWxlX2F0dHIpLCBOVUxMKTtcbi0tXG5mcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTQ5NS1cdCAqL1xuZnMvcGlkZnMuYzo0OTY6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcih1aW5mbywgdXNpemUsIFx1MDAyNmtpbmZvLCBzaXplb2Yoa2luZm8pLCBOVUxMKTtcbmZzL3BpZGZzLmMtNDk3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg9NTYyPWlvbW11X2NvcHlfc3RydWN0X2Zyb21fZnVsbF91c2VyX2FycmF5KHZvaWQgKmtkc3QsIHNpemVfdCBrZHN0X2VudHJ5X3NpemUsXG4tLVxuaW5jbHVkZS9saW51eC9pb21tdS5oLTU5My0vKipcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo1OTQ6ICogX19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcbmluY2x1ZGUvbGludXgvaW9tbXUuaC01OTUtICogQGRzdF9kYXRhOiBQb2ludGVyIHRvIGEgc3RydWN0IGlvbW11X3VzZXJfZGF0YSBmb3IgdXNlciBzcGFjZSBkYXRhIGxvY2F0aW9uXG4tLVxuaW5jbHVkZS9saW51eC9pb21tdS5oPTYwND1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYwNTpfX2lvbW11X2NvcHlfc3RydWN0X3RvX3VzZXIoY29uc3Qgc3RydWN0IGlvbW11X3VzZXJfZGF0YSAqZHN0X2RhdGEsXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjA2LVx0XHRcdCAgICB2b2lkICpzcmNfZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfdHlwZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjE0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo2MTU6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcihkc3RfZGF0YS1cdTAwM2V1cHRyLCBkc3RfZGF0YS1cdTAwM2VsZW4sIHNyY19kYXRhLFxuaW5jbHVkZS9saW51eC9pb21tdS5oLTYxNi1cdFx0XHRcdCAgIGRhdGFfbGVuLCBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjE5LS8qKlxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYyMDogKiBpb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MjEtICogQHVzZXJfZGF0YTogUG9pbnRlciB0byBhIHN0cnVjdCBpb21tdV91c2VyX2RhdGEgZm9yIHVzZXIgc3BhY2UgZGF0YSBsb2NhdGlvblxuLS1cbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MjgtICovXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg6NjI5OiNkZWZpbmUgaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIGtzcmMsIGRhdGFfdHlwZSwgbWluX2xhc3QpICAgICAgICBcXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYzMDpcdF9faW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIGtzcmMsIGRhdGFfdHlwZSwgc2l6ZW9mKCprc3JjKSwgXFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MzEtXHRcdFx0XHQgICAgb2Zmc2V0b2ZlbmQodHlwZW9mKCprc3JjKSwgbWluX2xhc3QpKVxuLS1cbmluY2x1ZGUvbGludXgvc29ja3B0ci5oPTExMT1jb3B5X3N0cnVjdF90b19zb2NrcHRyKHNvY2twdHJfdCBkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCAqc3JjLFxuLS1cbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTExNC1cdGlmICghc29ja3B0cl9pc19rZXJuZWwoZHN0KSlcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oOjExNTpcdFx0cmV0dXJuIGNvcHlfc3RydWN0X3RvX3VzZXIoZHN0LnVzZXIsIHVzaXplLCBzcmMsIGtzaXplLCBpZ25vcmVkX3RyYWlsaW5nKTtcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTExNi1cbi0tXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaD0zOTM9Y29weV9zdHJ1Y3RfZnJvbV91c2VyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLFxuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTQxNy0vKipcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oOjQxODogKiBjb3B5X3N0cnVjdF90b191c2VyOiBjb3B5IGEgc3RydWN0IHRvIHVzZXJzcGFjZVxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDE5LSAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTQ2NC0gKlxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDY1OiAqICAgICAgZXJyID0gY29weV9zdHJ1Y3RfdG9fdXNlcih1YXJnLCB1c2l6ZSwgXHUwMDI2a2FyZywgc2l6ZW9mKGthcmcpLFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDY2LSAqXHRcdFx0XHQgIFx1MDAyNmlnbm9yZWRfdHJhaWxpbmcpO1xuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTQ4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oOjQ5MDpjb3B5X3N0cnVjdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCAqc3JjLFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDkxLVx0XHQgICAgc2l6ZV90IGtzaXplLCBib29sICppZ25vcmVkX3RyYWlsaW5nKVxuLS1cbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTUzOD1jb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXIodm9pZCAqZHN0LCBzaXplX3QgZHN0c2l6ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC01NTYtLyoqXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaDo1NTc6ICogVGhpcyBpcyBsaWtlIGNvcHlfc3RydWN0X3RvX3VzZXIoKSwgYnV0IHRoZVxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNTU4LSAqIGRzdCBidWZmZXIgaXMgYSBrZXJuZWwgYm91bmNlIGJ1ZmZlciBpbnN0ZWFkXG4tLVxuaW9fdXJpbmcvcXVlcnkuYz02OT1zdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbi0tXG5pb191cmluZy9xdWVyeS5jLTExNi1cbmlvX3VyaW5nL3F1ZXJ5LmM6MTE3Olx0aWYgKGNvcHlfc3RydWN0X3RvX3VzZXIodWRhdGEsIHVzaXplLCBkYXRhLCBoZHIuc2l6ZSwgTlVMTCkpXG5pb191cmluZy9xdWVyeS5jLTExOC1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM9MTA2MD1TWVNDQUxMX0RFRklORTQoc2NoZWRfZ2V0YXR0ciwgcGlkX3QsIHBpZCwgc3RydWN0IHNjaGVkX2F0dHIgX191c2VyICosIHVhdHRyLFxuLS1cbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTExMDMtXHRrYXR0ci5zaXplID0gbWluKHVzaXplLCBzaXplb2Yoa2F0dHIpKTtcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjExMDQ6XHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcih1YXR0ciwgdXNpemUsIFx1MDAyNmthdHRyLCBzaXplb2Yoa2F0dHIpLCBOVUxMKTtcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTExMDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsgaW4gS1ZNIFBQQyBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGUgZnVuY3Rpb24gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGZyb20gYGluY2x1ZGUvbGludXgvdWFjY2Vzcy5oYCBpcyBpbnZvbHZlZCwgYW5kIGl0IGhhbmRsZXMgdGhlIHRyYW5zZmVyIG9mIGEgc3RydWN0IGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UsIHRha2luZyBzaXplIGRpZmZlcmVuY2VzIGludG8gYWNjb3VudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGBob3N0X2NhcHNgIGluIHRoaXMgS1ZNIFBQQyBjb250ZXh0LgoKRmlyc3QsIGBob3N0X2NhcHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gKGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtgKS4gIFRoYXQmIzM5O3MgZ29vZCwgbWVhbnMgYWxsIGZpZWxkcyBzdGFydCBjbGVhbi4gVGhlbiwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgY29waWVzIHVzZXItcHJvdmlkZWQgZGF0YSBpbnRvIGBob3N0X2NhcHNgLiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIHNtYWxsZXIgc2l6ZSAoYHVzaXplICZsdDsgc2l6ZW9mKGhvc3RfY2FwcylgKSwgdGhlIHRyYWlsaW5nIGJ5dGVzIG9mIGBob3N0X2NhcHNgIHdpbGwgcmVtYWluIHplcm8sIG9yIHdpbGwgYmUgZXhwbGljaXRseSB6ZXJvZWQgYnkgdGhlIGZ1bmN0aW9uLCB3aGljaCBpcyBmaW5lLgoKTm93LCB0aGUgYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHNgIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBJJiMzOTttIGNoZWNraW5nIGl0IGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gSXQgc2VlbXMgbGlrZSB0aGUgb25seSBmaWVsZCBvZiBgaG9zdF9jYXBzYCBtb2RpZmllZCBpbiB0aGlzIGZ1bmN0aW9uIGlzIGBjb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhlIHJlc3Qgc3RheXMgYXMgaXQgd2FzIGZyb20gdGhlIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNhbGwgKHBvdGVudGlhbGx5IHVzZXItcHJvdmlkZWQgZGF0YSkuCgpDcnVjaWFsbHksIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgICpvdmVyd3JpdGVzKiBgaG9zdF9jYXBzYC4gU28sIGlmIHRoZSB1c2VyIHNlbmRzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdGhhdCB1bmluaXRpYWxpemVkIGRhdGEgZW5kcyB1cCBpbiBgaG9zdF9jYXBzYC4gIFRoZW4sIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBnZXRzIG92ZXJ3cml0dGVuIHdpdGggdGhlIHZhbHVlIGZyb20gYGdldF9jb21wYXRfY2Fwc2AuIFRoZW4gdGhlIGBzaXplYCBpcyByZXdyaXR0ZW4gd2l0aCB0aGUgbWluIG9mIHRoZSBzaXplLgoKSGVyZSYjMzk7cyB0aGUga2V5OiB0aGUgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHRoZW4gY29waWVzIGBob3N0X2NhcHNgICpiYWNrKiB0byB1c2Vyc3BhY2UuICBUaGlzIG1ha2VzIG1lIGltbWVkaWF0ZWx5IGxvb2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlLgoKSG93ZXZlciwgYGhvc3RfY2Fwc2AgaXMgKnplcm8taW5pdGlhbGl6ZWQqLiBUaGVuLCB0aGUgdXNlciYjMzk7cyBkYXRhIGlzIGNvcGllZCBpbnRvIGBob3N0X2NhcHNgLiBBbnkgcmVtYWluaW5nIGJ5dGVzIGFyZSB6ZXJvZWQgYnkgdGhlIGtlcm5lbC4gVGhlbiB0aGUga2VybmVsIG92ZXJ3cml0ZXMgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGFuZCBzaXplIHdpdGgga25vd24gdmFsdWVzLiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIG5vIGxlYWsuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCBiYWNrIGVpdGhlciAqY2FtZSogZnJvbSB1c2Vyc3BhY2UsIHdhcyBleHBsaWNpdGx5IHplcm9lZCwgb3Igc2V0IGJ5IHRoZSBrZXJuZWwuCgpJJiMzOTttIGFsc28gbG9va2luZyBhdCB0aGUgc3RydWN0IGRlZmluaXRpb246CmBgYGMKc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgewoJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCglfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwoJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwp9OwpgYGAKTm8gcGFkZGluZyBiZXR3ZWVuIGZpZWxkcywgYWxsIGBfX3U2NGAsIHNvIHRoZXJlIGFyZSBubyBvcHBvcnR1bml0aWVzIGZvciBwYWRkaW5nLXJlbGF0ZWQgaXNzdWVzLiBBbmQgZXZlbiBpZiB0aGVyZSAqd2FzKiBwYWRkaW5nLCB0aGUgemVyby1pbml0aWFsaXphdGlvbiB0YWtlcyBjYXJlIG9mIGl0LiBBbHNvLCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCB3b3VsZCBvdmVyd3JpdGUgcGFkZGluZyB3aXRoIHVzZXIgZGF0YSwgd2hpY2ggaXMgZmluZSB0byBzZW5kIGJhY2suCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBgY2FwYWJpbGl0aWVzYCwgYGNwdV92ZXJzaW9uYCwgYW5kIGByY2AgYXJlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbmRpdGlvbmFscyBlaXRoZXIuIFNvIEkmIzM5O20gZ29vZCB0aGVyZS4KCk9uZSBmaW5hbCBjaGVjayBvbiBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHNpemVzLiBJZiBgdXNpemUgJmd0OyBzaXplb2YoaG9zdF9jYXBzKWAsIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNoZWNrcyBmb3IgdHJhaWxpbmcgbm9uLXplcm8gYnl0ZXMgaW4gdXNlcnNwYWNlLCBhbmQgcmV0dXJucyBgLUUyQklHYCBpZiB0aGV5IGFyZSBub3QgemVyby4gSWYgdGhleSAqYXJlKiB6ZXJvLCB0aGVuIGl0IGNvcGllcyBgc2l6ZW9mKGhvc3RfY2FwcylgIGJ5dGVzIGludG8ga2VybmVsIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCB3ZSBleHBlY3QuICBOb3csIHRoZSBjcml0aWNhbCBwYXJ0Li4uIGBjb3B5X3N0cnVjdF90b191c2VyYCBjb3BpZXMgYmFjayB0byB1c2Vyc3BhY2UuIEFuZCBpdCB0YWtlcyBgdXNpemVgIGFzIGlucHV0LiBTbyBldmVuIGlmIGB1c2l6ZSAmZ3Q7IHNpemVvZihob3N0X2NhcHMpYCwgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHdpbGwgY29weSBgc2l6ZW9mKGhvc3RfY2FwcylgIGJ5dGVzIGludG8gdXNlcnNwYWNlLCBhbmQgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2Vyc3BhY2UhCgpJJiMzOTttIG5vdyBzYXRpc2ZpZWQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBoZXJlLCBhZnRlciB0aGUgZG91YmxlIGNoZWNrIG9mIGBjb3B5X3N0cnVjdF90b191c2VyYC4gSSYjMzk7ZCB3YW50IHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCBidXQgdGhlIHNpemUgcGFyYW1ldGVycyBhcmUgZW5vdWdoIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfc3RydWN0X3RvX3VzZXJcXCh2b2lkIF9fdXNlciBcXCpkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCBcXCpzcmMsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTQ4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oOjQ5MDpjb3B5X3N0cnVjdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHNpemVfdCB1c2l6ZSwgY29uc3Qgdm9pZCAqc3JjLFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDkxLVx0XHQgICAgc2l6ZV90IGtzaXplLCBib29sICppZ25vcmVkX3RyYWlsaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZm9yIEVmZmljaWVuY3kgYW5kIFNlY3VyaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGNvcHlfc3RydWN0X3RvX3VzZXJgIHdpdGhpbiBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgd2hlbiBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIHBlcmZvcm1hbmNlOiBob3cgZWZmaWNpZW50bHkgZG9lcyBpdCB0cmFuc2ZlciB0aGUgZGF0YT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGlzc3VlcyBvciByZWR1bmRhbnQgY2hlY2tzPwoKVGhlbiwgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIGEgY2xhc3NpYyBhcmVhIGZvciB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBzY3J1dGluaXplIGFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZm9ybWF0IHN0cmluZyBidWdzLCBldmVuIGlmIHRoZXkgc2VlbSB1bmxpa2VseS4gQXJlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyByaWdvcm91c2x5IHZhbGlkYXRlZD8gV2hhdCBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoZSB1c2VyLXNwYWNlIGRhdGEgY2hhbmdlcyBjb25jdXJyZW50bHk/IEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBmdW5jdGlvbiBpbmNvcnBvcmF0ZXMgcm9idXN0IG1lY2hhbmlzbXMgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgZGF0YSBhY2Nlc3Mgb3IgY29ycnVwdGlvbi4gSXMgdGhlcmUgcHJvcGVyIGJvdW5kIGNoZWNraW5nIGltcGxlbWVudGVkPyBBbnkgcG90ZW50aWFsIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBsZWFkaW5nIHRvIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyPyBBbmQgZmluYWxseSwgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSB1bmFsaWduZWQgYWNjZXNzZXMgZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBhdCB3aGF0IGNvc3Q/IEkgY2FuIHByb2JhYmx5IG9wdGltaXplIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgaW50XG4gNDkwOlx0Y29weV9zdHJ1Y3RfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBzaXplX3QgdXNpemUsIGNvbnN0IHZvaWQgKnNyYyxcbiA0OTE6XHRcdFx0ICAgIHNpemVfdCBrc2l6ZSwgYm9vbCAqaWdub3JlZF90cmFpbGluZylcbiA0OTI6XHR7XG4gNDkzOlx0XHRzaXplX3Qgc2l6ZSA9IG1pbihrc2l6ZSwgdXNpemUpO1xuIDQ5NDpcdFx0c2l6ZV90IHJlc3QgPSBtYXgoa3NpemUsIHVzaXplKSAtIHNpemU7XG4gNDk1Olx0XG4gNDk2Olx0XHQvKiBEb3VibGUgY2hlY2sgaWYga3NpemUgaXMgbGFyZ2VyIHRoYW4gYSBrbm93biBvYmplY3Qgc2l6ZS4gKi9cbiA0OTc6XHRcdGlmIChXQVJOX09OX09OQ0Uoa3NpemUgXHUwMDNlIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzcmMsIDEpKSlcbiA0OTg6XHRcdFx0cmV0dXJuIC1FMkJJRztcbiA0OTk6XHRcbiA1MDA6XHRcdC8qIERlYWwgd2l0aCB0cmFpbGluZyBieXRlcy4gKi9cbiA1MDE6XHRcdGlmICh1c2l6ZSBcdTAwM2Uga3NpemUpIHtcbiA1MDI6XHRcdFx0aWYgKGNsZWFyX3VzZXIoZHN0ICYjNDM7IHNpemUsIHJlc3QpKVxuIDUwMzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDUwNDpcdFx0fVxuIDUwNTpcdFx0aWYgKGlnbm9yZWRfdHJhaWxpbmcpXG4gNTA2Olx0XHRcdCppZ25vcmVkX3RyYWlsaW5nID0gdXNpemUgXHUwMDNjIGtzaXplIFx1MDAyNlx1MDAyNlxuIDUwNzpcdFx0XHRcdG1lbWNocl9pbnYoc3JjICYjNDM7IHNpemUsIDAsIHJlc3QpICE9IE5VTEw7XG4gNTA4Olx0XHQvKiBDb3B5IHRoZSBpbnRlcm9wZXJhYmxlIHBhcnRzIG9mIHRoZSBzdHJ1Y3QuICovXG4gNTA5Olx0XHRpZiAoY29weV90b191c2VyKGRzdCwgc3JjLCBzaXplKSlcbiA1MTA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNTExOlx0XHRyZXR1cm4gMDtcbiA1MTI6XHR9XG4gNTEzOlx0XG4gNTE0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXG4gNTE1Olx0X19jb3B5X3N0cnVjdF9nZW5lcmljX2JvdW5jZV9idWZmZXIodm9pZCAqZHN0LCBzaXplX3QgZHN0c2l6ZSxcbiA1MTY6XHRcdFx0XHRcdCAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNzaXplLFxuIDUxNzpcdFx0XHRcdFx0ICAgIGJvb2wgKmlnbm9yZWRfdHJhaWxpbmcpXG4gNTE4Olx0e1xuIDUxOTpcdFx0c2l6ZV90IHNpemUgPSBtaW4oZHN0c2l6ZSwgc3Jjc2l6ZSk7XG4gNTIwOlx0XHRzaXplX3QgcmVzdCA9IG1heChkc3RzaXplLCBzcmNzaXplKSAtIHNpemU7XG4gNTIxOlx0XG4gNTIyOlx0XHQvKiBEZWFsIHdpdGggdHJhaWxpbmcgYnl0ZXMuICovXG4gNTIzOlx0XHRpZiAoZHN0c2l6ZSBcdTAwM2Ugc3Jjc2l6ZSlcbiA1MjQ6XHRcdFx0bWVtc2V0KGRzdCAmIzQzOyBzaXplLCAwLCByZXN0KTtcbiA1MjU6XHRcdGlmIChpZ25vcmVkX3RyYWlsaW5nKVxuIDUyNjpcdFx0XHQqaWdub3JlZF90cmFpbGluZyA9IGRzdHNpemUgXHUwMDNjIHNyY3NpemUgXHUwMDI2XHUwMDI2XG4gNTI3Olx0XHRcdFx0bWVtY2hyX2ludihzcmMgJiM0Mzsgc2l6ZSwgMCwgcmVzdCkgIT0gTlVMTDtcbiA1Mjg6XHRcdC8qIENvcHkgdGhlIGludGVyb3BlcmFibGUgcGFydHMgb2YgdGhlIHN0cnVjdC4gKi9cbiA1Mjk6XHRcdG1lbWNweShkc3QsIHNyYywgc2l6ZSk7XG4gNTMwOlx0fVxuIDUzMTpcdFxuIDUzMjpcdC8qKlxuIDUzMzpcdCAqIFRoaXMgaXMgbGlrZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSwgYnV0IHRoZVxuIDUzNDpcdCAqIHNyYyBidWZmZXIgd2FzIGFscmVhZHkgY29waWVkIGludG8gYSBrZXJuZWxcbiA1MzU6XHQgKiBib3VuY2UgYnVmZmVyLCBzbyBpdCB3aWxsIG5ldmVyIHJldHVybiAtRUZBVUxULlxuIDUzNjpcdCAqL1xuIDUzNzpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGludFxuIDUzODpcdGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcih2b2lkICpkc3QsIHNpemVfdCBkc3RzaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIGZvciBQb3RlbnRpYWwgSW5pdGlhbGl6YXRpb24gSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBmdW5jdGlvbiwgdHJ5aW5nIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCB0aGlzIGlzIHdoYXQgSSYjMzk7dmUgZ290IHNvIGZhci4KCkZpcnN0LCBJIGNvbmZpcm1lZCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgd29ya3MuIEl0IGNsZWFycyB0cmFpbGluZyBieXRlcyBpbiB1c2Vyc3BhY2UgaWYgdGhlIGNvcHkgc2l6ZSAoYHVzaXplYCkgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBzdHJ1Y3QmIzM5O3Mgc2l6ZSAoYGtzaXplYCkuICBNb3JlIGltcG9ydGFudGx5LCBpdCBjb3BpZXMgYSAqbWF4aW11bSogb2YgYG1pbihrc2l6ZSwgdXNpemUpYCBieXRlcyBmcm9tIHRoZSBzb3VyY2UgKGBzcmNgKSB0byB0aGUgZGVzdGluYXRpb24gKGBkc3RgKSwgd2hpY2ggbWVhbnMgaXQgd29uJiMzOTt0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbml0aWFsaXplZCBzb3VyY2UgbWVtb3J5LiBJbiBvdXIgY2FzZSwgdGhlIHNvdXJjZSBpcyBgJmFtcDtob3N0X2NhcHNgLCBhbmQgYGtzaXplYCBpcyBgc2l6ZW9mKGhvc3RfY2FwcylgLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZC4gU28gaXQgd2lsbCBiZSBzYWZlLgoKTm93LCBnb2luZyB0aHJvdWdoIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpdHNlbGYsIEkmIzM5O20gdHJhY2luZyB0aGUgdmFsdWVzLiBgY2FwYWJpbGl0aWVzYCBpcyBpbml0aWFsaXplZCB0byAwLCBgcmNgIHRvIGAtRUlOVkFMYCwgYW5kIGBjcHVfdmVyc2lvbmAgdG8gMC4gVGhlIGNvZGUgYnJhbmNoZXMgYmFzZWQgb24gYGt2bWh2X29uX3BzZXJpZXMoKWAuIElmIGl0JiMzOTtzIGZhbHNlLCBgcmNgIHJlbWFpbnMgYC1FSU5WQUxgLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuCgpJZiBga3ZtaHZfb25fcHNlcmllcygpYCBpcyB0cnVlIGFuZCBga3ZtaHZfaXNfbmVzdGVkdjIoKWAgaXMgYWxzbyB0cnVlLCBgY2FwYWJpbGl0aWVzYCBnZXRzIGFzc2lnbmVkIGBuZXN0ZWRfY2FwYWJpbGl0aWVzYCwgYW5kIGByY2AgaXMgc2V0IHRvIDAuICBUaGF0IGlzIGEgY29uZGl0aW9uYWwgc2V0IGZyb20gYSBwcmUtZGVmaW5lZCB2YWx1ZS4KCk90aGVyd2lzZSwgaWYgYGt2bWh2X2lzX25lc3RlZHYyKClgIGlzIGZhbHNlLCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoICYjMzQ7Y3B1JiMzNDsgbm9kZXMgdXNpbmcgYG9mX25vZGVfcHV0YC4gIEl0IGF0dGVtcHRzIHRvIHJlYWQgYSAmIzM0O2NwdS12ZXJzaW9uJiMzNDsgcHJvcGVydHkgaW50byBgY3B1X3ZlcnNpb25gLiBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIHJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuICBJbXBvcnRhbnRseSwgaWYgdGhlIHJlYWQgaXMgc3VjY2Vzc2Z1bCwgdGhlIGxvb3AgYnJlYWtzLiBTbyBpdCBlZmZlY3RpdmVseSBmaW5kcyB0aGUgKmZpcnN0KiBDUFUgbm9kZSB3aXRoIHRoZSBwcm9wZXJ0eSwgYW5kIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMuCgpJZiBubyAmIzM0O2NwdS12ZXJzaW9uJiMzNDsgcHJvcGVydHkgaXMgZm91bmQsIGBjcHVfdmVyc2lvbmAgcmVtYWlucyAwLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYC1FSU5WQUxgLiAgSWYgaXQgKmlzKiBmb3VuZCwgdGhlIG5vbi16ZXJvIGBjcHVfdmVyc2lvbmAgaXMgcGFzc2VkIHRvIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGlzIGZ1bmN0aW9uIHRoZW4gcG9wdWxhdGVzIGBjYXBhYmlsaXRpZXNgIGJhc2VkIG9uIGBjcHVfdmVyc2lvbmAsIGFuZCByZXR1cm5zIGEgdmFsdWUuIGByY2AgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hcCBmdW5jdGlvbi4KCklmIGByY2AgaXMgbmVnYXRpdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBPdGhlcndpc2UsIGl0IGJpdHdpc2UgQU5EcyBgY2FwYWJpbGl0aWVzYCB3aXRoIGBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLYCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYGhvc3RfY2Fwcy0mZ3Q7Y29tcGF0X2NhcGFiaWxpdGllc2AsIGJlZm9yZSByZXR1cm5pbmcgYHJjYCAod2hpY2ggc2hvdWxkIG5vdyBiZSAwKS4KClNvIGl0IGxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgSSBoYXZlIHJldmlld2VkIHNlZW1zIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBzdHJ1Y3QgYGhvc3RfY2Fwc2AgaXMgZGVmaW5pdGVseSB6ZXJvLWluaXRpYWxpemVkLiBJJiMzOTttIGNvbmZpZGVudCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXJgIGhhbmRsZSBjb3B5aW5nIHNhZmVseS4gVGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLgoKSSB0aGluayBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUga2V5IGFyZWFzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBwcmVjaXNlIGJlaGF2aW9yIG9mIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIG9uY2UgbW9yZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91YWNjZXNzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MzpcdGNvcHlfc3RydWN0X2Zyb21fdXNlcih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYyxcbiAzOTQ6XHRcdFx0ICAgICAgc2l6ZV90IHVzaXplKVxuIDM5NTpcdHtcbiAzOTY6XHRcdHNpemVfdCBzaXplID0gbWluKGtzaXplLCB1c2l6ZSk7XG4gMzk3Olx0XHRzaXplX3QgcmVzdCA9IG1heChrc2l6ZSwgdXNpemUpIC0gc2l6ZTtcbiAzOTg6XHRcbiAzOTk6XHRcdC8qIERvdWJsZSBjaGVjayBpZiBrc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIGtub3duIG9iamVjdCBzaXplLiAqL1xuIDQwMDpcdFx0aWYgKFdBUk5fT05fT05DRShrc2l6ZSBcdTAwM2UgX19idWlsdGluX29iamVjdF9zaXplKGRzdCwgMSkpKVxuIDQwMTpcdFx0XHRyZXR1cm4gLUUyQklHO1xuIDQwMjpcdFxuIDQwMzpcdFx0LyogRGVhbCB3aXRoIHRyYWlsaW5nIGJ5dGVzLiAqL1xuIDQwNDpcdFx0aWYgKHVzaXplIFx1MDAzYyBrc2l6ZSkge1xuIDQwNTpcdFx0XHRtZW1zZXQoZHN0ICYjNDM7IHNpemUsIDAsIHJlc3QpO1xuIDQwNjpcdFx0fSBlbHNlIGlmICh1c2l6ZSBcdTAwM2Uga3NpemUpIHtcbiA0MDc6XHRcdFx0aW50IHJldCA9IGNoZWNrX3plcm9lZF91c2VyKHNyYyAmIzQzOyBzaXplLCByZXN0KTtcbiA0MDg6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4gNDA5Olx0XHRcdFx0cmV0dXJuIHJldCA/OiAtRTJCSUc7XG4gNDEwOlx0XHR9XG4gNDExOlx0XHQvKiBDb3B5IHRoZSBpbnRlcm9wZXJhYmxlIHBhcnRzIG9mIHRoZSBzdHJ1Y3QuICovXG4gNDEyOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoZHN0LCBzcmMsIHNpemUpKVxuIDQxMzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA0MTQ6XHRcdHJldHVybiAwO1xuIDQxNTpcdH1cbiA0MTY6XHRcbiA0MTc6XHQvKipcbiA0MTg6XHQgKiBjb3B5X3N0cnVjdF90b191c2VyOiBjb3B5IGEgc3RydWN0IHRvIHVzZXJzcGFjZVxuIDQxOTpcdCAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxuIDQyMDpcdCAqICAgICAgICAgYnl0ZXMgbG9uZy5cbiA0MjE6XHQgKiBAdXNpemU6IChBbGxlZ2VkKSBzaXplIG9mIEBkc3Qgc3RydWN0LlxuIDQyMjpcdCAqIEBzcmM6ICAgU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS5cbiA0MjM6XHQgKiBAa3NpemU6IFNpemUgb2YgQHNyYyBzdHJ1Y3QuXG4gNDI0Olx0ICogQGlnbm9yZWRfdHJhaWxpbmc6IFNldCB0byAldHJ1ZSBpZiB0aGVyZSB3YXMgYSBub24temVybyBieXRlIGluIEBzcmMgdGhhdFxuIDQyNTpcdCAqIHVzZXJzcGFjZSBjYW5ub3Qgc2VlIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgYW4gc21hbGxlciBzdHJ1Y3QuXG4gNDI2Olx0ICpcbiA0Mjc6XHQgKiBDb3BpZXMgYSBzdHJ1Y3QgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlcnNwYWNlLCBpbiBhIHdheSB0aGF0IGd1YXJhbnRlZXNcbiA0Mjg6XHQgKiBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3Igc3RydWN0IHN5c2NhbGwgYXJndW1lbnRzIChhcyBsb25nIGFzIGZ1dHVyZVxuIDQyOTpcdCAqIHN0cnVjdCBleHRlbnNpb25zIGFyZSBtYWRlIHN1Y2ggdGhhdCBhbGwgbmV3IGZpZWxkcyBhcmUgKmFwcGVuZGVkKiB0byB0aGVcbiA0MzA6XHQgKiBvbGQgc3RydWN0LCBhbmQgemVyb2VkLW91dCBuZXcgZmllbGRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgb2xkXG4gNDMxOlx0ICogc3RydWN0KS5cbiA0MzI6XHQgKlxuIDQzMzpcdCAqIFNvbWUgc3lzY2FsbHMgbWF5IHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgdXNlcnNwYWNlIGtub3dzIGFib3V0IGV2ZXJ5dGhpbmcgaW5cbiA0MzQ6XHQgKiB0aGUgc3RydWN0LCBhbmQgaWYgdGhlcmUgaXMgYSBub24temVybyB2YWx1ZSB0aGF0IHVzZXJzcGNlIGRvZXNuJiMzOTt0IGtub3dcbiA0MzU6XHQgKiBhYm91dCwgdGhleSB3YW50IHRvIHJldHVybiBhbiBlcnJvciAoc3VjaCBhcyAtRU1TR1NJWkUpIG9yIGhhdmUgc29tZSBvdGhlclxuIDQzNjpcdCAqIGZhbGxiYWNrIChzdWNoIGFzIGFkZGluZyBhIFwmIzM0O3lvdSYjMzk7cmUgbWlzc2luZyBzb21lIGluZm9ybWF0aW9uXCYjMzQ7IGZsYWcpLiBJZlxuIDQzNzpcdCAqIEBpZ25vcmVkX3RyYWlsaW5nIGlzIG5vbi0lTlVMTCwgaXQgd2lsbCBiZSBzZXQgdG8gJXRydWUgaWYgdGhlcmUgd2FzIGFcbiA0Mzg6XHQgKiBub24temVybyBieXRlIHRoYXQgY291bGQgbm90IGJlIGNvcGllZCB0byB1c2Vyc3BhY2UgKGllLiB3YXMgcGFzdCBAdXNpemUpLlxuIDQzOTpcdCAqXG4gNDQwOlx0ICogV2hpbGUgdW5jb25kaXRpb25hbGx5IHJldHVybmluZyBhbiBlcnJvciBpbiB0aGlzIGNhc2UgaXMgdGhlIHNpbXBsZXN0XG4gNDQxOlx0ICogc29sdXRpb24sIGZvciBtYXhpbXVtIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgeW91IHNob3VsZCB0cnkgdG8gb25seSByZXR1cm5cbiA0NDI6XHQgKiAtRU1TR1NJWkUgaWYgdGhlIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhlIGRhdGEgdGhhdCBjb3VsZG4mIzM5O3QgYmUgY29waWVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc4NQoJCQkJCQkJb3V0cHV0OiAzMTIKCQkJCQkJCXRob3VnaHRzOiAxMDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBOb3QgSnVzdGlmaWVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEFuYWx5emluZyB0aGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IGFmdGVyIGNhcmVmdWwgZXhhbWluYXRpb24sIEkgZG9uJiMzOTt0IHNlZSBhbnkgc2lnbmlmaWNhbnQgcmlzayBoZXJlLgoKRmlyc3QsIHRoZSBgaG9zdF9jYXBzYCBzdHJ1Y3QgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIHdpdGggYD0ge31gLiBUaGlzIGd1YXJhbnRlZXMgYSBjbGVhbiBzbGF0ZSwgcmVtb3ZpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIHRoZSBjb2RlIHVzZXMgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyYCBjb25zaXN0ZW50bHkuIFRoZXNlIGhlbHBlcnMgYXJlIGRlc2lnbmVkIHRvIGhhbmRsZSBwb3RlbnRpYWwgc2l6ZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB1c2Vyc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBzdHJ1Y3RzLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBpcyBjcnVjaWFsLCBiZWNhdXNlIGl0IHplcm8taW5pdGlhbGl6ZXMgdGhlIHRyYWlsaW5nIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgaWYgdGhlIHNvdXJjZSBpcyBzbWFsbGVyLiBTaW5jZSBgaG9zdF9jYXBzYCBpcyBhbHJlYWR5IHplcm9lZCwgdGhlIG1lbXNldCBpcyByZWR1bmRhbnQsIGJ1dCBoYXJtbGVzcy4gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGd1YXJhbnRlZXMgdGhhdCB3ZSYjMzk7cmUgb25seSBzZW5kaW5nIGJhY2sgdG8gdXNlcnNwYWNlIHRoZSBzaXplIHdlJiMzOTtyZSBzdXBwb3NlZCB0by4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIGFuIGluZm8tbGVhayBieSBzZW5kaW5nIGJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZ2FyYmFnZS4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgYGt2bXBwY19nZXRfY29tcGF0X2NhcHMoKWAgcG9wdWxhdGVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQsIHdoaWNoIEkga25vdyBpcyBoYW5kbGVkIHVzaW5nIGZ1bGx5IGluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gY29tcGxleCBzdHJ1Y3R1cmVzIHRvIHdvcnJ5IGFib3V0LCBub3RoaW5nIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvcm1hdGlvbiBsZWFrLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjb2RlIGlzIHNvdW5kLgoKVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIEluIG15IHByb2Zlc3Npb25hbCBvcGluaW9uLCBnaXZlbiB0aGUgc2FmZXR5IG1lY2hhbmlzbXMgYWxyZWFkeSBpbiBwbGFjZSwgc3VjaCBhcyBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCwgYW5kIHRoZSBzdGFuZGFyZCBLQVNBTiBjaGVja3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3b3VsZCBiZSBvdmVya2lsbC4gSSBkb24mIzM5O3Qgc2VlIGEgc2lnbmlmaWNhbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBkYXRhIGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA0OjMwLjI2NTI4MjAzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk3ODUxOTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHdoaWNoIHRha2VzIGEgc3RydWN0IGBrdm1fcHBjX2NvbXBhdF9jYXBzYCBmcm9tIHVzZXJzcGFjZSwgcG9wdWxhdGVzIGl0IHdpdGggaG9zdCBjYXBhYmlsaXRpZXMsIGFuZCBjb3BpZXMgaXQgYmFjay4gVGhlIHN0cnVjdCBgaG9zdF9jYXBzYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYD0ge31gLiBUaGUga2VybmVsIHVzZXMgdGhlIHN0YW5kYXJkIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGhlbHBlcnMsIHdoaWNoIHNhZmVseSBoYW5kbGUgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCB6ZXJvZXMgYW55IHRyYWlsaW5nIGJ5dGVzIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUga2VybmVsJ3MsIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBlbnN1cmVzIHRoYXQgb25seSBpbml0aWFsaXplZCBieXRlcyB1cCB0byB0aGUgcmVxdWVzdGVkIHNpemUgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXJzcGFjZSwgY2xlYXJpbmcgYW55IHRyYWlsaW5nIGJ5dGVzIGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGlmIG5lY2Vzc2FyeS4gVGhlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKClgIGZ1bmN0aW9uIG9ubHkgbW9kaWZpZXMgdGhlIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBmaWVsZCB1c2luZyBmdWxseSBpbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgcGFkZGluZyBieXRlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbnZhbGlkIHVzZXIgcG9pbnRlcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDozMC4yNjUyODc5NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI4MDYwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMjA6MDQ6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuaW5kZXggZTMwMDNhMjQxZDViMC4uZTY1NmQxMTdjZDBiMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5AQCAtNjU2Niw2ICs2NTY2LDk1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXFxuIFxcbis0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcXG4rOkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXFxuK1xcbitFcnJvcnMgaW5jbHVkZTpcXG4rXFxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcXG4rICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxcbisgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW5cXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcXG4rICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXFxuKyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzXFxuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgZXhjZWVkcyBgYFBBR0VfU0laRWBgIChwYXRob2xvZ2ljYWwgaW5wdXQgZ3VhcmQpLFxcbisgICAgICAgICAgIG9yIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmRcXG4rICAgICAgICAgICB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgbm9uLXplcm8gKG5ldyB1c2Vyc3BhY2Ugb25cXG4rICAgICAgICAgICBvbGQga2VybmVsIHdpdGggbm9uLWRlZmF1bHQgZmllbGRzIHNldCk7IGluIHRoZSBsYXR0ZXIgY2FzZVxcbisgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYFxcbisgICAgICAgICAgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXFxuKyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcXG4rICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXFxuK3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cXG4rXFxuK1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXFxuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cXG4rS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxcbitcXG4rOjpcXG4rXFxuKyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xcbitcXHRfX3U2NFxcdHNpemU7XFx0XFx0XFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xcbitcXHRfX3U2NFxcdGZsYWdzO1xcdFxcdFxcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rICB9O1xcbitcXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xcbitgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLlxcbitUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxcbitmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LlxcbitcXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXFxuK3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nIGFjcm9zcyB0aHJlZSBjYXNlczpcXG4rXFxuKy0gSWYgYGBzaXplYGAgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSxcXG4rICBuZXcga2VybmVsKSwgdGhlIGtlcm5lbCB6ZXJvLXBhZHMgdGhlIHVua25vd24gdHJhaWxpbmcgZmllbGRzIGJlZm9yZVxcbisgIHJldHVybmluZywgYW5kIHdyaXRlcyBiYWNrIGBgc2l6ZWBgIHVuY2hhbmdlZCBzbyB1c2Vyc3BhY2Uga25vd3MgaG93XFxuKyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC5cXG4rLSBJZiBgYHNpemVgYCBlcXVhbHMgdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplLCB0aGUgc3RydWN0IGlzIGNvcGllZFxcbisgIHZlcmJhdGltLlxcbistIElmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAobmV3IHVzZXJzcGFjZSxcXG4rICBvbGQga2VybmVsKSBhbmQgdGhlIHVua25vd24gdHJhaWxpbmcgYnl0ZXMgYXJlIGFsbCB6ZXJvLCB0aGUgY2FsbFxcbisgIHN1Y2NlZWRzIGFzIGlmIHRoZSBzaXplcyBtYXRjaGVkLiBJZiBhbnkgdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvLFxcbisgIHRoZSBrZXJuZWwgcmV0dXJucyBgYC1FMkJJR2BgIGFuZCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG9cXG4rICB0aGUgYGBzaXplYGAgZmllbGQgc28gdXNlcnNwYWNlIGNhbiByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemUuXFxuK1xcbitgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxcbitcXG4rVGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XFxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXFxuK3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJ3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxcbitzaWduaWZpY2FudCBiaXQpOlxcbitcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxcbitcXG4rLi4gbm90ZTo6XFxuK1xcbisgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0XFxuKyAgIHNpZ25pZmljYW50IGJpdCkuIEluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGFyZSBkZWZpbmVkIGFzOlxcbitcXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYyKWBgXFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlgYFxcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjApYGBcXG4rXFxuKyAgIFVzZXJzcGFjZSBzaG91bGQgdXNlIHRoZSBkZWZpbmVkIGNvbnN0YW50cyBmcm9tIGBgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZWBgIHJhdGhlclxcbisgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cXG4rXFxuIC4uIF9rdm1fcnVuOlxcbiBcXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxcbkBAIC0zMTksNiArMzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMge1xcbiBcXHRib29sICgqaGFzaF92M19wb3NzaWJsZSkodm9pZCk7XFxuIFxcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXHRpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTtcXG4rXFx0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcXG4gfTtcXG4gXFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbmluZGV4IDA3N2M1NDM3ZjUyMTkuLjkxM2E2NGI5MDFhM2QgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbkBAIC00MzcsNiArNDM3LDI0IEBAIHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyIHtcXG4gXFx0X191NjRcXHRiZWhhdmlvdXJfbWFzaztcXHRcXHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xcbiB9O1xcbiBcXG4rLyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovXFxuK3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcXG4rXFx0X191NjRcXHRzaXplO1xcdFxcdFxcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cXG4rXFx0X191NjRcXHRmbGFncztcXHRcXHRcXHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xcbitcXHRfX3U2NFxcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XFx0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xcbit9O1xcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXFx0MjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi9cXG4rXFxuKy8qXFxuKyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLlxcbisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuXFxuKyAqL1xcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MilcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYxKVxcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNjApXFxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTS1xcdFxcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcXG4gLypcXG4gICogVmFsdWVzIGZvciBjaGFyYWN0ZXIgYW5kIGNoYXJhY3Rlcl9tYXNrLlxcbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xcbmluZGV4IDYxZGJlZWEzMTdmM2IuLjc3NTU4ZjZlZWQ4NjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5AQCAtNjUxMCw2ICs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxcbit7XFxuK1xcdHN3aXRjaCAoY3B1X3ZlcnNpb24pIHtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMV9QMTE6XFxuK1xcdFxcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIFBWUl9BUkNIXzMxOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMDA6XFxuK1xcdFxcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4rXFx0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xcbitcXHRsb25nIHJjID0gLUVJTlZBTDtcXG4rXFx0dTMyIGNwdV92ZXJzaW9uID0gMDtcXG4rXFxuK1xcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG4rXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcXG4rXFx0XFx0XFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFxcXCJjcHVcXFwiKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFxcXCJjcHUtdmVyc2lvblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNwdV92ZXJzaW9uKSkge1xcbitcXHRcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChucCk7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFjcHVfdmVyc2lvbilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0aG9zdF9jYXBzLVxcdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFxcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuIFxcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcXG4gXFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxcbkBAIC02NTUyLDYgKzY2MDcsNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG4gXFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcXG4gXFx0LmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LFxcbiBcXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcXG4rXFx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5pbmRleCAwMDMwMjM5OWZjMzdiLi4yZmU0ZWEwY2E0ZmYxIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5AQCAtNjk3LDYgKzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuKyNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKVxcbitcXHRjYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOlxcbitcXHRcXHRyID0gMDtcXG4rXFx0XFx0aWYgKGh2X2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYga3ZtaHZfb25fcHNlcmllcygpKVxcbitcXHRcXHRcXHRyID0gMTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI0NjMsNiArMjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlc3ZtX29mZihrdm0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9O1xcbitcXHRcXHR1NjQgdXNpemU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cXG4rXFx0XFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IC1FRkFVTFQ7XFxuK1xcdFxcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdHIgPSAtRTJCSUc7XFxuK1xcdFxcdGlmICh1bmxpa2VseSh1c2l6ZSBcXHUwMDNlIFBBR0VfU0laRSkpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxcbitcXHRcXHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcXG4rXFx0XFx0ICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWxcXG4rXFx0XFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIgPSAtRUlOVkFMO1xcbitcXHRcXHRpZiAodXNpemUgXFx1MDAzYyBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxcbitcXHRcXHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XFxuK1xcdFxcdCAqICAgdXNpemUgXFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxcbitcXHRcXHQgKiAgIHVzaXplIFxcdTAwM2UgIGtzaXplOiBzdWNjZWVkIGlmZiB0cmFpbGluZyBieXRlcyBhcmUgemVybywgZWxzZSAtRTJCSUdcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoXFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJncCwgdXNpemUpO1xcbitcXHRcXHRpZiAocikge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlclxcbitcXHRcXHRcXHQgKiBrZXJuZWwuIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc29cXG4rXFx0XFx0XFx0ICogdXNlcnNwYWNlIGtub3dzIHdoaWNoIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLFxcbitcXHRcXHRcXHQgKiB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAociA9PSAtRTJCSUcpXFxuK1xcdFxcdFxcdFxcdGlmIChwdXRfdXNlcigoX191NjQpc2l6ZW9mKGhvc3RfY2FwcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmIChob3N0X2NhcHMuZmxhZ3MpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0ciA9IC1FTk9UVFk7XFxuK1xcdFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRyID0ga3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcyhcXHUwMDI2aG9zdF9jYXBzKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwsXFxuK1xcdFxcdCAqIG5vdCB1c2l6ZTogaWYgbmV3IHVzZXJzcGFjZSBwYXNzZWQgYSBsYXJnZXIgc3RydWN0IHdpdGggemVyb1xcbitcXHRcXHQgKiB0cmFpbGluZyBieXRlcywgd2Ugb25seSBmaWxsZWQgc2l6ZW9mKGhvc3RfY2FwcykgYnl0ZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRob3N0X2NhcHMuc2l6ZSA9IG1pbl90KHU2NCwgdXNpemUsIHNpemVvZihob3N0X2NhcHMpKTtcXG4rXFx0XFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZob3N0X2NhcHMsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxcbiBcXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcXG4gXFx0X191MzIgaXJxY2hpcDtcXG5AQCAtMTM0MSw2ICsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcXG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9DT1VOVEVSX09GRlNFVCAqL1xcbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcdF9JTyhLVk1JTywgIDB4YjgpXFxuIFxcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cXG4gI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRVxcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA0OjMxLjgxODgyNDg0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjczMTM3NzkxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBLVk0gVk0gZmlsZSBkZXNjcmlwdG9yIGFuZCBpbXBsZW1lbnRzIG5ldyBsb2dpYyBpbiBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYTJmYWNkMGNjYzcxMTU1YTJhMDQ4MzU0MjIzMmNkMTg0ZjQ1YWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDowNDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggZTMwMDNhMjQxZDViMC4uZTY1NmQxMTdjZDBiMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICs2NTY2LDk1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuKzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbis6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbitcbitFcnJvcnMgaW5jbHVkZTpcbitcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbisgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbisgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgZXhjZWVkcyBgYFBBR0VfU0laRWBgIChwYXRob2xvZ2ljYWwgaW5wdXQgZ3VhcmQpLFxuKyAgICAgICAgICAgb3IgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIGFuZFxuKyAgICAgICAgICAgdGhlIHVua25vd24gdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvIChuZXcgdXNlcnNwYWNlIG9uXG4rICAgICAgICAgICBvbGQga2VybmVsIHdpdGggbm9uLWRlZmF1bHQgZmllbGRzIHNldCk7IGluIHRoZSBsYXR0ZXIgY2FzZVxuKyAgICAgICAgICAgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgXG4rICAgICAgICAgICBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZVxuKyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXG4rICAgICAgICAgICBvcGVyYXRpb24gKGUuZy4sIG9uIG5vbi1IViBLVk0gaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZVxuKyAgICAgICAgICAgcmVxdWlyZWQgS1ZNIG9wZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUpXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitJQk0gUE9XRVIgc3lzdGVtIHNlcnZlci1iYXNlZCBwcm9jZXNzb3JzIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IG1vZGUgZmVhdHVyZVxuK3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxuK2dlbmVyYXRpb25zIHN1Y2ggYXMgKE4tMSkgYW5kIChOLTIpLlxuK1xuK1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXG4rc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvblxuK0tWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy5cbitcbis6OlxuK1xuKyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuK1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuK1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cbitcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuKyAgfTtcbitcbitCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXG4rYGBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGAgYW5kIHplcm8gdGhlIGBgZmxhZ3NgYCBmaWVsZC5cbitUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxuK3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXG4rZmllbGQgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlIHdpdGhvdXQgQUJJIGFtYmlndWl0eS5cbitcbitUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcbit0byBzdXBwb3J0IGV4dGVuc2libGUgdmVyc2lvbmluZyBhY3Jvc3MgdGhyZWUgY2FzZXM6XG4rXG4rLSBJZiBgYHNpemVgYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIChvbGQgdXNlcnNwYWNlLFxuKyAgbmV3IGtlcm5lbCksIHRoZSBrZXJuZWwgemVyby1wYWRzIHRoZSB1bmtub3duIHRyYWlsaW5nIGZpZWxkcyBiZWZvcmVcbisgIHJldHVybmluZywgYW5kIHdyaXRlcyBiYWNrIGBgc2l6ZWBgIHVuY2hhbmdlZCBzbyB1c2Vyc3BhY2Uga25vd3MgaG93XG4rICBtYW55IGJ5dGVzIHdlcmUgZmlsbGVkLlxuKy0gSWYgYGBzaXplYGAgZXF1YWxzIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSwgdGhlIHN0cnVjdCBpcyBjb3BpZWRcbisgIHZlcmJhdGltLlxuKy0gSWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIChuZXcgdXNlcnNwYWNlLFxuKyAgb2xkIGtlcm5lbCkgYW5kIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBhbGwgemVybywgdGhlIGNhbGxcbisgIHN1Y2NlZWRzIGFzIGlmIHRoZSBzaXplcyBtYXRjaGVkLiBJZiBhbnkgdHJhaWxpbmcgYnl0ZXMgYXJlIG5vbi16ZXJvLFxuKyAgdGhlIGtlcm5lbCByZXR1cm5zIGBgLUUyQklHYGAgYW5kIHdyaXRlcyBiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50b1xuKyAgdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4gcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplLlxuK1xuK2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlXG4rc2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi5cbitcbitUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHlcbittb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpY1xuK3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJ3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxuK3NpZ25pZmljYW50IGJpdCk6XG4rXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgKGJpdCAyKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMCBwcm9jZXNzb3IgbW9kZVxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgIChiaXQgMykgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTEgcHJvY2Vzc29yIG1vZGVcbitcbisuLiBub3RlOjpcbitcbisgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0XG4rICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6XG4rXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MilgYFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjEpYGBcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYwKWBgXG4rXG4rICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZWBgIHJhdGhlclxuKyAgIHRoYW4gaGFyZGNvZGluZyBiaXQgcG9zaXRpb25zLlxuK1xuIC4uIF9rdm1fcnVuOlxuIFxuIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXG5pbmRleCAwOTUzZjJkYWE0NjYwLi4xNjllYTZhN2ZiYWQ0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuQEAgLTMxOSw2ICszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7XG4gXHRib29sICgqaGFzaF92M19wb3NzaWJsZSkodm9pZCk7XG4gXHRpbnQgKCpjcmVhdGVfdm1fZGVidWdmcykoc3RydWN0IGt2bSAqa3ZtKTtcbiBcdGludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpO1xuK1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XG4gXHRfX3U2NFx0YmVoYXZpb3VyX21hc2s7XHRcdC8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovXG4gfTtcbiBcbisvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi9cbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4rXHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4rXHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuK307XG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFx0MjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi9cbitcbisvKlxuKyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLlxuKyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbisgKi9cbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MilcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYwKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTS1x0XHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcbiAvKlxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5pbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuQEAgLTY1MTAsNiArNjUxMCw2MSBAQCBzdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXG4re1xuK1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuK1x0Y2FzZSBQVlJfQVJDSF8zMV9QMTE6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBQVlJfQVJDSF8zMTpcbitcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMDtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFBWUl9BUkNIXzMwMDpcbitcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4rXHR1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7XG4rXHRsb25nIHJjID0gLUVJTlZBTDtcbitcdHUzMiBjcHVfdmVyc2lvbiA9IDA7XG4rXG4rXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG4rXHRcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcbitcdFx0XHRjYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzO1xuK1x0XHRcdHJjID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFwiY3B1XCIpIHtcbitcdFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwiY3B1LXZlcnNpb25cIixcbitcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3B1X3ZlcnNpb24pKSB7XG4rXHRcdFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghY3B1X3ZlcnNpb24pXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZjYXBhYmlsaXRpZXMpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJldHVybiByYztcbitcbitcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcbiBcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcbiBcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcbkBAIC02NTUyLDYgKzY2MDcsNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcbiBcdC5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsXG4gXHQuY3JlYXRlX3ZjcHVfZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92Y3B1X2RlYnVnZnNfaHYsXG4gXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcbitcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2IuLjJmZTRlYTBjYTRmZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC02OTcsNiArNjk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuKyNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKVxuK1x0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcbitcdFx0ciA9IDA7XG4rXHRcdGlmIChodl9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1odl9vbl9wc2VyaWVzKCkpXG4rXHRcdFx0ciA9IDE7XG4rXHRcdGJyZWFrO1xuKyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xuIFx0ZGVmYXVsdDpcbiBcdFx0ciA9IDA7XG4gXHRcdGJyZWFrO1xuQEAgLTI0NjMsNiArMjQ3MCw3NyBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZXN2bV9vZmYoa3ZtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XG4rXHRcdHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9O1xuK1x0XHR1NjQgdXNpemU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLlxuK1x0XHQgKiBzaXplIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSBzdHJ1Y3QuXG4rXHRcdCAqL1xuK1x0XHRyID0gLUVGQVVMVDtcbitcdFx0aWYgKGdldF91c2VyKHVzaXplLCAoX191NjQgX191c2VyICopYXJncCkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSAtRTJCSUc7XG4rXHRcdGlmICh1bmxpa2VseSh1c2l6ZSBcdTAwM2UgUEFHRV9TSVpFKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuK1x0XHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcbitcdFx0ICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWxcbitcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbitcdFx0ICovXG4rXHRcdHIgPSAtRUlOVkFMO1xuK1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxuK1x0XHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XG4rXHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4rXHRcdCAqICAgdXNpemUgXHUwMDNlICBrc2l6ZTogc3VjY2VlZCBpZmYgdHJhaWxpbmcgYnl0ZXMgYXJlIHplcm8sIGVsc2UgLUUyQklHXG4rXHRcdCAqL1xuK1x0XHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXG4rXHRcdFx0XHRcdCAgYXJncCwgdXNpemUpO1xuK1x0XHRpZiAocikge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXJcbitcdFx0XHQgKiBrZXJuZWwuIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc29cbitcdFx0XHQgKiB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsXG4rXHRcdFx0ICogdGhlbiBmYWlsIHdpdGggLUUyQklHLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChyID09IC1FMkJJRylcbitcdFx0XHRcdGlmIChwdXRfdXNlcigoX191NjQpc2l6ZW9mKGhvc3RfY2FwcyksXG4rXHRcdFx0XHRcdCAgICAgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdFx0XHRyID0gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHQvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvICovXG4rXHRcdHIgPSAtRUlOVkFMO1xuK1x0XHRpZiAoaG9zdF9jYXBzLmZsYWdzKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRyID0gLUVOT1RUWTtcbitcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcylcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKFx1MDAyNmhvc3RfY2Fwcyk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZXBvcnQgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBwb3B1bGF0ZWQgYnkgdGhlIGtlcm5lbCxcbitcdFx0ICogbm90IHVzaXplOiBpZiBuZXcgdXNlcnNwYWNlIHBhc3NlZCBhIGxhcmdlciBzdHJ1Y3Qgd2l0aCB6ZXJvXG4rXHRcdCAqIHRyYWlsaW5nIGJ5dGVzLCB3ZSBvbmx5IGZpbGxlZCBzaXplb2YoaG9zdF9jYXBzKSBieXRlcy5cbitcdFx0ICovXG4rXHRcdGhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpO1xuK1x0XHRyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXHUwMDI2aG9zdF9jYXBzLFxuK1x0XHRcdFx0XHRzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFx0ZGVmYXVsdDoge1xuIFx0XHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUuLjcwZTM2ZTZhMGFkNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNDEsNiArMTM0Miw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9DT1VOVEVSX09GRlNFVCAqL1xuICNkZWZpbmUgS1ZNX0FSTV9TRVRfQ09VTlRFUl9PRkZTRVQgX0lPVyhLVk1JTywgIDB4YjUsIHN0cnVjdCBrdm1fYXJtX2NvdW50ZXJfb2Zmc2V0KVxuICNkZWZpbmUgS1ZNX0FSTV9HRVRfUkVHX1dSSVRBQkxFX01BU0tTIF9JT1IoS1ZNSU8sICAweGI2LCBzdHJ1Y3QgcmVnX21hc2tfcmFuZ2UpXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cbisjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXHRfSU8oS1ZNSU8sICAweGI4KVxuIFxuIC8qIGlvY3RsIGZvciB2bSBmZCAqL1xuICNkZWZpbmUgS1ZNX0NSRUFURV9ERVZJQ0VcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDozMS44MTg4NTAyNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjYyMTczMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTIGlvY3RsIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQncyBhZGRlZCB0byBLVk0gb24gUG93ZXJQQywgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBWTSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBpb2N0bCBleHBlY3RzIGEgYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYCBwb2ludGVyLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgdGhlIGltcGxlbWVudGF0aW9uIOKAkyBpdCBsaXZlcyB3aXRoaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgLCB3aGljaCBjYWxscyBga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMoXHUwMDI2aG9zdF9jYXBzKWAuIEFuZCBgZ2V0X2NvbXBhdF9jYXBzYCBpcyB0aGVuIGRlZmluZWQgYXMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBmdXp6YWJsZS4gQSBuZXcgaW9jdGwgaW4gS1ZNLCBzcGVjaWZpY2FsbHkgZm9yIFBvd2VyUEMuLi4gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBPa2F5LCBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLCBhcyB3ZSBjYW4gY29tcGlsZSBmb3IgUG93ZXJQQy4gQW5kLCB3YWl0LCBTeXprYWxsZXIgc3VwcG9ydHMgUG93ZXJQQyAocHBjNjRsZSksIHNvIHRoYXQncyBhIGJpZyBncmVlbiBmbGFnLlxuXG5UaGUgaW9jdGwgaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBjb3JlIEtWTSBsb2dpYyBmb3IgUG93ZXJQQy4gTm93LCBsZXQgbWUgc2VlLi4uIEl0J3MgZGVmaW5lZCBhcyBgX0lPKEtWTUlPLCAweGI4KWAuIEhtbSwgYnV0IGl0IHRha2VzIGFuIGFyZ3VtZW50LCBkb2Vzbid0IGl0PyBSaWdodC4gYF9JT2AgZG9lc24ndCBlbmNvZGUgdGhlIHNpemUsIGJ1dCB0aGUgY29kZSBkb2VzIHVzZSBgYXJncGAgYXMgYSBwb2ludGVyLiBUaGF0J3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBwb2ludC5cblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gTmVlZCB0byBleGFtaW5lIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gUmlnaHQsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIGlzIGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAsIHdoaWNoIGltcGxpZXMgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC4gVGltZSB0byBjaGVjayBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IHRvIGJ1aWxkIGFuIGVudmlyb25tZW50IHdoZXJlIHRoaXMgaXMgZXhwb3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA0OjM5LjA4MTAyNzM4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAxMzY2OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDo0MC44ODI0MDA2MTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1Mzk1MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEtWTSBvbiB0aGUgUG93ZXJQQyBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYEtWTV9CT09LM1NfNjRfSFZgIGZlYXR1cmUuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGlyZWN0b3J5LiBUaGF0IHdvdWxkIGJlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGRlZmluaXRpb24gZm9yIGBLVk1fQk9PSzNTXzY0X0hWYCB3aWxsIHJlc2lkZSB0aGVyZSwgYWxvbmcgd2l0aCBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgaGVscCB0ZXh0LiBLbm93aW5nIHRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgZXNzZW50aWFsIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZ5aW5nIHRoZSBLVk0gc2V0dXAgb24gdGhpcyBwbGF0Zm9ybSBhbmQgSSB3aWxsIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NDQuMDQ3Nzk4Nzc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXFx1MDAyNlxcdTAwMjYgUFBDX1BPV0VSTlZcXG4gIDgyOlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA4MzpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcXG4gIDg0OlxcdFxcdHNlbGVjdCBDTUFcXG4gIDg1OlxcdFxcdGhlbHBcXG4gIDg2OlxcdFxcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cXG4gIDg3OlxcdFxcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXFxuICA4ODpcXHRcXHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIEtWTSB3aWxsIHVzZSB0aGUgaGFyZHdhcmUgdmlydHVhbGl6YXRpb25cXG4gIDkxOlxcdFxcdCAgZmFjaWxpdGllcyBvZiBQT1dFUjcgKGFuZCBsYXRlcikgcHJvY2Vzc29ycywgbWVhbmluZyB0aGF0XFxuICA5MjpcXHRcXHQgIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW1zIHdpbGwgcnVuIGF0IGZ1bGwgaGFyZHdhcmUgc3BlZWRcXG4gIDkzOlxcdFxcdCAgdXNpbmcgc3VwZXJ2aXNvciBhbmQgdXNlciBtb2Rlcy4gIEhvd2V2ZXIsIHRoaXMgYWxzbyBtZWFuc1xcbiAgOTQ6XFx0XFx0ICB0aGF0IEtWTSBpcyBub3QgdXNhYmxlIHVuZGVyIFBvd2VyVk0gKHBIeXApLCBpcyBvbmx5IHVzYWJsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDo0NC4wNDc4OTY2MDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzgxNDk2MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzIExvZ2ljKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBgS1ZNX0JPT0szU182NF9IVmAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGluZ2VzIG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBSaWdodCwgZ290IGl0LiBOb3csIGxldCdzIHRyYWNlIHRoaXMgc3BlY2lmaWMgaW9jdGwgaW1wbGVtZW50YXRpb24uIEFoYSwgdGhlIGlvY3RsIGluIHF1ZXN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBga3ZtX29wc19odmAsIHdoaWNoLCBuYXR1cmFsbHksIGlzIHRpZWQgdG8gYEtWTV9CT09LM1NfNjRfSFZgLlxuXG5Ob3csIEknbSBjdXJpb3VzLiBEb2VzIGBLVk1fQk9PSzNTXzY0X1BSYCBpbXBsZW1lbnQgaXQgYXMgd2VsbD8gTGV0J3MgcXVpY2tseSB2ZXJpZnkuIE5vcGUuIE9ubHkgYGt2bV9vcHNfaHZgIGlzIGRlZmluaW5nIGAuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFNvLCB0aGUgYm90dG9tIGxpbmUgaXMgdGhhdCB3ZSBuZWVkIGJvdGggYEtWTV9CT09LM1NfNjRfSFZgIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgS1ZNYCBlbmFibGVkLlxuXG5UaGUgaW9jdGwgY29kZSBpdHNlbGYgaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gVGhhdOKAmXMgdGhlIGtleSBoZXJlLiBOb3csIHRoZSBmdW5jdGlvbiBJIHNob3VsZCBmb2N1cyBvbiBpcyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AsIGJ1dCBJ4oCZbGwgYWxzbyBuZWVkIHRvIGludmVzdGlnYXRlIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBBbHNvLCBkb24ndCBmb3JnZXQgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHdoYXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC5cblxuTm93LCBsZXQgbWUgY2hlY2sgd2hlcmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBsb2NhdGVkLiBSaWdodCwgYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NDkuNDI5Mzk1MDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDI2MzI0MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdm1faW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9MjAwNj1zdGF0aWMgaW50IGt2bV92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMDE1LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjIwMTY6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTIwMTcte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZtLmM9MTY5PXN0YXRpYyBpbnQga3ZtX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTE3OC1cXG5hcmNoL2xvb25nYXJjaC9rdm0vdm0uYzoxNzk6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92bS5jLTE4MC17XFxuLS1cXG5hcmNoL21pcHMva3ZtL21pcHMuYz05ODE9aW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTk4Ni1cXG5hcmNoL21pcHMva3ZtL21pcHMuYzo5ODc6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTk4OC17XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTYxMjQ9c3RhdGljIHZvaWQga3ZtcHBjX2lycV9ieXBhc3NfZGVsX3Byb2R1Y2VyX2h2KHN0cnVjdCBpcnFfYnlwYXNzX2NvbnN1bWVyICpjb25zLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTQ0LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE0NTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX2h2KHN0cnVjdCBmaWxlICpmaWxwLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE0Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTY4PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTk1LVxcdC5mYXN0X3ZjcHVfa2ljayA9IGt2bXBwY19mYXN0X3ZjcHVfa2lja19odixcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1OTY6XFx0LmFyY2hfdm1faW9jdGwgID0ga3ZtX2FyY2hfdm1faW9jdGxfaHYsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTk3LVxcdC5oY2FsbF9pbXBsZW1lbnRlZCA9IGt2bXBwY19oY2FsbF9pbXBsX2h2LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0yMDI2PXN0YXRpYyBpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdF9wcih2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDM4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MjAzOTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX3ByKHN0cnVjdCBmaWxlICpmaWxwLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMjA0MC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0yMDQ1PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX3ByID0ge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0yMDcyLVxcdC5mYXN0X3ZjcHVfa2ljayA9IGt2bV92Y3B1X2tpY2ssXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoyMDczOlxcdC5hcmNoX3ZtX2lvY3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX3ByLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMjA3NC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIyOTQ9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NwdV9jaGFyKHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyICpjcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIzNjItXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjM2MzppbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2NC17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92bS5jPTIxNT1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMjY3LVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmM6MjY4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTI2OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI1OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzI0NT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjU3LVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MjU4OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI1OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU5ND1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNTk1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE1OTY6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU5Ny1sb25nIGt2bV9hcmNoX3ZtX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MTQ4PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM4MC1cXHRkZWZhdWx0OlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM4MTpcXHRcXHRyID0ga3ZtX2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzgyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NTEuMTMyMDM0MDAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3NDk5MTU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQUEMgQ29tcGF0IENhcGFiaWxpdGllcyBJT0NUTCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0J3MgYmVlbiBhZGRlZCBpbnRvIGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuIFN0cmFpZ2h0Zm9yd2FyZDsgZGVmaW5pdGVseSByZWFjaGFibGUsIGdvb2QuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRvIGZvY3VzIG15IGVmZm9ydHMgb24gYSBmZXcgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AuIE9mIGNvdXJzZSwgdGhlcmUncyBga3ZtX2FyY2hfdm1faW9jdGxgIGl0c2VsZiwgYnV0IHRoYXQncyBhIHByZXR0eSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLiBXZWxsLCB3YWl0LCBubywgaXQncyAqbm90KiBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCdzIGFuIGlvY3RsIGhhbmRsZXIuIEl0J3MgYSBsYXJnZSBmdW5jdGlvbiwgYnV0IG15IGZvY3VzIHNob3VsZCByZW1haW4gb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCBmb3Igbm93LlxuXG5MZXQgbWUgbW92ZSBvbiB0byBleGFtaW5pbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBJJ2xsIGZpbmQgaXQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNDo1NS43MDcwMjkwNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjE2ODk5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MTM9c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTMyLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjUzMzpzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MzQte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTY4PXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjA5LVxcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjYxMDpcXHQuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcyxcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2MTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDQ6NTcuMjI4NzI4MjA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjUwNzY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4gZm9yIGhvdyBLVk0gaGFuZGxlcyBndWVzdCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGhvc3QgaGFyZHdhcmUgb24gUG93ZXJQQy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgZGV0ZXJtaW5lcyB3aGljaCBmZWF0dXJlcyB0aGUgZ3Vlc3QgaXMgYWxsb3dlZCB0byB1c2UuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgdGhlIGd1ZXN0J3MgdmlldyBvZiB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRvIHRoZSBob3N0J3MgYWN0dWFsIGNhcGFiaWxpdGllcywgdGFraW5nIGludG8gYWNjb3VudCBhbnkgbGltaXRhdGlvbnMgaW1wb3NlZCBieSB0aGUgdmlydHVhbGl6YXRpb24gbGF5ZXIuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHksIG1ha2luZyBzdXJlIHRoZSBndWVzdCBkb2Vzbid0IHRyeSB0byBhY2Nlc3MgYW55dGhpbmcgaXQgc2hvdWxkbid0LCBvciB1dGlsaXplIGEgZmVhdHVyZSBpbiBhIHdheSB0aGF0IHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW0gb3IgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6XG5cbiogICBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBtYW5pcHVsYXRpbmc/IGBrdm1fcHBjX3ZjcHVgLCBga3ZtX3BwY19wcmAsIGFuZCBga3ZtX3BwY19ib29rM3NfNjRgIGFyZSBwcm9iYWJseSBpbnZvbHZlZCwgYWxvbmdzaWRlIHNvbWUgYml0ZmllbGRzIHJlcHJlc2VudGluZyB0aGUgZ3Vlc3QncyBmZWF0dXJlIHNldCBhbmQgdGhlIGhvc3QncyBzdXBwb3J0LiBJIGV4cGVjdCB0byBzZWUgY2hlY2tzIGZvciBDUFVJRCBiaXRzLCBNU1JzLCBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcy5cbiogICBIb3cgZG9lcyBpdCBoYW5kbGUgZmVhdHVyZSB0cmFuc2xhdGlvbiBvciBlbXVsYXRpb24/IERvZXMgaXQgc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGUgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBob3N0J3MgY2FwYWJpbGl0aWVzLCBvciBkb2VzIGl0IGFjdGl2ZWx5IHJld3JpdGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIG9yIGRhdGEgc3RydWN0dXJlcyBvbiB0aGUgZmx5PyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz9cbiogICBIb3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIG51YW5jZXMgb2YgZGlmZmVyZW50IFBvd2VyUEMgYXJjaGl0ZWN0dXJlcyBhbmQgbW9kZWxzPyBXZSBoYXZlIGV2ZXJ5dGhpbmcgZnJvbSBCb29rM1MgdG8gb2xkZXIgcGxhdGZvcm1zLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBjb250YWlucyBhIGxvdCBvZiBjb25kaXRpb25hbCBsb2dpYywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNoZWNrcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGhhcmR3YXJlIHJldmlzaW9uIGRldGVjdGlvbi5cbiogICBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzPyBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgZm9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byBpbXByb3BlciBjYXBhYmlsaXR5IG1hcHBpbmcuXG4qICAgQXJlIHRoZXJlIGFueSBjb21wYXRpYmlsaXR5IG9wdGlvbnMgYXQgdGhlIFFFTVUgbGV2ZWwgd2hpY2ggbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGF0IHRoZSBwb2ludCBvZiB2aXJ0dWFsaXphdGlvbj9cblxuTGV0J3Mgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsIGdyYXBoIGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHNlZSB0aGlzIGZ1bmN0aW9uIGF0IHdvcmsgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjAxLjc1MzgwODA1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODE0OTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NDkwPXN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTEzOnN0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTQtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NTQtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTU1OlxcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU1Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjAzLjI4MTk2MjM2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDUxMTc4MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBvd2VyUEMgQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGNvZGUgcmVsYXRlZCB0byBQb3dlclBDIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ3ZlIGlkZW50aWZpZWQgYXJlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AuIEhtbSwgd2FpdCwgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgaXQncyBpbmxpbmVkPyBMZXQgbWUgc2VlLi4uIEl0J3Mgb25seSBjYWxsZWQgb25jZSwgcmlnaHQgd2l0aGluIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gQWgsIGJ1dCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaXRzZWxmIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYC5nZXRfY29tcGF0X2NhcHNgLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgd29uJ3QgYmUgaW5saW5lZC4gU28sIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cbk5vdywgd2hlcmUgaXMgdGhpcyBhbGwgYmVpbmcgY2FsbGVkIGZyb20/IFJpZ2h0LCBga3ZtX2FyY2hfdm1faW9jdGxgIGhhbmRsZXMgdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0J3MgYSBwcmV0dHkgYmlnIGZ1bmN0aW9uLCBidXQgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBsb2NhbGl6ZWQgd2l0aGluIHRoZSBgY2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzpgIGJsb2NrLiBTbyBpdCdzIHN0aWxsIGZpbmUgdG8ganVzdCBmb2N1cyBvbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cbk9rYXksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkPyBBaCwgeWVzLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZC4gSXQncyBub3cgcmV0dXJuaW5nIDEgZm9yIGBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQU2AuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgYEtWTWAgYW5kIGBLVk1fQk9PSzNTXzY0X0hWYCwgb2J2aW91c2x5LiBXYWl0LCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSBpdCByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MTAuMzMzMTQzMDY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxNzg3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yOT1jb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzUtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTQ1PWNvbmZpZyBLVk1fQk9PSzNTXzMyXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MTIuMDE0OTM2NTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTk0NTcxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtWTV9CT09LM1NfNjRfSFYgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBLVk1fQk9PSzNTXzY0X0hWYCDigJMgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiZG9lcyB0aGlzIHBhcnRpY3VsYXIgS1ZNIGNvbmZpZ3VyYXRpb24gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgYFBQQ19QT1dFUk5WYD9cIiBLbm93aW5nIHRoZSBudWFuY2VzIG9mIHRoZXNlIFBvd2VyUEMtYmFzZWQgS1ZNIGVudmlyb25tZW50cywgaXQncyBjcnVjaWFsIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSB0aWdodGx5IGNvdXBsZWQuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVkaWN0IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhcmNoaXRlY3R1cmFsIGRpZmZlcmVuY2VzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmlzaW5nIGZyb20gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlLiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzLCBhbmQgaWYgYW55IGZ1cnRoZXIgcmVzZWFyY2ggb3IgdGVzdGluZyBpcyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNToxNS42MzQzOTcwNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc5OlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuICA4MDpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFxcdTAwMjZcXHUwMDI2IFBQQ19QT1dFUk5WXFxuICA4MjpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbiAgODM6XFx0XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXFxuICA4NDpcXHRcXHRzZWxlY3QgQ01BXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXFxuICA4NzpcXHRcXHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxcbiAgODg6XFx0XFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNToxNS42MzQ0NzU1ODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NjQwNjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIGl0IGhpbmdlcyBvbiBhIGNvdXBsZSBvZiBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcncyBwcm9wZXJseSBlbmFibGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgc2V0OiBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgUFBDX1BPV0VSTlZgLCBhbmQgYEtWTV9CT09LM1NfNjRfSFZgLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBQUENfUE9XRVJOVmAgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuIEkgZG9uJ3Qgd2FudCB0byBjaGFzZSBhIGRlYWQgZW5kLCBzbyB2ZXJpZnlpbmcgdGhhdCByaWdodCBub3cgd2lsbCBwcmV2ZW50IGRvd25zdHJlYW0gaXNzdWVzLiBJJ2xsIGdldCBvbiB0aGF0IGltbWVkaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc4MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MTkuMDkwODg1MDM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMTQ5NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUENfUE9XRVJOVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBQUEM2NCBcXHUwMDI2XFx1MDAyNiBQUENfQk9PSzNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjIwLjc4MzA1NjA2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMyMjQzMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGEgTmV3IEtWTSBpb2N0bDogS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHllcywgYFBQQ19QT1dFUk5WYCBsb29rcyBsaWtlIGEgdmFsaWQgY29uZmlndXJhdGlvbi4gQW5kLCB3YWl0LCBgS1ZNX0JPT0szU182NF9IVmAgaXMgdHJpc3RhdGUsIG1lYW5pbmcgaXQgKmNhbiogYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGV4Y2VsbGVudCEgVGhhdCBtZWFucyBTeXprYWxsZXIgY2FuIGZ1enogaXQuXG5cblJpZ2h0LCB0aGUgaW9jdGwgaW4gcXVlc3Rpb24gaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgY2xlYXJseSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIE5vdywgYSBxdWljayB0aG91Z2h0IOKAkyBpcyBpdCB3b3J0aCBhZGRpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYD8gSXTigJlzIGEgZmFpcmx5IGxhcmdlIGZ1bmN0aW9uLCBidXQgdGhlIHNwZWNpZmljIGNhc2Ugd2UgY2FyZSBhYm91dCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgKmlzKiBuZXcuIEhtbW0sIHNpbmNlIGl0J3MgZ2VuZXJpYywgYmV0dGVyIHRvIGF2b2lkIGl0LiBXZSBkb24ndCB3YW50IHRvIHNrZXcgdGhlIGZ1enppbmcgdG93YXJkcyBhbGwgVk0gaW9jdGxzLlxuXG5XYWl0LCBvbiBzZWNvbmQgdGhvdWdodCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIEknbGwganVzdCBhZGQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLlxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2suIEFueXRoaW5nIGVsc2UgbW9kaWZpZWQ/IFl1cCwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGlzIGFsc28gdG91Y2hlZC4gVGhhdCdzIGZpbmUsIEknbGwgYWRkIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC5cblxuTm93LCB0aW1lIGZvciBhIHF1aWNrIHJldmlldy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgZm9yIFBvd2VyUEMuIEl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IsIGFuZCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuIEkgY2FuIGdldCBzb21lIGdyZWF0IGZ1enppbmcgY292ZXJhZ2UgaGVyZS5cblxuVGhlIGtleSBmdW5jdGlvbiBpcyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggZ2l2ZXMgdXMgYSBuZXcgd2F5IHRvIGludGVyYWN0IHdpdGggUG93ZXJQQyBLVk0sIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzEsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjI4LjYxNTMwMTUxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjMwNzY0LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBQUENfUE9XRVJOViwgS1ZNX0JPT0szU182NF9IViIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9CT09LM1NfNjRcIixcbiAgICBcIlBQQ19QT1dFUk5WXCIsXG4gICAgXCJLVk1fQk9PSzNTXzY0X0hWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBWTSBmaWxlIGRlc2NyaXB0b3IgYW5kIGltcGxlbWVudHMgbmV3IGxvZ2ljIGluIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQsIFBQQ19QT1dFUk5WLCBLVk1fQk9PSzNTXzY0X0hWXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjI4LjY5NTk0NTY0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ2MDE0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4uLiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbWlzc2luZz8gVGhhdCdzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4uIE9rYXksIGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZWlyIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGFjdHVhbGx5IHByZXNlbnQuIE5lZWQgdG8gcnVsZSBvdXQgYW55IHNpbXBsZSBvdmVyc2lnaHQgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIG1vcmUgY29tcGxleCBpc3N1ZXMgbGlrZSBkZXBsb3ltZW50IHNjcmlwdHMgb3IgaW5mcmFzdHJ1Y3R1cmUgcHJvYmxlbXMuIExldCBtZSBydW4gYSBxdWljayBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMwMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNTozMS43NDE5NjQ4MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTg3OTU2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9CT09LM1NfNjRfSFZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjMzLjQwMDc2NzAxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM5MDc3OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBvZGQgYmVoYXZpb3IuIFRoZSB0b29sLCBgc2V0LXJlc3VsdHNgLCBpcyB0ZWxsaW5nIG1lIHRoYXQgY2VydGFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gZm9yIFBvd2VyUEMgZG9uJ3QgZXhpc3QuIEJ1dCBJIGtub3cgdGhleSdyZSB0aGVyZSEgSSBjYW4gKnNlZSogdGhlbSByaWdodCBoZXJlIGluIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgLiBJdCdzIGEgYml0IHBlcnBsZXhpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhlIHRvb2wgbWlnaHQgYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBvbmx5IGNoZWNraW5nIHRoZSB4ODZfNjQgY29uZmlncywgd2hpY2ggd291bGQgZXhwbGFpbiB0aGUgZGlzY3JlcGFuY3kuIEJ1dCwgbm8sIGl0J3Mgc3VwcG9zZWQgdG8gY2hlY2sgYWdhaW5zdCB0aGUgZW50aXJlIGtlcm5lbCB0cmVlLCBzbyB0aGF0IHNob3VsZG4ndCBiZSBpdC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2Agb25lIG1vcmUgdGltZSwganVzdCB0byBiZSBzdXJlLi4uIHllcCwgc3RpbGwgdGhlcmUuXG5cbkhtbS4uLiBQZXJoYXBzIHRoZSB0b29sIG9ubHkgbG9va3MgYXQgYEtjb25maWdgIGZpbGVzIHRoYXQgYXJlICpkaXJlY3RseSogaW5jbHVkZWQgaW4gdGhlIG1haW4gYEtjb25maWdgLiBCdXQgd2FpdCwgYGFyY2gvcG93ZXJwYy9LY29uZmlnYCAqZG9lcyogaW5jbHVkZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCwgc28gdGhhdCdzIG5vdCB0aGUgaXNzdWUgZWl0aGVyIVxuXG5Pa2F5LCBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhlIHRvb2wgbWlnaHQgYmUgdXNpbmcgYSBwcmUtZ2VuZXJhdGVkIGxpc3Qgb2YgY29uZmlncywgYW5kIG1heWJlIHRoYXQgbGlzdCBpcyB4ODZfNjQtY2VudHJpYy4gSW4gYW55IGNhc2UsIGlmIGl0IGNsYWltcyB0aGVzZSBQb3dlclBDIEtWTSBvcHRpb25zIGRvbid0IGV4aXN0LCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBlaXRoZXIgb21pdCB0aGVtLCBvciwgYXQgYSBtaW5pbXVtLCBvbmx5IGluY2x1ZGUgYEtWTWAgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LiBUaW1lIHRvIGNoZWNrIGlmIGBLVk1gIGl0c2VsZiBpcyBldmVuIGRlZmluZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NzIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6MzguNDM5ODQ3NTE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMTIwMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xNy1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MTg6Y29uZmlnIEtWTVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMwLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMi1cXHRib29sIFxcXCJNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI2OmNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjctXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mjk6Y29uZmlnIEtWTV9CT09LM1NfMzJfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzUtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDQtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI2OmNvbmZpZyBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNy1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI5OmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgdGltaW5nIGZvciB0aGUgUDkgZW50cnkgcG9pbnRcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0My1cXHRib29sIFxcXCJEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiTmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTcxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE1VXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiSHlwZXJ2aXNvciBQZXJmIGV2ZW50cyBmb3IgS1ZNIEJvb2szcy1IVlxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4NS1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg3OmNvbmZpZyBLVk1fRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg4LVxcdGJvb2wgXFxcIkRldGFpbGVkIGV4aXQgdGltaW5nXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5Ny1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTk4OmNvbmZpZyBLVk1fRTUwMFYyXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwdjIgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTItXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTQtXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9NUElDXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIzMC1cXHRib29sIFxcXCJLVk0gaW4ta2VybmVsIE1QSUMgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0MC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjQxOmNvbmZpZyBLVk1fWElDU1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXFx0Ym9vbCBcXFwiS1ZNIGluLWtlcm5lbCBYSUNTIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTAtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUyLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZz0yMj1zb3VyY2UgXFxcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWljcm93YXR0L0tjb25maWdcXFwiXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTIzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZzoyNDpjb25maWcgS1ZNX0dVRVNUXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIktWTSBHdWVzdCBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz04MjY9c291cmNlIFxcXCJhcmNoL3g4Ni94ZW4vS2NvbmZpZ1xcXCJcXG5hcmNoL3g4Ni9LY29uZmlnLTgyNy1cXG5hcmNoL3g4Ni9LY29uZmlnOjgyODpjb25maWcgS1ZNX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04MjktXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0zLVxcbnZpcnQva3ZtL0tjb25maWc6NDpjb25maWcgS1ZNX0NPTU1PTlxcbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0zOT1jb25maWcgTkVFRF9LVk1fRElSVFlfUklOR19XSVRIX0JJVE1BUFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy00Mi1cXG52aXJ0L2t2bS9LY29uZmlnOjQzOmNvbmZpZyBLVk1fTU1JT1xcbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTQ1LVxcbnZpcnQva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9BU1lOQ19QRlxcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNDktIyBUb2dnbGUgdG8gc3dpdGNoIGJldHdlZW4gZGlyZWN0IG5vdGlmaWNhdGlvbiBhbmQgYmF0Y2ggam9iXFxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcXG52aXJ0L2t2bS9LY29uZmlnLTUxLSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTYxLVxcbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXFxudmlydC9rdm0vS2NvbmZpZy02My0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTY3LVxcbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbnZpcnQva3ZtL0tjb25maWctNjktICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTcwLVxcbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9LY29uZmlnLTcyLSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy03My1cXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXFxudmlydC9rdm0vS2NvbmZpZy03NS0gICAgICAgZGVmX2Jvb2wgeVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctOTMtXFxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG52aXJ0L2t2bS9LY29uZmlnLTk1LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy05Ni1cXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxudmlydC9rdm0vS2NvbmZpZy05OC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctOTktXFxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG52aXJ0L2t2bS9LY29uZmlnLTEwMS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctMTAyLVxcbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjM5Ljk4MDk3MjU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDczMjQ2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkcmVzc2luZyB0aGUgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHRvb2wgaXMgY2hlY2tpbmcgbXkgY29uZmlndXJhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSB4ODZfNjQuIE5vIHN1cnByaXNlcyB0aGVyZS4gUmlnaHQsIHNvIEkgc2VlIGBLVk1fQk9PSzNTXzY0YCBmbGFnZ2VkIGFzIGFuIGlzc3VlLiBUaGF0J3MgYSBQb3dlclBDLXNwZWNpZmljIHNldHRpbmcsIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGJlIGluIGFuIHg4Nl82NCBrZXJuZWwgdHJlZS4gTWFrZXMgc2Vuc2UuIEkgY2FuIGNsZWFybHkgc2ltcGxpZnkgdGhpczsgSSdsbCBqdXN0IHN1cHBseSBgS1ZNYCBhbmQgYEtWTV9DT01QQVRgLCBvciBwZXJoYXBzIGp1c3QgYEtWTWAuIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBnZW5lcmFsIGNhc2UuIEhtbSwgYnV0IHdhaXQuIFRoZSB0b29sIGlzIG5vdyBleHBsaWNpdGx5IGZsYWdnaW5nIHRob3NlIGNvbmZpZ3MgYXMgbm9uLWV4aXN0ZW50IHdpdGhpbiB0aGUga2VybmVsIHRyZWUuIE9rYXksIGxldCdzIGtlZXAgaXQgc2ltcGxlOyBgS1ZNYCBzaG91bGQgd29yaywgYW5kIHRoZSByZXN0IHNob3VsZCBiZSBmaWd1cmVkIG91dCBieSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5LiBJIGNhbiBzZWUgd2h5IHRoZSBvdGhlciBjb25maWdzIGFyZSBjYXVzaW5nIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOTUsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjQ0Ljg4ODI5OTQ1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MzE0NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIFZNIGZpbGUgZGVzY3JpcHRvciBhbmQgaW1wbGVtZW50cyBuZXcgbG9naWMgaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIFZNIGZpbGUgZGVzY3JpcHRvciBhbmQgaW1wbGVtZW50cyBuZXcgbG9naWMgaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6NDQuOTU2NjIwMjcxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI4NzE3MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA1OjQ0Ljk1NzExNzE0MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODI4NjY3MDc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCB3aGljaCB0YWtlcyBhIHN0cnVjdCBga3ZtX3BwY19jb21wYXRfY2Fwc2AgZnJvbSB1c2Vyc3BhY2UsIHBvcHVsYXRlcyBpdCB3aXRoIGhvc3QgY2FwYWJpbGl0aWVzLCBhbmQgY29waWVzIGl0IGJhY2suIFRoZSBzdHJ1Y3QgYGhvc3RfY2Fwc2AgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGA9IHt9YC4gVGhlIGtlcm5lbCB1c2VzIHRoZSBzdGFuZGFyZCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBoZWxwZXJzLCB3aGljaCBzYWZlbHkgaGFuZGxlIHNpemUgbWlzbWF0Y2hlcyBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQga2VybmVsIHNwYWNlLiBTcGVjaWZpY2FsbHksIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWAgemVyb2VzIGFueSB0cmFpbGluZyBieXRlcyBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdCBpcyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCdzLCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgZW5zdXJlcyB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMgdXAgdG8gdGhlIHJlcXVlc3RlZCBzaXplIGFyZSBjb3BpZWQgYmFjayB0byB1c2Vyc3BhY2UsIGNsZWFyaW5nIGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuIFRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBgY29tcGF0X2NhcGFiaWxpdGllc2AgZmllbGQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgYnl0ZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW52YWxpZCB1c2VyIHBvaW50ZXJzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWEyZmFjZDBjY2M3MTE1NWEyYTA0ODM1NDIyMzJjZDE4NGY0NWFiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjA6MDQ6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGUzMDAzYTI0MWQ1YjAuLmU2NTZkMTE3Y2QwYjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiArNjU2Niw5NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxuICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC5cbiBcbis0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rOkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTXG4rOkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcbis6VHlwZTogdm0gaW9jdGxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dClcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXG4rXG4rRXJyb3JzIGluY2x1ZGU6XG4rXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yXG4rICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxuKyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhblxuKyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkXG4rICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXG4rICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXNcbisgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGV4Y2VlZHMgYGBQQUdFX1NJWkVgYCAocGF0aG9sb2dpY2FsIGlucHV0IGd1YXJkKSxcbisgICAgICAgICAgIG9yIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmRcbisgICAgICAgICAgIHRoZSB1bmtub3duIHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybyAobmV3IHVzZXJzcGFjZSBvblxuKyAgICAgICAgICAgb2xkIGtlcm5lbCB3aXRoIG5vbi1kZWZhdWx0IGZpZWxkcyBzZXQpOyBpbiB0aGUgbGF0dGVyIGNhc2VcbisgICAgICAgICAgIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYFxuKyAgICAgICAgICAgZmllbGQgc28gdXNlcnNwYWNlIGNhbiByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcbisgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcbit3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbitcbitUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXG4rXG4rOjpcbitcbisgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbisgIH07XG4rXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4rVGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnRcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4rXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxuK1xuKy0gSWYgYGBzaXplYGAgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAob2xkIHVzZXJzcGFjZSxcbisgIG5ldyBrZXJuZWwpLCB0aGUga2VybmVsIHplcm8tcGFkcyB0aGUgdW5rbm93biB0cmFpbGluZyBmaWVsZHMgYmVmb3JlXG4rICByZXR1cm5pbmcsIGFuZCB3cml0ZXMgYmFjayBgYHNpemVgYCB1bmNoYW5nZWQgc28gdXNlcnNwYWNlIGtub3dzIGhvd1xuKyAgbWFueSBieXRlcyB3ZXJlIGZpbGxlZC5cbistIElmIGBgc2l6ZWBgIGVxdWFscyB0aGUga2VybmVsJ3Mgc3RydWN0IHNpemUsIHRoZSBzdHJ1Y3QgaXMgY29waWVkXG4rICB2ZXJiYXRpbS5cbistIElmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSAobmV3IHVzZXJzcGFjZSxcbisgIG9sZCBrZXJuZWwpIGFuZCB0aGUgdW5rbm93biB0cmFpbGluZyBieXRlcyBhcmUgYWxsIHplcm8sIHRoZSBjYWxsXG4rICBzdWNjZWVkcyBhcyBpZiB0aGUgc2l6ZXMgbWF0Y2hlZC4gSWYgYW55IHRyYWlsaW5nIGJ5dGVzIGFyZSBub24temVybyxcbisgIHRoZSBrZXJuZWwgcmV0dXJucyBgYC1FMkJJR2BgIGFuZCB3cml0ZXMgYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG9cbisgIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS5cbitcbitgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxuK3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uXG4rXG4rVGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XG4rbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWNcbitwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3RcbitzaWduaWZpY2FudCBiaXQpOlxuK1xuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZVxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCAoYml0IDMpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjExIHByb2Nlc3NvciBtb2RlXG4rXG4rLi4gbm90ZTo6XG4rXG4rICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxuKyAgIHNpZ25pZmljYW50IGJpdCkuIEluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGFyZSBkZWZpbmVkIGFzOlxuK1xuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjIpYGBcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYxKWBgXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MClgYFxuK1xuKyAgIFVzZXJzcGFjZSBzaG91bGQgdXNlIHRoZSBkZWZpbmVkIGNvbnN0YW50cyBmcm9tIGBgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VgYCByYXRoZXJcbisgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cbitcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiArMzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMge1xuIFx0Ym9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpO1xuIFx0aW50ICgqY3JlYXRlX3ZtX2RlYnVnZnMpKHN0cnVjdCBrdm0gKmt2bSk7XG4gXHRpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTtcbitcdGludCAoKmdldF9jb21wYXRfY2Fwcykoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcyk7XG4gfTtcbiBcbiBleHRlcm4gc3RydWN0IGt2bXBwY19vcHMgKmt2bXBwY19odl9vcHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMDc3YzU0MzdmNTIxOS4uOTEzYTY0YjkwMWEzZCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzNyw2ICs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIge1xuIFx0X191NjRcdGJlaGF2aW91cl9tYXNrO1x0XHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xuIH07XG4gXG4rLyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovXG4rc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuK1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuK1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbit9O1xuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXG4rXG4rLypcbisgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cbisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuXG4rICovXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XHQoMVVMTCBcdTAwM2NcdTAwM2MgNjIpXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMFx0KDFVTEwgXHUwMDNjXHUwMDNjIDYxKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MClcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcdFx0KEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkgfCBcXFxuK1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAgfCBcXFxuK1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXG4gLypcbiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC02NTEwLDYgKzY1MTAsNjEgQEAgc3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyh1MzIgY3B1X3ZlcnNpb24sXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuK3tcbitcdHN3aXRjaCAoY3B1X3ZlcnNpb24pIHtcbitcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgUFZSX0FSQ0hfMzE6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuK1x0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xuK1x0bG9uZyByYyA9IC1FSU5WQUw7XG4rXHR1MzIgY3B1X3ZlcnNpb24gPSAwO1xuK1xuK1x0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuK1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuK1x0XHRcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XG4rXHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbitcdFx0XHRyYyA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcImNwdVwiKSB7XG4rXHRcdFx0XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcImNwdS12ZXJzaW9uXCIsXG4rXHRcdFx0XHRcdFx0XHQgIFx1MDAyNmNwdV92ZXJzaW9uKSkge1xuK1x0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWNwdV92ZXJzaW9uKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Y2FwYWJpbGl0aWVzKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRob3N0X2NhcHMtXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcbitcbitcdHJldHVybiByYztcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICs2NjA3LDcgQEAgc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuaGFzaF92M19wb3NzaWJsZSA9IGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlLFxuIFx0LmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LFxuIFx0LmNyZWF0ZV92bV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnNfaHYsXG4rXHQuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcyxcbiB9O1xuIFxuIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5pbmRleCAwMDMwMjM5OWZjMzdiLi4yZmU0ZWEwY2E0ZmYxIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5AQCAtNjk3LDYgKzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbisjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbitcdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XG4rXHRcdHIgPSAwO1xuK1x0XHRpZiAoaHZfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtaHZfb25fcHNlcmllcygpKVxuK1x0XHRcdHIgPSAxO1xuK1x0XHRicmVhaztcbisjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0yNDYzLDYgKzI0NzAsNzcgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2Vzdm1fb2ZmKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuK1x0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbitcdFx0dTY0IHVzaXplO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cbitcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuK1x0XHQgKi9cbitcdFx0ciA9IC1FRkFVTFQ7XG4rXHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRyID0gLUUyQklHO1xuK1x0XHRpZiAodW5saWtlbHkodXNpemUgXHUwMDNlIFBBR0VfU0laRSkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWxcbitcdFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXG4rXHRcdCAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsXG4rXHRcdCAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuXG4rXHRcdCAqL1xuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKHVzaXplIFx1MDAzYyBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMClcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbitcdFx0ICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weVxuK1x0XHQgKiAgIHVzaXplIFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxuK1x0XHQgKiAgIHVzaXplIFx1MDAzZSAga3NpemU6IHN1Y2NlZWQgaWZmIHRyYWlsaW5nIGJ5dGVzIGFyZSB6ZXJvLCBlbHNlIC1FMkJJR1xuK1x0XHQgKi9cbitcdFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxuK1x0XHRcdFx0XHQgIGFyZ3AsIHVzaXplKTtcbitcdFx0aWYgKHIpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyXG4rXHRcdFx0ICoga2VybmVsLiBXcml0ZSBiYWNrIGtzaXplIGluIGhvc3RfY2Fwcy5zaXplIHNvXG4rXHRcdFx0ICogdXNlcnNwYWNlIGtub3dzIHdoaWNoIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLFxuK1x0XHRcdCAqIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAociA9PSAtRTJCSUcpXG4rXHRcdFx0XHRpZiAocHV0X3VzZXIoKF9fdTY0KXNpemVvZihob3N0X2NhcHMpLFxuK1x0XHRcdFx0XHQgICAgIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcbitcdFx0XHRcdFx0ciA9IC1FRkFVTFQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ciA9IC1FTk9UVFk7XG4rXHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuK1x0XHRpZiAocilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwsXG4rXHRcdCAqIG5vdCB1c2l6ZTogaWYgbmV3IHVzZXJzcGFjZSBwYXNzZWQgYSBsYXJnZXIgc3RydWN0IHdpdGggemVyb1xuK1x0XHQgKiB0cmFpbGluZyBieXRlcywgd2Ugb25seSBmaWxsZWQgc2l6ZW9mKGhvc3RfY2FwcykgYnl0ZXMuXG4rXHRcdCAqL1xuK1x0XHRob3N0X2NhcHMuc2l6ZSA9IG1pbl90KHU2NCwgdXNpemUsIHNpemVvZihob3N0X2NhcHMpKTtcbitcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbitcdFx0XHRcdFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xuK1x0XHRicmVhaztcbitcdH1cbiBcdGRlZmF1bHQ6IHtcbiBcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWFyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlLi43MGUzNmU2YTBhZDRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XG4rI2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbkBAIC0xMzQxLDYgKzEzNDIsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfQ09VTlRFUl9PRkZTRVQgKi9cbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcbiAjZGVmaW5lIEtWTV9BUk1fR0VUX1JFR19XUklUQUJMRV9NQVNLUyBfSU9SKEtWTUlPLCAgMHhiNiwgc3RydWN0IHJlZ19tYXNrX3JhbmdlKVxuKy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTICovXG4rI2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1x0X0lPKEtWTUlPLCAgMHhiOClcbiBcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cbiAjZGVmaW5lIEtWTV9DUkVBVEVfREVWSUNFXHQgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6NDQuOTU3MTE5NDcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzAzOTMyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBLTVNBTiBGdXp6aW5nIE5lY2Vzc2l0eSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdXNlcnNwYWNlIHByb3ZpZGVzIGEgYGt2bV9wcGNfY29tcGF0X2NhcHNgIHN0cnVjdCwgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaXQsIGFuZCB0aGVuIGNvcGllcyBkYXRhIGJhY2sgdG8gdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRlc2VydmVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC5cblxuSSdtIHNlZWluZyBpdCByZWFkcyBhIHNpemUgdmFsdWUgZnJvbSB1c2Vyc3BhY2UsIGRvZXMgc29tZSBzaXplIGNoZWNrcyB0byBoYW5kbGUgb2xkL25ldyB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0IGFuZCB0aGVuIHVzZXMgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgdG8gcmVhZCB0aGUgc3RydWN0IGl0c2VsZi4gSXQgdGhlbiB2YWxpZGF0ZXMgc29tZSBmbGFncywgY2FsbHMgYSBga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHNgIGNhbGxiYWNrLCBhbmQgZmluYWxseSB1c2VzIGBjb3B5X3N0cnVjdF90b191c2VyYCB0byB3cml0ZSB0aGUgcHJvY2Vzc2VkIGRhdGEgYmFjayB0byB1c2Vyc3BhY2UuXG5cbldhaXQgYSBzZWNvbmQuLi4gYGNvcHlfc3RydWN0X3RvX3VzZXJgPyBJIGRvbid0IHJlY2FsbCBzZWVpbmcgdGhhdCBmdW5jdGlvbiBiZWZvcmUuIElzIHRoaXMgc29tZSBuZXcgaGVscGVyPyBJdCdzIG5vdCBpbW1lZGlhdGVseSBzcHJpbmdpbmcgdG8gbWluZCBhcyBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBxdWljayBgZ3JlcGAgdG8gc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNTo1My4xODc1MTY3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDgzOTUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3N0cnVjdF90b191c2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjE3PWZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2MTgtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MTk6VGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2MjAtdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmcgYWNyb3NzIHRocmVlIGNhc2VzOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9MjM2Mz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yNTM5LVxcdFxcdGhvc3RfY2Fwcy5zaXplID0gbWluX3QodTY0LCB1c2l6ZSwgc2l6ZW9mKGhvc3RfY2FwcykpO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjI1NDA6XFx0XFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZob3N0X2NhcHMsXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjU0MS1cXHRcXHRcXHRcXHRcXHRzaXplb2YoaG9zdF9jYXBzKSwgTlVMTCk7XFxuLS1cXG5ibG9jay9ibGstaW50ZWdyaXR5LmM9NTg9aW50IGJsa19nZXRfbWV0YV9jYXAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0xMTgtb3V0OlxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoxMTk6XFx0cmV0dXJuIGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZtZXRhX2NhcCwgc2l6ZW9mKG1ldGFfY2FwKSxcXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMTIwLVxcdFxcdFxcdFxcdCAgIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9ldGhvc3UvZXRob3N1X2Rydi5jPTI1PXN0YXRpYyBpbnQgZXRob3N1X2lvY3RsX2Rldl9xdWVyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9kcnYuYy00NC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL2FjY2VsL2V0aG9zdS9ldGhvc3VfZHJ2LmM6NDU6XFx0XFx0cmV0dXJuIGNvcHlfc3RydWN0X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGFyZ3MtXFx1MDAzZXBvaW50ZXIpLFxcbmRyaXZlcnMvYWNjZWwvZXRob3N1L2V0aG9zdV9kcnYuYy00Ni1cXHRcXHRcXHRcXHRcXHQgICBhcmdzLVxcdTAwM2VzaXplLFxcbi0tXFxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvdGVncmEyNDEtY21kcXYuYz0xMjE4PXRlZ3JhMjQxX2NtZHF2X2luaXRfdmludGZfdXNlcihzdHJ1Y3QgYXJtX3ZzbW11ICp2c21tdSxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL3RlZ3JhMjQxLWNtZHF2LmMtMTI2OC1cXHRkYXRhLm91dF92aW50Zl9tbWFwX29mZnNldCA9IHZpbnRmLVxcdTAwM2VtbWFwX29mZnNldDtcXG5kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My90ZWdyYTI0MS1jbWRxdi5jOjEyNjk6XFx0cmV0ID0gaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcih1c2VyX2RhdGEsIFxcdTAwMjZkYXRhLFxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL3RlZ3JhMjQxLWNtZHF2LmMtMTI3MC1cXHRcXHRcXHRcXHRcXHRJT01NVV9WSU9NTVVfVFlQRV9URUdSQTI0MV9DTURRVixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTc5MT1zdGF0aWMgaW50IG1vY2tfdmlvbW11X2luaXQoc3RydWN0IGlvbW11ZmRfdmlvbW11ICp2aW9tbXUsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy04MjQtXFx0XFx0ZGF0YS5vdXRfbW1hcF9vZmZzZXQgPSBtb2NrX3Zpb21tdS1cXHUwMDNlbW1hcF9vZmZzZXQ7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODI1OlxcdFxcdHJjID0gaW9tbXVfY29weV9zdHJ1Y3RfdG9fdXNlcihcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy04MjYtXFx0XFx0XFx0dXNlcl9kYXRhLCBcXHUwMDI2ZGF0YSwgSU9NTVVfVklPTU1VX1RZUEVfU0VMRlRFU1QsIG91dF9kYXRhKTtcXG4tLVxcbmZzL2ZpbGVfYXR0ci5jPTM3ND1TWVNDQUxMX0RFRklORTUoZmlsZV9nZXRhdHRyLCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXFxuLS1cXG5mcy9maWxlX2F0dHIuYy00MjAtXFx0ZmlsZWF0dHJfdG9fZmlsZV9hdHRyKFxcdTAwMjZmYSwgXFx1MDAyNmZhdHRyKTtcXG5mcy9maWxlX2F0dHIuYzo0MjE6XFx0ZXJyb3IgPSBjb3B5X3N0cnVjdF90b191c2VyKHVmYXR0ciwgdXNpemUsIFxcdTAwMjZmYXR0cixcXG5mcy9maWxlX2F0dHIuYy00MjItXFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgZmlsZV9hdHRyKSwgTlVMTCk7XFxuLS1cXG5mcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL3BpZGZzLmMtNDk1LVxcdCAqL1xcbmZzL3BpZGZzLmM6NDk2OlxcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHVpbmZvLCB1c2l6ZSwgXFx1MDAyNmtpbmZvLCBzaXplb2Yoa2luZm8pLCBOVUxMKTtcXG5mcy9waWRmcy5jLTQ5Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg9NTYyPWlvbW11X2NvcHlfc3RydWN0X2Zyb21fZnVsbF91c2VyX2FycmF5KHZvaWQgKmtkc3QsIHNpemVfdCBrZHN0X2VudHJ5X3NpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNTkzLS8qKlxcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo1OTQ6ICogX19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNTk1LSAqIEBkc3RfZGF0YTogUG9pbnRlciB0byBhIHN0cnVjdCBpb21tdV91c2VyX2RhdGEgZm9yIHVzZXIgc3BhY2UgZGF0YSBsb2NhdGlvblxcbi0tXFxuaW5jbHVkZS9saW51eC9pb21tdS5oPTYwND1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo2MDU6X19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyKGNvbnN0IHN0cnVjdCBpb21tdV91c2VyX2RhdGEgKmRzdF9kYXRhLFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MDYtXFx0XFx0XFx0ICAgIHZvaWQgKnNyY19kYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV90eXBlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb21tdS5oLTYxNC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg6NjE1OlxcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKGRzdF9kYXRhLVxcdTAwM2V1cHRyLCBkc3RfZGF0YS1cXHUwMDNlbGVuLCBzcmNfZGF0YSxcXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjE2LVxcdFxcdFxcdFxcdCAgIGRhdGFfbGVuLCBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MTktLyoqXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYyMDogKiBpb21tdV9jb3B5X3N0cnVjdF90b191c2VyIC0gUmVwb3J0IGlvbW11IGRyaXZlciBzcGVjaWZpYyB1c2VyIHNwYWNlIGRhdGFcXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtNjIxLSAqIEB1c2VyX2RhdGE6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgaW9tbXVfdXNlcl9kYXRhIGZvciB1c2VyIHNwYWNlIGRhdGEgbG9jYXRpb25cXG4tLVxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC02MjgtICovXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjYyOTojZGVmaW5lIGlvbW11X2NvcHlfc3RydWN0X3RvX3VzZXIodXNlcl9kYXRhLCBrc3JjLCBkYXRhX3R5cGUsIG1pbl9sYXN0KSAgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvaW9tbXUuaDo2MzA6XFx0X19pb21tdV9jb3B5X3N0cnVjdF90b191c2VyKHVzZXJfZGF0YSwga3NyYywgZGF0YV90eXBlLCBzaXplb2YoKmtzcmMpLCBcXFxcXFxuaW5jbHVkZS9saW51eC9pb21tdS5oLTYzMS1cXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2ZlbmQodHlwZW9mKCprc3JjKSwgbWluX2xhc3QpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmg9MTExPWNvcHlfc3RydWN0X3RvX3NvY2twdHIoc29ja3B0cl90IGRzdCwgc2l6ZV90IHVzaXplLCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC0xMTQtXFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChkc3QpKVxcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oOjExNTpcXHRcXHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcihkc3QudXNlciwgdXNpemUsIHNyYywga3NpemUsIGlnbm9yZWRfdHJhaWxpbmcpO1xcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTExNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTM5Mz1jb3B5X3N0cnVjdF9mcm9tX3VzZXIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC00MTctLyoqXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDE4OiAqIGNvcHlfc3RydWN0X3RvX3VzZXI6IGNvcHkgYSBzdHJ1Y3QgdG8gdXNlcnNwYWNlXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDE5LSAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxcbi0tXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDY0LSAqXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDY1OiAqICAgICAgZXJyID0gY29weV9zdHJ1Y3RfdG9fdXNlcih1YXJnLCB1c2l6ZSwgXFx1MDAyNmthcmcsIHNpemVvZihrYXJnKSxcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC00NjYtICpcXHRcXHRcXHRcXHQgIFxcdTAwMjZpZ25vcmVkX3RyYWlsaW5nKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTQ4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaDo0OTA6Y29weV9zdHJ1Y3RfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBzaXplX3QgdXNpemUsIGNvbnN0IHZvaWQgKnNyYyxcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaC00OTEtXFx0XFx0ICAgIHNpemVfdCBrc2l6ZSwgYm9vbCAqaWdub3JlZF90cmFpbGluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oPTUzOD1jb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXIodm9pZCAqZHN0LCBzaXplX3QgZHN0c2l6ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTU1Ni0vKipcXG5pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaDo1NTc6ICogVGhpcyBpcyBsaWtlIGNvcHlfc3RydWN0X3RvX3VzZXIoKSwgYnV0IHRoZVxcbmluY2x1ZGUvbGludXgvdWFjY2Vzcy5oLTU1OC0gKiBkc3QgYnVmZmVyIGlzIGEga2VybmVsIGJvdW5jZSBidWZmZXIgaW5zdGVhZFxcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYz02OT1zdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTE2LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTE3OlxcdGlmIChjb3B5X3N0cnVjdF90b191c2VyKHVkYXRhLCB1c2l6ZSwgZGF0YSwgaGRyLnNpemUsIE5VTEwpKVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTE4LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM9MTA2MD1TWVNDQUxMX0RFRklORTQoc2NoZWRfZ2V0YXR0ciwgcGlkX3QsIHBpZCwgc3RydWN0IHNjaGVkX2F0dHIgX191c2VyICosIHVhdHRyLFxcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtMTEwMy1cXHRrYXR0ci5zaXplID0gbWluKHVzaXplLCBzaXplb2Yoa2F0dHIpKTtcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYzoxMTA0OlxcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHVhdHRyLCB1c2l6ZSwgXFx1MDAyNmthdHRyLCBzaXplb2Yoa2F0dHIpLCBOVUxMKTtcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy0xMTA1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDU6NTQuNzgyMzY3ODkyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODM1MjM1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrIGluIEtWTSBQUEMgQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoZSBmdW5jdGlvbiBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZnJvbSBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgIGlzIGludm9sdmVkLCBhbmQgaXQgaGFuZGxlcyB0aGUgdHJhbnNmZXIgb2YgYSBzdHJ1Y3QgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZSwgdGFraW5nIHNpemUgZGlmZmVyZW5jZXMgaW50byBhY2NvdW50LiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgaG9zdF9jYXBzYCBpbiB0aGlzIEtWTSBQUEMgY29udGV4dC5cblxuRmlyc3QsIGBob3N0X2NhcHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gKGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtgKS4gIFRoYXQncyBnb29kLCBtZWFucyBhbGwgZmllbGRzIHN0YXJ0IGNsZWFuLiBUaGVuLCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBjb3BpZXMgdXNlci1wcm92aWRlZCBkYXRhIGludG8gYGhvc3RfY2Fwc2AuIElmIHRoZSB1c2VyIHByb3ZpZGVzIGEgc21hbGxlciBzaXplIChgdXNpemUgXHUwMDNjIHNpemVvZihob3N0X2NhcHMpYCksIHRoZSB0cmFpbGluZyBieXRlcyBvZiBgaG9zdF9jYXBzYCB3aWxsIHJlbWFpbiB6ZXJvLCBvciB3aWxsIGJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IHRoZSBmdW5jdGlvbiwgd2hpY2ggaXMgZmluZS5cblxuTm93LCB0aGUgYGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzYCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gSSdtIGNoZWNraW5nIGl0IGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gSXQgc2VlbXMgbGlrZSB0aGUgb25seSBmaWVsZCBvZiBgaG9zdF9jYXBzYCBtb2RpZmllZCBpbiB0aGlzIGZ1bmN0aW9uIGlzIGBjb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhlIHJlc3Qgc3RheXMgYXMgaXQgd2FzIGZyb20gdGhlIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNhbGwgKHBvdGVudGlhbGx5IHVzZXItcHJvdmlkZWQgZGF0YSkuXG5cbkNydWNpYWxseSwgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgKm92ZXJ3cml0ZXMqIGBob3N0X2NhcHNgLiBTbywgaWYgdGhlIHVzZXIgc2VuZHMgdW5pbml0aWFsaXplZCBkYXRhLCB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSBlbmRzIHVwIGluIGBob3N0X2NhcHNgLiAgVGhlbiwgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGdldHMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgdmFsdWUgZnJvbSBgZ2V0X2NvbXBhdF9jYXBzYC4gVGhlbiB0aGUgYHNpemVgIGlzIHJld3JpdHRlbiB3aXRoIHRoZSBtaW4gb2YgdGhlIHNpemUuXG5cbkhlcmUncyB0aGUga2V5OiB0aGUgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHRoZW4gY29waWVzIGBob3N0X2NhcHNgICpiYWNrKiB0byB1c2Vyc3BhY2UuICBUaGlzIG1ha2VzIG1lIGltbWVkaWF0ZWx5IGxvb2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlLlxuXG5Ib3dldmVyLCBgaG9zdF9jYXBzYCBpcyAqemVyby1pbml0aWFsaXplZCouIFRoZW4sIHRoZSB1c2VyJ3MgZGF0YSBpcyBjb3BpZWQgaW50byBgaG9zdF9jYXBzYC4gQW55IHJlbWFpbmluZyBieXRlcyBhcmUgemVyb2VkIGJ5IHRoZSBrZXJuZWwuIFRoZW4gdGhlIGtlcm5lbCBvdmVyd3JpdGVzIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBhbmQgc2l6ZSB3aXRoIGtub3duIHZhbHVlcy4gVGhpcyBtZWFucyB0aGVyZSdzIG5vIGxlYWsuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCBiYWNrIGVpdGhlciAqY2FtZSogZnJvbSB1c2Vyc3BhY2UsIHdhcyBleHBsaWNpdGx5IHplcm9lZCwgb3Igc2V0IGJ5IHRoZSBrZXJuZWwuXG5cbkknbSBhbHNvIGxvb2tpbmcgYXQgdGhlIHN0cnVjdCBkZWZpbml0aW9uOlxuYGBgY1xuc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuXHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG5cdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbn07XG5gYGBcbk5vIHBhZGRpbmcgYmV0d2VlbiBmaWVsZHMsIGFsbCBgX191NjRgLCBzbyB0aGVyZSBhcmUgbm8gb3Bwb3J0dW5pdGllcyBmb3IgcGFkZGluZy1yZWxhdGVkIGlzc3Vlcy4gQW5kIGV2ZW4gaWYgdGhlcmUgKndhcyogcGFkZGluZywgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gdGFrZXMgY2FyZSBvZiBpdC4gQWxzbywgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgd291bGQgb3ZlcndyaXRlIHBhZGRpbmcgd2l0aCB1c2VyIGRhdGEsIHdoaWNoIGlzIGZpbmUgdG8gc2VuZCBiYWNrLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBgY2FwYWJpbGl0aWVzYCwgYGNwdV92ZXJzaW9uYCwgYW5kIGByY2AgYXJlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbmRpdGlvbmFscyBlaXRoZXIuIFNvIEknbSBnb29kIHRoZXJlLlxuXG5PbmUgZmluYWwgY2hlY2sgb24gYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyYCBzaXplcy4gSWYgYHVzaXplIFx1MDAzZSBzaXplb2YoaG9zdF9jYXBzKWAsIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGNoZWNrcyBmb3IgdHJhaWxpbmcgbm9uLXplcm8gYnl0ZXMgaW4gdXNlcnNwYWNlLCBhbmQgcmV0dXJucyBgLUUyQklHYCBpZiB0aGV5IGFyZSBub3QgemVyby4gSWYgdGhleSAqYXJlKiB6ZXJvLCB0aGVuIGl0IGNvcGllcyBgc2l6ZW9mKGhvc3RfY2FwcylgIGJ5dGVzIGludG8ga2VybmVsIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCB3ZSBleHBlY3QuICBOb3csIHRoZSBjcml0aWNhbCBwYXJ0Li4uIGBjb3B5X3N0cnVjdF90b191c2VyYCBjb3BpZXMgYmFjayB0byB1c2Vyc3BhY2UuIEFuZCBpdCB0YWtlcyBgdXNpemVgIGFzIGlucHV0LiBTbyBldmVuIGlmIGB1c2l6ZSBcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcylgLCBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgd2lsbCBjb3B5IGBzaXplb2YoaG9zdF9jYXBzKWAgYnl0ZXMgaW50byB1c2Vyc3BhY2UsIGFuZCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXJzcGFjZSFcblxuSSdtIG5vdyBzYXRpc2ZpZWQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBoZXJlLCBhZnRlciB0aGUgZG91YmxlIGNoZWNrIG9mIGBjb3B5X3N0cnVjdF90b191c2VyYC4gSSdkIHdhbnQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGJ1dCB0aGUgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBlbm91Z2ggdG8gY29uZmlybSB0aGUgY29ycmVjdCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA2OjEwLjYxNzYwNzMwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5OTIzNTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3N0cnVjdF90b191c2VyXFxcXCh2b2lkIF9fdXNlciBcXFxcKmRzdCwgc2l6ZV90IHVzaXplLCBjb25zdCB2b2lkIFxcXFwqc3JjLFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaD00ODk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgaW50XFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmg6NDkwOmNvcHlfc3RydWN0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgc2l6ZV90IHVzaXplLCBjb25zdCB2b2lkICpzcmMsXFxuaW5jbHVkZS9saW51eC91YWNjZXNzLmgtNDkxLVxcdFxcdCAgICBzaXplX3Qga3NpemUsIGJvb2wgKmlnbm9yZWRfdHJhaWxpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA2OjEzLjAxNjg1MzQ1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODg4OTU5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZm9yIEVmZmljaWVuY3kgYW5kIFNlY3VyaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBjb3B5X3N0cnVjdF90b191c2VyYCB3aXRoaW4gYGluY2x1ZGUvbGludXgvdWFjY2Vzcy5oYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGFzIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgd2hlbiBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIHBlcmZvcm1hbmNlOiBob3cgZWZmaWNpZW50bHkgZG9lcyBpdCB0cmFuc2ZlciB0aGUgZGF0YT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGlzc3VlcyBvciByZWR1bmRhbnQgY2hlY2tzP1xuXG5UaGVuLCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaXMgYSBjbGFzc2ljIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciBmb3JtYXQgc3RyaW5nIGJ1Z3MsIGV2ZW4gaWYgdGhleSBzZWVtIHVubGlrZWx5LiBBcmUgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIHJpZ29yb3VzbHkgdmFsaWRhdGVkPyBXaGF0IGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIHVzZXItc3BhY2UgZGF0YSBjaGFuZ2VzIGNvbmN1cnJlbnRseT8gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGluY29ycG9yYXRlcyByb2J1c3QgbWVjaGFuaXNtcyB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBkYXRhIGFjY2VzcyBvciBjb3JydXB0aW9uLiBJcyB0aGVyZSBwcm9wZXIgYm91bmQgY2hlY2tpbmcgaW1wbGVtZW50ZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3dzIGxlYWRpbmcgdG8gd3JpdGUgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXI/IEFuZCBmaW5hbGx5LCBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3NlcyBncmFjZWZ1bGx5LCBhbmQgaWYgc28sIGF0IHdoYXQgY29zdD8gSSBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjA2OjE2LjYwNTc1MjY5NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC91YWNjZXNzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDg5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg5OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGludFxcbiA0OTA6XFx0Y29weV9zdHJ1Y3RfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBzaXplX3QgdXNpemUsIGNvbnN0IHZvaWQgKnNyYyxcXG4gNDkxOlxcdFxcdFxcdCAgICBzaXplX3Qga3NpemUsIGJvb2wgKmlnbm9yZWRfdHJhaWxpbmcpXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHRcXHRzaXplX3Qgc2l6ZSA9IG1pbihrc2l6ZSwgdXNpemUpO1xcbiA0OTQ6XFx0XFx0c2l6ZV90IHJlc3QgPSBtYXgoa3NpemUsIHVzaXplKSAtIHNpemU7XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdC8qIERvdWJsZSBjaGVjayBpZiBrc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIGtub3duIG9iamVjdCBzaXplLiAqL1xcbiA0OTc6XFx0XFx0aWYgKFdBUk5fT05fT05DRShrc2l6ZSBcXHUwMDNlIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzcmMsIDEpKSlcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdFxcdC8qIERlYWwgd2l0aCB0cmFpbGluZyBieXRlcy4gKi9cXG4gNTAxOlxcdFxcdGlmICh1c2l6ZSBcXHUwMDNlIGtzaXplKSB7XFxuIDUwMjpcXHRcXHRcXHRpZiAoY2xlYXJfdXNlcihkc3QgKyBzaXplLCByZXN0KSlcXG4gNTAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA1MDQ6XFx0XFx0fVxcbiA1MDU6XFx0XFx0aWYgKGlnbm9yZWRfdHJhaWxpbmcpXFxuIDUwNjpcXHRcXHRcXHQqaWdub3JlZF90cmFpbGluZyA9IHVzaXplIFxcdTAwM2Mga3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gNTA3OlxcdFxcdFxcdFxcdG1lbWNocl9pbnYoc3JjICsgc2l6ZSwgMCwgcmVzdCkgIT0gTlVMTDtcXG4gNTA4OlxcdFxcdC8qIENvcHkgdGhlIGludGVyb3BlcmFibGUgcGFydHMgb2YgdGhlIHN0cnVjdC4gKi9cXG4gNTA5OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIHNpemUpKVxcbiA1MTA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDUxMTpcXHRcXHRyZXR1cm4gMDtcXG4gNTEyOlxcdH1cXG4gNTEzOlxcdFxcbiA1MTQ6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXFxuIDUxNTpcXHRfX2NvcHlfc3RydWN0X2dlbmVyaWNfYm91bmNlX2J1ZmZlcih2b2lkICpkc3QsIHNpemVfdCBkc3RzaXplLFxcbiA1MTY6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNyY3NpemUsXFxuIDUxNzpcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCAqaWdub3JlZF90cmFpbGluZylcXG4gNTE4OlxcdHtcXG4gNTE5OlxcdFxcdHNpemVfdCBzaXplID0gbWluKGRzdHNpemUsIHNyY3NpemUpO1xcbiA1MjA6XFx0XFx0c2l6ZV90IHJlc3QgPSBtYXgoZHN0c2l6ZSwgc3Jjc2l6ZSkgLSBzaXplO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHQvKiBEZWFsIHdpdGggdHJhaWxpbmcgYnl0ZXMuICovXFxuIDUyMzpcXHRcXHRpZiAoZHN0c2l6ZSBcXHUwMDNlIHNyY3NpemUpXFxuIDUyNDpcXHRcXHRcXHRtZW1zZXQoZHN0ICsgc2l6ZSwgMCwgcmVzdCk7XFxuIDUyNTpcXHRcXHRpZiAoaWdub3JlZF90cmFpbGluZylcXG4gNTI2OlxcdFxcdFxcdCppZ25vcmVkX3RyYWlsaW5nID0gZHN0c2l6ZSBcXHUwMDNjIHNyY3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gNTI3OlxcdFxcdFxcdFxcdG1lbWNocl9pbnYoc3JjICsgc2l6ZSwgMCwgcmVzdCkgIT0gTlVMTDtcXG4gNTI4OlxcdFxcdC8qIENvcHkgdGhlIGludGVyb3BlcmFibGUgcGFydHMgb2YgdGhlIHN0cnVjdC4gKi9cXG4gNTI5OlxcdFxcdG1lbWNweShkc3QsIHNyYywgc2l6ZSk7XFxuIDUzMDpcXHR9XFxuIDUzMTpcXHRcXG4gNTMyOlxcdC8qKlxcbiA1MzM6XFx0ICogVGhpcyBpcyBsaWtlIGNvcHlfc3RydWN0X2Zyb21fdXNlcigpLCBidXQgdGhlXFxuIDUzNDpcXHQgKiBzcmMgYnVmZmVyIHdhcyBhbHJlYWR5IGNvcGllZCBpbnRvIGEga2VybmVsXFxuIDUzNTpcXHQgKiBib3VuY2UgYnVmZmVyLCBzbyBpdCB3aWxsIG5ldmVyIHJldHVybiAtRUZBVUxULlxcbiA1MzY6XFx0ICovXFxuIDUzNzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBpbnRcXG4gNTM4OlxcdGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcih2b2lkICpkc3QsIHNpemVfdCBkc3RzaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNjoxNi42MDU4OTg1MjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5NjQ2MDg5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIGZvciBQb3RlbnRpYWwgSW5pdGlhbGl6YXRpb24gSXNzdWVzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgZnVuY3Rpb24sIHRyeWluZyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCB0aGlzIGlzIHdoYXQgSSd2ZSBnb3Qgc28gZmFyLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGNvcHlfc3RydWN0X3RvX3VzZXJgIHdvcmtzLiBJdCBjbGVhcnMgdHJhaWxpbmcgYnl0ZXMgaW4gdXNlcnNwYWNlIGlmIHRoZSBjb3B5IHNpemUgKGB1c2l6ZWApIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgc3RydWN0J3Mgc2l6ZSAoYGtzaXplYCkuICBNb3JlIGltcG9ydGFudGx5LCBpdCBjb3BpZXMgYSAqbWF4aW11bSogb2YgYG1pbihrc2l6ZSwgdXNpemUpYCBieXRlcyBmcm9tIHRoZSBzb3VyY2UgKGBzcmNgKSB0byB0aGUgZGVzdGluYXRpb24gKGBkc3RgKSwgd2hpY2ggbWVhbnMgaXQgd29uJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGluaXRpYWxpemVkIHNvdXJjZSBtZW1vcnkuIEluIG91ciBjYXNlLCB0aGUgc291cmNlIGlzIGBcdTAwMjZob3N0X2NhcHNgLCBhbmQgYGtzaXplYCBpcyBgc2l6ZW9mKGhvc3RfY2FwcylgLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZC4gU28gaXQgd2lsbCBiZSBzYWZlLlxuXG5Ob3csIGdvaW5nIHRocm91Z2ggYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGl0c2VsZiwgSSdtIHRyYWNpbmcgdGhlIHZhbHVlcy4gYGNhcGFiaWxpdGllc2AgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYHJjYCB0byBgLUVJTlZBTGAsIGFuZCBgY3B1X3ZlcnNpb25gIHRvIDAuIFRoZSBjb2RlIGJyYW5jaGVzIGJhc2VkIG9uIGBrdm1odl9vbl9wc2VyaWVzKClgLiBJZiBpdCdzIGZhbHNlLCBgcmNgIHJlbWFpbnMgYC1FSU5WQUxgLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuXG5cbklmIGBrdm1odl9vbl9wc2VyaWVzKClgIGlzIHRydWUgYW5kIGBrdm1odl9pc19uZXN0ZWR2MigpYCBpcyBhbHNvIHRydWUsIGBjYXBhYmlsaXRpZXNgIGdldHMgYXNzaWduZWQgYG5lc3RlZF9jYXBhYmlsaXRpZXNgLCBhbmQgYHJjYCBpcyBzZXQgdG8gMC4gIFRoYXQgaXMgYSBjb25kaXRpb25hbCBzZXQgZnJvbSBhIHByZS1kZWZpbmVkIHZhbHVlLlxuXG5PdGhlcndpc2UsIGlmIGBrdm1odl9pc19uZXN0ZWR2MigpYCBpcyBmYWxzZSwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBcImNwdVwiIG5vZGVzIHVzaW5nIGBvZl9ub2RlX3B1dGAuICBJdCBhdHRlbXB0cyB0byByZWFkIGEgXCJjcHUtdmVyc2lvblwiIHByb3BlcnR5IGludG8gYGNwdV92ZXJzaW9uYC4gYG9mX3Byb3BlcnR5X3JlYWRfdTMyYCByZXR1cm5zIDAgb24gc3VjY2VzcywgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiAgSW1wb3J0YW50bHksIGlmIHRoZSByZWFkIGlzIHN1Y2Nlc3NmdWwsIHRoZSBsb29wIGJyZWFrcy4gU28gaXQgZWZmZWN0aXZlbHkgZmluZHMgdGhlICpmaXJzdCogQ1BVIG5vZGUgd2l0aCB0aGUgcHJvcGVydHksIGFuZCB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zLlxuXG5JZiBubyBcImNwdS12ZXJzaW9uXCIgcHJvcGVydHkgaXMgZm91bmQsIGBjcHVfdmVyc2lvbmAgcmVtYWlucyAwLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYC1FSU5WQUxgLiAgSWYgaXQgKmlzKiBmb3VuZCwgdGhlIG5vbi16ZXJvIGBjcHVfdmVyc2lvbmAgaXMgcGFzc2VkIHRvIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGlzIGZ1bmN0aW9uIHRoZW4gcG9wdWxhdGVzIGBjYXBhYmlsaXRpZXNgIGJhc2VkIG9uIGBjcHVfdmVyc2lvbmAsIGFuZCByZXR1cm5zIGEgdmFsdWUuIGByY2AgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hcCBmdW5jdGlvbi5cblxuSWYgYHJjYCBpcyBuZWdhdGl2ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIE90aGVyd2lzZSwgaXQgYml0d2lzZSBBTkRzIGBjYXBhYmlsaXRpZXNgIHdpdGggYEtWTV9QUENfQ09NUEFUX0JJVE1BU0tgIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBgaG9zdF9jYXBzLVx1MDAzZWNvbXBhdF9jYXBhYmlsaXRpZXNgLCBiZWZvcmUgcmV0dXJuaW5nIGByY2AgKHdoaWNoIHNob3VsZCBub3cgYmUgMCkuXG5cblNvIGl0IGxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgSSBoYXZlIHJldmlld2VkIHNlZW1zIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBzdHJ1Y3QgYGhvc3RfY2Fwc2AgaXMgZGVmaW5pdGVseSB6ZXJvLWluaXRpYWxpemVkLiBJJ20gY29uZmlkZW50IGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGFuZCBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaGFuZGxlIGNvcHlpbmcgc2FmZWx5LiBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgaGVyZS5cblxuSSB0aGluayBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSBrZXkgYXJlYXMsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHByZWNpc2UgYmVoYXZpb3Igb2YgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgb25jZSBtb3JlIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MDY6MzAuNTcwNTExNjU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdWFjY2Vzcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MzpcXHRjb3B5X3N0cnVjdF9mcm9tX3VzZXIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuIDM5NDpcXHRcXHRcXHQgICAgICBzaXplX3QgdXNpemUpXFxuIDM5NTpcXHR7XFxuIDM5NjpcXHRcXHRzaXplX3Qgc2l6ZSA9IG1pbihrc2l6ZSwgdXNpemUpO1xcbiAzOTc6XFx0XFx0c2l6ZV90IHJlc3QgPSBtYXgoa3NpemUsIHVzaXplKSAtIHNpemU7XFxuIDM5ODpcXHRcXG4gMzk5OlxcdFxcdC8qIERvdWJsZSBjaGVjayBpZiBrc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIGtub3duIG9iamVjdCBzaXplLiAqL1xcbiA0MDA6XFx0XFx0aWYgKFdBUk5fT05fT05DRShrc2l6ZSBcXHUwMDNlIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShkc3QsIDEpKSlcXG4gNDAxOlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDQwMjpcXHRcXG4gNDAzOlxcdFxcdC8qIERlYWwgd2l0aCB0cmFpbGluZyBieXRlcy4gKi9cXG4gNDA0OlxcdFxcdGlmICh1c2l6ZSBcXHUwMDNjIGtzaXplKSB7XFxuIDQwNTpcXHRcXHRcXHRtZW1zZXQoZHN0ICsgc2l6ZSwgMCwgcmVzdCk7XFxuIDQwNjpcXHRcXHR9IGVsc2UgaWYgKHVzaXplIFxcdTAwM2Uga3NpemUpIHtcXG4gNDA3OlxcdFxcdFxcdGludCByZXQgPSBjaGVja196ZXJvZWRfdXNlcihzcmMgKyBzaXplLCByZXN0KTtcXG4gNDA4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4gNDA5OlxcdFxcdFxcdFxcdHJldHVybiByZXQgPzogLUUyQklHO1xcbiA0MTA6XFx0XFx0fVxcbiA0MTE6XFx0XFx0LyogQ29weSB0aGUgaW50ZXJvcGVyYWJsZSBwYXJ0cyBvZiB0aGUgc3RydWN0LiAqL1xcbiA0MTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBzaXplKSlcXG4gNDEzOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA0MTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDQxNTpcXHR9XFxuIDQxNjpcXHRcXG4gNDE3OlxcdC8qKlxcbiA0MTg6XFx0ICogY29weV9zdHJ1Y3RfdG9fdXNlcjogY29weSBhIHN0cnVjdCB0byB1c2Vyc3BhY2VcXG4gNDE5OlxcdCAqIEBkc3Q6ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlcnNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlIEBrc2l6ZVxcbiA0MjA6XFx0ICogICAgICAgICBieXRlcyBsb25nLlxcbiA0MjE6XFx0ICogQHVzaXplOiAoQWxsZWdlZCkgc2l6ZSBvZiBAZHN0IHN0cnVjdC5cXG4gNDIyOlxcdCAqIEBzcmM6ICAgU291cmNlIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS5cXG4gNDIzOlxcdCAqIEBrc2l6ZTogU2l6ZSBvZiBAc3JjIHN0cnVjdC5cXG4gNDI0OlxcdCAqIEBpZ25vcmVkX3RyYWlsaW5nOiBTZXQgdG8gJXRydWUgaWYgdGhlcmUgd2FzIGEgbm9uLXplcm8gYnl0ZSBpbiBAc3JjIHRoYXRcXG4gNDI1OlxcdCAqIHVzZXJzcGFjZSBjYW5ub3Qgc2VlIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgYW4gc21hbGxlciBzdHJ1Y3QuXFxuIDQyNjpcXHQgKlxcbiA0Mjc6XFx0ICogQ29waWVzIGEgc3RydWN0IGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXJzcGFjZSwgaW4gYSB3YXkgdGhhdCBndWFyYW50ZWVzXFxuIDQyODpcXHQgKiBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3Igc3RydWN0IHN5c2NhbGwgYXJndW1lbnRzIChhcyBsb25nIGFzIGZ1dHVyZVxcbiA0Mjk6XFx0ICogc3RydWN0IGV4dGVuc2lvbnMgYXJlIG1hZGUgc3VjaCB0aGF0IGFsbCBuZXcgZmllbGRzIGFyZSAqYXBwZW5kZWQqIHRvIHRoZVxcbiA0MzA6XFx0ICogb2xkIHN0cnVjdCwgYW5kIHplcm9lZC1vdXQgbmV3IGZpZWxkcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlIG9sZFxcbiA0MzE6XFx0ICogc3RydWN0KS5cXG4gNDMyOlxcdCAqXFxuIDQzMzpcXHQgKiBTb21lIHN5c2NhbGxzIG1heSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IHVzZXJzcGFjZSBrbm93cyBhYm91dCBldmVyeXRoaW5nIGluXFxuIDQzNDpcXHQgKiB0aGUgc3RydWN0LCBhbmQgaWYgdGhlcmUgaXMgYSBub24temVybyB2YWx1ZSB0aGF0IHVzZXJzcGNlIGRvZXNuJ3Qga25vd1xcbiA0MzU6XFx0ICogYWJvdXQsIHRoZXkgd2FudCB0byByZXR1cm4gYW4gZXJyb3IgKHN1Y2ggYXMgLUVNU0dTSVpFKSBvciBoYXZlIHNvbWUgb3RoZXJcXG4gNDM2OlxcdCAqIGZhbGxiYWNrIChzdWNoIGFzIGFkZGluZyBhIFxcXCJ5b3UncmUgbWlzc2luZyBzb21lIGluZm9ybWF0aW9uXFxcIiBmbGFnKS4gSWZcXG4gNDM3OlxcdCAqIEBpZ25vcmVkX3RyYWlsaW5nIGlzIG5vbi0lTlVMTCwgaXQgd2lsbCBiZSBzZXQgdG8gJXRydWUgaWYgdGhlcmUgd2FzIGFcXG4gNDM4OlxcdCAqIG5vbi16ZXJvIGJ5dGUgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkIHRvIHVzZXJzcGFjZSAoaWUuIHdhcyBwYXN0IEB1c2l6ZSkuXFxuIDQzOTpcXHQgKlxcbiA0NDA6XFx0ICogV2hpbGUgdW5jb25kaXRpb25hbGx5IHJldHVybmluZyBhbiBlcnJvciBpbiB0aGlzIGNhc2UgaXMgdGhlIHNpbXBsZXN0XFxuIDQ0MTpcXHQgKiBzb2x1dGlvbiwgZm9yIG1heGltdW0gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB5b3Ugc2hvdWxkIHRyeSB0byBvbmx5IHJldHVyblxcbiA0NDI6XFx0ICogLUVNU0dTSVpFIGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRoZSBkYXRhIHRoYXQgY291bGRuJ3QgYmUgY29waWVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNjozMC41NzA2MTIzNzlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzMxNTE0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIE5vdCBKdXN0aWZpZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEFuYWx5emluZyB0aGlzIHBhdGNoLCBpdCdzIGNsZWFyIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBhZnRlciBjYXJlZnVsIGV4YW1pbmF0aW9uLCBJIGRvbid0IHNlZSBhbnkgc2lnbmlmaWNhbnQgcmlzayBoZXJlLlxuXG5GaXJzdCwgdGhlIGBob3N0X2NhcHNgIHN0cnVjdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgd2l0aCBgPSB7fWAuIFRoaXMgZ3VhcmFudGVlcyBhIGNsZWFuIHNsYXRlLCByZW1vdmluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiBGdXJ0aGVybW9yZSwgdGhlIGNvZGUgdXNlcyBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXJgIGNvbnNpc3RlbnRseS4gVGhlc2UgaGVscGVycyBhcmUgZGVzaWduZWQgdG8gaGFuZGxlIHBvdGVudGlhbCBzaXplIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHVzZXJzcGFjZSBhbmQga2VybmVsLXNwYWNlIHN0cnVjdHMsIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMuIGBjb3B5X3N0cnVjdF9mcm9tX3VzZXJgIGlzIGNydWNpYWwsIGJlY2F1c2UgaXQgemVyby1pbml0aWFsaXplcyB0aGUgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpZiB0aGUgc291cmNlIGlzIHNtYWxsZXIuIFNpbmNlIGBob3N0X2NhcHNgIGlzIGFscmVhZHkgemVyb2VkLCB0aGUgbWVtc2V0IGlzIHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzLiBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgZ3VhcmFudGVlcyB0aGF0IHdlJ3JlIG9ubHkgc2VuZGluZyBiYWNrIHRvIHVzZXJzcGFjZSB0aGUgc2l6ZSB3ZSdyZSBzdXBwb3NlZCB0by4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIGFuIGluZm8tbGVhayBieSBzZW5kaW5nIGJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZ2FyYmFnZS5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBga3ZtcHBjX2dldF9jb21wYXRfY2FwcygpYCBwb3B1bGF0ZXMgdGhlIGBjb21wYXRfY2FwYWJpbGl0aWVzYCBmaWVsZCwgd2hpY2ggSSBrbm93IGlzIGhhbmRsZWQgdXNpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyBjb21wbGV4IHN0cnVjdHVyZXMgdG8gd29ycnkgYWJvdXQsIG5vdGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIGluZm9ybWF0aW9uIGxlYWsuIEknbSBjb25maWRlbnQgdGhhdCB0aGUgY29kZSBpcyBzb3VuZC5cblxuVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIEluIG15IHByb2Zlc3Npb25hbCBvcGluaW9uLCBnaXZlbiB0aGUgc2FmZXR5IG1lY2hhbmlzbXMgYWxyZWFkeSBpbiBwbGFjZSwgc3VjaCBhcyBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCwgYW5kIHRoZSBzdGFuZGFyZCBLQVNBTiBjaGVja3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3b3VsZCBiZSBvdmVya2lsbC4gSSBkb24ndCBzZWUgYSBzaWduaWZpY2FudCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGRhdGEgbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Nzg1LCJPdXRwdXRUb2tlbnMiOjMxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDowNjo0My4yNDM3NjYyMjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2Agd2hpY2ggdGFrZXMgYSBzdHJ1Y3QgYGt2bV9wcGNfY29tcGF0X2NhcHNgIGZyb20gdXNlcnNwYWNlLCBwb3B1bGF0ZXMgaXQgd2l0aCBob3N0IGNhcGFiaWxpdGllcywgYW5kIGNvcGllcyBpdCBiYWNrLiBUaGUgc3RydWN0IGBob3N0X2NhcHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCB1c2luZyBgPSB7fWAuIFRoZSBrZXJuZWwgdXNlcyB0aGUgc3RhbmRhcmQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgaGVscGVycywgd2hpY2ggc2FmZWx5IGhhbmRsZSBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIHplcm9lcyBhbnkgdHJhaWxpbmcgYnl0ZXMgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3QgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncywgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGVuc3VyZXMgdGhhdCBvbmx5IGluaXRpYWxpemVkIGJ5dGVzIHVwIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSBhcmUgY29waWVkIGJhY2sgdG8gdXNlcnNwYWNlLCBjbGVhcmluZyBhbnkgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgaWYgbmVjZXNzYXJ5LiBUaGUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHMoKWAgZnVuY3Rpb24gb25seSBtb2RpZmllcyB0aGUgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGZpZWxkIHVzaW5nIGZ1bGx5IGluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYWRkaW5nIGJ5dGVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGludmFsaWQgdXNlciBwb2ludGVycyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2Agd2hpY2ggdGFrZXMgYSBzdHJ1Y3QgYGt2bV9wcGNfY29tcGF0X2NhcHNgIGZyb20gdXNlcnNwYWNlLCBwb3B1bGF0ZXMgaXQgd2l0aCBob3N0IGNhcGFiaWxpdGllcywgYW5kIGNvcGllcyBpdCBiYWNrLiBUaGUgc3RydWN0IGBob3N0X2NhcHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCB1c2luZyBgPSB7fWAuIFRoZSBrZXJuZWwgdXNlcyB0aGUgc3RhbmRhcmQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYCBhbmQgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgaGVscGVycywgd2hpY2ggc2FmZWx5IGhhbmRsZSBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgIHplcm9lcyBhbnkgdHJhaWxpbmcgYnl0ZXMgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3QgaXMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwncywgYW5kIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGVuc3VyZXMgdGhhdCBvbmx5IGluaXRpYWxpemVkIGJ5dGVzIHVwIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSBhcmUgY29waWVkIGJhY2sgdG8gdXNlcnNwYWNlLCBjbGVhcmluZyBhbnkgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgaWYgbmVjZXNzYXJ5LiBUaGUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHMoKWAgZnVuY3Rpb24gb25seSBtb2RpZmllcyB0aGUgYGNvbXBhdF9jYXBhYmlsaXRpZXNgIGZpZWxkIHVzaW5nIGZ1bGx5IGluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYWRkaW5nIGJ5dGVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGludmFsaWQgdXNlciBwb2ludGVycyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5r5hz[1] Phase: Succeeded StartedAt: 2026-08-07 20:06:54 +0000 UTC FinishedAt: 2026-08-07 20:06:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 20:06:54 +0000 UTC FinishedAt: 2026-08-07 20:06:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2] Phase: Succeeded StartedAt: 2026-08-07 20:06:54 +0000 UTC FinishedAt: 2026-08-07 20:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 20:06:54 +0000 UTC FinishedAt: 2026-08-07 20:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 20:06:54 +0000 UTC FinishedAt: 2026-08-07 20:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 20:06:54 +0000 UTC FinishedAt: 2026-08-07 20:06:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5r5hz/series-workflow5r5hz-convert-artifact-4104085817/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 20:07:05 +0000 UTC FinishedAt: 2026-08-07 20:23:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 20:07:05 +0000 UTC FinishedAt: 2026-08-07 20:23:41 +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:*ce91864a-1255-4482-a4f2-e27ae14697b1,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-workflow5r5hz/series-workflow5r5hz-convert-artifact-4104085817/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": "86504774-63c4-4b4b-8323-d10f608a3279", "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-workflow5r5hz/series-workflow5r5hz-build-action-1390661207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 20:07:05 +0000 UTC FinishedAt: 2026-08-07 20:23:31 +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:*ce91864a-1255-4482-a4f2-e27ae14697b1,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-workflow5r5hz/series-workflow5r5hz-convert-artifact-4104085817/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": "86504774-63c4-4b4b-8323-d10f608a3279", "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-workflow5r5hz/series-workflow5r5hz-build-action-1390661207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 20:23:41 +0000 UTC FinishedAt: 2026-08-07 20:23:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 20:23:41 +0000 UTC FinishedAt: 2026-08-07 20:23:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 20:23:41 +0000 UTC FinishedAt: 2026-08-07 20:23:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 20:23:41 +0000 UTC FinishedAt: 2026-08-07 20:23:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5r5hz/series-workflow5r5hz-convert-artifact-1462421004/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 20:23:51 +0000 UTC FinishedAt: 2026-08-07 20:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 20:23:51 +0000 UTC FinishedAt: 2026-08-07 20:25:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86504774-63c4-4b4b-8323-d10f608a3279,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-workflow5r5hz/series-workflow5r5hz-build-action-1390661207/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-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 20:25:43 +0000 UTC FinishedAt: 2026-08-07 20:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 20:25:43 +0000 UTC FinishedAt: 2026-08-07 20:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 20:25:43 +0000 UTC FinishedAt: 2026-08-07 20:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 20:25:43 +0000 UTC FinishedAt: 2026-08-07 20:42:21 +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:*ce91864a-1255-4482-a4f2-e27ae14697b1,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-workflow5r5hz/series-workflow5r5hz-convert-artifact-1462421004/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": "8e0631d2-1234-4c8a-a919-41169ca54376", "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-workflow5r5hz/series-workflow5r5hz-build-action-2903845416/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 20:25:43 +0000 UTC FinishedAt: 2026-08-07 20:42:11 +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:*ce91864a-1255-4482-a4f2-e27ae14697b1,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-workflow5r5hz/series-workflow5r5hz-convert-artifact-1462421004/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": "8e0631d2-1234-4c8a-a919-41169ca54376", "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-workflow5r5hz/series-workflow5r5hz-build-action-2903845416/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 20:42:21 +0000 UTC FinishedAt: 2026-08-07 20:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 20:42:21 +0000 UTC FinishedAt: 2026-08-07 20:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 20:42:21 +0000 UTC FinishedAt: 2026-08-07 20:43:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 20:42:21 +0000 UTC FinishedAt: 2026-08-07 20:43:49 +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:*8e0631d2-1234-4c8a-a919-41169ca54376,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-workflow5r5hz/series-workflow5r5hz-build-action-2903845416/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-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"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:*86504774-63c4-4b4b-8323-d10f608a3279,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8e0631d2-1234-4c8a-a919-41169ca54376,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-workflow5r5hz/series-workflow5r5hz-build-action-1390661207/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-workflow5r5hz/series-workflow5r5hz-build-action-2903845416/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:44:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"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-workflow5r5hz/series-workflow5r5hz-convert-artifact-43684469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:43:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:43:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 20:43:59 +0000 UTC FinishedAt: 2026-08-07 20:43:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 20:44:19 +0000 UTC FinishedAt: 2026-08-07 20:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r5hz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"72d26767-7c32-4273-9b84-e476fcf9e5f4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 20:44:19 +0000 UTC FinishedAt: 2026-08-07 20:45:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86504774-63c4-4b4b-8323-d10f608a3279,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8e0631d2-1234-4c8a-a919-41169ca54376,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-workflow5r5hz/series-workflow5r5hz-build-action-1390661207/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-workflow5r5hz/series-workflow5r5hz-build-action-2903845416/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-workflow5r5hz/series-workflow5r5hz-convert-artifact-43684469/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,}