ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzMTI3Yi4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX2lwaWMuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw2NTcgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9pcGljLnN2PgotLy8vIEBicmllZiAgICAgIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyIChJUElDKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gU3luY2hyb25pemVzIElSUSBsaW5lcyAob3B0aW9uYWwpCi0gLy8gLSBEZXRlY3RzIGxldmVsIGFuZCBlZGdlICh3aXRoIG9wdGlvbmFsIGxpbmVzIGludmVyc2lvbikgb2YgSVJRIGxpbmVzCi0gLy8gLSBTZXR1cHMgaW50ZXJydXB0cyBoYW5kbGluZyAobW9kZSwgaW52ZXJzaW9uLCBlbmFibGUpCi0gLy8gLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIGludGVycnVwdHMgYW5kIGludGVycnVwdHMgY3VycmVudGx5IGluCi0gLy8gICBzZXJ2aWNlCi0gLy8gLSBHZW5lcmF0ZXMgaW50ZXJydXB0IHJlcXVlc3QgdG8gQ1NSCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBJUlEgbGluZXMgaGFuZGxpbmcgKHN5bmNocm9uaXphdGlvbiwgbGV2ZWwgYW5kIGVkZ2UgZGV0ZWN0aW9uKSBsb2dpYwotIC8vIC0gSVBJQyByZWdpc3RlcnM6Ci0gLy8gICAtIENJU1YKLSAvLyAgIC0gQ0lDU1IKLSAvLyAgIC0gRU9JCi0gLy8gICAtIFNPSQotIC8vICAgLSBJRFgKLSAvLyAgIC0gSVBSCi0gLy8gICAtIElTVlIKLSAvLyAgIC0gSUVSCi0gLy8gICAtIElNUgotIC8vICAgLSBJSU5WUgotIC8vICAgLSBJQ1NSCi0gLy8gLSBQcmlvcml0eSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBsb2dpYwotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLQotbW9kdWxlIHNjcjFfaXBpYwotKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIElQSUMgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBJUElDIGNsb2NrCi0KLSAgICAvLyBFeHRlcm5hbCBJbnRlcnJ1cHQgbGluZXMKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0lSUV9MSU5FU19OVU0tMTowXSAgICAgICAgICBzb2MyaXBpY19pcnFfbGluZXNfaSwgICAvLyBFeHRlcm5hbCBJUlEgbGluZXMKLQotICAgIC8vIENTUiA8LT4gSVBJQyBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY19yX3JlcV9pLCAgICAgICAvLyBJUElDIHJlYWQgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dfcmVxX2ksICAgICAgIC8vIElQSUMgd3JpdGUgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX2FkZHJfaSwgICAgICAgIC8vIElQSUMgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dkYXRhX2ksICAgICAgIC8vIElQSUMgd3JpdGUgZGF0YQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28sICAgICAgIC8vIElQSUMgcmVhZCBkYXRhCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpYzJjc3JfaXJxX21fcmVxX28gICAgLy8gSVJRIHJlcXVlc3QgZnJvbSBJUElDCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7IC8vIGNwLjYKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmQ7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDsKLX0gdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgeyAvLyBjcC42Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkOwotICAgIGxvZ2ljICAgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICBpZHg7Ci19IHR5cGVfc2NyMV9zZWFyY2hfb25lXzE2X3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW07Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludjsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXM7Ci0gICAgbG9naWMgICBbU0NSMV9JUlFfTElORVNfV0lEVEgtMTowXSAgICAgIGxpbmU7Ci19IHR5cGVfc2NyMV9pY3NyX21fczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllOwotfSB0eXBlX3NjcjFfY2ljc3JfczsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBmdW5jdGlvbnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1mdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHNjcjFfc2VhcmNoX29uZV8yKAotICAgIGlucHV0ICAgbG9naWMgICBbMTowXSBkaW4KLSk7Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLWJlZ2luCi0gICAgdG1wLnZkICA9IHxkaW47Ci0gICAgdG1wLmlkeCA9IH5kaW5bMF07Ci0gICAgc2NyMV9zZWFyY2hfb25lXzIgPSAgdG1wOwotZW5kCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyBzY3IxX3NlYXJjaF9vbmVfMTYoCi0gICAgaW5wdXQgICBsb2dpYyBbMTU6MF0gICAgZGluCi0pOwotICAgIGxvZ2ljIFs3OjBdICAgICAgICAgc3RhZ2UxX3ZkOwotICAgIGxvZ2ljIFszOjBdICAgICAgICAgc3RhZ2UyX3ZkOwotICAgIGxvZ2ljIFsxOjBdICAgICAgICAgc3RhZ2UzX3ZkOwotCi0gICAgbG9naWMgICAgICAgICAgICAgICBzdGFnZTFfaWR4IFs3OjBdOwotICAgIGxvZ2ljIFsxOjBdICAgICAgICAgc3RhZ2UyX2lkeCBbMzowXTsKLSAgICBsb2dpYyBbMjowXSAgICAgICAgIHN0YWdlM19pZHggWzE6MF07Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyByZXN1bHQ7Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLSAgICBpbnRlZ2VyIGk7IC8vIGNwLjE3Ci1iZWdpbgotICAgIC8vIFN0YWdlIDEKLSAgICBmb3IgKGk9MDsgaTw4OyBpPWkrMSkgYmVnaW4KLSAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoZGluWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTFfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTFfaWR4W2ldID0gdG1wLmlkeDsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDIKLSAgICBmb3IgKGk9MDsgaTw0OyBpPWkrMSkgYmVnaW4KLSAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoc3RhZ2UxX3ZkWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTJfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTJfaWR4W2ldID0gKH50bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTFfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMV9pZHhbMippKzFdfTsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDMKLSAgICBmb3IgKGk9MDsgaTwyOyBpPWkrMSkgYmVnaW4KLSAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoc3RhZ2UyX3ZkWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTNfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTNfaWR4W2ldID0gKH50bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTJfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMl9pZHhbMippKzFdfTsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDQKLSAgICByZXN1bHQudmQgPSB8c3RhZ2UzX3ZkOwotICAgIHJlc3VsdC5pZHggPSAoc3RhZ2UzX3ZkWzBdKSA/IHsxJ2IwLCBzdGFnZTNfaWR4WzBdfSA6IHsxJ2IxLCBzdGFnZTNfaWR4WzFdfTsKLQotICAgIHNjcjFfc2VhcmNoX29uZV8xNiA9IHJlc3VsdDsKLWVuZAotZW5kZnVuY3Rpb24KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIElSUSBsaW5lcyBoYW5kbGluZyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX2xpbmVzOyAgICAgICAgICAgICAgLy8gSW50ZXJuYWwgSVJRIGxpbmVzCi1gaWZkZWYgU0NSMV9JUElDX1NZTkNfRU4KLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcnFfbGluZXNfc3luYzsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfU1lOQ19FTgotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlycV9saW5lc19kbHk7ICAgICAgICAgIC8vIEludGVybmFsIElSUSBsaW5lcyBkZWxheWVkIGZvciAxIGN5Y2xlCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX2VkZ2VfZGV0ZWN0ZWQ7ICAgICAgLy8gSVJRIGxpbmVzIGVkZ2UgZGV0ZWN0ZWQgZmxhZ3MKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcnFfbHZsOyAgICAgICAgICAgICAgICAvLyBJUlEgbGluZXMgbGV2ZWwKLQotLy8gSVBJQyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENJU1YgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGljX2Npc3ZfdXBkOyAgICAgICAgICAvLyBDdXJyZW50IEludGVycnVwdCBWZWNvdHIgaW4gU2VydmljZSByZWdpc3RlciB1cGRhdGUKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcGljX2Npc3ZfZmY7ICAgICAgICAgICAvLyBDdXJyZW50IEludGVycnVwdCBWZWN0b3IgaW4gU2VydmljZSByZWdpc3RlcgotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICAgIGlwaWNfY2lzdl9uZXh0OyAgICAgICAgIC8vIEN1cnJlbnQgSW50ZXJydXB0IFZlY3RvciBpbiBTZXJ2aWNlIHJlZ2lzdGVyIG5leHQgdmFsdWUKLQotLy8gQ0lDUyByZWdpc3RlciAoQ0lDU1IpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ljc3Jfd3JfcmVxOyAgICAgICAgICAgLy8gV3JpdGUgcmVxdWVzdCB0byBDdXJyZW50IEludGVycnVwdCBDb250cm9sIFN0YXR1cyByZWdpc3RlcgotdHlwZV9zY3IxX2NpY3NyX3MgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfY2ljc3I7ICAgICAgICAgICAgIC8vIEN1cnJlbnQgSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCi0KLS8vIEVPSSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvaV93cl9yZXE7ICAgICAgICAgICAgIC8vIFdyaXRlIHJlcXVlc3QgdG8gRW5kIG9mIEludGVycnVwdCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfZW9pX3JlcTsgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gZW5kIHRoZSBpbnRlcnJ1cHQgdGhhdCBpcyBjdXJyZW50bHkgaW4gc2VydmljZQotCi0vLyBTT0kgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2lfd3JfcmVxOyAgICAgICAgICAgICAvLyBXcml0ZSByZXF1ZXN0IHRvIFN0YXJ0IG9mIEludGVycnVwdCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfc29pX3JlcTsgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gc3RhcnQgdGhlIGludGVycnVwdAotCi0vLyBJRFggcmVnaXN0ZXIgKElEWFIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4cl93cl9yZXE7ICAgICAgICAgICAgLy8gV3JpdGUgcmVxdWVzdCB0byBJbmRleCByZWdpc3RlcgotbG9naWMgW1NDUjFfSVJRX0lEWF9XSURUSC0xOjBdICAgICAgICAgIGlwaWNfaWR4cl9mZjsgICAgICAgICAgIC8vIEluZGV4IHJlZ2lzdGVyCi0KLS8vIElQIHJlZ2lzdGVyIChJUFIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pcHJfdXBkOyAgICAgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIgdXBkYXRlCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfZmY7ICAgICAgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2lwcl9uZXh0OyAgICAgICAgICAvLyBJbnRlcnJ1cHQgcGVuZGluZyByZWdpc3RlciBuZXh0IHZhbHVlCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfY2xyX2NvbmQ7ICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgY29uZGl0aW9uCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfY2xyX3JlcTsgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgcmVxdWVzdAotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXByX2NscjsgICAgICAgICAgIC8vIEludGVycnVwdCBwZW5kaW5nIGNsZWFyIG9wZXJhdGlvbgotCi0vLyBJU1YgcmVnaXN0ZXIgKElTVlIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pc3ZyX3VwZDsgICAgICAgICAgLy8gSW50ZXJydXB0IFNlcnZpY2VkIHJlZ2lzdGVyIHVwZGF0ZQotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXN2cl9mZjsgICAgICAgICAgIC8vIEludGVycnVwdCBTZXJ2aWNlZCByZWdpc3RlcgotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXN2cl9uZXh0OyAgICAgICAgIC8vIEludGVycnVwdCBTZXJ2aWNlZCByZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIElFIHJlZ2lzdGVyIChJRVIpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pZXJfdXBkOyAgICAgICAgICAgLy8gSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciB1cGRhdGUKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2llcl9mZjsgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pZXJfbmV4dDsgICAgICAgICAgLy8gSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIElNIHJlZ2lzdGVyIChJTVIpCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pbXJfZmY7ICAgICAgICAgICAgLy8gSW50ZXJydXB0IG1vZGUgcmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2ltcl9uZXh0OyAgICAgICAgICAvLyBJbnRlcnJ1cHQgbW9kZSByZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIElJTlYgcmVnaXN0ZXIgKElJTlZSKQotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaWludnJfZmY7ICAgICAgICAgIC8vIEludGVycnVwdCBJbnZlcnNpb24gcmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2lpbnZyX25leHQ7ICAgICAgICAvLyBJbnRlcnJ1cHQgSW52ZXJzaW9uIHJlZ2lzdGVyIG5leHQgdmFsdWUKLQotLy8gSUNTIHJlZ2lzdGVyIChJQ1NSKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc3Jfd3JfcmVxOyAgICAgICAgICAgIC8vIFdyaXRlIHJlcXVlc3QgdG8gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCi10eXBlX3NjcjFfaWNzcl9tX3MgICAgICAgICAgICAgICAgICAgICAgaXBpY19pY3NyOyAgICAgICAgICAgICAgLy8gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCi0KLS8vIFByaW9yaXR5IGludGVycnVwdCBnZW5lcmF0aW9uIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNlcnZpY2VkIGludGVycnVwdCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3NlcnZfdmQ7ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gaW50ZXJydXB0IGluIHNlcnZpY2UKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcnFfc2Vydl9pZHg7ICAgICAgICAgICAvLyBJbmRleCBvZiBhbiBpbnRlcnJ1cHQgdGhhdCBpcyBjdXJyZW50bHkgaW4gc2VydmljZQotCi0vLyBSZXF1ZXN0ZWQgaW50ZXJydXB0IHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfcmVxX3ZkOyAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQKLWxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcnFfcmVxX2lkeDsgICAgICAgICAgICAvLyBJbmRleCBvZiBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQKLQotLy8gSW50ZXJydXB0IHJlcXVlc3RlZCBvbiAiZW5kIG9mIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQiIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZW9pX3JlcV92ZDsgICAgICAgICAvLyBUaGVyZSBpcyBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQgd2hlbiB0aGUgcHJldmlvdXMgb25lIGhhcyBlbmRlZAotbG9naWMgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICAgIGlycV9lb2lfcmVxX2lkeDsgICAgICAgIC8vIEluZGV4IG9mIGFuIGludGVycnVwdCByZXF1ZXN0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb25lIGhhcyBlbmRlZAotCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX3JlcV92OyAgICAgICAgICAgICAgLy8gVmVjdG9yIG9mIGludGVycnVwdHMgdGhhdCBhcmUgcGVuZGluZyBhbmQgZW5hYmxlZAotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3N0YXJ0X3ZkOyAgICAgICAgICAgLy8gUmVxdWVzdCB0byBzdGFydCBhbiBpbnRlcnJ1cHQgaXMgdmFsaWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfaGlfcHJpb3JfcG5kOyAgICAgICAvLyBUaGVyZSBpcyBhIHBlbmRpbmcgSVJRIHdpdGggYSBwcmlvcml0eSBoaWdoZXIgdGhhbiBvZiB0aGUgaW50ZXJydXB0IHRoYXQgaXMgY3VycmVudGx5IGluIHNlcnZpY2UKLQotdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyAgICAgICAgICAgICAgIGlycl9wcmlvcml0eTsgICAgICAgICAgIC8vIFN0cnVjdHVyZSBmb3IgdmQgYW5kIGlkeCBvZiB0aGUgcmVxdWVzdGVkIGludGVycnVwdAotdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyAgICAgICAgICAgICAgIGlzdnJfcHJpb3JpdHlfZW9pOyAgICAgIC8vIFN0cnVjdHVyZSBmb3IgdmQgYW5kIGlkeCBvZiB0aGUgaW50ZXJydXB0IHJlcXVlc3RlZCB3aGVuIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgaGFzIGVuZGVkCi1sb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pc3ZyX2VvaTsgICAgICAgICAgLy8gSW50ZXJydXB0IFNlcnZpY2VkIHJlZ2lzdGVyIHdoZW4gdGhlIHByZXZpb3VzIGludGVycnVwdCBoYXMgZW5kZWQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElSUSBsaW5lcyBoYW5kbGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfSVBJQ19TWU5DX0VOCi0vLyBJUlEgbGluZXMgc3luY2hyb25pemF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBpcnFfbGluZXNfc3luYyA8PSAnMDsKLSAgICAgICAgaXJxX2xpbmVzICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaXJxX2xpbmVzX3N5bmMgPD0gc29jMmlwaWNfaXJxX2xpbmVzX2k7Ci0gICAgICAgIGlycV9saW5lcyAgICAgIDw9IGlycV9saW5lc19zeW5jOwotICAgIGVuZAotZW5kCi1gZWxzZSAvLyBTQ1IxX0lQSUNfU1lOQ19FTgotYXNzaWduIGlycV9saW5lcyA9IHNvYzJpcGljX2lycV9saW5lc19pOwotYGVuZGlmIC8vIFNDUjFfSVBJQ19TWU5DX0VOCi0KLS8vIElSUSBsaW5lcyBsZXZlbCBkZXRlY3Rpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpcnFfbHZsID0gaXJxX2xpbmVzIF4gaXBpY19paW52cl9uZXh0OwotCi0vLyBJUlEgbGluZXMgZWRnZSBkZXRlY3Rpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlycV9saW5lc19kbHkgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaXJxX2xpbmVzX2RseSA8PSBpcnFfbGluZXM7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGlycV9lZGdlX2RldGVjdGVkID0gKGlycV9saW5lc19kbHkgXiBpcnFfbGluZXMpICYgaXJxX2x2bDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElQSUMgcmVnaXN0ZXJzIHJlYWQvd3JpdGUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkIExvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaXBpYzJjc3JfcmRhdGFfbyAgPSAnMDsKLQotICAgIGlmIChjc3IyaXBpY19yX3JlcV9pKSBiZWdpbgotICAgICAgICBjYXNlIChjc3IyaXBpY19hZGRyX2kpCi0gICAgICAgICAgICBTQ1IxX0lQSUNfQ0lTViA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gPSBpcnFfc2Vydl92ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXBpY19jaXN2X2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lSUV9WT0lEX1ZFQ1RfTlVNOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lQSUNfQ0lDU1IgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVBdICA9IGlwaWNfY2ljc3IuaXA7Ci0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9JRV0gID0gaXBpY19jaWNzci5pZTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9JUElDX0lQUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbyA9IGBTQ1IxX1hMRU4nKGlwaWNfaXByX2ZmKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9JUElDX0lTVlIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28gPSBgU0NSMV9YTEVOJyhpcGljX2lzdnJfZmYpOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lQSUNfRU9JLAotICAgICAgICAgICAgU0NSMV9JUElDX1NPSSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbyA9ICcwOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lQSUNfSURYIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9vID0gYFNDUjFfWExFTicoaXBpY19pZHhyX2ZmKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVBdICAgICAgPSBpcGljX2ljc3IuaXA7Ci0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9JRV0gICAgICA9IGlwaWNfaWNzci5pZTsKLSAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9vW1NDUjFfSVBJQ19JQ1NSX0lNXSAgICAgID0gaXBpY19pY3NyLmltOwotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSU5WXSAgICAgPSBpcGljX2ljc3IuaW52OwotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfUFJWX01TQjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX1BSVl9MU0JdID0gU0NSMV9JUElDX1BSVl9NOwotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVNdICAgICAgPSBpcGljX2ljc3IuaXM7Ci0gICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9MTl9NU0ItMToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0xOX0xTQl0gID0gaXBpY19pY3NyLmxpbmU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28gPSAneDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8gV3JpdGUgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlZ2lzdGVyIHNlbGVjdGlvbgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjaWNzcl93cl9yZXEgPSAxJ2IwOwotICAgIGVvaV93cl9yZXEgICA9IDEnYjA7Ci0gICAgc29pX3dyX3JlcSAgID0gMSdiMDsKLSAgICBpZHhyX3dyX3JlcSAgPSAxJ2IwOwotICAgIGljc3Jfd3JfcmVxICA9IDEnYjA7Ci0gICAgaWYgKGNzcjJpcGljX3dfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJpcGljX2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfSVBJQ19DSVNWIDogYmVnaW4gZW5kIC8vIFF1aWV0IFJlYWQtT25seQotICAgICAgICAgICAgU0NSMV9JUElDX0NJQ1NSOiBjaWNzcl93cl9yZXEgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX0lQUiAgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgIFNDUjFfSVBJQ19JU1ZSIDogYmVnaW4gZW5kIC8vIFF1aWV0IFJlYWQtT25seQotICAgICAgICAgICAgU0NSMV9JUElDX0VPSSAgOiBlb2lfd3JfcmVxICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX1NPSSAgOiBzb2lfd3JfcmVxICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX0lEWCAgOiBpZHhyX3dyX3JlcSAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgOiBpY3NyX3dyX3JlcSAgPSAxJ2IxOwotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luIC8vIElsbGVnYWwgSVBJQyByZWdpc3RlciBhZGRyZXNzCi0gICAgICAgICAgICAgICAgY2ljc3Jfd3JfcmVxID0gJ3g7Ci0gICAgICAgICAgICAgICAgZW9pX3dyX3JlcSAgID0gJ3g7Ci0gICAgICAgICAgICAgICAgc29pX3dyX3JlcSAgID0gJ3g7Ci0gICAgICAgICAgICAgICAgaWR4cl93cl9yZXEgID0gJ3g7Ci0gICAgICAgICAgICAgICAgaWNzcl93cl9yZXEgID0gJ3g7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJUElDIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gQ3VycmVudCBJbnRlcnJ1cHQgVmVjdG9yIGluIFNlcnZpY2UgKENJU1YpIHJlZ2lzdGVyCi0gLy8gLSBDdXJyZW50IEludGVycnVwdCBDb250cm9sIFN0YXR1cyAoQ0lDU1IpIHJlZ2lzdGVyCi0gLy8gLSBFbmQgb2YgSW50ZXJydXB0IChFT0kpIHJlZ2lzdGVyCi0gLy8gLSBTdGFydCBvZiBJbnRlcnJ1cHQgKFNPSSkgcmVnaXN0ZXIKLSAvLyAtIEluZGV4IChJRFgpIHJlZ2lzdGVyCi0gLy8gLSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAoSVBSKQotIC8vIC0gSW50ZXJydXB0IFNlcnZpY2VkIFJlZ2lzdGVyIChJU1ZSKQotIC8vIC0gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAoSUVSKQotIC8vIC0gSW50ZXJydXB0IE1vZGUgUmVnaXN0ZXIgKElNUikKLSAvLyAtIEludGVycnVwdCBJbnZlcnNpb24gUmVnaXN0ZXIgKElJTlZSKQotIC8vIC0gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIFJlZ2lzdGVyIChJQ1NSKQotLy8KLQotLy8gQ0lTViByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbnRhaW5zIG51bWJlciBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciBjdXJyZW50bHkgaW4gc2VydmljZS4gV2hlbiBubwotLy8gaW50ZXJydXB0cyBhcmUgaW4gc2VydmljZSwgY29udGFpbnMgbnVtYmVyIG9mIHRoZSB2b2lkIGludGVycnVwdCB2ZWN0b3IgKDB4MTApLgotLy8gVGhlIHJlZ2lzdGVyIGNhbm5vdCBjb250YWluIGFsbCAwJ3MKLQotYXNzaWduIGlwaWNfY2lzdl91cGQgPSBpcnFfc3RhcnRfdmQgfCBpcGljX2VvaV9yZXE7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfY2lzdl9mZiA8PSBTQ1IxX0lSUV9WT0lEX1ZFQ1RfTlVNOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2Npc3ZfdXBkKSBiZWdpbgotICAgICAgICBpcGljX2Npc3ZfZmYgPD0gaXBpY19jaXN2X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGlwaWNfY2lzdl9uZXh0ID0gaXJxX3N0YXJ0X3ZkID8gaXJxX3JlcV9pZHgKLSAgICAgICAgICAgICAgICAgICAgICA6IGlwaWNfZW9pX3JlcSA/IGlycV9lb2lfcmVxX3ZkID8gaXJxX2VvaV9yZXFfaWR4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSVJRX1ZPSURfVkVDVF9OVU0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEnYjA7Ci0KLWFzc2lnbiBpcnFfc2Vydl9pZHggPSBpcGljX2Npc3ZfZmZbU0NSMV9JUlFfVkVDVF9XSURUSC0yOjBdOwotYXNzaWduIGlycV9zZXJ2X3ZkICA9IH5pcGljX2Npc3ZfZmZbU0NSMV9JUlFfVkVDVF9XSURUSC0xXTsKLQotLy8gQ0lDU1IgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTaG93cyB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgY3VycmVudGx5IGluIHNlcnZpY2UgaXMgcGVuZGluZyBhbmQgZW5hYmxlZAotCi1hc3NpZ24gaXBpY19jaWNzci5pcCA9IGlwaWNfaXByX2ZmW2lycV9zZXJ2X2lkeF0gJiBpcnFfc2Vydl92ZDsKLWFzc2lnbiBpcGljX2NpY3NyLmllID0gaXBpY19pZXJfZmZbaXJxX3NlcnZfaWR4XSAmIGlycV9zZXJ2X3ZkOwotCi0vLyBFT0kgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXcml0aW5nIGFueSB2YWx1ZSB0byBFT0kgcmVnaXN0ZXIgZW5kcyB0aGUgaW50ZXJydXB0IHdoaWNoIGlzIGN1cnJlbnRseSBpbiBzZXJ2aWNlCi0KLWFzc2lnbiBpcGljX2VvaV9yZXEgPSBlb2lfd3JfcmVxICYgaXJxX3NlcnZfdmQ7Ci0KLS8vIFNPSSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdyaXRpbmcgYW55IHZhbHVlIHRvIFNPSSBhY3RpdmF0ZXMgc3RhcnQgb2YgaW50ZXJydXB0IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nCi0vLyBjb25kaXRpb25zIGlzIHRydWU6Ci0vLyAtIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwZW5kaW5nIGludGVycnVwdCB3aXRoIElFIGFuZCBJU1IgaXMgemVybwotLy8gLSBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcGVuZGluZyBpbnRlcnJ1cHQgd2l0aCBJRSBhbmQgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlCi0vLyBpbnRlcnJ1cHRzIGN1cnJlbnRseSBpbiBzZXJ2aWNlCi0KLWFzc2lnbiBpcGljX3NvaV9yZXEgPSBzb2lfd3JfcmVxICYgaXJxX3JlcV92ZDsKLQotLy8gSURYIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGludGVycnVwdCB2ZWN0b3Igd2hpY2ggaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgSVBJQ19JQ1NSCi0vLyByZWdpc3RlcgotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBpcGljX2lkeHJfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGlkeHJfd3JfcmVxKSBiZWdpbgotICAgICAgICBpcGljX2lkeHJfZmYgPD0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lSUV9JRFhfV0lEVEgtMTowXTsKLSAgICBlbmQKLWVuZAotCi0vLyBJUFIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGb3IgZXZlcnkgSVJRIGxpbmUgc2hvd3Mgd2hldGhlciB0aGVyZSBpcyBhIHBlbmRpbmcgaW50ZXJydXB0Ci0KLWFzc2lnbiBpcGljX2lwcl91cGQgPSAoaXBpY19pcHJfbmV4dCAhPSBpcGljX2lwcl9mZik7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaXByX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2lwcl91cGQpIGJlZ2luCi0gICAgICAgIGlwaWNfaXByX2ZmIDw9IGlwaWNfaXByX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2lwcl9jbHJfcmVxID0gJzA7Ci0gICAgaWYgKGNzcjJpcGljX3dfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJpcGljX2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfSVBJQ19DSUNTUjogaXBpY19pcHJfY2xyX3JlcVtpcnFfc2Vydl9pZHhdID0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JUF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgaXJxX3NlcnZfdmQ7Ci0gICAgICAgICAgICBTQ1IxX0lQSUNfSVBSICA6IGlwaWNfaXByX2Nscl9yZXEgICAgICAgICAgICAgICA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUlFfVkVDVF9OVU0tMTowXTsKLSAgICAgICAgICAgIFNDUjFfSVBJQ19TT0kgIDogaXBpY19pcHJfY2xyX3JlcVtpcnFfcmVxX2lkeF0gID0gaXJxX3JlcV92ZDsKLSAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSIDogaXBpY19pcHJfY2xyX3JlcVtpcGljX2lkeHJfZmZdID0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JUF07Ci0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICA6IGJlZ2luIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYXNzaWduIGlwaWNfaXByX2Nscl9jb25kID0gfmlycV9sdmwgfCBpcGljX2ltcl9uZXh0OwotYXNzaWduIGlwaWNfaXByX2NsciAgICAgID0gaXBpY19pcHJfY2xyX3JlcSAmIGlwaWNfaXByX2Nscl9jb25kOwotaW50ZWdlciBpOwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2lwcl9uZXh0ID0gJzA7Ci0gICAgZm9yIChpPTA7IGk8U0NSMV9JUlFfVkVDVF9OVU07IGk9aSsxKSBiZWdpbgotICAgICAgICBpcGljX2lwcl9uZXh0W2ldID0gaXBpY19pcHJfY2xyW2ldID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgIDogfmlwaWNfaW1yX2ZmW2ldID8gaXJxX2x2bFtpXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXBpY19pcHJfZmZbaV0gfCBpcnFfZWRnZV9kZXRlY3RlZFtpXTsKLSAgICBlbmQKLWVuZAotCi0vLyBJU1ZSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRm9yIGV2ZXJ5IElSUSBsaW5lIHNob3dzIHdoZXRoZXIgdGhlIGludGVycnVwdCBpcyBpbiBzZXJ2aWNlIG9yIG5vdAotCi1hc3NpZ24gaXBpY19pc3ZyX3VwZCA9IGlycV9zdGFydF92ZCB8IGlwaWNfZW9pX3JlcTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaXBpY19pc3ZyX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2lzdnJfdXBkKSBiZWdpbgotICAgICAgICBpcGljX2lzdnJfZmYgPD0gaXBpY19pc3ZyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2lzdnJfZW9pID0gaXBpY19pc3ZyX2ZmOwotICAgIGlmIChpcnFfc2Vydl92ZCkgYmVnaW4KLSAgICAgICAgaXBpY19pc3ZyX2VvaVtpcnFfc2Vydl9pZHhdID0gMSdiMDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlwaWNfaXN2cl9uZXh0ID0gaXBpY19pc3ZyX2ZmOwotICAgIGlmIChpcnFfc3RhcnRfdmQpIGJlZ2luCi0gICAgICAgIGlwaWNfaXN2cl9uZXh0W2lycV9yZXFfaWR4XSA9IDEnYjE7Ci0gICAgZW5kIGVsc2UgaWYgKGlwaWNfZW9pX3JlcSkgYmVnaW4KLSAgICAgICAgaXBpY19pc3ZyX25leHQgPSBpcGljX2lzdnJfZW9pOwotICAgIGVuZAotZW5kCi0KLS8vIElFUgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVuYWJsZXMvZGlzYWJsZXMgaW50ZXJydXB0IGZvciBldmVyeSBJUlEgbGluZQotCi1hc3NpZ24gaXBpY19pZXJfdXBkID0gY2ljc3Jfd3JfcmVxIHwgaWNzcl93cl9yZXE7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaWVyX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpcGljX2llcl91cGQpIGJlZ2luCi0gICAgICAgIGlwaWNfaWVyX2ZmIDw9IGlwaWNfaWVyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpcGljX2llcl9uZXh0ID0gaXBpY19pZXJfZmY7Ci0gICAgaWYgKGNpY3NyX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgaXBpY19pZXJfbmV4dFtpcnFfc2Vydl9pZHhdID0gaXJxX3NlcnZfdmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JRV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXBpY19pZXJfZmZbaXJxX3NlcnZfaWR4XTsKLSAgICBlbmQgZWxzZSBpZiAoaWNzcl93cl9yZXEpIGJlZ2luCi0gICAgICAgIGlwaWNfaWVyX25leHRbaXBpY19pZHhyX2ZmXSA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSUVdOwotICAgIGVuZAotZW5kCi0KLS8vIElNUgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZvciBldmVyeSBJUlEgbGluZSBzZXRzIGVpdGhlciBMZXZlbCAoMCkgb3IgRWRnZSAoMSkgZGV0ZWN0aW9uCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaW1yX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpY3NyX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgaXBpY19pbXJfZmYgPD0gaXBpY19pbXJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlwaWNfaW1yX25leHQgPSBpcGljX2ltcl9mZjsKLSAgICBpZiAoaWNzcl93cl9yZXEpIGJlZ2luCi0gICAgICAgIGlwaWNfaW1yX25leHRbaXBpY19pZHhyX2ZmXSA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSU1dOwotICAgIGVuZAotZW5kCi0KLS8vIElJTlZSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRm9yIGV2ZXJ5IElSUSBsaW5lIGRlZmluZXMgd2hldGhlciBpdCBzaG91bGQgYmUgaW52ZXJ0ZWQgb3Igbm90Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGlwaWNfaWludnJfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGljc3Jfd3JfcmVxKSBiZWdpbgotICAgICAgICBpcGljX2lpbnZyX2ZmIDw9IGlwaWNfaWludnJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlwaWNfaWludnJfbmV4dCA9IGlwaWNfaWludnJfZmY7Ci0gICAgaWYgKGljc3Jfd3JfcmVxKSBiZWdpbgotICAgICAgICBpcGljX2lpbnZyX25leHRbaXBpY19pZHhyX2ZmXSA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSU5WXTsKLSAgICBlbmQKLWVuZAotCi0vLyBJQ1NSCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgY29udHJvbCBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcnJ1cHQgZGVmaW5lZCBieSBJbmRleCBSZWdpc3RlcgotCi1hc3NpZ24gaXBpY19pY3NyLmlwICAgID0gaXBpY19pcHJfZmYgIFtpcGljX2lkeHJfZmZdOwotYXNzaWduIGlwaWNfaWNzci5pZSAgICA9IGlwaWNfaWVyX2ZmICBbaXBpY19pZHhyX2ZmXTsKLWFzc2lnbiBpcGljX2ljc3IuaW0gICAgPSBpcGljX2ltcl9mZiAgW2lwaWNfaWR4cl9mZl07Ci1hc3NpZ24gaXBpY19pY3NyLmludiAgID0gaXBpY19paW52cl9mZltpcGljX2lkeHJfZmZdOwotYXNzaWduIGlwaWNfaWNzci5pcyAgICA9IGlwaWNfaXN2cl9mZiBbaXBpY19pZHhyX2ZmXTsKLWFzc2lnbiBpcGljX2ljc3IubGluZSAgPSBTQ1IxX0lSUV9MSU5FU19XSURUSCcoaXBpY19pZHhyX2ZmKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFByaW9yaXR5IElSUSBnZW5lcmF0aW9uIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaXJxX3JlcV92ID0gaXBpY19pcHJfZmYgJiBpcGljX2llcl9mZjsKLQotLyoqKiBNb2RpZmllZCBmb3IgWW9zeXMgaGFuZGluZyB0eXBlZGVmIGluIGZ1bmN0aW9uIC0gZGluZXNoYQotYXNzaWduIGlycl9wcmlvcml0eSAgICAgICAgPSBzY3IxX3NlYXJjaF9vbmVfMTYoaXJxX3JlcV92KTsKLWFzc2lnbiBpcnFfcmVxX3ZkICAgICAgICAgID0gaXJyX3ByaW9yaXR5LnZkOwotYXNzaWduIGlycV9yZXFfaWR4ICAgICAgICAgPSBpcnJfcHJpb3JpdHkuaWR4OwotKioqKi8KLQotYWx3YXlzX2NvbWIgCi1iZWdpbgotICAgIGNhc2V4KGlycV9yZXFfdikKLQkgICAgMTYnYnh4eHhfeHh4eF94eHh4X3h4eDEgOiBpcnFfcmVxX2lkeCA9IDA7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeHh4eF94eDEwIDogaXJxX3JlcV9pZHggPSAxOwotCSAgICAxNidieHh4eF94eHh4X3h4eHhfeDEwMCA6IGlycV9yZXFfaWR4ID0gMjsKLQkgICAgMTYnYnh4eHhfeHh4eF94eHh4XzEwMDAgOiBpcnFfcmVxX2lkeCA9IDM7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeHh4MV8wMDAwIDogaXJxX3JlcV9pZHggPSA0OwotCSAgICAxNidieHh4eF94eHh4X3h4MTBfMDAwMCA6IGlycV9yZXFfaWR4ID0gNTsKLQkgICAgMTYnYnh4eHhfeHh4eF94MTAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDY7Ci0JICAgIDE2J2J4eHh4X3h4eHhfMTAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSA3OwotCSAgICAxNidieHh4eF94eHgxXzAwMDBfMDAwMCA6IGlycV9yZXFfaWR4ID0gODsKLQkgICAgMTYnYnh4eHhfeHgxMF8wMDAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDk7Ci0JICAgIDE2J2J4eHh4X3gxMDBfMDAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSAxMDsKLQkgICAgMTYnYnh4eHhfMTAwMF8wMDAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDExOwotCSAgICAxNidieHh4MV8wMDAwXzAwMDBfMDAwMCA6IGlycV9yZXFfaWR4ID0gMTI7Ci0JICAgIDE2J2J4eDEwXzAwMDBfMDAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSAxMzsKLQkgICAgMTYnYngxMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfcmVxX2lkeCA9IDE0OwotCSAgICAxNidiMTAwMF8wMDAwXzAwMDBfMDAwMCA6IGlycV9yZXFfaWR4ID0gMTU7Ci0JICAgIDE2J2IwMDAwXzAwMDBfMDAwMF8wMDAwIDogaXJxX3JlcV9pZHggPSAxNjsKLQkgICAgZGVmYXVsdCA6IGlycV9yZXFfaWR4ID0gMTY7Ci0gICAgZW5kY2FzZQotICAgIGlycV9yZXFfdmQgPSB8aXJxX3JlcV92OwotZW5kCi0KLS8qKiogTW9kaWZpZWQgZm9yIFlvc3lzIGhhbmRpbmcgdHlwZWRlZiBpbiBmdW5jdGlvbiAtIGRpbmVzaGEKLWFzc2lnbiBpc3ZyX3ByaW9yaXR5X2VvaSAgID0gc2NyMV9zZWFyY2hfb25lXzE2KGlwaWNfaXN2cl9lb2kpOwotYXNzaWduIGlycV9lb2lfcmVxX3ZkICAgICAgPSBpc3ZyX3ByaW9yaXR5X2VvaS52ZDsKLWFzc2lnbiBpcnFfZW9pX3JlcV9pZHggICAgID0gaXN2cl9wcmlvcml0eV9lb2kuaWR4OwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWx3YXlzX2NvbWIgCi1iZWdpbgotICAgIGNhc2V4KGlwaWNfaXN2cl9lb2kpCi0JICAgIDE2J2J4eHh4X3h4eHhfeHh4eF94eHgxIDogaXJxX2VvaV9yZXFfaWR4ID0gMDsKLQkgICAgMTYnYnh4eHhfeHh4eF94eHh4X3h4MTAgOiBpcnFfZW9pX3JlcV9pZHggPSAxOwotCSAgICAxNidieHh4eF94eHh4X3h4eHhfeDEwMCA6IGlycV9lb2lfcmVxX2lkeCA9IDI7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeHh4eF8xMDAwIDogaXJxX2VvaV9yZXFfaWR4ID0gMzsKLQkgICAgMTYnYnh4eHhfeHh4eF94eHgxXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSA0OwotCSAgICAxNidieHh4eF94eHh4X3h4MTBfMDAwMCA6IGlycV9lb2lfcmVxX2lkeCA9IDU7Ci0JICAgIDE2J2J4eHh4X3h4eHhfeDEwMF8wMDAwIDogaXJxX2VvaV9yZXFfaWR4ID0gNjsKLQkgICAgMTYnYnh4eHhfeHh4eF8xMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSA3OwotCSAgICAxNidieHh4eF94eHgxXzAwMDBfMDAwMCA6IGlycV9lb2lfcmVxX2lkeCA9IDg7Ci0JICAgIDE2J2J4eHh4X3h4MTBfMDAwMF8wMDAwIDogaXJxX2VvaV9yZXFfaWR4ID0gOTsKLQkgICAgMTYnYnh4eHhfeDEwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMDsKLQkgICAgMTYnYnh4eHhfMTAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMTsKLQkgICAgMTYnYnh4eDFfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMjsKLQkgICAgMTYnYnh4MTBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxMzsKLQkgICAgMTYnYngxMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxNDsKLQkgICAgMTYnYjEwMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxNTsKLQkgICAgMTYnYjAwMDBfMDAwMF8wMDAwXzAwMDAgOiBpcnFfZW9pX3JlcV9pZHggPSAxNjsKLQkgICAgZGVmYXVsdCA6IGlycV9lb2lfcmVxX2lkeCA9IDE2OwotICAgIGVuZGNhc2UKLSAgICBpcnFfZW9pX3JlcV92ZCA9IHxpcGljX2lzdnJfZW9pOwotZW5kCi0KLWFzc2lnbiBpcnFfaGlfcHJpb3JfcG5kICAgICA9IGlycV9yZXFfaWR4IDwgaXJxX3NlcnZfaWR4OwotCi1hc3NpZ24gaXBpYzJjc3JfaXJxX21fcmVxX28gPSBpcnFfcmVxX3ZkICYgKH5pcnFfc2Vydl92ZCB8IGlycV9oaV9wcmlvcl9wbmQpOwotCi1hc3NpZ24gaXJxX3N0YXJ0X3ZkICAgICAgICAgPSBpcGljMmNzcl9pcnFfbV9yZXFfbyAmIGlwaWNfc29pX3JlcTsKLQotZW5kbW9kdWxlIDogc2NyMV9pcGljCi0KLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfY3NyLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTk2MjE1Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcwICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9jc3Iuc3Y+Ci0vLy8gQGJyaWVmICAgICAgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXJzIChDU1IpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQcm92aWRlcyBhY2Nlc3MgdG8gUklTQy1WIENTUiBNYWNoaW5lIHJlZ2lzdGVycwotIC8vIC0gSGFuZGxlcyBldmVudHMgKEVYQywgSVJRIGFuZCBNUkVUKToKLSAvLyAgIC0gU2V0dXBzIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24KLSAvLyAgIC0gRGlzcGxheXMgZXZlbnRzIHN0YXR1c2VzIGFuZCBpbmZvcm1hdGlvbgotIC8vICAgLSBHZW5lcmF0ZXMgbmV3IFBDCi0gLy8gLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGV4ZWN1dGVkIGluc3RydWN0aW9ucyBhbmQgZWxhcHNlZAotIC8vICAgY3ljbGVzCi0gLy8gLSBQcm92aWRlcyBpbnRlcmZhY2VzIGZvciBJUElDLCBIRFUgYW5kIFREVSByZWdpc3RlcnMgYWNjZXNzCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBFdmVudHMgKEVYQywgSVJRLCBNUkVUKSBsb2dpYwotIC8vIC0gQ1NSIHJlYWQvd3JpdGUgaW50ZXJmYWNlCi0gLy8gLSBDU1IgcmVnaXN0ZXJzOgotIC8vICAgLSBNYWNoaW5lIFRyYXAgU2V0dXAgcmVnaXN0ZXJzCi0gLy8gICAtIE1hY2hpbmUgVHJhcCBIYW5kbGluZyByZWdpc3RlcnMKLSAvLyAgIC0gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgcmVnaXN0ZXJzCi0gLy8gICAtIE5vbi1zdGFuZGFyZCBDU1JzIChNQ09VTlRFTikKLSAvLyAtIENTUiA8LT4gRVhVIGkvZgotIC8vIC0gQ1NSIDwtPiBJUElDIGkvZgotIC8vIC0gQ1NSIDwtPiBIRFUgaS9mCi0gLy8gLSBDU1IgPC0+IFREVSBpL2YKLSAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi1gaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgotYGlmZGVmIFNDUjFfSVBJQ19FTgotYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX2hkdS5zdmgiCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBpZmRlZiBTQ1IxX1REVV9FTgotYGluY2x1ZGUgInNjcjFfdGR1LnN2aCIKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1tb2R1bGUgc2NyMV9waXBlX2NzciAoCi0gICAgLy8gQ29tbW9uCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBDU1IgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdhdGVkIENTUiBjbG9jawotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfYWx3X29uLCAgICAgICAgICAgICAgICAgLy8gTm90LWdhdGVkIENTUiBjbG9jawotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gU09DIHNpZ25hbHMKLSAgICAvLyBJUlEKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9pcnFfZXh0X2ksICAgICAgICAgIC8vIEV4dGVybmFsIGludGVycnVwdCByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJjc3JfaXJxX3NvZnRfaSwgICAgICAgICAvLyBTb2Z0d2FyZSBpbnRlcnJ1cHQgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MyY3NyX2lycV9tdGltZXJfaSwgICAgICAgLy8gRXh0ZXJuYWwgdGltZXIgaW50ZXJydXB0IHJlcXVlc3QKLQotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICBpbnB1dCAgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9tdGltZXJfdmFsX2ksICAgICAgIC8vIEV4dGVybmFsIHRpbWVyIHZhbHVlCi0KLSAgICAvLyBNSEFSVElEIGZ1c2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9mdXNlX21oYXJ0aWRfaSwgICAgIC8vIE1IQVJUSUQgZnVzZQotCi0gICAgLy8gQ1NSIDwtPiBFWFUgcmVhZC93cml0ZSBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9yX3JlcV9pLCAgICAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFkZHJlc3MKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgZXh1MmNzcl9yd19hZGRyX2ksICAgICAgICAgIC8vIENTUiByZWFkIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9yX2RhdGFfbywgICAgICAgICAgIC8vIENTUiByZWFkIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcV9pLCAgICAgICAgICAgIC8vIENTUiB3cml0ZSByZXF1ZXN0Ci0gICAgaW5wdXQgICB0eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19jbWRfaSwgICAgICAgICAgICAvLyBDU1Igd3JpdGUgY29tbWFuZAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3dfZGF0YV9pLCAgICAgICAgICAgLy8gQ1NSIHdyaXRlIGRhdGEKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9yd19leGNfbywgICAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFjY2VzcyBleGNlcHRpb24KLQotICAgIC8vIENTUiA8LT4gRVhVIGV2ZW50IGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfaXJxX2ksICAgICAgICAgLy8gVGFrZSBJUlEgdHJhcAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfZXhjX2ksICAgICAgICAgLy8gVGFrZSBleGNlcHRpb24gdHJhcAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX21yZXRfdXBkYXRlX2ksICAgICAgLy8gTVJFVCB1cGRhdGUgQ1NSCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF9pbnN0cl9pLCAgICAgICAvLyBNUkVUIGluc3RydWN0aW9uCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICAgICAgICAgZXh1MmNzcl9leGNfY29kZV9pLCAgICAgICAgIC8vIEV4Y2VwdGlvbiBjb2RlIChzZWUgc2NyMV9hcmNoX3R5cGVzLnN2aCkgLSBjcC43Ci0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdHJhcF92YWxfaSwgICAgICAgICAvLyBUcmFwIHZhbHVlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfaXJxX28sICAgICAgICAgICAgICAvLyBJUlEgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lwX2llX28sICAgICAgICAgICAgLy8gU29tZSBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfbXN0YXR1c19taWVfdXBfbywgICAvLyBNU1RBVFVTIG9yIE1JRSB1cGRhdGUgaW4gdGhlIGN1cnJlbnQgY3ljbGUKLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIC8vIENTUiA8LT4gSVBJQyBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfcl9yZXFfbywgICAgICAgICAgIC8vIElQSUMgcmVhZCByZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dfcmVxX28sICAgICAgICAgICAvLyBJUElDIHdyaXRlIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfYWRkcl9vLCAgICAgICAgICAgIC8vIElQSUMgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY193ZGF0YV9vLCAgICAgICAgICAgLy8gSVBJQyB3cml0ZSBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX2ksICAgICAgICAgICAvLyBJUElDIHJlYWQgZGF0YQotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBDU1IgPC0+IEhEVSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9yZXFfbywgICAgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gSERVCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfY21kX28sICAgICAgICAgICAgICAvLyBIRFUgY29tbWFuZAotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgtMTowXSAgICBjc3IyaGR1X2FkZHJfbywgICAgICAgICAgICAgLy8gSERVIGFkZHJlc3MKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV93ZGF0YV9vLCAgICAgICAgICAgIC8vIEhEVSB3cml0ZSBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmRhdGFfaSwgICAgICAgICAgICAvLyBIRFUgcmVhZCBkYXRhCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmVzcF9pLCAgICAgICAgICAgICAvLyBIRFUgcmVzcG9uc2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmNzcl9ub19jb21taXRfaSwgICAgICAgIC8vIEZvcmJpZCBpbnN0cnVjdGlvbiBjb21taXRtZW50Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgLy8gQ1NSIDwtPiBURFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfcmVxX28sICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHRvIFREVQotICAgIG91dHB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X2NtZF9vLCAgICAgICAgICAgICAgLy8gVERVIGNvbW1hbmQKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgICAgICAgY3NyMnRkdV9hZGRyX28sICAgICAgICAgICAgIC8vIFREVSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfd2RhdGFfbywgICAgICAgICAgICAvLyBURFUgd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX2ksICAgICAgICAgICAgLy8gVERVIHJlYWQgZGF0YQotICAgIGlucHV0ICAgdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3Jlc3BfaSwgICAgICAgICAgICAgLy8gVERVIHJlc3BvbnNlCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotICAgIC8vIENTUiA8LT4gRVhVIFBDIGludGVyZmFjZQotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX2luc3RyZXRfbm9fZXhjX2ksICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aG91dCBleGNlcHRpb24pCi1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9wY19jdXJyX2ksICAgICAgICAgIC8vIEN1cnJlbnQgUEMKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9wY19uZXh0X2ksICAgICAgICAgIC8vIE5leHQgUEMKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9uZXdfcGNfbyAgICAgICAgICAgIC8vIEV4Y2VwdGlvbi9JUlEvTVJFVCBuZXcgUEMKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9SVkNfRVhUCi0gICAgbG9jYWxwYXJhbSBQQ19MU0IgPSAxOwotYGVsc2UKLSAgICBsb2NhbHBhcmFtIFBDX0xTQiA9IDI7Ci1gZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIE1hY2hpbmUgVHJhcCBTZXR1cCByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIE1TVEFUVVMgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c191cGQ7ICAgICAgICAvLyBNU1RBVFVTIHVwZGF0ZSBlbmFibGUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1czsgICAgICAgICAgICAvLyBBZ2dyZWdhdGVkIE1TVEFUVVMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfZmY7ICAgICAvLyBNU1RBVFVTOiBHbG9iYWwgaW50ZXJydXB0IGVuYWJsZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tc3RhdHVzX21pZV9uZXh0OyAgIC8vIE1TVEFUVVM6IEdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIG5leHQgdmFsdWUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX2ZmOyAgICAvLyBNU1RBVFVTOiBHbG9iYWwgaW50ZXJydXB0IGVuYWJsZSBwcmlvciB0byB0aGUgdHJhcAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tc3RhdHVzX21waWVfbmV4dDsgIC8vIE1TVEFUVVM6IEdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIHByaW9yIHRvIHRoZSB0cmFwIG5leHQgdmFsdWUKLQotLy8gTUlFIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pZV91cGQ7ICAgICAgICAgICAgLy8gTUlFIHVwZGF0ZSBlbmFibGUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWllOyAgICAgICAgICAgICAgICAvLyBBZ2dyZWdhdGVkIE1JRQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taWVfbXRpZV9mZjsgICAgICAgIC8vIE1JRTogTWFjaGluZSB0aW1lciBpbnRlcnJ1cHQgZW5hYmxlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pZV9tZWllX2ZmOyAgICAgICAgLy8gTUlFOiBNYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWllX21zaWVfZmY7ICAgICAgICAvLyBNSUU6IE1hY2hpbmUgc29mdHdhcmUgaW50ZXJydXB0IGVuYWJsZQotCi0vLyBNVFZFQyByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZlY191cGQ7ICAgICAgICAgIC8vIE1UVkVDIHVwZGF0ZSBlbmFibGUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6U0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFNdICBjc3JfbXR2ZWNfYmFzZTsgICAgICAgICAvLyBNVFZFQzogQmFzZSAodXBwZXIgMjYgYml0cykKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfbW9kZTsgICAgICAgICAvLyBNVFZFQzogTW9kZSAoMC1kaXJlY3QsIDEtdmVjdG9yZWQpICh3aXJlZCkKLWBpZmRlZiBTQ1IxX01UVkVDX01PREVfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfbW9kZV9mZjsgICAgICAvLyBNVFZFQzogTW9kZSAoMC1kaXJlY3QsIDEtdmVjdG9yZWQpIChyZWdpc3RlcmVkKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZlY19tb2RlX3ZlY3Q7Ci1gZW5kaWYKLQotLy8gTWFjaGluZSBUcmFwIEhhbmRsaW5nIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTVNDUkFUQ0ggcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXNjcmF0Y2hfdXBkOyAgICAgICAvLyBNU0NSQVRDSCB1cGRhdGUgZW5hYmxlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zY3JhdGNoX2ZmOyAgICAgICAgLy8gTVNDUkFUQ0gKLQotLy8gTUVQQyByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjX3VwZDsgICAgICAgICAgIC8vIE1FUEMgdXBkYXRlIGVuYWJsZQotbG9naWMgW2BTQ1IxX1hMRU4tMTpQQ19MU0JdICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjX2ZmOyAgICAgICAgICAgIC8vIE1FUEMgcmVnaXN0ZXJlZCB2YWx1ZQotbG9naWMgW2BTQ1IxX1hMRU4tMTpQQ19MU0JdICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjX25leHQ7ICAgICAgICAgIC8vIE1FUEMgbmV4dCB2YWx1ZQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjOyAgICAgICAgICAgICAgIC8vIE1FUEMgcmVnaXN0ZXJlZCB2YWx1ZSBleHRlbmRlZCB0byBYTEVOCi0KLS8vIE1DQVVTRSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfdXBkOyAgICAgICAgIC8vIE1DQVVTRSB1cGRhdGUgZW5hYmxlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9pX2ZmOyAgICAgICAgLy8gTUNBVVNFOiBJbnRlcnJ1cHQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNhdXNlX2lfbmV4dDsgICAgICAvLyBNQ0FVU0U6IEludGVycnVwdCBuZXh0IHZhbHVlCi1sb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9lY19mZjsgICAgICAgLy8gTUNBVVNFOiBFeGNlcHRpb24gY29kZSAtIGNwLjcKLWxvZ2ljIFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSAgICAgICAgICAgICAgICAgICBjc3JfbWNhdXNlX2VjX25leHQ7ICAgICAvLyBNQ0FVU0U6IEV4Y2VwdGlvbiBjb2RlIG5leHQgdmFsdWUgLSBjcC43Ci1sb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9lY19uZXc7ICAgICAgLy8gTUNBVVNFOiBFeGNlcHRpb24gY29kZSBuZXcgdmFsdWUgKElSUXMpIC0gY3AuNwotCi0vLyBNVFZBTCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZhbF91cGQ7ICAgICAgICAgIC8vIE1UVkFMIHVwZGF0ZSBlbmFibGUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2YWxfZmY7ICAgICAgICAgICAvLyBNVFZBTCByZWdpc3RlcmVkIHZhbHVlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX210dmFsX25leHQ7ICAgICAgICAgLy8gTVRWQUwgbmV4dCB2YWx1ZQotCi0vLyBNSVAgcmVnaXN0ZXIKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWlwOyAgICAgICAgICAgICAgICAvLyBBZ2dyZWdhdGVkIE1JUAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taXBfbXRpcDsgICAgICAgICAgIC8vIE1JUDogTWFjaGluZSB0aW1lciBpbnRlcnJ1cHQgcGVuZGluZwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taXBfbWVpcDsgICAgICAgICAgIC8vIE1JUDogTWFjaGluZSBleHRlcm5hbCBpbnRlcnJ1cHQgcGVuZGluZwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taXBfbXNpcDsgICAgICAgICAgIC8vIE1JUDogTWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgcGVuZGluZwotCi0vLyBNYWNoaW5lIENvdW50ZXJzL1RpbWVycyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLS8vIE1JTlNUUkVUIHJlZ2lzdGVyCi1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X3VwZDsKLWxvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjBdICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2xvX2luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfbG9fdXBkOwotbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9sb19mZjsKLWxvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfbG9fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfaGlfaW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV91cGQ7Ci1sb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2hpX2ZmOwotbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV9uZXh0OwotbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV9uZXc7Ci0KLS8vIE1DWUNMRSByZWdpc3RlcgotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfdXBkOwotbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgIGNzcl9tY3ljbGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb19pbmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb191cGQ7Ci1sb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb19mZjsKLWxvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWN5Y2xlX2xvX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9pbmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV91cGQ7Ci1sb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9mZjsKLWxvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjhdICAgICAgICAgICAgICAgICBjc3JfbWN5Y2xlX2hpX25leHQ7Ci1sb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9uZXc7Ci1gZW5kaWYgLy8gflNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLS8vIE5vbi1zdGFuZGFyZCBDU1JzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNQ09VTlRFTiByZWdpc3RlcgotYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvdW50ZW5fdXBkOyAgICAgICAvLyBNQ09VTlRFTiB1cGRhdGUgZW5hYmxlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb3VudGVuOyAgICAgICAgICAgLy8gQWdncmVnYXRlZCBNQ09VTlRFTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY291bnRlbl9jeV9mZjsgICAgIC8vIEN5Y2xlIGNvdW50IGVuYWJsZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY291bnRlbl9pcl9mZjsgICAgIC8vIEluc3RyZXQgY291bnQgZW5hYmxlCi1gZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotCi0vLyBDU1IgcmVhZC93cml0ZSBpL2YKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfcl9kYXRhOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl93X2RhdGE7Ci0KLS8vIEV2ZW50cyAoZXhjZXB0aW9ucywgaW50ZXJydXB0cywgbXJldCkgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRXZlbnQgZmxhZ3MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX2V4YzsgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgZXhjZXB0aW9uIHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX2lycTsgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgSVJRIHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX21yZXQ7ICAgICAgICAgICAgIC8vIE1SRVQgaW5zdHJ1Y3Rpb24KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX2lycV9ubXJldDsgICAgICAgIC8vIElSUSB0cmFwIHdpdGhvdXQgTVJFVCBpbnN0cnVjdGlvbgotCi0vLyBJbnRlcnJ1cHQgcGVuZGluZyAmIGVuYWJsZSBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2VpcnFfcG5kX2VuOyAgICAvLyBFeHRlcm5hbCBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3NpcnFfcG5kX2VuOyAgICAvLyBTb2Z0d2FyZSBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3RpcnFfcG5kX2VuOyAgICAvLyBUaW1lciBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCi0KLS8vIEV4Y2VwdGlvbiBmbGFncwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl93X2V4YzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfcl9leGM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3JlcV9ub19leGM7Ci0KLS8vIFJlcXVlc3RzIHRvIG90aGVyIG1vZHVsZXMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaXBpY19yZXE7Ci1gaWZkZWYgU0NSMV9EQkdfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaGR1X3JlcTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotYGlmZGVmIFNDUjFfVERVX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Jya21fcmVxOwotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFdmVudHMgKElSUSwgRVhDLCBNUkVUKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRXZlbnRzIHByaW9yaXR5Ci1hc3NpZ24gZV9leGMgICAgPSBleHUyY3NyX3Rha2VfZXhjX2kKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICYgfmhkdTJjc3Jfbm9fY29tbWl0X2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBlX2lycSAgICA9IGV4dTJjc3JfdGFrZV9pcnFfaSAmIH5leHUyY3NyX3Rha2VfZXhjX2kKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICYgfmhkdTJjc3Jfbm9fY29tbWl0X2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBlX21yZXQgICA9IGV4dTJjc3JfbXJldF91cGRhdGVfaQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgJiB+aGR1MmNzcl9ub19jb21taXRfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgOwotYXNzaWduIGVfaXJxX25tcmV0ID0gZV9pcnEgJiB+ZXh1MmNzcl9tcmV0X2luc3RyX2k7Ci0KLS8vIElSUSBwZW5kaW5nICYgZW5hYmxlIHNpZ25hbHMKLWFzc2lnbiBjc3JfZWlycV9wbmRfZW4gPSBjc3JfbWlwX21laXAgJiBjc3JfbWllX21laWVfZmY7Ci1hc3NpZ24gY3NyX3NpcnFfcG5kX2VuID0gY3NyX21pcF9tc2lwICYgY3NyX21pZV9tc2llX2ZmOwotYXNzaWduIGNzcl90aXJxX3BuZF9lbiA9IGNzcl9taXBfbXRpcCAmIGNzcl9taWVfbXRpZV9mZjsKLQotLy8gSVJRIGV4Y2VwdGlvbiBjb2RlcyBwcmlvcml0eQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBjc3JfZWlycV9wbmRfZW46IGNzcl9tY2F1c2VfZWNfbmV3ID0gU0NSMV9FWENfQ09ERV9JUlFfTV9FWFRFUk5BTDsgLy8gY3AuNwotICAgICAgICBjc3Jfc2lycV9wbmRfZW46IGNzcl9tY2F1c2VfZWNfbmV3ID0gU0NSMV9FWENfQ09ERV9JUlFfTV9TT0ZUV0FSRTsgLy8gY3AuNwotICAgICAgICBjc3JfdGlycV9wbmRfZW46IGNzcl9tY2F1c2VfZWNfbmV3ID0gU0NSMV9FWENfQ09ERV9JUlFfTV9USU1FUjsgLy8gY3AuNwotICAgICAgICBkZWZhdWx0ICAgICAgICA6IGNzcl9tY2F1c2VfZWNfbmV3ID0gU0NSMV9FWENfQ09ERV9JUlFfTV9FWFRFUk5BTDsgLy8gY3AuNwotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gZXh1X3JlcV9ub19leGMgPSAoKGV4dTJjc3Jfcl9yZXFfaSAmIH5jc3Jfcl9leGMpCi0gICAgICAgICAgICAgICAgICAgICAgfCAgKGV4dTJjc3Jfd19yZXFfaSAmIH5jc3Jfd19leGMpKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiByZWFkL3dyaXRlIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ1NSIHJlYWQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX3JfZGF0YSAgICAgPSAnMDsKLSAgICBjc3Jfcl9leGMgICAgICA9IDEnYjA7Ci1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBjc3JfaGR1X3JlcSAgICA9IDEnYjA7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIGNzcl9icmttX3JlcSAgID0gMSdiMDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIGNzcjJpcGljX3JfcmVxX28gPSAxJ2IwOwotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi0gICAgY2FzZXogKGV4dTJjc3JfcndfYWRkcl9pKQotICAgICAgICAvLyBNYWNoaW5lIEluZm9ybWF0aW9uIFJlZ2lzdGVycyAocmVhZC1vbmx5KQotICAgICAgICBTQ1IxX0NTUl9BRERSX01WRU5ET1JJRCA6IGNzcl9yX2RhdGEgICAgPSBTQ1IxX0NTUl9NVkVORE9SSUQ7Ci0gICAgICAgIFNDUjFfQ1NSX0FERFJfTUFSQ0hJRCAgIDogY3NyX3JfZGF0YSAgICA9IFNDUjFfQ1NSX01BUkNISUQ7Ci0gICAgICAgIFNDUjFfQ1NSX0FERFJfTUlNUElEICAgIDogY3NyX3JfZGF0YSAgICA9IFNDUjFfQ1NSX01JTVBJRDsKLSAgICAgICAgU0NSMV9DU1JfQUREUl9NSEFSVElEICAgOiBjc3Jfcl9kYXRhICAgID0gc29jMmNzcl9mdXNlX21oYXJ0aWRfaTsKLQotICAgICAgICAvLyBNYWNoaW5lIFRyYXAgU2V0dXAgKHJlYWQtd3JpdGUpCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfTVNUQVRVUyAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tc3RhdHVzOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01JU0EgICAgICA6IGNzcl9yX2RhdGEgICAgPSBTQ1IxX0NTUl9NSVNBOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01JRSAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWllOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01UVkVDICAgICA6IGNzcl9yX2RhdGEgICAgPSB7Y3NyX210dmVjX2Jhc2UsIDQnZDAsIDInKGNzcl9tdHZlY19tb2RlKX07Ci0KLSAgICAgICAgLy8gTWFjaGluZSBUcmFwIEhhbmRsaW5nIChyZWFkLXdyaXRlKQotICAgICAgICBTQ1IxX0NTUl9BRERSX01TQ1JBVENIICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbXNjcmF0Y2hfZmY7Ci0gICAgICAgIFNDUjFfQ1NSX0FERFJfTUVQQyAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tZXBjOwotICAgICAgICBTQ1IxX0NTUl9BRERSX01DQVVTRSAgICA6IGNzcl9yX2RhdGEgICAgPSB7Y3NyX21jYXVzZV9pX2ZmLCAoYFNDUjFfWExFTi0xKScoY3NyX21jYXVzZV9lY19mZil9OwotICAgICAgICBTQ1IxX0NTUl9BRERSX01UVkFMICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbXR2YWxfZmY7Ci0gICAgICAgIFNDUjFfQ1NSX0FERFJfTUlQICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9taXA7Ci0KLSAgICAgICAgLy8gVXNlciBDb3VudGVycy9UaW1lcnMgKHJlYWQtb25seSkKLSAgICAgICAge1NDUjFfQ1NSX0FERFJfSFBNQ09VTlRFUl9NQVNLLCA1J2I/Pz8/P30gICA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQotICAgICAgICAgICAgICAgIDUnZDEgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IHNvYzJjc3JfbXRpbWVyX3ZhbF9pWzMxOjBdOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgIDUnZDAgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tY3ljbGVbMzE6MF07Ci0gICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21pbnN0cmV0WzMxOjBdOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gMAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLQotICAgICAgICB7U0NSMV9DU1JfQUREUl9IUE1DT1VOVEVSSF9NQVNLLCA1J2I/Pz8/P30gIDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCi0gICAgICAgICAgICAgICAgNSdkMSAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gc29jMmNzcl9tdGltZXJfdmFsX2lbNjM6MzJdOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgIDUnZDAgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tY3ljbGVbNjM6MzJdOwotICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9taW5zdHJldFs2MzozMl07Ci1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAwCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotCi0gICAgICAgIC8vIE1hY2hpbmUgQ291bnRlcnMvVGltZXJzIChyZWFkLXdyaXRlKQotICAgICAgICB7U0NSMV9DU1JfQUREUl9NSFBNQ09VTlRFUl9NQVNLLCA1J2I/Pz8/P30gIDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCi0gICAgICAgICAgICAgICAgNSdkMSAgICAgICAgOiBjc3Jfcl9leGMgICAgID0gZXh1MmNzcl9yX3JlcV9pOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgIDUnZDAgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tY3ljbGVbMzE6MF07Ci0gICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21pbnN0cmV0WzMxOjBdOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gMAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLQotICAgICAgICB7U0NSMV9DU1JfQUREUl9NSFBNQ09VTlRFUkhfTUFTSywgNSdiPz8/Pz99IDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCi0gICAgICAgICAgICAgICAgNSdkMSAgICAgICAgOiBjc3Jfcl9leGMgICAgID0gZXh1MmNzcl9yX3JlcV9pOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgIDUnZDAgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tY3ljbGVbNjM6MzJdOwotICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9taW5zdHJldFs2MzozMl07Ci1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAwCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotCi0gICAgICAgIHtTQ1IxX0NTUl9BRERSX01IUE1FVkVOVF9NQVNLLCA1J2I/Pz8/P30gICAgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKLSAgICAgICAgICAgICAgICA1J2QwLAotICAgICAgICAgICAgICAgIDUnZDEsCi0gICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3Jfcl9leGMgPSBleHUyY3NyX3JfcmVxX2k7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gMAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLQotYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLSAgICAgICAgU0NSMV9DU1JfQUREUl9NQ09VTlRFTiAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tY291bnRlbjsKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAgICAgLy8gSVBJQyByZWdpc3RlcnMKLSAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0NJU1YsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19DSUNTUiwKLSAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lQUiwKLSAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lTVlIsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19FT0ksCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19TT0ksCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JRFgsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JQ1NSICAgICA6IGJlZ2luCi0gICAgICAgICAgICBjc3Jfcl9kYXRhICAgICAgID0gaXBpYzJjc3JfcmRhdGFfaTsKLSAgICAgICAgICAgIGNzcjJpcGljX3JfcmVxX28gPSBleHUyY3NyX3JfcmVxX2k7Ci0gICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgLy8gSERVIHJlZ2lzdGVycwotICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EQ1NSLAotICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EUEMsCi0gICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMCwKLSAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRFNDUkFUQ0gxIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9oZHVfcmVxID0gMSdiMTsKLSAgICAgICAgICAgIGNzcl9yX2RhdGEgID0gaGR1MmNzcl9yZGF0YV9pOwotICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgLy8gVERVIHJlZ2lzdGVycwotICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9UU0VMRUNULAotICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9UREFUQTEsCi0gICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1REQVRBMiwKLSAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVElORk86IGJlZ2luCi0gICAgICAgICAgICBjc3JfYnJrbV9yZXEgICAgPSAxJ2IxOwotICAgICAgICAgICAgY3NyX3JfZGF0YSAgICAgID0gdGR1MmNzcl9yZGF0YV9pOwotICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9yX2V4YyAgID0gZXh1MmNzcl9yX3JlcV9pOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlIC8vIGV4dTJjc3JfcndfYWRkcl9pCi1lbmQKLQotYXNzaWduIGNzcjJleHVfcl9kYXRhX28gPSBjc3Jfcl9kYXRhOwotCi0vLyBDU1Igd3JpdGUgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoZXh1MmNzcl93X2NtZF9pKQotICAgICAgICBTQ1IxX0NTUl9DTURfV1JJVEUgIDogY3NyX3dfZGF0YSA9ICBleHUyY3NyX3dfZGF0YV9pOwotICAgICAgICBTQ1IxX0NTUl9DTURfU0VUICAgIDogY3NyX3dfZGF0YSA9ICBleHUyY3NyX3dfZGF0YV9pIHwgY3NyX3JfZGF0YTsKLSAgICAgICAgU0NSMV9DU1JfQ01EX0NMRUFSICA6IGNzcl93X2RhdGEgPSB+ZXh1MmNzcl93X2RhdGFfaSAmIGNzcl9yX2RhdGE7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBjc3Jfd19kYXRhID0gJzA7Ci0gICAgZW5kY2FzZQotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX21zdGF0dXNfdXBkICAgICA9IDEnYjA7Ci0gICAgY3NyX21pZV91cGQgICAgICAgICA9IDEnYjA7Ci0gICAgY3NyX21zY3JhdGNoX3VwZCAgICA9IDEnYjA7Ci0gICAgY3NyX21lcGNfdXBkICAgICAgICA9IDEnYjA7Ci0gICAgY3NyX21jYXVzZV91cGQgICAgICA9IDEnYjA7Ci0gICAgY3NyX210dmFsX3VwZCAgICAgICA9IDEnYjA7Ci0gICAgY3NyX210dmVjX3VwZCAgICAgICA9IDEnYjA7Ci0KLWBpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICBjc3JfbWN5Y2xlX3VwZCAgICAgID0gMidiMDA7Ci0gICAgY3NyX21pbnN0cmV0X3VwZCAgICA9IDInYjAwOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0gICAgY3NyX21jb3VudGVuX3VwZCAgICA9IDEnYjA7Ci1gZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotICAgIGNzcl93X2V4YyAgICAgICAgICAgPSAxJ2IwOwotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIGNzcjJpcGljX3dfcmVxX28gICAgPSAxJ2IwOwotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi0gICAgaWYgKGV4dTJjc3Jfd19yZXFfaSkgYmVnaW4KLSAgICAgICAgY2FzZXogKGV4dTJjc3JfcndfYWRkcl9pKQotICAgICAgICAgICAgLy8gTWFjaGluZSBUcmFwIFNldHVwIChyZWFkLXdyaXRlKQotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NU1RBVFVTICAgOiBjc3JfbXN0YXR1c191cGQgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01JU0EgICAgICA6IGJlZ2luIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NSUUgICAgICAgOiBjc3JfbWllX3VwZCAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01UVkVDICAgICA6IGNzcl9tdHZlY191cGQgICAgID0gMSdiMTsKLQotICAgICAgICAgICAgLy8gTWFjaGluZSBUcmFwIEhhbmRsaW5nIChyZWFkLXdyaXRlKQotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NU0NSQVRDSCAgOiBjc3JfbXNjcmF0Y2hfdXBkICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01FUEMgICAgICA6IGNzcl9tZXBjX3VwZCAgICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUNBVVNFICAgIDogY3NyX21jYXVzZV91cGQgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NVFZBTCAgICAgOiBjc3JfbXR2YWxfdXBkICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01JUCAgICAgICA6IGJlZ2luIGVuZAotCi0gICAgICAgICAgICAvLyBNYWNoaW5lIENvdW50ZXJzL1RpbWVycyAocmVhZC13cml0ZSkKLSAgICAgICAgICAgIHtTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSX01BU0ssIDUnYj8/Pz8/fSAgOiBiZWdpbgotICAgICAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCi0gICAgICAgICAgICAgICAgICAgIDUnZDEgICAgICAgIDogY3NyX3dfZXhjICAgICAgICAgICA9IDEnYjE7Ci1gaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgICAgIDUnZDAgICAgICAgIDogY3NyX21jeWNsZV91cGRbMF0gICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX21pbnN0cmV0X3VwZFswXSA9IDEnYjE7Ci1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgIGVuZAotCi0gICAgICAgICAgICB7U0NSMV9DU1JfQUREUl9NSFBNQ09VTlRFUkhfTUFTSywgNSdiPz8/Pz99IDogYmVnaW4KLSAgICAgICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQotICAgICAgICAgICAgICAgICAgICA1J2QxICAgICAgICA6IGNzcl93X2V4YyAgICAgICAgICAgPSAxJ2IxOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICAgICAgICAgICAgICAgICA1J2QwICAgICAgICA6IGNzcl9tY3ljbGVfdXBkWzFdICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9taW5zdHJldF91cGRbMV0gPSAxJ2IxOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAge1NDUjFfQ1NSX0FERFJfTUhQTUVWRU5UX01BU0ssIDUnYj8/Pz8/fSAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKLSAgICAgICAgICAgICAgICAgICAgNSdkMCwKLSAgICAgICAgICAgICAgICAgICAgNSdkMSwKLSAgICAgICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3Jfd19leGMgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01DT1VOVEVOICAgICAgOiBjc3JfbWNvdW50ZW5fdXBkID0gMSdiMTsKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAgICAgICAgIC8vIElQSUMgcmVnaXN0ZXJzCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfQ0lDU1IsCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSVBSLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0VPSSwKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19TT0ksCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSURYLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lDU1IgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBjc3IyaXBpY193X3JlcV9vICA9IDEnYjE7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19DSVNWLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lTVlIgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24gb24gd3JpdGUKLSAgICAgICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RDU1IsCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EUEMsCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDAsCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDEgOiBiZWdpbgotICAgICAgICAgICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAvLyBURFUgcmVnaXN0ZXJzCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9UU0VMRUNULAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVERBVEExLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVERBVEEyLAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVElORk86IGJlZ2luCi0gICAgICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICBjc3Jfd19leGMgICA9IDEnYjE7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNYWNoaW5lIFRyYXAgU2V0dXAgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBSZWdpc3RlcnM6Ci0gLy8gLSBNU1RBVFVTCi0gLy8gLSBNSUUKLSAvLyAtIE1UVkVDCi0vLwotCi0vLyBNU1RBVFVTIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc2lzdHMgb2YgMiBiaXRzIC0gY3VycmVudCBhbmQgcHJldmlvdXMgKGJlZm9yZSB0cmFwKSBnbG9iYWwgaW50ZXJydXB0Ci0vLyBlbmFibGUgYml0cyAoTUlFICYgTVBJRSkKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21zdGF0dXNfbWllX2ZmICA8PSBTQ1IxX0NTUl9NU1RBVFVTX01JRV9SU1RfVkFMOwotICAgICAgICBjc3JfbXN0YXR1c19tcGllX2ZmIDw9IFNDUjFfQ1NSX01TVEFUVVNfTVBJRV9SU1RfVkFMOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNzcl9tc3RhdHVzX21pZV9mZiAgPD0gY3NyX21zdGF0dXNfbWllX25leHQ7Ci0gICAgICAgIGNzcl9tc3RhdHVzX21waWVfZmYgPD0gY3NyX21zdGF0dXNfbXBpZV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoMSdiMSkKLSAgICAgICAgZV9leGMsIGVfaXJxICA6IGJlZ2luCi0gICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfbmV4dCAgPSAxJ2IwOwotICAgICAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9uZXh0ID0gY3NyX21zdGF0dXNfbWllX2ZmOwotICAgICAgICBlbmQKLSAgICAgICAgZV9tcmV0ICAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfbmV4dCAgPSBjc3JfbXN0YXR1c19tcGllX2ZmOwotICAgICAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9uZXh0ID0gMSdiMTsKLSAgICAgICAgZW5kCi0gICAgICAgIGNzcl9tc3RhdHVzX3VwZDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9tc3RhdHVzX21pZV9uZXh0ICA9IGNzcl93X2RhdGFbU0NSMV9DU1JfTVNUQVRVU19NSUVfT0ZGU0VUXTsKLSAgICAgICAgICAgIGNzcl9tc3RhdHVzX21waWVfbmV4dCA9IGNzcl93X2RhdGFbU0NSMV9DU1JfTVNUQVRVU19NUElFX09GRlNFVF07Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0ICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9tc3RhdHVzX21pZV9uZXh0ICA9IGNzcl9tc3RhdHVzX21pZV9mZjsKLSAgICAgICAgICAgIGNzcl9tc3RhdHVzX21waWVfbmV4dCA9IGNzcl9tc3RhdHVzX21waWVfZmY7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNzcl9tc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMDsKLSAgICBjc3JfbXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01JRV9PRkZTRVRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY3NyX21zdGF0dXNfbWllX2ZmOwotICAgIGNzcl9tc3RhdHVzW1NDUjFfQ1NSX01TVEFUVVNfTVBJRV9PRkZTRVRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjc3JfbXN0YXR1c19tcGllX2ZmOwotICAgIGNzcl9tc3RhdHVzW1NDUjFfQ1NSX01TVEFUVVNfTVBQX09GRlNFVCsxOlNDUjFfQ1NSX01TVEFUVVNfTVBQX09GRlNFVF0gPSBTQ1IxX0NTUl9NU1RBVFVTX01QUDsKLWVuZAotCi0vLyBNSUUgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb250YWlucyBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKGV4dGVybmFsLCBzb2Z0d2FyZSwgdGltZXIgSVJRcykKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21pZV9tdGllX2ZmIDw9IFNDUjFfQ1NSX01JRV9NVElFX1JTVF9WQUw7Ci0gICAgICAgIGNzcl9taWVfbWVpZV9mZiA8PSBTQ1IxX0NTUl9NSUVfTUVJRV9SU1RfVkFMOwotICAgICAgICBjc3JfbWllX21zaWVfZmYgPD0gU0NSMV9DU1JfTUlFX01TSUVfUlNUX1ZBTDsKLSAgICBlbmQgZWxzZSBpZiAoY3NyX21pZV91cGQpIGJlZ2luCi0gICAgICAgIGNzcl9taWVfbXRpZV9mZiA8PSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01JRV9NVElFX09GRlNFVF07Ci0gICAgICAgIGNzcl9taWVfbWVpZV9mZiA8PSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01JRV9NRUlFX09GRlNFVF07Ci0gICAgICAgIGNzcl9taWVfbXNpZV9mZiA8PSBjc3Jfd19kYXRhW1NDUjFfQ1NSX01JRV9NU0lFX09GRlNFVF07Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjc3JfbWllICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMDsKLSAgICBjc3JfbWllW1NDUjFfQ1NSX01JRV9NU0lFX09GRlNFVF0gPSBjc3JfbWllX21zaWVfZmY7Ci0gICAgY3NyX21pZVtTQ1IxX0NTUl9NSUVfTVRJRV9PRkZTRVRdID0gY3NyX21pZV9tdGllX2ZmOwotICAgIGNzcl9taWVbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXSA9IGNzcl9taWVfbWVpZV9mZjsKLWVuZAotCi0vLyBNVFZFQyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhvbGRzIHRyYXAgdmVjdG9yIGNvbmZpZ3VhdGlvbi4gQ29uc2lzdHMgb2YgYmFzZSBhbmQgbW9kZSBwYXJ0cwotCi0vLyBNVFZFQyBCQVNFIHBhcnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0cmFwIHZlY3RvciBiYXNlIGFkZHJlc3MKLWdlbmVyYXRlCi0gICAgLy8gQWxsIGJpdHMgb2YgTVRWRUMgYmFzZSBhcmUgUmVhZC1Pbmx5IGFuZCBoYXJkd2lyZWQgdG8gMCdzCi0gICAgaWYgKFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID09IDApIGJlZ2luIDogbXR2ZWNfYmFzZV9ybwotCi0gICAgICAgIGFzc2lnbiBjc3JfbXR2ZWNfYmFzZSAgID0gU0NSMV9DU1JfTVRWRUNfQkFTRV9SU1RfVkFMOwotCi0gICAgLy8gQWxsIGJpdHMgb2YgTVRWRUMgYmFzZSBhcmUgUlcKLSAgICBlbmQgZWxzZSBpZiAoU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPT0gU0NSMV9DU1JfTVRWRUNfQkFTRV9WQUxfQklUUykgYmVnaW4gOiBtdHZlY19iYXNlX3J3Ci0KLSAgICAgICAgYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgICAgICAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICAgICAgICAgIGNzcl9tdHZlY19iYXNlICA8PSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JTVF9WQUw7Ci0gICAgICAgICAgICBlbmQgZWxzZSBpZiAoY3NyX210dmVjX3VwZCkgYmVnaW4KLSAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfYmFzZSAgPD0gY3NyX3dfZGF0YVtgU0NSMV9YTEVOLTE6U0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFNdOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgLy8gTG93ZXIgYml0cyBvZiBNVFZFQyBiYXNlIGFyZSBSTywgaGlnaGVyIC0gUlcKLSAgICBlbmQgZWxzZSBiZWdpbiA6IG10dmVjX2Jhc2Vfcm9fcncKLQotICAgICAgICBsb2dpYyBbKGBTQ1IxX1hMRU4tMSk6KGBTQ1IxX1hMRU4tU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMpXSAgIGNzcl9tdHZlY19iYXNlX3JlZzsKLQotICAgICAgICBhbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICAgICAgICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgICAgICAgICAgY3NyX210dmVjX2Jhc2VfcmVnIDw9IFNDUjFfQ1NSX01UVkVDX0JBU0VfUlNUX1ZBTFsoYFNDUjFfWExFTi0xKS06U0NSMV9NVFZFQ19CQVNFX1dSX0JJVFNdIDsKLSAgICAgICAgICAgIGVuZCBlbHNlIGlmIChjc3JfbXR2ZWNfdXBkKSBiZWdpbgotICAgICAgICAgICAgICAgIGNzcl9tdHZlY19iYXNlX3JlZyA8PSBjc3Jfd19kYXRhWyhgU0NSMV9YTEVOLTEpLTpTQ1IxX01UVkVDX0JBU0VfV1JfQklUU107Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgYXNzaWduIGNzcl9tdHZlY19iYXNlID0ge2Nzcl9tdHZlY19iYXNlX3JlZywgU0NSMV9DU1JfTVRWRUNfQkFTRV9SU1RfVkFMW1NDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTKzpTQ1IxX0NTUl9NVFZFQ19CQVNFX1JPX0JJVFNdfTsKLSAgICBlbmQKLWVuZGdlbmVyYXRlCi0KLS8vIE1UVkVDIE1PREUgcGFydAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENob29zZXMgYmV0d2VlbiBkaXJlY3QgKGFsbCBleGNlcHRpb25zIHNldCBQQyB0byBCQVNFKSBvciB2ZWN0b3JlZAotLy8gKGFzeW5jaHJvbm91cyBpbnRlcnJ1cHRzIHNldCBQQyB0byBCQVNFKzR4Y2F1c2UpIGludGVycnVwdCBtb2RlcwotCi1gaWZkZWYgU0NSMV9NVFZFQ19NT0RFX0VOCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfbXR2ZWNfbW9kZV9mZiA8PSBTQ1IxX0NTUl9NVFZFQ19NT0RFX0RJUkVDVDsKLSAgICBlbmQgZWxzZSBpZiAoY3NyX210dmVjX3VwZCkgYmVnaW4KLSAgICAgICAgY3NyX210dmVjX21vZGVfZmYgPD0gY3NyX3dfZGF0YVswXTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY3NyX210dmVjX21vZGUgICAgICA9IGNzcl9tdHZlY19tb2RlX2ZmOwotYXNzaWduIGNzcl9tdHZlY19tb2RlX3ZlY3QgPSAoY3NyX210dmVjX21vZGVfZmYgPT0gU0NSMV9DU1JfTVRWRUNfTU9ERV9WRUNUT1JFRCk7Ci1gZWxzZSAvLyBTQ1IxX01UVkVDX01PREVfRU4KLWFzc2lnbiBjc3JfbXR2ZWNfbW9kZSA9IFNDUjFfQ1NSX01UVkVDX01PREVfRElSRUNUOwotYGVuZGlmIC8vIFNDUjFfTVRWRUNfTU9ERV9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFjaGluZSBUcmFwIEhhbmRsaW5nIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gTVNDUkFUQ0gKLSAvLyAtIE1FUEMKLSAvLyAtIE1DQVVTRQotIC8vIC0gTVRWQUwKLSAvLyAtIE1JUAotLy8KLQotLy8gTVNDUkFUQ0ggcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyBhIHBvaW50ZXIgdG8gYSBtYWNoaW5lLW1vZGUgaGFydC1sb2NhbCBjb250ZXh0IHNwYWNlCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9tc2NyYXRjaF9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBpZiAoY3NyX21zY3JhdGNoX3VwZCkgYmVnaW4KLSAgICAgICAgY3NyX21zY3JhdGNoX2ZmIDw9IGNzcl93X2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotLy8gTUVQQyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdoZW4gYSB0cmFwIGlzIHRha2VuIGludG8gTS1tb2RlIHNhdmVzIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgaW5zdHJ1Y3Rpb24gdGhhdAotLy8gd2FzIGludGVycnVwdGVkIG9yIHRoYXQgZW5jb3VudGVyZWQgdGhlIGV4Y2VwdGlvbgotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfbWVwY19mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjc3JfbWVwY19mZiA8PSBjc3JfbWVwY19uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoMSdiMSkKLSAgICAgICAgZV9leGMgICAgICAgOiBjc3JfbWVwY19uZXh0ID0gZXh1MmNzcl9wY19jdXJyX2lbYFNDUjFfWExFTi0xOlBDX0xTQl07Ci0gICAgICAgIGVfaXJxX25tcmV0IDogY3NyX21lcGNfbmV4dCA9IGV4dTJjc3JfcGNfbmV4dF9pW2BTQ1IxX1hMRU4tMTpQQ19MU0JdOwotICAgICAgICBjc3JfbWVwY191cGQ6IGNzcl9tZXBjX25leHQgPSBjc3Jfd19kYXRhW2BTQ1IxX1hMRU4tMTpQQ19MU0JdOwotICAgICAgICBkZWZhdWx0ICAgICA6IGNzcl9tZXBjX25leHQgPSBjc3JfbWVwY19mZjsKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIGFzc2lnbiBjc3JfbWVwYyA9IHtjc3JfbWVwY19mZiwgMSdiMH07Ci1gZWxzZQotICAgIGFzc2lnbiBjc3JfbWVwYyA9IHtjc3JfbWVwY19mZiwgMidiMDB9OwotYGVuZGlmCi0KLS8vIE1DQVVTRSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdoZW4gYSB0cmFwIGlzIHRha2VuIGludG8gTS1tb2RlIHNhdmVzIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBldmVudCB0aGF0IGNhdXNlZAotLy8gdGhlIHRyYXAKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21jYXVzZV9pX2ZmICA8PSAxJ2IwOwotICAgICAgICBjc3JfbWNhdXNlX2VjX2ZmIDw9IFNDUjFfRVhDX0NPREVfUkVTRVQ7IC8vIGNwLjcKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjc3JfbWNhdXNlX2lfZmYgIDw9IGNzcl9tY2F1c2VfaV9uZXh0OwotICAgICAgICBjc3JfbWNhdXNlX2VjX2ZmIDw9IGNzcl9tY2F1c2VfZWNfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGVfZXhjICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgY3NyX21jYXVzZV9pX25leHQgID0gMSdiMDsKLSAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV4dCA9IGV4dTJjc3JfZXhjX2NvZGVfaTsKLSAgICAgICAgZW5kCi0gICAgICAgIGVfaXJxICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgY3NyX21jYXVzZV9pX25leHQgID0gMSdiMTsKLSAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV4dCA9IGNzcl9tY2F1c2VfZWNfbmV3OwotICAgICAgICBlbmQKLSAgICAgICAgY3NyX21jYXVzZV91cGQ6IGJlZ2luCi0gICAgICAgICAgICBjc3JfbWNhdXNlX2lfbmV4dCAgPSBjc3Jfd19kYXRhW2BTQ1IxX1hMRU4tMV07Ci0gICAgICAgICAgICBjc3JfbWNhdXNlX2VjX25leHQgPSBjc3Jfd19kYXRhW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdOyAvLyBjcC43Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0ICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl9tY2F1c2VfaV9uZXh0ICA9IGNzcl9tY2F1c2VfaV9mZjsKLSAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV4dCA9IGNzcl9tY2F1c2VfZWNfZmY7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBNVFZBTCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdoZW4gYSB0cmFwIGlzIHRha2VuIGludG8gTS1tb2RlIGlzIGVpdGhlciBzZXQgdG8gemVybyBvciB3cml0dGVuIHdpdGggZXhjZXB0aW9uLQotLy8gc3BlY2lmaWMgaW5mb3JtYXRpb24KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX210dmFsX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNzcl9tdHZhbF9mZiA8PSBjc3JfbXR2YWxfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGVfZXhjICAgICAgICA6IGNzcl9tdHZhbF9uZXh0ID0gZXh1MmNzcl90cmFwX3ZhbF9pOwotICAgICAgICBlX2lycSAgICAgICAgOiBjc3JfbXR2YWxfbmV4dCA9ICcwOwotICAgICAgICBjc3JfbXR2YWxfdXBkOiBjc3JfbXR2YWxfbmV4dCA9IGNzcl93X2RhdGE7Ci0gICAgICAgIGRlZmF1bHQgICAgICA6IGNzcl9tdHZhbF9uZXh0ID0gY3NyX210dmFsX2ZmOwotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBNSVAgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb250YWlucyBpbmZvcm1hdGlvbiBvbiBwZW5kaW5nIGludGVycnVwdHMgKGV4dGVybmFsLCBzb2Z0d2FyZSwgdGltZXIgSVJRcykKLQotYXNzaWduIGNzcl9taXBfbXRpcCA9IHNvYzJjc3JfaXJxX210aW1lcl9pOwotYXNzaWduIGNzcl9taXBfbWVpcCA9IHNvYzJjc3JfaXJxX2V4dF9pOwotYXNzaWduIGNzcl9taXBfbXNpcCA9IHNvYzJjc3JfaXJxX3NvZnRfaTsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjc3JfbWlwICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMDsKLSAgICBjc3JfbWlwW1NDUjFfQ1NSX01JRV9NU0lFX09GRlNFVF0gPSBjc3JfbWlwX21zaXA7Ci0gICAgY3NyX21pcFtTQ1IxX0NTUl9NSUVfTVRJRV9PRkZTRVRdID0gY3NyX21pcF9tdGlwOwotICAgIGNzcl9taXBbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXSA9IGNzcl9taXBfbWVpcDsKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBSZWdpc3RlcnM6Ci0gLy8gLSBNQ1lDTEUKLSAvLyAtIE1JTlNUUkVUCi0vLwotCi1gaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0vLyBNQ1lDTEUgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0aGUgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcyBzaW5jZSBzb21lIGFyYml0cmFyeSBwb2ludCBvZiB0aW1lIGluIHRoZQotLy8gcGFzdCBhdCB3aGljaCBNQ1lDTEUgd2FzIHplcm8KLQotYXNzaWduIGNzcl9tY3ljbGVfbG9faW5jID0gMSdiMQotIGBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiBjc3JfbWNvdW50ZW5fY3lfZmYKLSBgZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotICAgICAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBjc3JfbWN5Y2xlX2hpX2luYyA9IGNzcl9tY3ljbGVfbG9faW5jICYgKCZjc3JfbWN5Y2xlX2xvX2ZmKTsKLQotYXNzaWduIGNzcl9tY3ljbGVfbG9fdXBkID0gY3NyX21jeWNsZV9sb19pbmMgfCBjc3JfbWN5Y2xlX3VwZFswXTsKLWFzc2lnbiBjc3JfbWN5Y2xlX2hpX3VwZCA9IGNzcl9tY3ljbGVfaGlfaW5jIHwgKHxjc3JfbWN5Y2xlX3VwZCk7Ci0KLSBgaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gYGVsc2UgLy8gU0NSMV9DTEtDVFJMX0VOCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsa19hbHdfb24pIGJlZ2luCi0gYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9tY3ljbGVfbG9fZmYgPD0gJzA7Ci0gICAgICAgIGNzcl9tY3ljbGVfaGlfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKGNzcl9tY3ljbGVfbG9fdXBkKSBjc3JfbWN5Y2xlX2xvX2ZmIDw9IGNzcl9tY3ljbGVfbG9fbmV4dDsKLSAgICAgICAgaWYgKGNzcl9tY3ljbGVfaGlfdXBkKSBjc3JfbWN5Y2xlX2hpX2ZmIDw9IGNzcl9tY3ljbGVfaGlfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY3NyX21jeWNsZV9oaV9uZXcgID0gY3NyX21jeWNsZV9oaV9mZiArIDEnYjE7Ci0KLWFzc2lnbiBjc3JfbWN5Y2xlX2xvX25leHQgPSBjc3JfbWN5Y2xlX3VwZFswXSA/IGNzcl93X2RhdGFbNzowXQotICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9tY3ljbGVfbG9faW5jID8gY3NyX21jeWNsZV9sb19mZiArIDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9tY3ljbGVfbG9fZmY7Ci1hc3NpZ24gY3NyX21jeWNsZV9oaV9uZXh0ID0gY3NyX21jeWNsZV91cGRbMF0gPyB7Y3NyX21jeWNsZV9oaV9uZXdbNjM6MzJdLCBjc3Jfd19kYXRhWzMxOjhdfQotICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9tY3ljbGVfdXBkWzFdID8ge2Nzcl93X2RhdGEsIGNzcl9tY3ljbGVfaGlfbmV3WzMxOjhdfQotICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9tY3ljbGVfaGlfaW5jID8gY3NyX21jeWNsZV9oaV9uZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9tY3ljbGVfaGlfZmY7Ci0KLWFzc2lnbiBjc3JfbWN5Y2xlID0ge2Nzcl9tY3ljbGVfaGlfZmYsIGNzcl9tY3ljbGVfbG9fZmZ9OwotCi0vLyBNSU5TVFJFVCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhvbGRzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIGJ5IHRoZSBjb3JlIGZyb20gc29tZSBhcmJpdHJhcnkgdGltZQotLy8gaW4gdGhlIHBhc3QgYXQgd2hpY2ggTUlOU1RSRVQgd2FzIGVxdWFsIHRvIHplcm8KLQotYXNzaWduIGNzcl9taW5zdHJldF9sb19pbmMgPSBleHUyY3NyX2luc3RyZXRfbm9fZXhjX2kKLSBgaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjc3JfbWNvdW50ZW5faXJfZmYKLSBgZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotYXNzaWduIGNzcl9taW5zdHJldF9oaV9pbmMgPSBjc3JfbWluc3RyZXRfbG9faW5jICYgKCZjc3JfbWluc3RyZXRfbG9fZmYpOwotCi1hc3NpZ24gY3NyX21pbnN0cmV0X2xvX3VwZCA9IGNzcl9taW5zdHJldF9sb19pbmMgfCBjc3JfbWluc3RyZXRfdXBkWzBdOwotYXNzaWduIGNzcl9taW5zdHJldF9oaV91cGQgPSBjc3JfbWluc3RyZXRfaGlfaW5jIHwgKHxjc3JfbWluc3RyZXRfdXBkKTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21pbnN0cmV0X2xvX2ZmIDw9ICcwOwotICAgICAgICBjc3JfbWluc3RyZXRfaGlfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKGNzcl9taW5zdHJldF9sb191cGQpIGNzcl9taW5zdHJldF9sb19mZiA8PSBjc3JfbWluc3RyZXRfbG9fbmV4dDsKLSAgICAgICAgaWYgKGNzcl9taW5zdHJldF9oaV91cGQpIGNzcl9taW5zdHJldF9oaV9mZiA8PSBjc3JfbWluc3RyZXRfaGlfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY3NyX21pbnN0cmV0X2hpX25ldyAgPSBjc3JfbWluc3RyZXRfaGlfZmYgKyAxJ2IxOwotCi1hc3NpZ24gY3NyX21pbnN0cmV0X2xvX25leHQgPSBjc3JfbWluc3RyZXRfdXBkWzBdID8gY3NyX3dfZGF0YVs3OjBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWluc3RyZXRfbG9faW5jID8gY3NyX21pbnN0cmV0X2xvX2ZmICsgMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9taW5zdHJldF9sb19mZjsKLWFzc2lnbiBjc3JfbWluc3RyZXRfaGlfbmV4dCA9IGNzcl9taW5zdHJldF91cGRbMF0gPyB7Y3NyX21pbnN0cmV0X2hpX25ld1s2MzozMl0sIGNzcl93X2RhdGFbMzE6OF19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWluc3RyZXRfdXBkWzFdID8ge2Nzcl93X2RhdGEsIGNzcl9taW5zdHJldF9oaV9uZXdbMzE6OF19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfbWluc3RyZXRfaGlfaW5jID8gY3NyX21pbnN0cmV0X2hpX25ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9taW5zdHJldF9oaV9mZjsKLQotYXNzaWduIGNzcl9taW5zdHJldCA9IHtjc3JfbWluc3RyZXRfaGlfZmYsIGNzcl9taW5zdHJldF9sb19mZn07Ci1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE5vbi1zdGFuZGFyZCBDU1IKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCi0vLyBNQ09VTlRFTiByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhvbGRzIENvdW50ZXJzIGVuYWJsZSBiaXRzIChDWSAtIE1DWUNMRSBjb3VudGVyOyBJUiAtIE1JTlNUUkVUIGNvdW50ZXIpCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9tY291bnRlbl9jeV9mZiA8PSAxJ2IxOwotICAgICAgICBjc3JfbWNvdW50ZW5faXJfZmYgPD0gMSdiMTsKLSAgICBlbmQgZWxzZSBpZiAoY3NyX21jb3VudGVuX3VwZCkgYmVnaW4KLSAgICAgICAgY3NyX21jb3VudGVuX2N5X2ZmIDw9IGNzcl93X2RhdGFbU0NSMV9DU1JfTUNPVU5URU5fQ1lfT0ZGU0VUXTsKLSAgICAgICAgY3NyX21jb3VudGVuX2lyX2ZmIDw9IGNzcl93X2RhdGFbU0NSMV9DU1JfTUNPVU5URU5fSVJfT0ZGU0VUXTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNzcl9tY291bnRlbiAgICA9ICcwOwotICAgIGNzcl9tY291bnRlbltTQ1IxX0NTUl9NQ09VTlRFTl9DWV9PRkZTRVRdICAgPSBjc3JfbWNvdW50ZW5fY3lfZmY7Ci0gICAgY3NyX21jb3VudGVuW1NDUjFfQ1NSX01DT1VOVEVOX0lSX09GRlNFVF0gICA9IGNzcl9tY291bnRlbl9pcl9mZjsKLWVuZAotYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiA8LT4gRVhVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ1NSIGV4Y2VwdGlvbgotYXNzaWduIGNzcjJleHVfcndfZXhjX28gPSBjc3Jfcl9leGMgfCBjc3Jfd19leGMKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgfCAoY3NyMmhkdV9yZXFfbyAmIChoZHUyY3NyX3Jlc3BfaSAhPSBTQ1IxX0NTUl9SRVNQX09LKSkKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChjc3IydGR1X3JlcV9vICYgKHRkdTJjc3JfcmVzcF9pICE9IFNDUjFfQ1NSX1JFU1BfT0spKQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gY3NyMmV4dV9pcF9pZV9vICA9IGNzcl9laXJxX3BuZF9lbiB8IGNzcl9zaXJxX3BuZF9lbiB8IGNzcl90aXJxX3BuZF9lbjsKLWFzc2lnbiBjc3IyZXh1X2lycV9vICAgID0gY3NyMmV4dV9pcF9pZV9vICYgY3NyX21zdGF0dXNfbWllX2ZmOwotCi1hc3NpZ24gY3NyMmV4dV9tc3RhdHVzX21pZV91cF9vID0gY3NyX21zdGF0dXNfdXBkIHwgY3NyX21pZV91cGQgfCBlX21yZXQ7Ci0KLS8vIE5ldyBQQyBtdWx0aXBsZXhlcgotYGlmbmRlZiBTQ1IxX01UVkVDX01PREVfRU4KLWFzc2lnbiBjc3IyZXh1X25ld19wY19vID0gKGV4dTJjc3JfbXJldF9pbnN0cl9pICYgfmV4dTJjc3JfdGFrZV9pcnFfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gY3NyX21lcGMKLSAgICAgICAgICAgICAgICAgICAgICAgIDoge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUycoMCl9OwotYGVsc2UgLy8gU0NSMV9NVFZFQ19NT0RFX0VOCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChleHUyY3NyX21yZXRfaW5zdHJfaSAmIH5leHUyY3NyX3Rha2VfaXJxX2kpIGJlZ2luCi0gICAgICAgIGNzcjJleHVfbmV3X3BjX28gID0gY3NyX21lcGM7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKGNzcl9tdHZlY19tb2RlX3ZlY3QpIGJlZ2luCi0gICAgICAgICAgICBjYXNlICgxJ2IxKQotICAgICAgICAgICAgICAgIGV4dTJjc3JfdGFrZV9leGNfaTogY3NyMmV4dV9uZXdfcGNfbyA9IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMnKDApfTsKLSAgICAgICAgICAgICAgICBjc3JfZWlycV9wbmRfZW4gICA6IGNzcjJleHVfbmV3X3BjX28gPSB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfRVhDX0NPREVfSVJRX01fRVhURVJOQUwsIDInZDB9OwotICAgICAgICAgICAgICAgIGNzcl9zaXJxX3BuZF9lbiAgIDogY3NyMmV4dV9uZXdfcGNfbyA9IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9FWENfQ09ERV9JUlFfTV9TT0ZUV0FSRSwgMidkMH07Ci0gICAgICAgICAgICAgICAgY3NyX3RpcnFfcG5kX2VuICAgOiBjc3IyZXh1X25ld19wY19vID0ge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0VYQ19DT0RFX0lSUV9NX1RJTUVSLCAyJ2QwfTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICA6IGNzcjJleHVfbmV3X3BjX28gPSB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTJygwKX07Ci0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIGRpcmVjdCBtb2RlCi0gICAgICAgICAgICBjc3IyZXh1X25ld19wY19vID0ge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUycoMCl9OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfTVRWRUNfTU9ERV9FTgotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1NSIDwtPiBJUElDIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcl9pcGljX3JlcSAgICAgPSBjc3IyaXBpY19yX3JlcV9vIHwgY3NyMmlwaWNfd19yZXFfbzsKLWFzc2lnbiBjc3IyaXBpY19hZGRyX28gID0gY3NyX2lwaWNfcmVxICAgICA/IGV4dTJjc3JfcndfYWRkcl9pWzI6MF0gOiAnMDsKLWFzc2lnbiBjc3IyaXBpY193ZGF0YV9vID0gY3NyMmlwaWNfd19yZXFfbyA/IGV4dTJjc3Jfd19kYXRhX2kgICAgICAgOiAnMDsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotYGlmZGVmIFNDUjFfREJHX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1NSIDwtPiBIRFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY3NyMmhkdV9yZXFfbyAgID0gY3NyX2hkdV9yZXEgJiBleHVfcmVxX25vX2V4YzsKLWFzc2lnbiBjc3IyaGR1X2NtZF9vICAgPSBleHUyY3NyX3dfY21kX2k7Ci1hc3NpZ24gY3NyMmhkdV9hZGRyX28gID0gZXh1MmNzcl9yd19hZGRyX2lbU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSC0xOjBdOwotYXNzaWduIGNzcjJoZHVfd2RhdGFfbyA9IGV4dTJjc3Jfd19kYXRhX2k7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1NSIDwtPiBURFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY3NyMnRkdV9yZXFfbyAgID0gY3NyX2Jya21fcmVxICYgZXh1X3JlcV9ub19leGM7Ci1hc3NpZ24gY3NyMnRkdV9jbWRfbyAgID0gZXh1MmNzcl93X2NtZF9pOwotYXNzaWduIGNzcjJ0ZHVfYWRkcl9vICA9IGV4dTJjc3JfcndfYWRkcl9pW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdOwotYXNzaWduIGNzcjJ0ZHVfd2RhdGFfbyA9IGV4dTJjc3Jfd19kYXRhX2k7Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gWCBjaGVja3MKLQotU0NSMV9TVkFfQ1NSX1hDSEVDS19DVFJMIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKHtleHUyY3NyX3JfcmVxX2ksIGV4dTJjc3Jfd19yZXFfaSwgZXh1MmNzcl90YWtlX2lycV9pLCBleHUyY3NyX3Rha2VfZXhjX2ksIGV4dTJjc3JfbXJldF91cGRhdGVfaQotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotICAgICwgZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19pCi1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLSAgICB9KQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOwotCi1TQ1IxX1NWQV9DU1JfWENIRUNLX1JFQUQgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgZXh1MmNzcl9yX3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZXh1MmNzcl9yd19hZGRyX2ksIGNzcjJleHVfcl9kYXRhX28sIGNzcjJleHVfcndfZXhjX299KQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOwotCi1TQ1IxX1NWQV9DU1JfWENIRUNLX1dSSVRFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dTJjc3Jfd19yZXFfaSB8LT4gISRpc3Vua25vd24oe2V4dTJjc3JfcndfYWRkcl9pLCBleHUyY3NyX3dfY21kX2ksIGV4dTJjc3Jfd19kYXRhX2ksIGNzcjJleHVfcndfZXhjX299KQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOwotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi1TQ1IxX1NWQV9DU1JfWENIRUNLX1JFQURfSVBJQyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBjc3IyaXBpY19yX3JlcV9vIHwtPiAhJGlzdW5rbm93bih7Y3NyMmlwaWNfYWRkcl9vLCBpcGljMmNzcl9yZGF0YV9pfSkKLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfQ1NSX1hDSEVDS19XUklURV9JUElDIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGNzcjJpcGljX3dfcmVxX28gfC0+ICEkaXN1bmtub3duKHtjc3IyaXBpY19hZGRyX28sIGNzcjJpcGljX3dkYXRhX299KQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOwotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi0vLyBCZWhhdmlvciBjaGVja3MKLQotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0NTUl9NUkVUIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGVfbXJldCB8PT4gKCRzdGFibGUoY3NyX21lcGNfZmYpICYgJHN0YWJsZShjc3JfbXR2YWxfZmYpKQotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogTVJFVCB3cm9uZyBiZWhhdmlvciIpOwotCi1TQ1IxX1NWQV9DU1JfTVJFVF9JUlEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGV4dTJjc3JfbXJldF9pbnN0cl9pICYgZV9pcnEpCi0gICAgfD0+ICgkc3RhYmxlKGNzcl9tZXBjX2ZmKSAmIChleHUyY3NyX3BjX2N1cnJfaSAhPSBjc3JfbWVwYykpCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBNUkVUK0lSUSB3cm9uZyBiZWhhdmlvciIpOwotCi1TQ1IxX1NWQV9DU1JfRVhDX0lSUSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAoZXh1MmNzcl90YWtlX2V4Y19pICYgZXh1MmNzcl90YWtlX2lycV9pCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAmIH5oZHUyY3NyX25vX2NvbW1pdF9pCi1gZW5kaWYKLSAgICApIHw9PgotICAgICh+Y3NyX21zdGF0dXNfbWllX2ZmICYgKH5jc3JfbWNhdXNlX2lfZmYpCi0gICAgJiAoZXh1MmNzcl9wY19jdXJyX2k9PXtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMnKDApfSkpCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiB3cm9uZyBFWEMrSVJRIik7Ci1gZW5kaWYgLy8gVkVSSUxBVE9SCi1TQ1IxX1NWQV9DU1JfRVZFTlRTIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICRvbmVob3QwKHtlX2lycSwgZV9leGMsIGVfbXJldH0pCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBtb3JlIHRoYW4gb25lIGV2ZW50IGF0IGEgdGltZSIpOwotCi1TQ1IxX1NWQV9DU1JfUldfRVhDIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGNzcjJleHVfcndfZXhjX28gfC0+IChleHUyY3NyX3dfcmVxX2kgfCBleHUyY3NyX3JfcmVxX2kpCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBpbXBvc3NpYmxlIGV4Y2VwdGlvbiIpOwotCi1gaWZuZGVmIFZFUklMQVRPUgotU0NSMV9TVkFfQ1NSX01TVEFUVVNfTUlFX1VQIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGNzcjJleHVfbXN0YXR1c19taWVfdXBfbyB8PT4gfmNzcjJleHVfbXN0YXR1c19taWVfdXBfbwotICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogY3NyMmV4dV9tc3RhdHVzX21pZV91cF9vIGNhbiBvbmx5IGJlIGhpZ2ggZm9yIG9uZSBtY3ljbGUiKTsKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLQotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotCi1gaWZuZGVmIFZFUklMQVRPUgotU0NSMV9TVkFfQ1NSX0NZQ0xFX0lOQyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQCgKLWBpZm5kZWYgU0NSMV9DTEtDVFJMX0VOCi1uZWdlZGdlIGNsawotYGVsc2UgLy8gU0NSMV9DTEtDVFJMX0VOCi1uZWdlZGdlIGNsa19hbHdfb24KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICApIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKH58Y3NyX21jeWNsZV91cGQpIHw9PgotYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLSAgICAoJHBhc3QoY3NyX21jb3VudGVuX2N5X2ZmKSA/IChjc3JfbWN5Y2xlID09ICRwYXN0KGNzcl9tY3ljbGUgKyAxJ2IxKSkgOiAkc3RhYmxlKGNzcl9tY3ljbGUpKQotYGVsc2UgLy9TQ1IxX01DT1VOVEVOX0VOCi0gICAgKGNzcl9tY3ljbGUgPT0gJHBhc3QoY3NyX21jeWNsZSArIDEnYjEpKQotYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IENZQ0xFIGluY3JlbWVudCB3cm9uZyBiZWhhdmlvciIpOwotCi1TQ1IxX1NWQV9DU1JfSU5TVFJFVF9JTkMgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGV4dTJjc3JfaW5zdHJldF9ub19leGNfaSAmIH58Y3NyX21pbnN0cmV0X3VwZCkgfD0+Ci1gaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgotICAgICgkcGFzdChjc3JfbWNvdW50ZW5faXJfZmYpID8gKGNzcl9taW5zdHJldCA9PSAkcGFzdChjc3JfbWluc3RyZXQgKyAxJ2IxKSkgOiAkc3RhYmxlKGNzcl9taW5zdHJldCkpCi1gZWxzZSAvL1NDUjFfTUNPVU5URU5fRU4KLSAgICAoY3NyX21pbnN0cmV0ID09ICRwYXN0KGNzcl9taW5zdHJldCArIDEnYjEpKQotYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KLSAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IElOU1RSRVQgaW5jcmVtZW50IHdyb25nIGJlaGF2aW9yIik7Ci1gZW5kaWYKLVNDUjFfU1ZBX0NTUl9DWUNMRV9JTlNUUkVUX1VQIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIH4oJmNzcl9taW5zdHJldF91cGQgfCAmY3NyX21jeWNsZV91cGQpCi0gICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBJTlNUUkVUL0NZQ0xFIHVwIGlsbGVnYWwgdmFsdWUiKTsKLQotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3BpcGVfY3NyCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2V4dS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU4N2ZhMC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfZXh1LnN2PgotLy8vIEBicmllZiAgICAgIEV4ZWN1dGlvbiBVbml0IChFWFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQZXJmb3JtcyBpbnN0cnVjdGlvbnMgZXhlY3V0aW9uOgotIC8vICAgLSBQcmV2ZW50cyBpbnN0cnVjdGlvbnMgZnJvbSBleGVjdXRpb24gaWYgdGhlIEhBUlQgaXMgaW4gV0ZJIG9yIERlYnVnIEhhbHRlZAotIC8vICAgICBzdGF0ZQotIC8vICAgLSBGZXRjaGVzIG9wZXJhbmRzIGZvciBJQUxVCi0gLy8gICAtIENhbGN1bGF0ZXMgb3BlcmF0aW9uIHJlc3VsdHMgdmlhIElBTFUKLSAvLyAgIC0gU3RvcmVzIElBTFUgcmVzdWx0cyBpbiBNUFJGCi0gLy8gICAtIFBlcmZvcm1zIExPQUQvU1RPUkUgb3BlcmF0aW9ucyB2aWEgTFNVCi0gLy8gLSBIYW5kbGVzIGV4Y2VwdGlvbnM6Ci0gLy8gICAtIEdlbmVyYXRlcyBleGNlcHRpb24gcmVxdWVzdAotIC8vICAgLSBFbmNvZGVzIGV4Y2VwdGlvbiBjb2RlCi0gLy8gICAtIENhbGN1bGF0ZXMgZXhjZXB0aW9uIHRyYXAgdmFsdWUKLSAvLyAtIENvbnRyb2xzIFdGSSBpbnN0cnVjdGlvbiBleGVjdXRpb24KLSAvLyAtIENhbGN1bGF0ZXMgUEMgdmFsdWU6Ci0gLy8gICAtIEluaXRpYWxpemVzIFBDIG9uIHJlc2V0Ci0gLy8gICAtIFN0b3JlcyB0aGUgY3VycmVudCBQQyB2YWx1ZQotIC8vICAgLSBDYWxjdWxhdGVzIGEgTmV3IFBDIHZhbHVlIGFuZCBnZW5lcmF0ZXMgYSBOZXcgUEMgcmVxdWVzdCB0byBJRlUKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIEluc3RydWN0aW9uIHF1ZXVlCi0gLy8gLSBJbnRlZ2VyIEFyaXRobWV0aWMgTG9naWMgVW5pdCAoSUFMVSkKLSAvLyAtIEV4Y2VwdGlvbnMgbG9naWMKLSAvLyAtIFdGSSBsb2dpYwotIC8vIC0gUHJvZ3JhbSBDb3VudGVyIGxvZ2ljCi0gLy8gLSBMb2FkLVN0b3JlIFVuaXQgKExTVSkKLSAvLyAtIEVYVSBzdGF0dXMgbG9naWMKLSAvLyAtIEVYVSA8LT4gTVBSRiBpL2YKLSAvLyAtIEVYVSA8LT4gQ1NSIGkvZgotIC8vIC0gRVhVIDwtPiBURFUgaS9mCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgotYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSBgaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLW1vZHVsZSBzY3IxX3BpcGVfZXh1ICgKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBFWFUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBHYXRlZCBFWFUgY2xvY2sKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19hbHdfb24sICAgICAgICAgICAgICAgICAvLyBOb3QtZ2F0ZWQgRVhVIGNsb2NrCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfcGlwZV9lbiwgICAgICAgICAgICAgICAgLy8gRVhVIGNsb2NrIGVuYWJsZWQgZmxhZwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gRVhVIDwtPiBJRFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3JlcV9pLCAgICAgICAgICAgICAgLy8gUmVxdWVzdCBmb3JtIElEVSB0byBFWFUKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJpZHVfcmR5X28sICAgICAgICAgICAgICAvLyBFWFUgcmVhZHkgZm9yIG5ldyBkYXRhIGZyb20gSURVCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfZXh1X2NtZF9zICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9pLCAgICAgICAgICAgICAgLy8gRVhVIGNvbW1hbmQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9pLCAgICAgICAgICAvLyBDbG9jayBnYXRpbmcgb24gcnMxX2FkZHIgZmllbGQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9pLCAgICAgICAgICAvLyBDbG9jayBnYXRpbmcgb24gcnMyX2FkZHIgZmllbGQKLWBpZm5kZWYgU0NSMV9OT19FWEVfU1RBR0UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX2ksICAgICAgICAgICAvLyBDbG9jayBnYXRpbmcgb24gcmRfYWRkciBmaWVsZAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX2ksICAgICAgICAgIC8vIENsb2NrIGdhdGluZyBvbiBpbW0gZmllbGQKLWBlbmRpZiAvLyBTQ1IxX05PX0VYRV9TVEFHRQotCi0gICAgLy8gRVhVIDwtPiBNUFJGIGludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMxX2FkZHJfbywgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMxX2RhdGFfaSwgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgZGF0YQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMyX2FkZHJfbywgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMyX2RhdGFfaSwgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgZGF0YQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfd19yZXFfbywgICAgICAgICAgIC8vIE1QUkYgd3JpdGUgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcmRfYWRkcl9vLCAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1Mm1wcmZfcmRfZGF0YV9vLCAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgZGF0YQotCi0gICAgLy8gRVhVIDwtPiBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gICAgIGV4dTJjc3JfcndfYWRkcl9vLCAgICAgICAgICAvLyBDU1IgcmVhZC93cml0ZSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxX28sICAgICAgICAgICAgLy8gQ1NSIHJlYWQgcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgY3NyMmV4dV9yX2RhdGFfaSwgICAgICAgICAgIC8vIENTUiByZWFkIGRhdGEKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXFfbywgICAgICAgICAgICAvLyBDU1Igd3JpdGUgcmVxdWVzdAotICAgIG91dHB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgZXh1MmNzcl93X2NtZF9vLCAgICAgICAgICAgIC8vIENTUiB3cml0ZSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUyY3NyX3dfZGF0YV9vLCAgICAgICAgICAgLy8gQ1NSIHdyaXRlIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcndfZXhjX2ksICAgICAgICAgICAvLyBDU1IgcmVhZC93cml0ZSBhY2Nlc3MgZXhjZXB0aW9uCi0KLSAgICAvLyBFWFUgPC0+IENTUiBldmVudHMgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfaXJxX28sICAgICAgICAgLy8gVGFrZSBJUlEgdHJhcAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2V4Y19vLCAgICAgICAgIC8vIFRha2UgZXhjZXB0aW9uIHRyYXAKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF91cGRhdGVfbywgICAgICAvLyBNUkVUIHVwZGF0ZSBDU1IKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF9pbnN0cl9vLCAgICAgICAvLyBNUkVUIGluc3RydWN0aW9uCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICBleHUyY3NyX2V4Y19jb2RlX28sICAgICAgICAgLy8gRXhjZXB0aW9uIGNvZGUgKHNlZSBzY3IxX2FyY2hfdHlwZXMuc3ZoKSAtIGNwLjcKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJjc3JfdHJhcF92YWxfbywgICAgICAgICAvLyBUcmFwIHZhbHVlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBjc3IyZXh1X25ld19wY19pLCAgICAgICAgICAgLy8gRXhjZXB0aW9uL0lSUS9NUkVUIG5ldyBQQwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9pcnFfaSwgICAgICAgICAgICAgIC8vIElSUSByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lwX2llX2ksICAgICAgICAgICAgLy8gU29tZSBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwX2ksICAgLy8gTVNUQVRVUyBvciBNSUUgdXBkYXRlIGluIHRoZSBjdXJyZW50IGN5Y2xlCi0KLSAgICAvLyBFWFUgPC0+IERNRU0gaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyZG1lbV9yZXFfbywgICAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmRtZW1fY21kX28sICAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IGNvbW1hbmQgLSBjcC43Ci0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICBleHUyZG1lbV93aWR0aF9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgIGV4dTJkbWVtX2FkZHJfbywgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBleHUyZG1lbV93ZGF0YV9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbTJleHVfcmVxX2Fja19pLCAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGRtZW0yZXh1X3JkYXRhX2ksICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZWFkIGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0yZXh1X3Jlc3BfaSwgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZXNwb25zZSAtIGNwLjcKLQotICAgIC8vIEVYVSBjb250cm9sCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9leGNfcmVxX28sICAgICAgICAgLy8gRXhjZXB0aW9uIG9uIGxhc3QgaW5zdHJ1Y3Rpb24KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJwaXBlX2Jya3B0X28sICAgICAgICAgICAvLyBTb2Z0d2FyZSBCcmVha3BvaW50IChFQlJFQUspCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9pbml0X3BjX28sICAgICAgICAgLy8gUmVzZXQgZXhpdAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MnBpcGVfd2ZpX3J1bjJoYWx0X28sICAgIC8vIFRyYW5zaXRpb24gdG8gV0ZJIGhhbHRlZCBzdGF0ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MnBpcGVfaW5zdHJldF9vLCAgICAgICAgIC8vIEluc3RydWN0aW9uIHJldGlyZWQgKHdpdGggb3Igd2l0aG91dCBleGNlcHRpb24pCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX2luc3RyZXRfbm9fZXhjX28sICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aG91dCBleGNlcHRpb24pCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9leHVfYnVzeV9vLCAgICAgICAgLy8gRVhVIGJ1c3kKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gRVhVIDwtPiBIRFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X25vX2NvbW1pdF9pLCAgICAgICAgLy8gRm9yYmlkIGluc3RydWN0aW9uIGNvbW1pdG1lbnQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfaXJxX2RzYmxfaSwgICAgICAgICAvLyBEaXNhYmxlIElSUQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9wY19hZHZtdF9kc2JsX2ksICAgIC8vIEZvcmJpZCBQQyBhZHZhbmNlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9pLCAgIC8vIEVuYWJsZSBzaW5nbGUtc3RlcAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9wYnVmX2ZldGNoX2ksICAgICAgIC8vIFRha2UgaW5zdHJ1Y3Rpb25zIGZyb20gUHJvZ3JhbSBCdWZmZXIKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX2hhbHRlZF9pLCAgICAgICAvLyBEZWJ1ZyBoYWx0ZWQgc3RhdGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX3J1bjJoYWx0X2ksICAgICAvLyBUcmFuc2l0aW9uIHRvIGRlYnVnIGhhbHRlZCBzdGF0ZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfaGFsdDJydW5faSwgICAgIC8vIFRyYW5zaXRpb24gdG8gcnVuIHN0YXRlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19ydW5fc3RhcnRfaSwgICAgLy8gRmlyc3QgY3ljbGUgb2YgcnVuIHN0YXRlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19uZXdfcGNfaSwgICAgICAgLy8gTmV3IFBDIGFzIHN0YXJ0aW5nIHBvaW50IGZvciBIQVJUIFJlc3VtZQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIC8vIEVYVSA8LT4gVERVIGludGVyZmFjZQotICAgIG91dHB1dCB0eXBlX3NjcjFfYnJrbV9pbnN0cl9tb25fcyAgICAgICAgICAgZXh1MnRkdV9pbW9uX28sICAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIG1vbml0b3IKLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTE6MF0gICAgIHRkdTJleHVfaWJya3B0X21hdGNoX2ksICAgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50KHMpIG1hdGNoCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2ksICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCBleGNlcHRpb24KLSAgICBvdXRwdXQgdHlwZV9zY3IxX2Jya21fbHN1X21vbl9zICAgICAgICAgICAgIGxzdTJ0ZHVfZG1vbl9vLCAgICAgICAgICAgICAvLyBEYXRhIG1vbml0b3IKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSwgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50IGV4Y2VwdGlvbgotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9URFVfTVRSSUdfTlVNLTE6MF0gICAgICAgdGR1MmxzdV9kYnJrcHRfbWF0Y2hfaSwgICAgIC8vIERhdGEgYnJlYWtwb2ludChzKSBtYXRjaAotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pLCAgIC8vIERhdGEgYnJlYWtwb2ludCBleGNlcHRpb24KLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTE6MF0gICAgIGV4dTJ0ZHVfaWJya3B0X3JldF9vLCAgICAgICAvLyBJbnN0cnVjdGlvbiB3aXRoIGJyZWFrcG9pbnQgZmxhZyByZXRpcmUKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJoZHVfaWJya3B0X2h3X28sICAgICAgICAvLyBIYXJkd2FyZSBicmVha3BvaW50IG9uIGN1cnJlbnQgaW5zdHJ1Y3Rpb24KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gUEMgaW50ZXJmYWNlCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV93ZmlfaGFsdGVkX28sICAgICAgLy8gV0ZJIGhhbHRlZCBzdGF0ZQotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1MnBpcGVfcGNfY3Vycl9vLCAgICAgICAgIC8vIEN1cnJlbnQgUEMKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJjc3JfcGNfbmV4dF9vLCAgICAgICAgICAvLyBOZXh0IFBDCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaWZ1X3BjX25ld19yZXFfbywgICAgICAgLy8gTmV3IFBDIHJlcXVlc3QKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJpZnVfcGNfbmV3X28gICAgICAgICAgICAvLyBOZXcgUEMgZGF0YQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gU0NSMV9KVU1QX01BU0sgPSBgU0NSMV9YTEVOJ2hGRkZGX0ZGRkU7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0NTUl9JTklULAotICAgIFNDUjFfQ1NSX1JEWQotfSBzY3IxX2Nzcl9hY2Nlc3NfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluc3RydWN0aW9uIHF1ZXVlIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWVfdmQ7Ci10eXBlX3NjcjFfZXh1X2NtZF9zICAgICAgICAgICAgICAgICBleHVfcXVldWU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWVfYmFycmllcjsKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfcnVuX3N0YXJ0X25wYnVmOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWVfZW47Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHVfaWxsZWdhbF9pbnN0cjsKLQotYGlmbmRlZiBTQ1IxX05PX0VYRV9TVEFHRQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX2ZmOwotCi0vLyBFWFUgcXVldWUgdmFsaWQgZmxhZyByZWdpc3RlciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWVfdmRfdXBkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlX3ZkX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlX3ZkX25leHQ7Ci1gZW5kaWYgLy8gU0NSMV9OT19FWEVfU1RBR0UKLQotLy8gSUFMVSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfUlZNX0VYVAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdV9yZHk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1X3ZkOwotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaWFsdV9tYWluX29wMTsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGlhbHVfbWFpbl9vcDI7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpYWx1X21haW5fcmVzOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaWFsdV9hZGRyX29wMTsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGlhbHVfYWRkcl9vcDI7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpYWx1X2FkZHJfcmVzOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdV9jbXA7Ci0KLS8vIEV4Y2VwdGlvbnMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9leGNfcmVxOwotYGlmZGVmIFNDUjFfREJHX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9leGNfcmVxX25leHQ7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWxvZ2ljIFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSAgIGV4Y19jb2RlOyAvLyBjcC43Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleGNfdHJhcF92YWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9mYXVsdF9ydmlfaGk7Ci0KLS8vIFdGSSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gV0ZJIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRfY29uZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9ydW5fcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRfcmVxOwotCi0vLyBXRkkgUnVuIFN0YXJ0IHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfcnVuX3N0YXJ0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX3J1bl9zdGFydF9uZXh0OwotCi0vLyBXRkkgaGFsdGVkIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfaGFsdGVkX3VwZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9oYWx0ZWRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfaGFsdGVkX25leHQ7Ci0KLS8vIFBDIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BjX3Y7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BjOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaW5jX3BjOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfdGFrZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYl90YWtlbjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGpiX25ld19wYzsKLWBpZm5kZWYgU0NSMV9SVkNfRVhUCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYl9taXNhbGlnbjsKLWBlbmRpZgotCi0vLyBDdXJyZW50IFBDIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY19jdXJyX3VwZDsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIHBjX2N1cnJfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBwY19jdXJyX25leHQ7Ci0KLS8vIExTVSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1X3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdV9yZHk7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBsc3VfbF9kYXRhOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1X2V4Y19yZXE7Ci1sb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gICBsc3VfZXhjX2NvZGU7IC8vIGNwLjcKLQotLy8gRVhVIHN0YXR1cyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3JkeTsKLQotLy8gTVBSRiBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXByZl9yczFfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXByZl9yczJfcmVxOwotCi1sb2dpYyAgIFtgU0NSMV9NUFJGX0FXSURUSC0xOjBdICAgICBtcHJmX3JzMV9hZGRyOwotbG9naWMgICBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgbXByZl9yczJfYWRkcjsKLQotLy8gQ1NSIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgYWNjZXNzIHJlZ2lzdGVyCi1zY3IxX2Nzcl9hY2Nlc3NfZSAgICAgICAgICAgICAgICAgICBjc3JfYWNjZXNzX2ZmOwotc2NyMV9jc3JfYWNjZXNzX2UgICAgICAgICAgICAgICAgICAgY3NyX2FjY2Vzc19uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2FjY2Vzc19pbml0OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIHF1ZXVlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBJbnN0cnVjdGlvbiBleGVjdXRpb24gcXVldWUgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gRVhVIHF1ZXVlIGNvbnRyb2wgbG9naWMKLSAvLyAtIEVYVSBxdWV1ZSB2YWxpZCBmbGFnIHJlZ2lzdGVyCi0gLy8gLSBFWFUgcXVldWUgcmVnaXN0ZXIKLSAvLyAtIEVYVSBxdWV1ZSBzdGF0dXMgbG9naWMKLS8vCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotYXNzaWduIGRiZ19ydW5fc3RhcnRfbnBidWYgPSBoZHUyZXh1X2RiZ19ydW5fc3RhcnRfaSAmIH5oZHUyZXh1X3BidWZfZmV0Y2hfaTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZuZGVmIFNDUjFfTk9fRVhFX1NUQUdFCi0KLS8vIEVYVSBxdWV1ZSBjb250cm9sIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZXh1X3F1ZXVlX2JhcnJpZXIgPSB3ZmlfaGFsdGVkX2ZmIHwgd2ZpX2hhbHRfcmVxIHwgd2ZpX3J1bl9zdGFydF9mZgotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCBoZHUyZXh1X2RiZ19oYWx0ZWRfaSAgfCBoZHUyZXh1X2RiZ19ydW4yaGFsdF9pCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCBkYmdfcnVuX3N0YXJ0X25wYnVmCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLTsKLQotYXNzaWduIGV4dV9xdWV1ZV9lbiA9IGV4dTJpZHVfcmR5X28gJiBpZHUyZXh1X3JlcV9pOwotCi0vLyBFWFUgcXVldWUgdmFsaWQgZmxhZyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGV4dV9xdWV1ZV92ZF91cGQgPSBleHVfcXVldWVfYmFycmllciB8IGV4dV9yZHk7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGV4dV9xdWV1ZV92ZF9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmIChleHVfcXVldWVfdmRfdXBkKSBiZWdpbgotICAgICAgICBleHVfcXVldWVfdmRfZmYgPD0gZXh1X3F1ZXVlX3ZkX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGV4dV9xdWV1ZV92ZF9uZXh0ID0gfmV4dV9xdWV1ZV9iYXJyaWVyICYgaWR1MmV4dV9yZXFfaSAmIH5leHUyaWZ1X3BjX25ld19yZXFfbzsKLWFzc2lnbiBleHVfcXVldWVfdmQgICAgICA9IGV4dV9xdWV1ZV92ZF9mZjsKLQotLy8gRVhVIHF1ZXVlIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoZXh1X3F1ZXVlX2VuKSBiZWdpbgotICAgICAgICBleHVfcXVldWUuaW5zdHJfcnZjICAgICAgPD0gaWR1MmV4dV9jbWRfaS5pbnN0cl9ydmM7Ci0gICAgICAgIGV4dV9xdWV1ZS5pYWx1X29wICAgICAgICA8PSBpZHUyZXh1X2NtZF9pLmlhbHVfb3A7Ci0gICAgICAgIGV4dV9xdWV1ZS5pYWx1X2NtZCAgICAgICA8PSBpZHUyZXh1X2NtZF9pLmlhbHVfY21kOwotICAgICAgICBleHVfcXVldWUuc3VtMl9vcCAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5zdW0yX29wOwotICAgICAgICBleHVfcXVldWUubHN1X2NtZCAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5sc3VfY21kOwotICAgICAgICBleHVfcXVldWUuY3NyX29wICAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5jc3Jfb3A7Ci0gICAgICAgIGV4dV9xdWV1ZS5jc3JfY21kICAgICAgICA8PSBpZHUyZXh1X2NtZF9pLmNzcl9jbWQ7Ci0gICAgICAgIGV4dV9xdWV1ZS5yZF93Yl9zZWwgICAgICA8PSBpZHUyZXh1X2NtZF9pLnJkX3diX3NlbDsKLSAgICAgICAgZXh1X3F1ZXVlLmp1bXBfcmVxICAgICAgIDw9IGlkdTJleHVfY21kX2kuanVtcF9yZXE7Ci0gICAgICAgIGV4dV9xdWV1ZS5icmFuY2hfcmVxICAgICA8PSBpZHUyZXh1X2NtZF9pLmJyYW5jaF9yZXE7Ci0gICAgICAgIGV4dV9xdWV1ZS5tcmV0X3JlcSAgICAgICA8PSBpZHUyZXh1X2NtZF9pLm1yZXRfcmVxOwotICAgICAgICBleHVfcXVldWUuZmVuY2VpX3JlcSAgICAgPD0gaWR1MmV4dV9jbWRfaS5mZW5jZWlfcmVxOwotICAgICAgICBleHVfcXVldWUud2ZpX3JlcSAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS53ZmlfcmVxOwotICAgICAgICBleHVfcXVldWUuZXhjX3JlcSAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5leGNfcmVxOwotICAgICAgICBleHVfcXVldWUuZXhjX2NvZGUgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5leGNfY29kZTsKLSAgICAgICAgaWR1MmV4dV91c2VfcnMxX2ZmICAgICAgIDw9IGlkdTJleHVfdXNlX3JzMV9pOwotICAgICAgICBpZHUyZXh1X3VzZV9yczJfZmYgICAgICAgPD0gaWR1MmV4dV91c2VfcnMyX2k7Ci0gICAgICAgIGlmIChpZHUyZXh1X3VzZV9yczFfaSkgYmVnaW4KLSAgICAgICAgICAgIGV4dV9xdWV1ZS5yczFfYWRkciAgIDw9IGlkdTJleHVfY21kX2kucnMxX2FkZHI7Ci0gICAgICAgIGVuZAotICAgICAgICBpZiAoaWR1MmV4dV91c2VfcnMyX2kpIGJlZ2luCi0gICAgICAgICAgICBleHVfcXVldWUucnMyX2FkZHIgICA8PSBpZHUyZXh1X2NtZF9pLnJzMl9hZGRyOwotICAgICAgICBlbmQKLSAgICAgICAgaWYgKGlkdTJleHVfdXNlX3JkX2kpICBiZWdpbgotICAgICAgICAgICAgZXh1X3F1ZXVlLnJkX2FkZHIgICAgPD0gaWR1MmV4dV9jbWRfaS5yZF9hZGRyOwotICAgICAgICBlbmQKLSAgICAgICAgaWYgKGlkdTJleHVfdXNlX2ltbV9pKSBiZWdpbgotICAgICAgICAgICAgZXh1X3F1ZXVlLmltbSAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5pbW07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWBlbHNlIC8vIH5TQ1IxX05PX0VYRV9TVEFHRQotCi1hc3NpZ24gZXh1X3F1ZXVlX2JhcnJpZXIgPSB3ZmlfaGFsdGVkX2ZmIHwgd2ZpX3J1bl9zdGFydF9mZgotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCBoZHUyZXh1X2RiZ19oYWx0ZWRfaSAgfCBkYmdfcnVuX3N0YXJ0X25wYnVmCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLTsKLWFzc2lnbiBleHVfcXVldWVfdmQgID0gaWR1MmV4dV9yZXFfaSAmIH5leHVfcXVldWVfYmFycmllcjsKLWFzc2lnbiBleHVfcXVldWUgICAgID0gaWR1MmV4dV9jbWRfaTsKLQotYGVuZGlmIC8vIH5TQ1IxX05PX0VYRV9TVEFHRQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZWdlciBBcml0aG1ldGljIExvZ2ljIFVuaXQgKElBTFUpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIC8vCi0gLy8gRnVuY3Rpb25hbGl0eToKLSAvLyAtIFBlcmZvcm1zIGFkZGl0aW9uL3N1YnRyYWN0aW9uIGFuZCBhcml0aG1ldGljIGFuZCBicmFuY2ggY29tcGFyaXNvbnMKLSAvLyAtIFBlcmZvcm1zIGxvZ2ljYWwgb3BlcmF0aW9ucyAoQU5EKEkpLCBPUihJKSwgWE9SKEkpKQotIC8vIC0gUGVyZm9ybXMgYWRkcmVzcyBjYWxjdWxhdGlvbiBmb3IgYnJhbmNoLCBqdW1wLCBETUVNIGxvYWQgYW5kIHN0b3JlIGFuZCBBVUlQQwotIC8vICAgaW5zdHJ1Y3Rpb25zCi0gLy8gLSBQZXJmb3JtcyBzaGlmdCBvcGVyYXRpb25zCi0gLy8gLSBQZXJmb3JtcyBNVUwvRElWIG9wZXJhdGlvbnMKLSAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSUFMVSBtYWluIG9wZXJhbmRzIGZldGNoCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi1hc3NpZ24gaWFsdV92ZCAgPSBleHVfcXVldWVfdmQgJiAoZXh1X3F1ZXVlLmlhbHVfY21kICE9IFNDUjFfSUFMVV9DTURfTk9ORSkKLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICYgfnRkdTJleHVfaWJya3B0X2V4Y19yZXFfaQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgOwotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotCi1hbHdheXNfY29tYiBiZWdpbgotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgIGlmICh+aWFsdV92ZCkgYmVnaW4KLSAgICAgICAgaWFsdV9tYWluX29wMSA9ICcwOwotICAgICAgICBpYWx1X21haW5fb3AyID0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLSAgICAgICAgaWYgKGV4dV9xdWV1ZS5pYWx1X29wID09IFNDUjFfSUFMVV9PUF9SRUdfUkVHKSBiZWdpbgotICAgICAgICAgICAgaWFsdV9tYWluX29wMSA9IG1wcmYyZXh1X3JzMV9kYXRhX2k7Ci0gICAgICAgICAgICBpYWx1X21haW5fb3AyID0gbXByZjJleHVfcnMyX2RhdGFfaTsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGlhbHVfbWFpbl9vcDEgPSBtcHJmMmV4dV9yczFfZGF0YV9pOwotICAgICAgICAgICAgaWFsdV9tYWluX29wMiA9IGV4dV9xdWV1ZS5pbW07Ci0gICAgICAgIGVuZAotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotZW5kCi0KLS8vIElBTFUgYWRkcmVzcyBvcGVyYW5kcyBmZXRjaAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZiAoZXh1X3F1ZXVlLnN1bTJfb3AgPT0gU0NSMV9TVU0yX09QX1JFR19JTU0pIGJlZ2luCi0gICAgICAgIGlhbHVfYWRkcl9vcDEgPSBtcHJmMmV4dV9yczFfZGF0YV9pOwotICAgICAgICBpYWx1X2FkZHJfb3AyID0gZXh1X3F1ZXVlLmltbTsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpYWx1X2FkZHJfb3AxID0gcGNfY3Vycl9mZjsKLSAgICAgICAgaWFsdV9hZGRyX29wMiA9IGV4dV9xdWV1ZS5pbW07Ci0gICAgZW5kCi1lbmQKLQotLy8gSUFMVSBtb2R1bGUgaW5zdGFudGlhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc2NyMV9waXBlX2lhbHUgaV9pYWx1KAotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgIC8vIENvbW1vbgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICksCi0gICAgLmV4dTJpYWx1X3J2bV9jbWRfdmRfaSAgICAgIChpYWx1X3ZkICAgICAgICAgICApLAotICAgIC5pYWx1MmV4dV9ydm1fcmVzX3JkeV9vICAgICAoaWFsdV9yZHkgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotICAgIC8vIElBTFUKLSAgICAuZXh1MmlhbHVfbWFpbl9vcDFfaSAgICAgICAgKGlhbHVfbWFpbl9vcDEgICAgICksCi0gICAgLmV4dTJpYWx1X21haW5fb3AyX2kgICAgICAgIChpYWx1X21haW5fb3AyICAgICApLAotICAgIC5leHUyaWFsdV9jbWRfaSAgICAgICAgICAgICAoZXh1X3F1ZXVlLmlhbHVfY21kKSwKLSAgICAuaWFsdTJleHVfbWFpbl9yZXNfbyAgICAgICAgKGlhbHVfbWFpbl9yZXMgICAgICksCi0gICAgLmlhbHUyZXh1X2NtcF9yZXNfbyAgICAgICAgIChpYWx1X2NtcCAgICAgICAgICApLAotCi0gICAgLy8gQWRkcmVzcyBhZGRlciBzaWduYWxzCi0gICAgLmV4dTJpYWx1X2FkZHJfb3AxX2kgICAgICAgIChpYWx1X2FkZHJfb3AxICAgICApLAotICAgIC5leHUyaWFsdV9hZGRyX29wMl9pICAgICAgICAoaWFsdV9hZGRyX29wMiAgICAgKSwKLSAgICAuaWFsdTJleHVfYWRkcl9yZXNfbyAgICAgICAgKGlhbHVfYWRkcl9yZXMgICAgICkKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFeGNlcHRpb25zIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBFeGNlcHRpb25zIGxvZ2ljIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIEV4Y2VwdGlvbiByZXF1ZXN0IGxvZ2ljCi0gLy8gLSBFeGNlcHRpb24gY29kZSBlbmNvZGVyCi0gLy8gLSBFeGNlcHRpb24gdHJhcCB2YWx1ZSBtdWx0aXBsZXhlcgotIC8vCi0vLwotCi1gaWZuZGVmIFNDUjFfUlZDX0VYVAotYXNzaWduIGpiX21pc2FsaWduICA9IGV4dV9xdWV1ZV92ZCAgJiBqYl90YWtlbiAmIHxqYl9uZXdfcGNbMTowXTsKLWBlbmRpZiAvLyB+U0NSMV9SVkNfRVhUCi0KLS8vIEV4Y2VwdGlvbiByZXF1ZXN0Ci1hc3NpZ24gZXh1X2V4Y19yZXEgID0gZXh1X3F1ZXVlX3ZkICYgKGV4dV9xdWV1ZS5leGNfcmVxIHwgbHN1X2V4Y19yZXEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjc3IyZXh1X3J3X2V4Y19pCi1gaWZuZGVmIFNDUjFfUlZDX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGpiX21pc2FsaWduCi1gZW5kaWYgLy8gflNDUjFfUlZDX0VYVAotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXh1MmhkdV9pYnJrcHRfaHdfbwotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLS8vIEVYVSBleGNlcHRpb24gcmVxdWVzdCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfREJHX0VOCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGV4dV9leGNfcmVxX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgZXh1X2V4Y19yZXFfZmYgPD0gZXh1X2V4Y19yZXFfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gZXh1X2V4Y19yZXFfbmV4dCA9IGhkdTJleHVfZGJnX2hhbHQycnVuX2kgPyAxJ2IwIDogZXh1X2V4Y19yZXE7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotLy8gRXhjZXB0aW9uIGNvZGUgZW5jb2RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgIGV4dTJoZHVfaWJya3B0X2h3X286IGV4Y19jb2RlID0gU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UOwotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgIGV4dV9xdWV1ZS5leGNfcmVxICA6IGV4Y19jb2RlID0gZXh1X3F1ZXVlLmV4Y19jb2RlOwotICAgICAgICBsc3VfZXhjX3JlcSAgICAgICAgOiBleGNfY29kZSA9IGxzdV9leGNfY29kZTsKLSAgICAgICAgY3NyMmV4dV9yd19leGNfaSAgIDogZXhjX2NvZGUgPSBTQ1IxX0VYQ19DT0RFX0lMTEVHQUxfSU5TVFI7Ci1gaWZuZGVmIFNDUjFfUlZDX0VYVAotICAgICAgICBqYl9taXNhbGlnbiAgICAgICAgOiBleGNfY29kZSA9IFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR047Ci1gZW5kaWYgLy8gflNDUjFfUlZDX0VYVAotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgOiBleGNfY29kZSA9IFNDUjFfRVhDX0NPREVfRUNBTExfTTsKLSAgICBlbmRjYXNlIC8vIDEnYjEKLWVuZAotCi0vLyBFeGNlcHRpb24gdHJhcCB2YWx1ZSBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGluc3RyX2ZhdWx0X3J2aV9oaSA9IGV4dV9xdWV1ZS5pbnN0cl9ydmM7Ci1hc3NpZ24gZXh1X2lsbGVnYWxfaW5zdHIgPSB7ZXh1MmNzcl9yd19hZGRyX28sICAgICAgICAgIC8vIENTUiBhZGRyZXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNScoZXh1X3F1ZXVlLnJzMV9hZGRyKSwgICAgIC8vIHJzMSAvIHppbW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWUuaW1tWzE0OjEyXSwgICAgICAgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNScoZXh1X3F1ZXVlLnJkX2FkZHIpLCAgICAgIC8vIHJkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfU1lTVEVNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSU5TVFJfUlZJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotCi0vLyBJZiBJbnN0cnVjdGlvbiBBY2Nlc3MgRmF1bHQgb2NjdXJyZWQgb24gaGlnaCBwYXJ0IG9mIFJWSSBpbnN0cnVjdGlvbiB0cmFwCi0vLyB2YWx1ZSBpcyBzZXQgdG8gcG9pbnQgb24gdGhlIGhpZ2ggcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gKGluY19wYz1wYysyKQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChleGNfY29kZSkKLWBpZm5kZWYgU0NSMV9SVkNfRVhUCi0gICAgICAgIFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR04gICAgOiBleGNfdHJhcF92YWwgPSBqYl9uZXdfcGM7Ci1gZW5kaWYgLy8gU0NSMV9SVkNfRVhUCi0gICAgICAgIFNDUjFfRVhDX0NPREVfSU5TVFJfQUNDRVNTX0ZBVUxUOiBleGNfdHJhcF92YWwgPSBpbnN0cl9mYXVsdF9ydmlfaGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGluY19wYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGNfY3Vycl9mZjsKLWBpZmRlZiBTQ1IxX01UVkFMX0lMTEVHQUxfSU5TVFJfRU4KLSAgICAgICAgU0NSMV9FWENfQ09ERV9JTExFR0FMX0lOU1RSICAgICA6IGV4Y190cmFwX3ZhbCA9IGV4dV9xdWV1ZS5leGNfcmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBleHVfcXVldWUuaW1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBleHVfaWxsZWdhbF9pbnN0cjsKLWBlbHNlIC8vIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgotICAgICAgICBTQ1IxX0VYQ19DT0RFX0lMTEVHQUxfSU5TVFIgICAgIDogZXhjX3RyYXBfdmFsID0gJzA7Ci1gZW5kaWYgLy8gU0NSMV9NVFZBTF9JTExFR0FMX0lOU1RSX0VOCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2k6IGV4Y190cmFwX3ZhbCA9IHBjX2N1cnJfZmY7Ci0gICAgICAgICAgICAgICAgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pOiBleGNfdHJhcF92YWwgPSBpYWx1X2FkZHJfcmVzOwotICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgIDogZXhjX3RyYXBfdmFsID0gJzA7Ci0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgIFNDUjFfRVhDX0NPREVfTERfQUREUl9NSVNBTElHTiwKLSAgICAgICAgU0NSMV9FWENfQ09ERV9MRF9BQ0NFU1NfRkFVTFQsCi0gICAgICAgIFNDUjFfRVhDX0NPREVfU1RfQUREUl9NSVNBTElHTiwKLSAgICAgICAgU0NSMV9FWENfQ09ERV9TVF9BQ0NFU1NfRkFVTFQgICA6IGV4Y190cmFwX3ZhbCA9IGlhbHVfYWRkcl9yZXM7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgOiBleGNfdHJhcF92YWwgPSAnMDsKLSAgICBlbmRjYXNlIC8vIGV4Y19jb2RlCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdGSSBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gV2FpdCBmb3IgaW50ZXJydXB0IChXRkkpIGxvZ2ljIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIFdGSSBjb250cm9sIGxvZ2ljCi0gLy8gLSBXRkkgUnVuIFN0YXJ0IHJlZ2lzdGVyCi0gLy8gLSBXRkkgSGFsdGVkIGZsYWcgcmVnaXN0ZXIKLSAvLyAtIFdGSSBzdGF0dXMgc2lnbmFscwotLy8KLQotLy8gV0ZJIGNvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB3ZmlfaGFsdF9jb25kID0gfmNzcjJleHVfaXBfaWVfaQotICAgICAgICAgICAgICAgICAgICAgJiAoKGV4dV9xdWV1ZV92ZCAmIGV4dV9xdWV1ZS53ZmlfcmVxKSB8IHdmaV9ydW5fc3RhcnRfZmYpCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgICYgfmhkdTJleHVfbm9fY29tbWl0X2kgJiB+aGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9pICYgfmhkdTJleHVfZGJnX3J1bjJoYWx0X2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgOwotYXNzaWduIHdmaV9oYWx0X3JlcSAgPSB+d2ZpX2hhbHRlZF9mZiAmIHdmaV9oYWx0X2NvbmQ7Ci0KLS8vIEhBUlQgd2lsbCBleGl0IFdGSSBoYWx0ZWQgc3RhdGUgaWYgdGhlIGV2ZW50IHRoYXQgY2F1c2VzIHRoZSBIQVJUIHRvIHJlc3VtZQotLy8gZXhlY3V0aW9uIG9jY3VycyBldmVuIGlmIGl0IGRvZXNuJ3QgY2F1c2UgYW4gaW50ZXJydXB0IHRvIGJlIHRha2VuCi1hc3NpZ24gd2ZpX3J1bl9yZXEgICA9IHdmaV9oYWx0ZWRfZmYgICYgKGNzcjJleHVfaXBfaWVfaQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGR1MmV4dV9kYmdfaGFsdDJydW5faQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLS8vIFdGSSBSdW4gU3RhcnQgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZm5kZWYgU0NSMV9DTEtDVFJMX0VOCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLWBlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGtfYWx3X29uKSBiZWdpbgotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHdmaV9ydW5fc3RhcnRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB3ZmlfcnVuX3N0YXJ0X2ZmIDw9IHdmaV9ydW5fc3RhcnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gd2ZpX3J1bl9zdGFydF9uZXh0ID0gd2ZpX2hhbHRlZF9mZiAmIGNzcjJleHVfaXBfaWVfaSAmIH5leHUyY3NyX3Rha2VfaXJxX287Ci0KLS8vIFdGSSBoYWx0ZWQgZmxhZyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHdmaV9oYWx0ZWRfdXBkID0gd2ZpX2hhbHRfcmVxIHwgd2ZpX3J1bl9yZXE7Ci0KLWBpZm5kZWYgU0NSMV9DTEtDVFJMX0VOCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLWBlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGtfYWx3X29uKSBiZWdpbgotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHdmaV9oYWx0ZWRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAod2ZpX2hhbHRlZF91cGQpIGJlZ2luCi0gICAgICAgIHdmaV9oYWx0ZWRfZmYgPD0gd2ZpX2hhbHRlZF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB3ZmlfaGFsdGVkX25leHQgPSB3ZmlfaGFsdF9yZXEgfCB+d2ZpX3J1bl9yZXE7Ci0KLS8vIFdGSSBzdGF0dXMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGV4dTJwaXBlX3dmaV9ydW4yaGFsdF9vID0gd2ZpX2hhbHRfcmVxOwotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotYXNzaWduIGV4dTJwaXBlX3dmaV9oYWx0ZWRfbyAgID0gd2ZpX2hhbHRlZF9mZjsKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFByb2dyYW0gQ291bnRlciBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUEMgbG9naWMgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gUEMgaW5pdGlhbGl6YXRpb24gbG9naWMKLSAvLyAtIEN1cnJlbnQgUEMgcmVnaXN0ZXIKLSAvLyAtIE5ldyBQQyBtdWx0aXBsZXhlcgotCi0vLyBQQyBpbml0aWFsaXphdGlvbiBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEdlbmVyYXRlcyBhIE5ldyBQQyByZXF1ZXN0IHRvIHNldCBQQyB0byByZXNldCB2YWx1ZQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBpbml0X3BjX3YgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKH4maW5pdF9wY192KSBiZWdpbgotICAgICAgICAgICAgaW5pdF9wY192IDw9IHtpbml0X3BjX3ZbMjowXSwgMSdiMX07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBpbml0X3BjID0gfmluaXRfcGNfdlszXSAmIGluaXRfcGNfdlsyXTsKLQotLy8gQ3VycmVudCBQQyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHBjX2N1cnJfdXBkID0gKChleHUycGlwZV9pbnN0cmV0X28gfCBleHUyY3NyX3Rha2VfaXJxX28KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZikgJiAoIH5oZHUyZXh1X3BjX2Fkdm10X2RzYmxfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X25vX2NvbW1pdF9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICApKTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcGNfY3Vycl9mZiA8PSBTQ1IxX1JTVF9WRUNUT1I7Ci0gICAgZW5kIGVsc2UgaWYgKHBjX2N1cnJfdXBkKSBiZWdpbgotICAgICAgICBwY19jdXJyX2ZmIDw9IHBjX2N1cnJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1gaWZkZWYgU0NSMV9SVkNfRVhUCi1hc3NpZ24gaW5jX3BjID0gcGNfY3Vycl9mZiArIChleHVfcXVldWUuaW5zdHJfcnZjID8gYFNDUjFfWExFTidkMiA6IGBTQ1IxX1hMRU4nZDQpOwotYGVsc2UgLy8gflNDUjFfUlZDX0VYVAotYXNzaWduIGluY19wYyA9IHBjX2N1cnJfZmYgKyBgU0NSMV9YTEVOJ2Q0OwotYGVuZGlmIC8vIH5TQ1IxX1JWQ19FWFQKLQotYXNzaWduIHBjX2N1cnJfbmV4dCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9vICAgICAgICA/IGV4dTJpZnVfcGNfbmV3X28KLSAgICAgICAgICAgICAgICAgICAgOiAoaW5jX3BjWzZdIF4gcGNfY3Vycl9mZls2XSkgPyBpbmNfcGMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7cGNfY3Vycl9mZltgU0NSMV9YTEVOLTE6Nl0sIGluY19wY1s1OjBdfTsKLQotLy8gTmV3IFBDIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGluaXRfcGMgICAgICAgICAgICAgOiBleHUyaWZ1X3BjX25ld19vID0gU0NSMV9SU1RfVkVDVE9SOwotICAgICAgICBleHUyY3NyX3Rha2VfZXhjX28sCi0gICAgICAgIGV4dTJjc3JfdGFrZV9pcnFfbywKLSAgICAgICAgZXh1MmNzcl9tcmV0X2luc3RyX286IGV4dTJpZnVfcGNfbmV3X28gPSBjc3IyZXh1X25ld19wY19pOwotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgIGRiZ19ydW5fc3RhcnRfbnBidWYgOiBleHUyaWZ1X3BjX25ld19vID0gaGR1MmV4dV9kYmdfbmV3X3BjX2k7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgd2ZpX3J1bl9zdGFydF9mZiAgICA6IGV4dTJpZnVfcGNfbmV3X28gPSBwY19jdXJyX2ZmOwotICAgICAgICBleHVfcXVldWUuZmVuY2VpX3JlcTogZXh1MmlmdV9wY19uZXdfbyA9IGluY19wYzsKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGV4dTJpZnVfcGNfbmV3X28gPSBpYWx1X2FkZHJfcmVzICYgU0NSMV9KVU1QX01BU0s7Ci0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiBleHUyaWZ1X3BjX25ld19yZXFfbyA9IGluaXRfcGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dTJjc3JfdGFrZV9pcnFfbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXh1MmNzcl90YWtlX2V4Y19vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmNzcl9tcmV0X2luc3RyX28gJiB+Y3NyMmV4dV9tc3RhdHVzX21pZV91cF9pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dV9xdWV1ZV92ZCAmIGV4dV9xdWV1ZS5mZW5jZWlfcmVxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHdmaV9ydW5fc3RhcnRfZmYKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGNsa19waXBlX2VuCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkYmdfcnVuX3N0YXJ0X25wYnVmCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChleHVfcXVldWVfdmQgJiBqYl90YWtlbik7Ci0KLS8vIEp1bXAvYnJhbmNoIHNpZ25hbHMKLWFzc2lnbiBicmFuY2hfdGFrZW4gPSBleHVfcXVldWUuYnJhbmNoX3JlcSAmIGlhbHVfY21wOwotYXNzaWduIGpiX3Rha2VuICAgICA9IGV4dV9xdWV1ZS5qdW1wX3JlcSB8IGJyYW5jaF90YWtlbjsKLWFzc2lnbiBqYl9uZXdfcGMgICAgPSBpYWx1X2FkZHJfcmVzICYgU0NSMV9KVU1QX01BU0s7Ci0KLS8vIFBDIHRvIGJlIGxvYWRlZCBvbiBNUkVUIGZyb20gaW50ZXJydXB0IHRyYXAKLWFzc2lnbiBleHUyY3NyX3BjX25leHRfbyAgPSB+ZXh1X3F1ZXVlX3ZkID8gcGNfY3Vycl9mZgotICAgICAgICAgICAgICAgICAgICAgICAgICA6IGpiX3Rha2VuICAgICAgPyBqYl9uZXdfcGMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5jX3BjOwotYXNzaWduIGV4dTJwaXBlX3BjX2N1cnJfbyA9IHBjX2N1cnJfZmY7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2FkL1N0b3JlIFVuaXQgKExTVSkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gUGVyZm9ybXMgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucyBpbiBEYXRhIE1lbW9yeQotIC8vIC0gR2VuZXJhdGVzIERNRU0gYWRkcmVzcyBtaXNhbGlnbiBhbmQgYWNjZXNzIGZhdWx0IGV4Y2VwdGlvbnMKLSAvLyAtIFBhc3NlcyBETUVNIG9wZXJhdGlvbnMgaW5mb3JtYXRpb24gdG8gVERVIGFuZCBnZW5lcmF0ZXMgTFNVIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBsc3VfcmVxICA9ICgoZXh1X3F1ZXVlLmxzdV9jbWQgIT0gU0NSMV9MU1VfQ01EX05PTkUpICYgZXh1X3F1ZXVlX3ZkKTsKLQotc2NyMV9waXBlX2xzdSBpX2xzdSgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gRVhVIDwtPiBMU1UgaW50ZXJmYWNlCi0gICAgLmV4dTJsc3VfcmVxX2kgICAgICAgICAgICAgIChsc3VfcmVxICAgICAgICAgICAgICAgICApLCAgICAgICAvLyBSZXF1ZXN0IHRvIExTVQotICAgIC5leHUybHN1X2NtZF9pICAgICAgICAgICAgICAoZXh1X3F1ZXVlLmxzdV9jbWQgICAgICAgKSwgICAgICAgLy8gTFNVIGNvbW1hbmQKLSAgICAuZXh1MmxzdV9hZGRyX2kgICAgICAgICAgICAgKGlhbHVfYWRkcl9yZXMgICAgICAgICAgICksICAgICAgIC8vIERNRU0gYWRkcmVzcwotICAgIC5leHUybHN1X3NkYXRhX2kgICAgICAgICAgICAobXByZjJleHVfcnMyX2RhdGFfaSAgICAgKSwgICAgICAgLy8gRGF0YSBmb3Igc3RvcmUgdG8gRE1FTQotICAgIC5sc3UyZXh1X3JkeV9vICAgICAgICAgICAgICAobHN1X3JkeSAgICAgICAgICAgICAgICAgKSwgICAgICAgLy8gTFNVIHJlYWR5Ci0gICAgLmxzdTJleHVfbGRhdGFfbyAgICAgICAgICAgIChsc3VfbF9kYXRhICAgICAgICAgICAgICApLCAgICAgICAvLyBMb2FkZWQgZGF0YSBmb3JtIERNRU0KLSAgICAubHN1MmV4dV9leGNfbyAgICAgICAgICAgICAgKGxzdV9leGNfcmVxICAgICAgICAgICAgICksICAgICAgIC8vIExTVSBleGNlcHRpb24KLSAgICAubHN1MmV4dV9leGNfY29kZV9vICAgICAgICAgKGxzdV9leGNfY29kZSAgICAgICAgICAgICksICAgICAgIC8vIExTVSBleGNlcHRpb24gY29kZQotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAvLyBURFUgPC0+IExTVSBpbnRlcmZhY2UKLSAgICAubHN1MnRkdV9kbW9uX28gICAgICAgICAgICAgKGxzdTJ0ZHVfZG1vbl9vICAgICAgICAgICksCi0gICAgLnRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSAgICh0ZHUybHN1X2licmtwdF9leGNfcmVxX2kpLAotICAgIC50ZHUybHN1X2RicmtwdF9leGNfcmVxX2kgICAodGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pKSwKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmxzdTJkbWVtX3JlcV9vICAgICAgICAgICAgIChleHUyZG1lbV9yZXFfbyAgICAgICAgICApLCAgICAgICAvLyBETUVNIHJlcXVlc3QKLSAgICAubHN1MmRtZW1fY21kX28gICAgICAgICAgICAgKGV4dTJkbWVtX2NtZF9vICAgICAgICAgICksICAgICAgIC8vIERNRU0gY29tbWFuZAotICAgIC5sc3UyZG1lbV93aWR0aF9vICAgICAgICAgICAoZXh1MmRtZW1fd2lkdGhfbyAgICAgICAgKSwgICAgICAgLy8gRE1FTSB3aWR0aAotICAgIC5sc3UyZG1lbV9hZGRyX28gICAgICAgICAgICAoZXh1MmRtZW1fYWRkcl9vICAgICAgICAgKSwgICAgICAgLy8gRE1FTSBhZGRyZXNzCi0gICAgLmxzdTJkbWVtX3dkYXRhX28gICAgICAgICAgIChleHUyZG1lbV93ZGF0YV9vICAgICAgICApLCAgICAgICAvLyBETUVNIHdyaXRlIGRhdGEKLSAgICAuZG1lbTJsc3VfcmVxX2Fja19pICAgICAgICAgKGRtZW0yZXh1X3JlcV9hY2tfaSAgICAgICksICAgICAgIC8vIERNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQotICAgIC5kbWVtMmxzdV9yZGF0YV9pICAgICAgICAgICAoZG1lbTJleHVfcmRhdGFfaSAgICAgICAgKSwgICAgICAgLy8gRE1FTSByZWFkIGRhdGEKLSAgICAuZG1lbTJsc3VfcmVzcF9pICAgICAgICAgICAgKGRtZW0yZXh1X3Jlc3BfaSAgICAgICAgICkgICAgICAgIC8vIERNRU0gcmVzcG9uc2UKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFWFUgc3RhdHVzIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBFWFUgcmVhZHkgZmxhZwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotICAgICAgICBsc3VfcmVxICAgICAgICAgICAgICAgICA6IGV4dV9yZHkgPSBsc3VfcmR5IHwgbHN1X2V4Y19yZXE7Ci1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgIGlhbHVfdmQgICAgICAgICAgICAgICAgIDogZXh1X3JkeSA9IGlhbHVfcmR5OwotYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAotICAgICAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwX2k6IGV4dV9yZHkgPSAxJ2IwOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGV4dV9yZHkgPSAxJ2IxOwotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gZXh1MnBpcGVfaW5pdF9wY19vICAgICAgID0gaW5pdF9wYzsKLWFzc2lnbiBleHUyaWR1X3JkeV9vICAgICAgICAgICAgPSBleHVfcmR5ICYgfmV4dV9xdWV1ZV9iYXJyaWVyOwotYXNzaWduIGV4dTJwaXBlX2V4dV9idXN5X28gICAgICA9IGV4dV9xdWV1ZV92ZCAmIH5leHVfcmR5OwotYXNzaWduIGV4dTJwaXBlX2luc3RyZXRfbyAgICAgICA9IGV4dV9xdWV1ZV92ZCAmIGV4dV9yZHk7Ci1hc3NpZ24gZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19vID0gZXh1MnBpcGVfaW5zdHJldF9vICYgfmV4dV9leGNfcmVxOwotCi0vLyBFeGNlcHRpb25zCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWFzc2lnbiBleHUycGlwZV9leGNfcmVxX28gID0gZXh1X3F1ZXVlX3ZkID8gZXh1X2V4Y19yZXEgOiBleHVfZXhjX3JlcV9mZjsKLWBlbHNlIC8vIFNDUjFfREJHX0VOCi1hc3NpZ24gZXh1MnBpcGVfZXhjX3JlcV9vICA9IGV4dV9leGNfcmVxOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vIEJyZWFrcG9pbnRzCi1hc3NpZ24gZXh1MnBpcGVfYnJrcHRfbyAgICA9IGV4dV9xdWV1ZV92ZCAmIChleHVfcXVldWUuZXhjX2NvZGUgPT0gU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UKTsKLWBpZmRlZiBTQ1IxX1REVV9FTgotYXNzaWduIGV4dTJoZHVfaWJya3B0X2h3X28gPSB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2kgfCB0ZHUybHN1X2RicmtwdF9leGNfcmVxX2k7Ci1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVYVSA8LT4gTVBSRiBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIE9wZXJhbmRzIGZldGNoaW5nIHN0YWdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgIFNDUjFfTk9fRVhFX1NUQUdFCi1hc3NpZ24gbXByZl9yczFfcmVxID0gZXh1X3F1ZXVlX3ZkICYgaWR1MmV4dV91c2VfcnMxX2k7Ci1hc3NpZ24gbXByZl9yczJfcmVxID0gZXh1X3F1ZXVlX3ZkICYgaWR1MmV4dV91c2VfcnMyX2k7Ci1gZWxzZSAvLyBTQ1IxX05PX0VYRV9TVEFHRQotIGBpZmRlZiAgU0NSMV9NUFJGX1JBTQotYXNzaWduIG1wcmZfcnMxX3JlcSA9IGV4dV9xdWV1ZV9lbgotICAgICAgICAgICAgICAgICAgICA/IChleHVfcXVldWVfdmRfbmV4dCAmIGlkdTJleHVfdXNlX3JzMV9pKQotICAgICAgICAgICAgICAgICAgICA6IChleHVfcXVldWVfdmQgICAgICAmIGlkdTJleHVfdXNlX3JzMV9mZik7Ci1hc3NpZ24gbXByZl9yczJfcmVxID0gZXh1X3F1ZXVlX2VuCi0gICAgICAgICAgICAgICAgICAgID8gKGV4dV9xdWV1ZV92ZF9uZXh0ICYgaWR1MmV4dV91c2VfcnMyX2kpCi0gICAgICAgICAgICAgICAgICAgIDogKGV4dV9xdWV1ZV92ZCAgICAgICYgaWR1MmV4dV91c2VfcnMyX2ZmKTsKLSBgZWxzZSAvLyBTQ1IxX01QUkZfUkFNCi1hc3NpZ24gbXByZl9yczFfcmVxID0gZXh1X3F1ZXVlX3ZkICYgaWR1MmV4dV91c2VfcnMxX2ZmOwotYXNzaWduIG1wcmZfcnMyX3JlcSA9IGV4dV9xdWV1ZV92ZCAmIGlkdTJleHVfdXNlX3JzMl9mZjsKLSBgZW5kaWYgLy8gU0NSMV9NUFJGX1JBTQotYGVuZGlmIC8vIFNDUjFfTk9fRVhFX1NUQUdFCi0KLS8vIElmIGV4dV9xdWV1ZSBpc24ndCBlbmFibGVkIHdlIG5lZWQgcHJldmlvdXMgYWRkcmVzc2VzIGFuZCB1c2FnZSBmbGFncyBiZWNhdXNlCi0vLyBSQU0gYmxvY2tzIHJlYWQgb3BlcmF0aW9uIGlzIFNZTkNIUk9OT1VTCi1gaWZkZWYgU0NSMV9NUFJGX1JBTQotYXNzaWduIG1wcmZfcnMxX2FkZHIgPSBleHVfcXVldWVfZW4gPyBpZHUyZXh1X2NtZF9pLnJzMV9hZGRyIDogZXh1X3F1ZXVlLnJzMV9hZGRyOwotYXNzaWduIG1wcmZfcnMyX2FkZHIgPSBleHVfcXVldWVfZW4gPyBpZHUyZXh1X2NtZF9pLnJzMl9hZGRyIDogZXh1X3F1ZXVlLnJzMl9hZGRyOwotYGVsc2UgLy8gU0NSMV9NUFJGX1JBTQotYXNzaWduIG1wcmZfcnMxX2FkZHIgPSBleHVfcXVldWUucnMxX2FkZHI7Ci1hc3NpZ24gbXByZl9yczJfYWRkciA9IGV4dV9xdWV1ZS5yczJfYWRkcjsKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUkFNCi0KLWFzc2lnbiBleHUybXByZl9yczFfYWRkcl9vID0gbXByZl9yczFfcmVxID8gYFNDUjFfTVBSRl9BV0lEVEgnKG1wcmZfcnMxX2FkZHIpIDogJzA7Ci1hc3NpZ24gZXh1Mm1wcmZfcnMyX2FkZHJfbyA9IG1wcmZfcnMyX3JlcSA/IGBTQ1IxX01QUkZfQVdJRFRIJyhtcHJmX3JzMl9hZGRyKSA6ICcwOwotCi0vLyBXcml0ZSBiYWNrIHN0YWdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZXh1Mm1wcmZfd19yZXFfbyAgID0gKGV4dV9xdWV1ZS5yZF93Yl9zZWwgIT0gU0NSMV9SRF9XQl9OT05FKSAmIGV4dV9xdWV1ZV92ZCAmIH5leHVfZXhjX3JlcQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgfmhkdTJleHVfbm9fY29tbWl0X2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAmICgoZXh1X3F1ZXVlLnJkX3diX3NlbCA9PSBTQ1IxX1JEX1dCX0NTUikgPyBjc3JfYWNjZXNzX2luaXQgOiBleHVfcmR5KTsKLQotYXNzaWduIGV4dTJtcHJmX3JkX2FkZHJfbyA9IGBTQ1IxX01QUkZfQVdJRFRIJyhleHVfcXVldWUucmRfYWRkcik7Ci0KLS8vIE1SUEYgUkQgZGF0YSBtdWx0aXBsZXhlcgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChleHVfcXVldWUucmRfd2Jfc2VsKQotICAgICAgICBTQ1IxX1JEX1dCX1NVTTIgIDogZXh1Mm1wcmZfcmRfZGF0YV9vID0gaWFsdV9hZGRyX3JlczsKLSAgICAgICAgU0NSMV9SRF9XQl9JTU0gICA6IGV4dTJtcHJmX3JkX2RhdGFfbyA9IGV4dV9xdWV1ZS5pbW07Ci0gICAgICAgIFNDUjFfUkRfV0JfSU5DX1BDOiBleHUybXByZl9yZF9kYXRhX28gPSBpbmNfcGM7Ci0gICAgICAgIFNDUjFfUkRfV0JfTFNVICAgOiBleHUybXByZl9yZF9kYXRhX28gPSBsc3VfbF9kYXRhOwotICAgICAgICBTQ1IxX1JEX1dCX0NTUiAgIDogZXh1Mm1wcmZfcmRfZGF0YV9vID0gY3NyMmV4dV9yX2RhdGFfaTsKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICA6IGV4dTJtcHJmX3JkX2RhdGFfbyA9IGlhbHVfbWFpbl9yZXM7Ci0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFWFUgPC0+IENTUiBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIEVYVSA8LT4gQ1NSIGludGVyZmFjZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBDU1Igd3JpdGUvcmVhZCBpbnRlcmZhY2UKLSAvLyAtIENTUiBhY2Nlc3MgRlNNCi0gLy8gLSBDU1IgZXZlbnRzIGludGVyZmFjZToKLSAvLyAgIC0gRXhjZXB0aW9ucyBzaWduYWxzCi0gLy8gICAtIEludGVycnVwdHMgc2lnbmFscwotIC8vICAgLSBNUkVUIHNpZ25hbHMKLS8vCi0KLS8vIENTUnMgd3JpdGUvcmVhZCBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENTUiB3cml0ZS9yZWFkIHJlcXVlc3Qgc2lnbmFscyBjYWxjdWxhdGlvbgotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZiAofmV4dV9xdWV1ZV92ZAotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgfCB0ZHUyZXh1X2licmtwdF9leGNfcmVxX2kKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICkgYmVnaW4KLSAgICAgICAgZXh1MmNzcl9yX3JlcV9vID0gMSdiMDsKLSAgICAgICAgZXh1MmNzcl93X3JlcV9vID0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChleHVfcXVldWUuY3NyX2NtZCkKLSAgICAgICAgICAgIFNDUjFfQ1NSX0NNRF9XUklURSAgOiBiZWdpbgotICAgICAgICAgICAgICAgIGV4dTJjc3Jfcl9yZXFfbyA9IHxleHVfcXVldWUucmRfYWRkcjsKLSAgICAgICAgICAgICAgICBleHUyY3NyX3dfcmVxX28gPSBjc3JfYWNjZXNzX2luaXQ7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQsCi0gICAgICAgICAgICBTQ1IxX0NTUl9DTURfQ0xFQVIgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxX28gPSAxJ2IxOwotICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXFfbyA9IHxleHVfcXVldWUucnMxX2FkZHIgJiBjc3JfYWNjZXNzX2luaXQ7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGV4dTJjc3Jfcl9yZXFfbyA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcV9vID0gMSdiMDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYXNzaWduIGV4dTJjc3Jfd19jbWRfbyAgID0gZXh1X3F1ZXVlLmNzcl9jbWQ7Ci1hc3NpZ24gZXh1MmNzcl9yd19hZGRyX28gPSBleHVfcXVldWUuaW1tW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXTsKLWFzc2lnbiBleHUyY3NyX3dfZGF0YV9vICA9IChleHVfcXVldWUuY3NyX29wID09IFNDUjFfQ1NSX09QX1JFRykKLSAgICAgICAgICAgICAgICAgICAgICAgICA/IG1wcmYyZXh1X3JzMV9kYXRhX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICA6IHsnMCwgZXh1X3F1ZXVlLnJzMV9hZGRyfTsgLy8gemltbQotCi0KLS8vIENTUiBhY2Nlc3MgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfYWNjZXNzX2ZmIDw9IFNDUjFfQ1NSX0lOSVQ7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY3NyX2FjY2Vzc19mZiA8PSBjc3JfYWNjZXNzX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNzcl9hY2Nlc3NfbmV4dCA9IChjc3JfYWNjZXNzX2luaXQgJiBjc3IyZXh1X21zdGF0dXNfbWllX3VwX2kpCi0gICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9DU1JfUkRZCi0gICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9DU1JfSU5JVDsKLQotYXNzaWduIGNzcl9hY2Nlc3NfaW5pdCA9IChjc3JfYWNjZXNzX2ZmID09IFNDUjFfQ1NSX0lOSVQpOwotCi0vLyBDU1IgZXZlbnRzIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRXhjZXB0aW9ucyBzaWduYWxzCi1hc3NpZ24gZXh1MmNzcl90YWtlX2V4Y19vID0gZXh1X2V4Y19yZXEKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X2RiZ19oYWx0ZWRfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBleHUyY3NyX2V4Y19jb2RlX28gPSBleGNfY29kZTsKLWFzc2lnbiBleHUyY3NyX3RyYXBfdmFsX28gPSBleGNfdHJhcF92YWw7Ci0KLS8vIEludGVycnVwdHMgc2lnbmFscwotYXNzaWduIGV4dTJjc3JfdGFrZV9pcnFfbyA9IGNzcjJleHVfaXJxX2kgJiB+ZXh1MnBpcGVfZXh1X2J1c3lfbwotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgfmhkdTJleHVfaXJxX2RzYmxfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X2RiZ19oYWx0ZWRfaQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYgY2xrX3BpcGVfZW4KLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgOwotCi0vLyBNUkVUIHNpZ25hbHMKLS8vIE1SRVQgaW5zdHJ1Y3Rpb24gZmxhZwotYXNzaWduIGV4dTJjc3JfbXJldF9pbnN0cl9vICA9IGV4dV9xdWV1ZV92ZCAmIGV4dV9xdWV1ZS5tcmV0X3JlcQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfnRkdTJleHVfaWJya3B0X2V4Y19yZXFfaQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9kYmdfaGFsdGVkX2kKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gZXh1MmNzcl9tcmV0X3VwZGF0ZV9vID0gZXh1MmNzcl9tcmV0X2luc3RyX28gJiBjc3JfYWNjZXNzX2luaXQ7Ci0KLWBpZmRlZiBTQ1IxX1REVV9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVYVSA8LT4gVERVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5zdHJ1Y3Rpb24gbW9uaXRvcgotYXNzaWduIGV4dTJ0ZHVfaW1vbl9vLnZkICAgID0gZXh1X3F1ZXVlX3ZkOwotYXNzaWduIGV4dTJ0ZHVfaW1vbl9vLnJlcSAgID0gZXh1MnBpcGVfaW5zdHJldF9vOwotYXNzaWduIGV4dTJ0ZHVfaW1vbl9vLmFkZHIgID0gcGNfY3Vycl9mZjsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBleHUydGR1X2licmtwdF9yZXRfbyA9ICcwOwotICAgIGlmIChleHVfcXVldWVfdmQpIGJlZ2luCi0gICAgICAgIGV4dTJ0ZHVfaWJya3B0X3JldF9vID0gdGR1MmV4dV9pYnJrcHRfbWF0Y2hfaTsKLSAgICAgICAgaWYgKGxzdV9yZXEpIGJlZ2luCi0gICAgICAgICAgICBleHUydGR1X2licmtwdF9yZXRfb1tTQ1IxX1REVV9NVFJJR19OVU0tMTowXSB8PSB0ZHUybHN1X2RicmtwdF9tYXRjaF9pOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVHJhY2Vsb2cgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIHVwZGF0ZV9wYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfcGNfZW47Ci0KLWFzc2lnbiB1cGRhdGVfcGNfZW4gPSAoaW5pdF9wYyB8IGV4dTJwaXBlX2luc3RyZXRfbyB8IGV4dTJjc3JfdGFrZV9pcnFfbykKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X3BjX2Fkdm10X2RzYmxfaSAmIH5oZHUyZXh1X25vX2NvbW1pdF9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgOwotYXNzaWduIHVwZGF0ZV9wYyAgICA9IGV4dTJpZnVfcGNfbmV3X3JlcV9vID8gZXh1MmlmdV9wY19uZXdfbyA6IGluY19wYzsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBYIGNoZWNrcwotCi1TQ1IxX1NWQV9FWFVfWENIRUNLX0NUUkwgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2lkdTJleHVfcmVxX2ksIGNzcjJleHVfaXJxX2ksIGNzcjJleHVfaXBfaWVfaSwgbHN1X3JlcSwgbHN1X3JkeSwgZXh1X2V4Y19yZXF9KQotICAgICkgZWxzZSAkZXJyb3IoIkVYVSBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOwotCi1TQ1IxX1NWQV9FWFVfWENIRUNLX1FVRVVFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGlkdTJleHVfcmVxX2kgfC0+ICEkaXN1bmtub3duKGlkdTJleHVfY21kX2kpCi0gICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiB1bmtub3duIHZhbHVlcyBpbiBxdWV1ZSIpOwotCi1TQ1IxX1NWQV9FWFVfWENIRUNLX0NTUl9SREFUQSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUyY3NyX3JfcmVxX28gfC0+ICEkaXN1bmtub3duKHtjc3IyZXh1X3JfZGF0YV9pLCBjc3IyZXh1X3J3X2V4Y19pfSkKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IHVua25vd24gdmFsdWVzIGZyb20gQ1NSIik7Ci0KLS8vIEJlaGF2aW9yIGNoZWNrcwotCi1TQ1IxX1NWQV9FWFVfT05FSE9UIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICRvbmVob3QwKHtleHVfcXVldWUuanVtcF9yZXEsIGV4dV9xdWV1ZS5icmFuY2hfcmVxLCBsc3VfcmVxfSkKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgY29udHJvbCBzaWduYWxzIik7Ci0KLVNDUjFfU1ZBX0VYVV9PTkVIT1RfRVhDIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dV9xdWV1ZV92ZCB8LT4KLSAgICAkb25laG90MCh7ZXh1X3F1ZXVlLmV4Y19yZXEsIGxzdV9leGNfcmVxLCBjc3IyZXh1X3J3X2V4Y19pCi1gaWZuZGVmIFNDUjFfUlZDX0VYVAotICAgICwgamJfbWlzYWxpZ24KLWBlbmRpZgotICAgIH0pCi0gICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBleGNlcHRpb25zICRvbmVob3QwIGZhaWxlZCIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2V4dQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9oZHUuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZjQyMWIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDkwNCArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9oZHUuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSEFSVCBEZWJ1ZyBVbml0IChIRFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vCi0gLy8gRnVuY3Rpb25hbGl0eToKLSAvLyAtIENvbnRyb2xzIEhBUlQgc3RhdGUgKFJVTiwgRGVidWcgUlVOLCBEZWJ1ZyBIQUxURUQpCi0gLy8gLSBTZXR1cHMgRGVidWcgTW9kZSBleGVjdXRpb24KLSAvLyAtIFByb3ZpZGVzIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBEZWJ1ZyBNb2RlIGV4ZWN1dGlvbgotIC8vIC0gUHJvdmlkZXMgUHJvZ3JhbSBCdWZmZXIgZnVuY3Rpb25hbGl0eSAoYSBmZXcgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGlvbiB3aGlsZQotIC8vICAgaW4gRGVidWcgTW9kZSkKLSAvLyAtIFByb3ZpZGVzIGFjY2VzcyB0byBEZWJ1ZyBDU1JzCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBEZWJ1ZyBzdGF0ZSBGU00KLSAvLyAtIEhBUlQgQ29udHJvbCBsb2dpYwotIC8vIC0gSEFSVCBTdGF0dXMgbG9naWMKLSAvLyAtIFByb2dyYW0gQnVmZmVyCi0gLy8gLSBEZWJ1ZyBDU1JzCi0gLy8gLSBIRFUgPC0+IERNIGludGVyZmFjZQotIC8vIC0gSERVIDwtPiBFWFUgaW50ZXJmYWNlCi0gLy8gLSBIRFUgPC0+IElGVSBpbnRlcmZhY2UKLSAvLyAtIEhEVSA8LT4gQ1NSIGludGVyZmFjZQotIC8vIC0gSERVIDwtPiBURFUgaW50ZXJmYWNlCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKLWBpbmNsdWRlICJzY3IxX2hkdS5zdmgiCi0KLW1vZHVsZSBzY3IxX3BpcGVfaGR1ICMocGFyYW1ldGVyIEhBUlRfUEJVRl9JTlNUUl9SRUdPVVRfRU4gPSAxJ2IxKSAoCi0gICAgLy8gQ29tbW9uIHNpZ25hbHMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIEhEVSByZXNldAotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gSERVIGNsb2NrCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbiwgICAgICAgICAgICAgICAgICAgICAvLyBIRFUgY2xvY2sgZW5hYmxlCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19waXBlX2VuLCAgICAgICAgICAgICAgICAvLyBQaXBlbGluZSBjbG9jayBlbmFibGUKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfcmRjX3FsZnlfaSwgICAgICAgIC8vIFBpcGVsaW5lIFJEQyBxdWFsaWZpZXIKLQotICAgIC8vIEhEVSA8LT4gQ1NSIGkvZgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X3JlcV9pLCAgICAgICAgICAgICAgLy8gQ1NSIGkvZiByZXF1ZXN0Ci0gICAgaW5wdXQgIHR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfY21kX2ksICAgICAgICAgICAgICAvLyBDU1IgaS9mIGNvbW1hbmQKLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgtMTowXSAgICAgY3NyMmhkdV9hZGRyX2ksICAgICAgICAgICAgIC8vIENTUiBpL2YgYWRkcmVzcwotICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X3dkYXRhX2ksICAgICAgICAgICAgLy8gQ1NSIGkvZiB3cml0ZSBkYXRhCi0gICAgb3V0cHV0IHR5cGVfc2NyMV9jc3JfcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmVzcF9vLCAgICAgICAgICAgICAvLyBDU1IgaS9mIHJlc3BvbnNlCi0gICAgb3V0cHV0IGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmRhdGFfbywgICAgICAgICAgICAvLyBDU1IgaS9mIHJlYWQgZGF0YQotCi0gICAgLy8gSERVIDwtPiBETSBpL2YKLSAgICAvLyBIQVJUIFJ1biBDb250cm9sIGkvZgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJoZHVfY21kX3JlcV9pLCAgICAgICAgICAgLy8gRE0tSEFSVCBDb21tYW5kIHJlcXVlc3QKLSAgICBpbnB1dCAgdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgZG0yaGR1X2NtZF9pLCAgICAgICAgICAgICAgIC8vIERNLUhBUlQgQ29tbWFuZAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbywgICAgICAgICAgLy8gRE0tSEFSVCBDb21tYW5kIHJlc3BvbnNlCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9jbWRfcmNvZGVfbywgICAgICAgICAvLyBETS1IQVJUIENvbW1hbmQgcmV0dXJuIGNvZGU6IDAgLSBPazsgMSAtIEVycm9yCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9oYXJ0X2V2ZW50X28sICAgICAgICAvLyBETS1IQVJUIEV2ZW50OiAxIGlmIEhBUlQgZGVidWcgc3RhdGUgY2hhbmdlZAotICAgIG91dHB1dCB0eXBlX3NjcjFfaGR1X2hhcnRzdGF0dXNfcyAgICAgICAgICAgICAgICAgICBoZHUyZG1faGFydF9zdGF0dXNfbywgICAgICAgLy8gRE0tSEFSVCBTdGF0dXMKLQotICAgIC8vIFByb2dyYW0gQnVmZmVyIGkvZgotICAgIG91dHB1dCBsb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICBoZHUyZG1fcGJ1Zl9hZGRyX28sICAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgYWRkcmVzcyAtIHNvIGZhciByZXF1ZXN0IG9ubHkgZm9yIDEgaW5zdHJ1Y3Rpb24KLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICAgZG0yaGR1X3BidWZfaW5zdHJfaSwgICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIGluc3RydWN0aW9uCi0KLSAgICAvLyBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmRtX2RyZWdfcmVxX28sICAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVxdWVzdAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fZHJlZ193cl9vLCAgICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZQotICAgIG91dHB1dCBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fZHJlZ193ZGF0YV9vLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZSBkYXRhCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMmhkdV9kcmVnX3Jlc3BfaSwgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlc3BvbnNlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMmhkdV9kcmVnX2ZhaWxfaSwgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIGZhaWwKLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgZG0yaGR1X2RyZWdfcmRhdGFfaSwgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVhZCBkYXRhCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIC8vIEhEVSA8LT4gVERVIGludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUydGR1X2h3YnJrX2RzYmxfbywgICAgICAgLy8gRGlzYWJsZXMgQlJLTQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9pLCAgICAgICAgLy8gVHJpZ2dlciBNb2R1bGUgcmVxdWVzdHMgdHJhbnNpdGlvbiB0byBkZWJ1ZyBtb2RlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJoZHVfaWJya3B0X2h3X2ksICAgICAgICAvLyBIYXJkd2FyZSBicmVha3BvaW50IG9uIGN1cnJlbnQgaW5zdHJ1Y3Rpb24KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gSEFSVCBSdW4gU3RhdHVzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X2V4dV9idXN5X2ksICAgICAgICAvLyBFWFUgYnVzeQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmhkdV9pbnN0cmV0X2ksICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aCBvciB3aXRob3V0IGV4Y2VwdGlvbikKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfaW5pdF9wY19pLCAgICAgICAgIC8vIFJlc2V0IGV4aXQKLQotICAgIC8vIEhBUlQgSGFsdCBTdGF0dXMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfZXh1X2V4Y19yZXFfaSwgICAgIC8vIEV4Y2VwdGlvbiByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X2Jya3B0X2ksICAgICAgICAgICAvLyBTb2Z0d2FyZSBCcmVha3BvaW50IChFQlJFQUspCi0KLSAgICAvLyBIRFUgPC0+IEVYVSBpL2YKLSAgICAvLyBIQVJUIFJ1biBDb250cm9sCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfcGJ1Zl9mZXRjaF9vLCAgICAgICAvLyBGZXRjaCBpbnN0cnVjdGlvbiBmcm9tIFByb2dyYW0gQnVmZmVyCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfbm9fY29tbWl0X28sICAgICAgICAvLyBGb3JiaWQgaW5zdHJ1Y3Rpb24gY29tbWl0bWVudAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2lycV9kc2JsX28sICAgICAgICAgLy8gRGlzYWJsZSBJUlEKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9wY19hZHZtdF9kc2JsX28sICAgIC8vIEZvcmJpZCBQQyBhZHZhbmNlbWVudAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2Rtb2RlX3NzdGVwX2VuX28sICAgLy8gRW5hYmxlIHNpbmdsZS1zdGVwCi0KLSAgICAvLyBIQVJUIHN0YXRlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX2hhbHRlZF9vLCAgICAgICAvLyBEZWJ1ZyBoYWx0ZWQgc3RhdGUKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfcnVuMmhhbHRfbywgICAgIC8vIFRyYW5zaXRpb24gdG8gZGVidWcgaGFsdGVkIHN0YXRlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX2hhbHQycnVuX28sICAgICAvLyBUcmFuc2l0aW9uIHRvIHJ1biBzdGF0ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19ydW5fc3RhcnRfbywgICAgLy8gRmlyc3QgY3ljbGUgb2YgcnVuIHN0YXRlCi0KLSAgICAvLyBQQyBpbnRlcmZhY2UKLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfcGNfY3Vycl9pLCAgICAgICAgIC8vIEN1cnJlbnQgUEMKLSAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfbmV3X3BjX28sICAgICAgIC8vIE5ldyBQQyBmb3IgcmVzdW1lCi0KLSAgICAvLyBIRFUgPC0+IElGVSBpL2YKLSAgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmhkdV9wYnVmX2luc3RyX3JkeV9pLCAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGkvZiByZWFkeQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfaW5zdHJfdmRfbywgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gdmFsaWQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmlmdV9wYnVmX2luc3RyX2Vycl9vLCAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGkvZiBlcnJvcgotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICBoZHUyaWZ1X3BidWZfaW5zdHJfbyAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaXRzZWxmCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgUGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfVElNRU9VVCAgICAgICA9IDY0OyAgICAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDIKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX1RJTUVPVVRfV0lEVEggPSAkY2xvZzIoU0NSMV9IRFVfVElNRU9VVCk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBTaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEZWJ1ZyBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEZTTSBjb250cm9sIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kaGFsdF9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnVuX3JlcTsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9ydW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fY21kX2RoYWx0ZWQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fY21kX2RydW47Ci0KLS8vIERlYnVnIHN0YXRlIEZTTSBzaWduYWxzCi10eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3N0YXRlOwotdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9kaGFsdGVkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9kcnVuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9ydW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3N0YXRlX3Jlc2V0OwotCi0vLyBGU00gdHJhbnNpdGlvbiwgdXBkYXRlIGFuZCBldmVudCByZWdpc3RlcnMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3RyYW5zOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmc21fZXZlbnQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzbV9ldmVudF9uZXh0OwotCi0vLyBIQVJUIENvbnRyb2wgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcmVzdW1lX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfY21kX3JlcTsKLQotLy8gSEFSVCBSdW4gQ29udHJvbCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybF91cGQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsX2NscjsKLXR5cGVfc2NyMV9oZHVfcnVuY3RybF9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmw7Ci0KLS8vIEhBUlQgaGFsdCByZXF1ZXN0IHRpbWVvdXQgY291bnRlciBzaWduYWxzCi1sb2dpYyBbU0NSMV9IRFVfVElNRU9VVF9XSURUSC0xOjBdICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnQ7Ci1sb2dpYyBbU0NSMV9IRFVfVElNRU9VVF9XSURUSC0xOjBdICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0X3JlcV90aW1lb3V0X2NudF9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0X3JlcV90aW1lb3V0X2ZsYWc7Ci0KLS8vIEhBUlQgU3RhdHVzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVfc2NyMV9oZHVfaGFsdHN0YXR1c19zICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRzdGF0dXM7Ci10eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9oYWx0Y2F1c2U7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRfcG5kOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfaGFsdF9hY2s7Ci0KLS8vIERlYnVnIG1vZGUgY2F1c2UgZGVjb2RlciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vZGVfY2F1c2Vfc3N0ZXA7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vZGVfY2F1c2VfZXhjZXB0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtb2RlX2NhdXNlX2VicmVhazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbW9kZV9jYXVzZV9hbnk7Ci1gaWZkZWYgU0NSMV9URFVfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbW9kZV9jYXVzZV90bXJlcTsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0vLyBQcm9ncmFtIEJ1ZmZlciBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFBCVUYgRlNNIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdV9oYW5kc2hha2VfZG9uZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2V4Y19pbmpfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZXhjX2lual9lbmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9zdGFydF9mZXRjaDsKLQotLy8gUEJVRiBGU00gc2lnbmFscwotdHlwZV9zY3IxX2hkdV9wYnVmc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX2N1cnI7Ci10eXBlX3NjcjFfaGR1X3BidWZzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9mc21fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2ZzbV9pZGxlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX2ZldGNoOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX2V4Y2luajsKLQotLy8gUEJVRiBhZGRyZXNzIHNpZ25hbHMKLWxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICBwYnVmX2FkZHJfZmY7Ci1sb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgcGJ1Zl9hZGRyX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9hZGRyX2VuZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2FkZHJfbmV4dF92ZDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfaW5zdHJfd2FpdF9sYXRjaGluZzsKLQotLy8gRGVidWdzIENTUnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENTUnMgd3JpdGUvcmVhZCBpbnRlcmZhY2Ugc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl91cGRfb25faGFsdDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfd3I7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3dyX2RhdGE7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3JkX2RhdGE7Ci0KLS8vIERlYnVnIENvbnRyb2wgYW5kIFN0YXR1cyByZWdpc3RlciAoRENTUikKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZGNzcl9zZWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfd3I7Ci10eXBlX3NjcjFfaGR1X2Rjc3JfcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3JfaW47Ci10eXBlX3NjcjFfaGR1X2Rjc3JfcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfb3V0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX2VicmVha207Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfc3RlcGllOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX3N0ZXA7Ci1sb2dpYyBbU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfTC0KLSAgICAgICBTQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9SOjBdICAgICAgICAgICAgICAgICBjc3JfZGNzcl9jYXVzZTsKLQotLy8gRGVidWcgUHJvZ3JhbSBDb3VudGVyIHJlZ2lzdGVyIChEUEMpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RwY19zZWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RwY193cjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHBjX2ZmOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kcGNfbmV4dDsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHBjX291dDsKLQotLy8gRGVidWcgU2NyYXRjaCByZWdpc3RlciAwIChEU0NSQVRDSDApCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2FkZHJfZHNjcmF0Y2gwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfc2VsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfd3I7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RzY3JhdGNoMF9vdXQ7Ci10eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RzY3JhdGNoMF9yZXNwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVidWcgc3RhdGUgRlNNIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBEZWJ1ZyBzdGF0ZSBGU00gbG9naWMgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gRlNNIGNvbnRyb2wgbG9naWMKLSAvLyAtIERlYnVnIHN0YXRlIEZTTQotIC8vIC0gRlNNIHRyYW5zaXRpb24sIHVwZGF0ZSBhbmQgZXZlbnQgcmVnaXN0ZXJzCi0vLwotCi0vLyBGU00gY29udHJvbCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGRtX2NtZF9kaGFsdGVkID0gKGRtMmhkdV9jbWRfaSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKLWFzc2lnbiBkbV9jbWRfcnVuICAgICA9IChkbTJoZHVfY21kX2kgPT0gU0NSMV9IRFVfREJHU1RBVEVfUlVOKTsKLWFzc2lnbiBkbV9jbWRfZHJ1biAgICA9IChkbTJoZHVfY21kX2kgPT0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTik7Ci0KLWFzc2lnbiBkbV9kaGFsdF9yZXEgICA9IGRtMmhkdV9jbWRfcmVxX2kgJiBkbV9jbWRfZGhhbHRlZDsKLWFzc2lnbiBkbV9ydW5fcmVxICAgICA9IGRtMmhkdV9jbWRfcmVxX2kgJiAoZG1fY21kX3J1biB8IGRtX2NtZF9kcnVuKTsKLQotLy8gRGVidWcgc3RhdGUgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBkYmdfc3RhdGUgPD0gU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQ7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgZGJnX3N0YXRlIDw9IGRiZ19zdGF0ZV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaWYgKH5waXBlMmhkdV9yZGNfcWxmeV9pKSBiZWdpbgotICAgICAgICBkYmdfc3RhdGVfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNhc2UgKGRiZ19zdGF0ZSkKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOiBiZWdpbgotICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gfnBpcGUyaGR1X2luaXRfcGNfaSA/IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbV9kaGFsdF9yZXEgICAgICAgID8gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX0RCR1NUQVRFX1JVTjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUlVOOiBiZWdpbgotICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gZGZzbV91cGRhdGUgICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9SVU47Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQ6IGJlZ2luCi0gICAgICAgICAgICAgICAgZGJnX3N0YXRlX25leHQgPSB+ZGZzbV91cGRhdGUgICAgICAgID8gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1fY21kX2RydW4gICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RSVU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9SVU47Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU46IGJlZ2luCi0gICAgICAgICAgICAgICAgZGJnX3N0YXRlX25leHQgPSBkZnNtX3VwZGF0ZSAgICAgICAgID8gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX0RCR1NUQVRFX0RSVU47Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQ6IGJlZ2luCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gU0NSMV9IRFVfREJHU1RBVEVfWFhYOwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gZGJnX3N0YXRlOwotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYXNzaWduIGRiZ19zdGF0ZV9kaGFsdGVkID0gKGRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKLWFzc2lnbiBkYmdfc3RhdGVfZHJ1biAgICA9IChkYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTik7Ci1hc3NpZ24gZGJnX3N0YXRlX3J1biAgICAgPSAoZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX1JVTik7Ci1hc3NpZ24gZGJnX3N0YXRlX3Jlc2V0ICAgPSAoZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUKTsKLQotLy8gRlNNIHRyYW5zaXRpb24sIHVwZGF0ZSBhbmQgZXZlbnQgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBkZnNtX3RyYW5zICA8PSAxJ2IwOwotICAgICAgICBkZnNtX3VwZGF0ZSA8PSAxJ2IwOwotICAgICAgICBkZnNtX2V2ZW50ICA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRmc21fdHJhbnMgIDw9IGRmc21fdHJhbnNfbmV4dDsKLSAgICAgICAgZGZzbV91cGRhdGUgPD0gZGZzbV91cGRhdGVfbmV4dDsKLSAgICAgICAgZGZzbV9ldmVudCAgPD0gZGZzbV9ldmVudF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgZGZzbV90cmFuc19uZXh0ICA9IDEnYjA7Ci0gICAgZGZzbV91cGRhdGVfbmV4dCA9IDEnYjA7Ci0gICAgZGZzbV9ldmVudF9uZXh0ICA9IDEnYjA7Ci0KLSAgICBpZiAofnBpcGUyaGR1X3JkY19xbGZ5X2kpIGJlZ2luCi0gICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSAxJ2IwOwotICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0ID0gMSdiMDsKLSAgICAgICAgZGZzbV9ldmVudF9uZXh0ICA9IDEnYjE7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY2FzZSAoZGJnX3N0YXRlKQotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQ6IGJlZ2luCi0gICAgICAgICAgICAgICAgZGZzbV90cmFuc19uZXh0ICA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgZGZzbV91cGRhdGVfbmV4dCA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgZGZzbV9ldmVudF9uZXh0ICA9IHBpcGUyaGR1X2luaXRfcGNfaSAmIH5kbTJoZHVfY21kX3JlcV9pOwotICAgICAgICAgICAgZW5kCi0KLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTiwKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU46IGJlZ2luCi0gICAgICAgICAgICAgICAgZGZzbV90cmFuc19uZXh0ICA9IH5kZnNtX3VwZGF0ZSA/IGhhcnRfaGFsdF9wbmQgOiBkZnNtX3RyYW5zOwotICAgICAgICAgICAgICAgIGRmc21fdXBkYXRlX25leHQgPSB+ZGZzbV91cGRhdGUgJiBoYXJ0X2hhbHRfYWNrOwotICAgICAgICAgICAgICAgIGRmc21fZXZlbnRfbmV4dCAgPSBkZnNtX3VwZGF0ZTsKLSAgICAgICAgICAgIGVuZAotCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEOiBiZWdpbgotICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSB+ZGZzbV91cGRhdGUgPyB+ZGZzbV90cmFucyAmIGRtX3J1bl9yZXEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGZzbV90cmFuczsKLSAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0ID0gfmRmc21fdXBkYXRlICYgZGZzbV90cmFuczsKLSAgICAgICAgICAgICAgICBkZnNtX2V2ZW50X25leHQgID0gZGZzbV91cGRhdGU7Ci0gICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZGZzbV90cmFuc19uZXh0ICA9ICdYOwotICAgICAgICAgICAgICAgIGRmc21fdXBkYXRlX25leHQgPSAnWDsKLSAgICAgICAgICAgICAgICBkZnNtX2V2ZW50X25leHQgID0gJ1g7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIQVJUIENvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIEhBUlQgQ29udHJvbCBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBDb250cm9sIHNpZ25hbHMKLSAvLyAtIEhBUlQgUnVuIENvbnRyb2wgcmVnaXN0ZXIKLSAvLyAtIEhBUlQgSGFsdCBSZXF1ZXN0IFRpbWUtT3V0IGNvdW50ZXIKLS8vCi0KLS8vIENvbnRyb2wgbG9naWMKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaGFydF9jbWRfcmVxID0gMSdiMDsKLQotICAgIGlmICh+cGlwZTJoZHVfcmRjX3FsZnlfaSkgYmVnaW4KLSAgICAgICAgaGFydF9jbWRfcmVxID0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChkYmdfc3RhdGUpCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVCAgOiBoYXJ0X2NtZF9yZXEgPSBkbTJoZHVfY21kX3JlcV9pOwotICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRDogaGFydF9jbWRfcmVxID0gKGRmc21fdXBkYXRlIHwgZGZzbV90cmFucyk7Ci0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9SVU4sCi0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOICAgOiBoYXJ0X2NtZF9yZXEgPSB+ZGZzbV91cGRhdGUgJiBkZnNtX3RyYW5zOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgIDogaGFydF9jbWRfcmVxID0gJ1g7Ci0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaGFydF9oYWx0X3JlcSAgID0gZG1fY21kX2RoYWx0ZWQgJiBoYXJ0X2NtZF9yZXE7Ci1hc3NpZ24gaGFydF9yZXN1bWVfcmVxID0gKGRtX2NtZF9ydW4gfCBkbV9jbWRfZHJ1bikgJiBoYXJ0X2NtZF9yZXE7Ci0KLS8vIEhBUlQgUnVuIENvbnRyb2wgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBoYXJ0X3J1bmN0cmxfY2xyID0gKGRiZ19zdGF0ZV9ydW4gfCBkYmdfc3RhdGVfZHJ1bikKLSAgICAgICAgICAgICAgICAgICAgICAgICYgKGRiZ19zdGF0ZV9uZXh0ID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpOwotYXNzaWduIGhhcnRfcnVuY3RybF91cGQgPSBkYmdfc3RhdGVfZGhhbHRlZCAmIGRmc21fdHJhbnNfbmV4dDsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaGFydF9ydW5jdHJsLmlycV9kc2JsICAgICAgPD0gMSdiMDsKLSAgICAgICAgaGFydF9ydW5jdHJsLmZldGNoX3NyYyAgICAgPD0gU0NSMV9IRFVfRkVUQ0hfU1JDX05PUk1BTDsKLSAgICAgICAgaGFydF9ydW5jdHJsLnBjX2Fkdm10X2RzYmwgPD0gMSdiMDsKLSAgICAgICAgaGFydF9ydW5jdHJsLmh3YnJrcHRfZHNibCAgPD0gMSdiMDsKLSAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0ICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgotICAgICAgICBpZiAoaGFydF9ydW5jdHJsX2NscikgYmVnaW4KLSAgICAgICAgICAgIGhhcnRfcnVuY3RybCAgICAgICAgICAgPD0gJzA7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICBpZiAoaGFydF9ydW5jdHJsX3VwZCkgYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAofmRtX2NtZF9kcnVuKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDogcmVzdW1lIHRvIFJVTiBzdGF0ZQotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwuaXJxX2RzYmwgICAgICAgIDw9IGNzcl9kY3NyX3N0ZXAgPyB+Y3NyX2Rjc3Jfc3RlcGllIDogMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLmZldGNoX3NyYyAgICAgICA8PSBTQ1IxX0hEVV9GRVRDSF9TUkNfTk9STUFMOwotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwucGNfYWR2bXRfZHNibCAgIDw9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5od2Jya3B0X2RzYmwgICAgPD0gMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0LnNzdGVwICA8PSBjc3JfZGNzcl9zdGVwOwotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwucmVkaXJlY3QuZWJyZWFrIDw9IGNzcl9kY3NyX2VicmVha207Ci0gICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSA6IHJlc3VtZSB0byBEUlVOIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5pcnFfZHNibCAgICAgICAgPD0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLmZldGNoX3NyYyAgICAgICA8PSBTQ1IxX0hEVV9GRVRDSF9TUkNfUEJVRjsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnBjX2Fkdm10X2RzYmwgICA8PSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwuaHdicmtwdF9kc2JsICAgIDw9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5yZWRpcmVjdC5zc3RlcCAgPD0gMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0LmVicmVhayA8PSAxJ2IxOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIEhBUlQgSGFsdCBSZXF1ZXN0IFRpbWUtT3V0IGNvdW50ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIQVJUIGdvZXMgaW50byBoYWx0IHN0YXRlIG9ubHkgaWYgdGhlIGhhbHQgcmVxdWVzdCBpcyBwcmVzZW50IGZvciB0aW1lb3V0IHBlcmlvZAotLy8gb2YgdGltZQotCi1hc3NpZ24gaGFsdF9yZXFfdGltZW91dF9jbnRfZW4gPSBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoaGFydF9oYWx0X3JlcSAmIH5oZHUyZXh1X2RiZ19ydW4yaGFsdF9vKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnQgPD0gJzE7Ci0gICAgZW5kIGVsc2UgaWYgKGhhbHRfcmVxX3RpbWVvdXRfY250X2VuKSBiZWdpbgotICAgICAgICBoYWx0X3JlcV90aW1lb3V0X2NudCA8PSBoYWx0X3JlcV90aW1lb3V0X2NudF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBoYWx0X3JlcV90aW1lb3V0X2NudF9uZXh0ID0gaGR1MmV4dV9kYmdfaGFsdDJydW5fbyAgICAgICAgICAgICAgICAgICAgPyAnMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoaGFydF9oYWx0X3JlcSAmIH5oZHUyZXh1X2RiZ19ydW4yaGFsdF9vKSA/IGhhbHRfcmVxX3RpbWVvdXRfY250IC0gMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhbHRfcmVxX3RpbWVvdXRfY250OwotCi1hc3NpZ24gaGFsdF9yZXFfdGltZW91dF9mbGFnID0gfnxoYWx0X3JlcV90aW1lb3V0X2NudDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhBUlQgU3RhdHVzIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBIQVJUIFN0YXR1cyBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBEZWJ1ZyBtb2RlIGNhdXNlIGRlY29kZXIKLSAvLyAtIEhhcnQgaGFsdCBzdGF0dXMgY2F1c2UgZW5jb2RlcgotIC8vIC0gSGFydCBoYWx0IHN0YXR1cyByZWdpc3RlcgotLy8KLQotLy8gRGVidWcgbW9kZSBjYXVzZSBkZWNvZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZG1vZGVfY2F1c2Vfc3N0ZXAgID0gaGFydF9ydW5jdHJsLnJlZGlyZWN0LnNzdGVwICYgcGlwZTJoZHVfaW5zdHJldF9pOwotYXNzaWduIGRtb2RlX2NhdXNlX2V4Y2VwdCA9IGRiZ19zdGF0ZV9kcnVuICYgcGlwZTJoZHVfZXh1X2V4Y19yZXFfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5waXBlMmhkdV9icmtwdF9pCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+ZXh1MmhkdV9pYnJrcHRfaHdfaQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBkbW9kZV9jYXVzZV9lYnJlYWsgPSBoYXJ0X3J1bmN0cmwucmVkaXJlY3QuZWJyZWFrICYgcGlwZTJoZHVfYnJrcHRfaTsKLWBpZmRlZiBTQ1IxX1REVV9FTgotYXNzaWduIGRtb2RlX2NhdXNlX3RtcmVxICA9IHRkdTJoZHVfZG1vZGVfcmVxX2kgJiBleHUyaGR1X2licmtwdF9od19pOwotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWFzc2lnbiBkbW9kZV9jYXVzZV9hbnkgPSBkbW9kZV9jYXVzZV9zc3RlcCB8IGRtb2RlX2NhdXNlX2VicmVhayB8IGRtb2RlX2NhdXNlX2V4Y2VwdAotICAgICAgICAgICAgICAgICAgICAgICB8IGhhcnRfaGFsdF9yZXEKLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgICAgICAgICAgICAgICAgICAgICB8IGRtb2RlX2NhdXNlX3RtcmVxCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgOwotCi0vLyBIQVJUIGhhbHQgY2F1c2UgZW5jb2RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlICgxJ2IxKQotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgICAgIGRtb2RlX2NhdXNlX3RtcmVxICAgOiBoYXJ0X2hhbHRjYXVzZSA9IFNDUjFfSERVX0hBTFRDQVVTRV9UTVJFUTsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICBkbW9kZV9jYXVzZV9lYnJlYWsgIDogaGFydF9oYWx0Y2F1c2UgPSBTQ1IxX0hEVV9IQUxUQ0FVU0VfRUJSRUFLOwotICAgICAgICBoYXJ0X2hhbHRfcmVxICAgICAgIDogaGFydF9oYWx0Y2F1c2UgPSBTQ1IxX0hEVV9IQUxUQ0FVU0VfRE1SRVE7Ci0gICAgICAgIGRtb2RlX2NhdXNlX3NzdGVwICAgOiBoYXJ0X2hhbHRjYXVzZSA9IFNDUjFfSERVX0hBTFRDQVVTRV9TU1RFUDsKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGhhcnRfaGFsdGNhdXNlID0gU0NSMV9IRFVfSEFMVENBVVNFX05PTkU7Ci0gICAgZW5kY2FzZQotZW5kCi0KLS8vIEhBUlQgaGFsdCBzdGF0dXMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGhhcnRfaGFsdHN0YXR1cyAgICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKGhhcnRfaGFsdF9hY2spIGJlZ2luCi0gICAgICAgIGhhcnRfaGFsdHN0YXR1cy5leGNlcHQgPD0gZG1vZGVfY2F1c2VfZXhjZXB0OwotICAgICAgICBoYXJ0X2hhbHRzdGF0dXMuY2F1c2UgIDw9IGhhcnRfaGFsdGNhdXNlOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBoYXJ0X2hhbHRfcG5kID0gKGRmc21fdHJhbnMgfCBkbV9kaGFsdF9yZXEpICYgfmhhcnRfaGFsdF9hY2s7Ci1hc3NpZ24gaGFydF9oYWx0X2FjayA9IH5oZHUyZXh1X2RiZ19oYWx0ZWRfbwotICAgICAgICAgICAgICAgICAgICAgJiAoaGFsdF9yZXFfdGltZW91dF9mbGFnIHwgKH5waXBlMmhkdV9leHVfYnVzeV9pICYgZG1vZGVfY2F1c2VfYW55KSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQcm9ncmFtIEJ1ZmZlciAoUEJVRikgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFByb2dyYW0gQnVmZmVyIGFsbG93cyB0byBleGVjdXRlIHNtYWxsIHByb2dyYW1zIGluIGRlYnVnIG1vZGUKLS8vCi0KLS8vIFRvIHRlcm1pbmF0ZSBQcm9ncmFtIEJ1ZmZlciBleGVjdXRpb24gZXhjZXB0aW9uIHNob3VsZCBiZSByYWlzZWQuIFRoZXJlIGFyZSAyCi0vLyBjYXNlczoKLS8vIC0gT25lIG9mIFBCVUYgaW5zdHJ1Y3Rpb25zIHJhaXNlIGFuIGV4Y2VwdGlvbgotLy8gLSBObyBQQlVGIGluc3RydWN0aW9uIHJhaXNlIGFuIGV4Y2VwdGlvbiBiZWZvcmUgdGhlIGxhc3QgUEJVRiBpbnN0cnVjdGlvbiBoYXMKLS8vIGJlZW4gaXNzdWVkLiBJbiB0aGlzIGNhc2UgRlNNIGdvZXMgaW50byBFWENJTkpFQ1Qgc3RhdGUgYW5kIGFuICJJbnN0cnVjdGlvbgotLy8gZmV0Y2ggYWNjZXNzIGZhdWx0IiBleGNlcHRpb24gaXMgaW5qZWN0ZWQKLQotLy8gUEJVRiBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpZnVfaGFuZHNoYWtlX2RvbmUgPSBoZHUyaWZ1X3BidWZfaW5zdHJfdmRfbyAmIGlmdTJoZHVfcGJ1Zl9pbnN0cl9yZHlfaTsKLWFzc2lnbiBwYnVmX2FkZHJfZW5kICAgICAgPSAocGJ1Zl9hZGRyX2ZmID09IChTQ1IxX0hEVV9QQlVGX0FERFJfU1BBTi0xKSk7Ci0KLWFzc2lnbiBwYnVmX3N0YXJ0X2ZldGNoID0gZGJnX3N0YXRlX2RoYWx0ZWQgICAgICAmIChkYmdfc3RhdGVfbmV4dCA9PSBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOKTsKLWFzc2lnbiBwYnVmX2V4Y19pbmpfcmVxID0gaWZ1X2hhbmRzaGFrZV9kb25lICAgICAmIHBidWZfYWRkcl9lbmQ7Ci1hc3NpZ24gcGJ1Zl9leGNfaW5qX2VuZCA9IHBpcGUyaGR1X2V4dV9leGNfcmVxX2kgfCBpZnVfaGFuZHNoYWtlX2RvbmU7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHBidWZfZnNtX2N1cnIgPD0gU0NSMV9IRFVfUEJVRlNUQVRFX0lETEU7Ci0gICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgotICAgICAgICBwYnVmX2ZzbV9jdXJyIDw9IHBidWZfZnNtX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChwYnVmX2ZzbV9jdXJyKQotICAgICAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfSURMRTogYmVnaW4KLSAgICAgICAgICAgIHBidWZfZnNtX25leHQgPSBwYnVmX3N0YXJ0X2ZldGNoICAgICAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX1BCVUZTVEFURV9JRExFOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENIOiBiZWdpbgotICAgICAgICAgICAgcGJ1Zl9mc21fbmV4dCA9IHBpcGUyaGR1X2V4dV9leGNfcmVxX2kgPyBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYnVmX2V4Y19pbmpfcmVxICAgICAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX0VYQ0lOSkVDVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9QQlVGU1RBVEVfRkVUQ0g7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfRVhDSU5KRUNUOiBiZWdpbgotICAgICAgICAgICAgcGJ1Zl9mc21fbmV4dCA9IHBidWZfZXhjX2lual9lbmQgICAgICAgPyBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfUEJVRlNUQVRFX0VYQ0lOSkVDVDsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSERVX1BCVUZTVEFURV9XQUlUNEVORDogYmVnaW4KLSAgICAgICAgICAgIHBidWZfZnNtX25leHQgPSBoZHUyZXh1X2RiZ19oYWx0ZWRfbyAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX0lETEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfUEJVRlNUQVRFX1dBSVQ0RU5EOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYXNzaWduIHBidWZfZnNtX2lkbGUgICA9IChwYnVmX2ZzbV9jdXJyID09IFNDUjFfSERVX1BCVUZTVEFURV9JRExFKTsKLWFzc2lnbiBwYnVmX2ZzbV9mZXRjaCAgPSAocGJ1Zl9mc21fY3VyciA9PSBTQ1IxX0hEVV9QQlVGU1RBVEVfRkVUQ0gpOwotYXNzaWduIHBidWZfZnNtX2V4Y2luaiA9IChwYnVmX2ZzbV9jdXJyID09IFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1QpOwotCi0vLyBQcm9ncmFtIEJ1ZmZlciBhZGRyZXNzIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gcGJ1Zl9hZGRyX25leHRfdmQgPSBwYnVmX2ZzbV9mZXRjaCAgICAgICAgICAmIGlmdV9oYW5kc2hha2VfZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICYgfnBpcGUyaGR1X2V4dV9leGNfcmVxX2kgJiB+cGJ1Zl9hZGRyX2VuZDsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcGJ1Zl9hZGRyX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmKGNsa19lbikgYmVnaW4KLSAgICAgICAgcGJ1Zl9hZGRyX2ZmIDw9IHBidWZfYWRkcl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBwYnVmX2FkZHJfbmV4dCA9IHBidWZfZnNtX2lkbGUgICAgID8gJzAKLSAgICAgICAgICAgICAgICAgICAgICA6IHBidWZfYWRkcl9uZXh0X3ZkID8gcGJ1Zl9hZGRyX2ZmICsgMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYnVmX2FkZHJfZmY7Ci0KLS8vIFBhc3MgaW5zdHJ1Y3Rpb24gZnJvbSBkZWJ1ZyBwcm9ncmFtIGJ1ZmZlciB0byBjcHUgcGlwZWxpbmUgd2l0aCB0d28gb3B0aW9uczoKLS8vIC0gdGhyb3VnaCByZWdpc3RlciwgYmV0dGVyIGZvciBmcmVxdWVuY3kKLS8vIC0gdGhyb3VnaCB3aXJlcywgYmV0dGVyIGZvciBhcmVhCi1nZW5lcmF0ZSBpZiAoSEFSVF9QQlVGX0lOU1RSX1JFR09VVF9FTikgYmVnaW4KLSAgICBhbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgICAgIHBidWZfaW5zdHJfd2FpdF9sYXRjaGluZyA8PSAxJ2IwOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgcGJ1Zl9pbnN0cl93YWl0X2xhdGNoaW5nIDw9IGlmdV9oYW5kc2hha2VfZG9uZTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQgZWxzZSBiZWdpbgotICAgIGFzc2lnbiBwYnVmX2luc3RyX3dhaXRfbGF0Y2hpbmcgPSAxJ2IwOwotZW5kIGVuZGdlbmVyYXRlCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZWJ1ZyBDU1JzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY3NyX3VwZF9vbl9oYWx0ID0gKGRiZ19zdGF0ZV9yZXNldCB8IGRiZ19zdGF0ZV9ydW4pCi0gICAgICAgICAgICAgICAgICAgICAgICYgKGRiZ19zdGF0ZV9uZXh0ID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpOwotCi0vLyBDU1JzIHNlbGVjdCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4gOiBjc3JfaWZfcmVnc2VsCi0gICAgY3NyX2Rjc3Jfc2VsICAgICAgICA9IDEnYjA7Ci0gICAgY3NyX2RwY19zZWwgICAgICAgICA9IDEnYjA7Ci0gICAgY3NyX2RzY3JhdGNoMF9zZWwgICA9IDEnYjA7Ci0gICAgLy9jc3JfZHNjcmF0Y2gxX3NlbCAgID0gMSdiMDsKLQotICAgIGlmIChjc3IyaGR1X3JlcV9pKSBiZWdpbgotICAgICAgICBjYXNlIChjc3IyaGR1X2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RDU1IgICAgIDogY3NyX2Rjc3Jfc2VsICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFBDICAgICAgOiBjc3JfZHBjX3NlbCAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDA6IGNzcl9kc2NyYXRjaDBfc2VsID0gMSdiMTsKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZGNzcl9zZWwgICAgICA9IDEnYlg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kcGNfc2VsICAgICAgID0gMSdiWDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RzY3JhdGNoMF9zZWwgPSAxJ2JYOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZCA6IGNzcl9pZl9yZWdzZWwKLQotLy8gQ1NScyByZWFkIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcl9yZF9kYXRhID0gY3NyX2Rjc3Jfb3V0IHwgY3NyX2RwY19vdXQgfCBjc3JfZHNjcmF0Y2gwX291dDsKLQotLy8gQ1NScyB3cml0ZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjc3Jfd3IgPSBjc3IyaGR1X3JlcV9pOwotCi1hbHdheXNfY29tYiBiZWdpbiA6IGNzcl9pZl93cml0ZQotICAgIGNzcl93cl9kYXRhICAgICA9ICcwOwotCi0gICAgaWYgKGNzcjJoZHVfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJoZHVfY21kX2kpCi0gICAgICAgICAgICBTQ1IxX0NTUl9DTURfV1JJVEUgOiBjc3Jfd3JfZGF0YSA9IGNzcjJoZHVfd2RhdGFfaTsKLSAgICAgICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQgICA6IGNzcl93cl9kYXRhID0gY3NyX3JkX2RhdGEgfCBjc3IyaGR1X3dkYXRhX2k7Ci0gICAgICAgICAgICBTQ1IxX0NTUl9DTURfQ0xFQVIgOiBjc3Jfd3JfZGF0YSA9IGNzcl9yZF9kYXRhICYgKH5jc3IyaGR1X3dkYXRhX2kpOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDogY3NyX3dyX2RhdGEgPSAnWDsKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kIDogY3NyX2lmX3dyaXRlCi0KLS8vIERlYnVnIENvbnRyb2wgYW5kIFN0YXR1cyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNldHVwcyB0aGUgSEFSVCBiZWhhdmlvdXIgaW4gRGVidWcgTW9kZSBhbmQgaG9sZHMgRGVidWcgc3RhdHVzIGluZm9ybWF0aW9uCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX2Rjc3JfaW4gICAgICAgICAgICAgICAgID0gY3NyX3dyX2RhdGE7Ci0gICAgY3NyX2Rjc3Jfd3IgICAgICAgICAgICAgICAgID0gY3NyX3dyICYgY3NyX2Rjc3Jfc2VsOwotCi0gICAgY3NyX2Rjc3Jfb3V0ICAgICAgICAgICAgICAgID0gJzA7Ci0gICAgaWYgKGNzcl9kY3NyX3NlbCkgYmVnaW4KLSAgICAgICAgY3NyX2Rjc3Jfb3V0LnhkZWJ1Z3ZlciAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9EQ1NSX1hERUJVR1ZFUjsKLSAgICAgICAgY3NyX2Rjc3Jfb3V0LmVicmVha20gICAgPSBjc3JfZGNzcl9lYnJlYWttOwotICAgICAgICBjc3JfZGNzcl9vdXQuc3RlcGllICAgICA9IGNzcl9kY3NyX3N0ZXBpZTsKLSAgICAgICAgY3NyX2Rjc3Jfb3V0LnN0ZXAgICAgICAgPSBjc3JfZGNzcl9zdGVwOwotICAgICAgICBjc3JfZGNzcl9vdXQucHJ2ICAgICAgICA9IDInYjExOwotICAgICAgICBjc3JfZGNzcl9vdXQuY2F1c2UgICAgICA9IGNzcl9kY3NyX2NhdXNlOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9kY3NyX2VicmVha20gICAgICAgIDw9IDEnYjA7Ci0gICAgICAgIGNzcl9kY3NyX3N0ZXBpZSAgICAgICAgIDw9IDEnYjA7Ci0gICAgICAgIGNzcl9kY3NyX3N0ZXAgICAgICAgICAgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgotICAgICAgICBpZiAoY3NyX2Rjc3Jfd3IpIGJlZ2luCi0gICAgICAgICAgICBjc3JfZGNzcl9lYnJlYWttICAgIDw9IGNzcl9kY3NyX2luLmVicmVha207Ci0gICAgICAgICAgICBjc3JfZGNzcl9zdGVwaWUgICAgIDw9IGNzcl9kY3NyX2luLnN0ZXBpZTsKLSAgICAgICAgICAgIGNzcl9kY3NyX3N0ZXAgICAgICAgPD0gY3NyX2Rjc3JfaW4uc3RlcDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX2Rjc3JfY2F1c2UgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZihjbGtfZW4pIGJlZ2luCi0gICAgICAgIGlmKGNzcl91cGRfb25faGFsdCkgYmVnaW4KLSAgICAgICAgICAgIGNzcl9kY3NyX2NhdXNlIDw9IGhhcnRfaGFsdHN0YXR1cy5jYXVzZTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8gRGVidWcgUEMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTYXZlcyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gRGVidWcKLS8vIE1vZGUgaXMgZW50ZXJlZC4gQ291bGQgYmUgY2hhbmdlZCBieSBkZWJ1Z2dlcgotCi1hc3NpZ24gY3NyX2RwY193ciAgID0gY3NyX3dyICYgY3NyX2RwY19zZWw7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGNzcl9kcGNfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgotICAgICAgICBjc3JfZHBjX2ZmIDw9IGNzcl9kcGNfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY3NyX2RwY19uZXh0ID0gY3NyX3VwZF9vbl9oYWx0ID8gcGlwZTJoZHVfcGNfY3Vycl9pCi0gICAgICAgICAgICAgICAgICAgIDogY3NyX2RwY193ciAgICAgID8gY3NyX3dyX2RhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfZHBjX2ZmOwotYXNzaWduIGNzcl9kcGNfb3V0ICA9IGNzcl9kcGNfc2VsICAgICA/IGNzcl9kcGNfZmYgOiAnMDsKLQotLy8gRGVidWcgU2NyYXRjaCAwIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY3NyX2RzY3JhdGNoMF9yZXNwID0gKH5kbTJoZHVfZHJlZ19yZXNwX2kgfCBkbTJoZHVfZHJlZ19mYWlsX2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9DU1JfUkVTUF9FUgotICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfQ1NSX1JFU1BfT0s7Ci1hc3NpZ24gY3NyX2RzY3JhdGNoMF9vdXQgID0gY3NyX2RzY3JhdGNoMF9zZWwgPyBkbTJoZHVfZHJlZ19yZGF0YV9pIDogJzA7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIRFUgPC0+IERNIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGhkdTJkbV9oYXJ0X2V2ZW50X28gPSBkZnNtX2V2ZW50OwotCi0vLyBIQVJUIHN0YXR1cwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBoZHUyZG1faGFydF9zdGF0dXNfbyAgICAgICAgICAgPSAnMDsKLSAgICBoZHUyZG1faGFydF9zdGF0dXNfby5kYmdfc3RhdGUgPSBkYmdfc3RhdGU7Ci0gICAgaGR1MmRtX2hhcnRfc3RhdHVzX28uZXhjZXB0ICAgID0gZGJnX3N0YXRlX2RoYWx0ZWQgJiBoYXJ0X2hhbHRzdGF0dXMuZXhjZXB0OwotICAgIGhkdTJkbV9oYXJ0X3N0YXR1c19vLmVicmVhayAgICA9IGRiZ19zdGF0ZV9kaGFsdGVkICYgKGhhcnRfaGFsdHN0YXR1cy5jYXVzZSA9PSBTQ1IxX0hEVV9IQUxUQ0FVU0VfRUJSRUFLKTsKLWVuZAotCi1hc3NpZ24gaGR1MmRtX2NtZF9yY29kZV9vID0gZGJnX3N0YXRlX3Jlc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgID8gfnBpcGUyaGR1X3JkY19xbGZ5X2kgfCB+cGlwZTJoZHVfaW5pdF9wY19pIHwgfmRtMmhkdV9jbWRfcmVxX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiB+cGlwZTJoZHVfcmRjX3FsZnlfaSB8IH5kZnNtX3VwZGF0ZTsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBoZHUyZG1fY21kX3Jlc3BfbyAgID0gMSdiMDsKLQotICAgIGNhc2UgKGRiZ19zdGF0ZSkKLSAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQ6IGJlZ2luCi0gICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbyAgPSBwaXBlMmhkdV9yZGNfcWxmeV9pICYgcGlwZTJoZHVfaW5pdF9wY19pICYgZG0yaGR1X2NtZF9yZXFfaTsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUlVOOiBiZWdpbgotICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28gID0gcGlwZTJoZHVfcmRjX3FsZnlfaSAmIGRmc21fdXBkYXRlICYgZG0yaGR1X2NtZF9yZXFfaTsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRDogYmVnaW4KLSAgICAgICAgICAgIGhkdTJkbV9jbWRfcmVzcF9vICA9IHBpcGUyaGR1X3JkY19xbGZ5X2kgPyBkZnNtX3VwZGF0ZSA6IGRtMmhkdV9jbWRfcmVxX2k7Ci0gICAgICAgIGVuZAotCi0gICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU46IGJlZ2luCi0gICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbyAgPSAofnBpcGUyaGR1X3JkY19xbGZ5X2kgfCBkZnNtX3VwZGF0ZSkgJiBkbTJoZHVfY21kX3JlcV9pOwotICAgICAgICBlbmQKLQotICAgICAgICBkZWZhdWx0OiBiZWdpbgotICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28gID0gJ1g7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gaGR1MmRtX3BidWZfYWRkcl9vICA9IHBidWZfYWRkcl9mZjsKLWFzc2lnbiBoZHUyZG1fZHJlZ19yZXFfbyAgID0gY3NyX2RzY3JhdGNoMF9zZWw7Ci1hc3NpZ24gaGR1MmRtX2RyZWdfd3JfbyAgICA9IGNzcl93ciAmIGNzcl9kc2NyYXRjaDBfc2VsOwotYXNzaWduIGhkdTJkbV9kcmVnX3dkYXRhX28gPSBjc3Jfd3JfZGF0YTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhEVSA8LT4gRVhVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGhkdTJleHVfZGJnX2hhbHRlZF9vICAgID0gKGRiZ19zdGF0ZV9uZXh0ID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAofnBpcGUyaGR1X3JkY19xbGZ5X2kgJiB+ZGJnX3N0YXRlX3J1bik7Ci1hc3NpZ24gaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X28gPSBkYmdfc3RhdGVfZGhhbHRlZCAmIHBpcGUyaGR1X3JkY19xbGZ5X2kgJiBkZnNtX3VwZGF0ZTsKLWFzc2lnbiBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9vICA9IGhkdTJleHVfZGJnX2hhbHRlZF9vICYgaGFydF9yZXN1bWVfcmVxCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjbGtfcGlwZV9lbgotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKLWFzc2lnbiBoZHUyZXh1X2RiZ19ydW4yaGFsdF9vICA9IGhhcnRfaGFsdF9hY2s7Ci0KLWFzc2lnbiBoZHUyZXh1X3BidWZfZmV0Y2hfbyAgICA9IGhhcnRfcnVuY3RybC5mZXRjaF9zcmM7Ci1hc3NpZ24gaGR1MmV4dV9pcnFfZHNibF9vICAgICAgPSBoYXJ0X3J1bmN0cmwuaXJxX2RzYmw7Ci1hc3NpZ24gaGR1MmV4dV9wY19hZHZtdF9kc2JsX28gPSBoYXJ0X3J1bmN0cmwucGNfYWR2bXRfZHNibDsKLS8vIE5vIGNoYW5nZSBpbiBhcmNoLiBzdGF0ZSBpZiBkbW9kZSBjYXVzZWQgYnkgYnJlYWtwb2ludAotYXNzaWduIGhkdTJleHVfbm9fY29tbWl0X28gICAgID0gZG1vZGVfY2F1c2VfZWJyZWFrCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRtb2RlX2NhdXNlX3RtcmVxCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9vID0gaGFydF9ydW5jdHJsLnJlZGlyZWN0LnNzdGVwOwotYXNzaWduIGhkdTJleHVfZGJnX25ld19wY19vICAgICA9IGNzcl9kcGNfZmY7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIRFUgPC0+IElGVSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBoZHUyaWZ1X3BidWZfaW5zdHJfdmRfbyAgPSAocGJ1Zl9mc21fZmV0Y2ggfCBwYnVmX2ZzbV9leGNpbmopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfnBidWZfaW5zdHJfd2FpdF9sYXRjaGluZzsKLWFzc2lnbiBoZHUyaWZ1X3BidWZfaW5zdHJfZXJyX28gPSBwYnVmX2ZzbV9leGNpbmo7Ci0KLWdlbmVyYXRlIGlmIChIQVJUX1BCVUZfSU5TVFJfUkVHT1VUX0VOKSBiZWdpbgotICAgIGFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICBoZHUyaWZ1X3BidWZfaW5zdHJfbyA8PSBkbTJoZHVfcGJ1Zl9pbnN0cl9pOwotICAgIGVuZAotZW5kIGVsc2UgYmVnaW4KLSAgICBhc3NpZ24gaGR1MmlmdV9wYnVmX2luc3RyX28gPSBkbTJoZHVfcGJ1Zl9pbnN0cl9pOwotZW5kIGVuZGdlbmVyYXRlCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIRFUgPC0+IENTUiBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjc3JfYWRkcl9kc2NyYXRjaDAgPSAoY3NyMmhkdV9hZGRyX2kgPT0gU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gwKTsKLQotYXNzaWduIGhkdTJjc3JfcmVzcF9vICA9IH5kYmdfc3RhdGVfZHJ1biAgICA/IFNDUjFfQ1NSX1JFU1BfRVIKLSAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfYWRkcl9kc2NyYXRjaDAgPyBjc3JfZHNjcmF0Y2gwX3Jlc3AKLSAgICAgICAgICAgICAgICAgICAgICAgOiBjc3IyaGR1X3JlcV9pICAgICAgPyBTQ1IxX0NTUl9SRVNQX09LCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9DU1JfUkVTUF9FUjsKLWFzc2lnbiBoZHUyY3NyX3JkYXRhX28gPSBjc3JfcmRfZGF0YTsKLQotYGlmZGVmIFNDUjFfVERVX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSERVIDwtPiBURFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaGR1MnRkdV9od2Jya19kc2JsX28gPSBoYXJ0X3J1bmN0cmwuaHdicmtwdF9kc2JsOwotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TVkFfSERVX1hDSEVDS19DT01NT04gOgotICAgIGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgICAgICEkaXN1bmtub3duKCB7cnN0X24sY2xrLGNsa19lbixjc3IyaGR1X3JlcV9pLHBpcGUyaGR1X3JkY19xbGZ5X2l9ICkKLSAgICApCi0gICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogY29tbW9uIHNpZ25hbHMgYXJlIGluIFggc3RhdGUiKTsKLQotU1ZBX0hEVV9YQ0hFQ0tfQ1NSX0lOVEYgOgotICAgIGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgICAgIGNzcjJoZHVfcmVxX2kgfC0+ICEkaXN1bmtub3duKCB7Y3NyMmhkdV9jbWRfaSxjc3IyaGR1X2FkZHJfaSxjc3IyaGR1X3dkYXRhX2l9ICkKLSAgICApCi0gICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogQ1NSIGkvZiBpcyBpbiBYIHN0YXRlIik7Ci0KLVNWQV9IRFVfWENIRUNLX0RNX0lOVEYgOgotICAgIGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgICAgICEkaXN1bmtub3duKCB7ZG0yaGR1X2NtZF9yZXFfaSxkbTJoZHVfY21kX2ksZG0yaGR1X2RyZWdfcmVzcF9pLAotICAgICAgICBkbTJoZHVfZHJlZ19mYWlsX2l9ICkKLSAgICApCi0gICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogRE0gaS9mIGlzIGluIFggc3RhdGUiKTsKLQotU1ZBX0hEVV9YQ0hFQ0tfVERVX0lOVEYgOgotICAgIGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgICAgICEkaXN1bmtub3duKCB7dGR1MmhkdV9kbW9kZV9yZXFfaSxleHUyaGR1X2licmtwdF9od19pfSApCi0gICAgKQotICAgIGVsc2UgJGVycm9yKCJIRFUgRXJyb3I6IFREVSBpL2YgaXMgaW4gWCBzdGF0ZSIpOwotCi1TVkFfSERVX1hDSEVDS19IQVJUX0lOVEYgOgotICAgIGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgICAgICEkaXN1bmtub3duKCB7cGlwZTJoZHVfZXh1X2J1c3lfaSxwaXBlMmhkdV9pbnN0cmV0X2kscGlwZTJoZHVfaW5pdF9wY19pLHBpcGUyaGR1X2V4dV9leGNfcmVxX2kscGlwZTJoZHVfYnJrcHRfaSwKLSAgICAgICAgcGlwZTJoZHVfcGNfY3Vycl9pLGlmdTJoZHVfcGJ1Zl9pbnN0cl9yZHlfaX0gKQotICAgICkKLSAgICBlbHNlICRlcnJvcigiSERVIEVycm9yOiBIQVJUIGkvZiBpcyBpbiBYIHN0YXRlIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3BpcGVfaGR1Ci0KLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWFsdS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzNTQxZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWFsdS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDcyMyArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfaWFsdS5zdj4KLS8vLyBAYnJpZWYgICAgICBJbnRlZ2VyIEFyaXRobWV0aWMgTG9naWMgVW5pdCAoSUFMVSkKLS8vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQZXJmb3JtcyBhZGRpdGlvbi9zdWJ0cmFjdGlvbiBhbmQgYXJpdGhtZXRpYyBhbmQgYnJhbmNoIGNvbXBhcmlzb25zCi0gLy8gLSBQZXJmb3JtcyBsb2dpY2FsIG9wZXJhdGlvbnMgKEFORChJKSwgT1IoSSksIFhPUihJKSkKLSAvLyAtIFBlcmZvcm1zIGFkZHJlc3MgY2FsY3VsYXRpb24gZm9yIGJyYW5jaCwganVtcCwgRE1FTSBsb2FkIGFuZCBzdG9yZSBhbmQgQVVJUEMKLSAvLyAgIGluc3RydWN0aW9ucwotIC8vIC0gUGVyZm9ybXMgc2hpZnQgb3BlcmF0aW9ucwotIC8vIC0gUGVyZm9ybXMgTVVML0RJViBvcGVyYXRpb25zCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBNYWluIGFkZGVyCi0gLy8gLSBBZGRyZXNzIGFkZGVyCi0gLy8gLSBTaGlmdCBsb2dpYwotIC8vIC0gTVVML0RJViBsb2dpYwotIC8vIC0gT3V0cHV0IHJlc3VsdCBtdWx0aXBsZXhlcgotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgotYGluY2x1ZGUgInNjcjFfc2VhcmNoX21zMS5zdmgiCi0KLQotbW9kdWxlIHNjcjFfcGlwZV9pYWx1ICgKLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIElBTFUgY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIElBTFUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlhbHVfcnZtX2NtZF92ZF9pLCAgICAgIC8vIE1VTC9ESVYgY29tbWFuZCB2YWxpZAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vLCAgICAgLy8gTVVML0RJViByZXN1bHQgcmVhZHkKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotICAgIC8vIE1haW4gYWRkZXIKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfbWFpbl9vcDFfaSwgICAgICAgIC8vIG1haW4gQUxVIDFzdCBvcGVyYW5kCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIGV4dTJpYWx1X21haW5fb3AyX2ksICAgICAgICAvLyBtYWluIEFMVSAybmQgb3BlcmFuZAotICAgIGlucHV0ICAgdHlwZV9zY3IxX2lhbHVfY21kX3NlbF9lICAgICAgICBleHUyaWFsdV9jbWRfaSwgICAgICAgICAgICAgLy8gSUFMVSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28sICAgICAgICAvLyBtYWluIEFMVSByZXN1bHQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vLCAgICAgICAgIC8vIElBTFUgY29tcGFyaXNvbiByZXN1bHQKLQotICAgIC8vIEFkZHJlc3MgYWRkZXIKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfYWRkcl9vcDFfaSwgICAgICAgIC8vIEFkZHJlc3MgYWRkZXIgMXN0IG9wZXJhbmQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfYWRkcl9vcDJfaSwgICAgICAgIC8vIEFkZHJlc3MgYWRkZXIgMm5kIG9wZXJhbmQKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgaWFsdTJleHVfYWRkcl9yZXNfbyAgICAgICAgIC8vIEFkZHJlc3MgYWRkZXIgcmVzdWx0Ci0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gYGlmZGVmIFNDUjFfRkFTVF9NVUwKLWxvY2FscGFyYW0gU0NSMV9NVUxfV0lEVEggICAgID0gYFNDUjFfWExFTjsKLWxvY2FscGFyYW0gU0NSMV9NVUxfUkVTX1dJRFRIID0gMiAqIGBTQ1IxX1hMRU47Ci1sb2NhbHBhcmFtIFNDUjFfTURVX1NVTV9XSURUSCA9IGBTQ1IxX1hMRU4gKyAxOwotIGBlbHNlCi1sb2NhbHBhcmFtIFNDUjFfTVVMX1NUR19OVU0gICA9IDMyOwotbG9jYWxwYXJhbSBTQ1IxX01VTF9XSURUSCAgICAgPSAzMiAvIFNDUjFfTVVMX1NUR19OVU07Ci1sb2NhbHBhcmFtIFNDUjFfTVVMX0NOVF9JTklUICA9IDMyJ2IxIDw8IChgU0NSMV9YTEVOL1NDUjFfTVVMX1dJRFRIIC0gMik7Ci1sb2NhbHBhcmFtIFNDUjFfTURVX1NVTV9XSURUSCA9IGBTQ1IxX1hMRU4gKyBTQ1IxX01VTF9XSURUSDsKLSBgZW5kaWYgLy8gflNDUjFfRkFTVF9NVUwKLWxvY2FscGFyYW0gU0NSMV9ESVZfV0lEVEggICAgID0gMTsKLWxvY2FscGFyYW0gU0NSMV9ESVZfQ05UX0lOSVQgID0gMzInYjEgPDwgKGBTQ1IxX1hMRU4vU0NSMV9ESVZfV0lEVEggLSAyKTsKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgejsgICAgICAvLyBaZXJvCi0gICAgbG9naWMgICAgICAgczsgICAgICAvLyBTaWduCi0gICAgbG9naWMgICAgICAgbzsgICAgICAvLyBPdmVyZmxvdwotICAgIGxvZ2ljICAgICAgIGM7ICAgICAgLy8gQ2FycnkKLX0gdHlwZV9zY3IxX2lhbHVfZmxhZ3NfczsKLQotIGBpZmRlZiBTQ1IxX1JWTV9FWFQKLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9JQUxVX01EVV9GU01fSURMRSwKLSAgICBTQ1IxX0lBTFVfTURVX0ZTTV9JVEVSLAotICAgIFNDUjFfSUFMVV9NRFVfRlNNX0NPUlIKLX0gdHlwZV9zY3IxX2lhbHVfZnNtX3N0YXRlOwotCi10eXBlZGVmIGVudW0gbG9naWMgWzE6MF0gewotICAgU0NSMV9JQUxVX01EVV9OT05FLAotICAgU0NSMV9JQUxVX01EVV9NVUwsCi0gICBTQ1IxX0lBTFVfTURVX0RJVgotfSB0eXBlX3NjcjFfaWFsdV9tZHVfY21kOwotIGBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTWFpbiBhZGRlciBzaWduYWxzCi1sb2dpYyAgICAgICAgW2BTQ1IxX1hMRU46MF0gICAgICAgICAgICAgICAgIG1haW5fc3VtX3JlczsgICAgICAgLy8gTWFpbiBhZGRlciByZXN1bHQKLXR5cGVfc2NyMV9pYWx1X2ZsYWdzX3MgICAgICAgICAgICAgICAgICAgICAgbWFpbl9zdW1fZmxhZ3M7ICAgICAvLyBNYWluIGFkZGVyIGZsYWdzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fc3VtX3Bvc19vdmZsdzsgLy8gTWFpbiBhZGRlciBwb3NpdGl2ZSBvdmVyZmxvdwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3N1bV9uZWdfb3ZmbHc7IC8vIE1haW4gYWRkZXIgbmVnYXRpdmUgb3ZlcmZsb3cKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9vcHNfZGlmZl9zZ247ICAvLyBNYWluIGFkZGVyIG9wZXJhbmRzIGhhdmUgZGlmZmVyZW50IHNpZ25zCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fb3BzX25vbl96ZXJvOyAgLy8gQm90aCBtYWluIGFkZGVyIG9wZXJhbmRzIGFyZSBOT1QgMAotCi0vLyBTaGlmdGVyIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFsdV9jbWRfc2hmdDsgICAgICAvLyBJQUxVIGNvbW1hbmQgaXMgc2hpZnQKLWxvZ2ljIHNpZ25lZCBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgc2hmdF9vcDE7ICAgICAgICAgICAvLyBTSElGVCBvcGVyYW5kIDEKLWxvZ2ljICAgICAgICBbNDowXSAgICAgICAgICAgICAgICAgICAgICAgICAgc2hmdF9vcDI7ICAgICAgICAgICAvLyBTSElGVCBvcGVyYW5kIDIKLWxvZ2ljICAgICAgICBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgc2hmdF9jbWQ7ICAgICAgICAgICAvLyBTSElGVCBjb21tYW5kOiAwMCAtIGxvZ2ljYWwgbGVmdCwgMTAgLSBsb2dpY2FsIHJpZ2h0LCAxMSAtIGFyaXRobWV0aWNhbCByaWdodAotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBzaGZ0X3JlczsgICAgICAgICAgIC8vIFNISUZUIHJlc3VsdAotCi0vLyBNVUwvRElWIHNpZ25hbHMKLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLS8vIE1VTC9ESVYgRlNNIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfY21kX2lzX2l0ZXI7ICAgIC8vIE1EVSBDb21tYW5kIGlzIGl0ZXJhdGl2ZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfaXRlcl9yZXE7ICAgICAgIC8vIFJlcXVlc3QgaXRlcmF0aXZlIHN0YWdlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9pdGVyX3JkeTsgICAgICAgLy8gSXRlcmF0aW9uIGlzIHJlYWR5Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9jb3JyX3JlcTsgICAgICAgLy8gRElWL1JFTShVKSBjb3JyZWN0aW9uIHJlcXVlc3QKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X2NvcnJfcmVxOyAgICAgICAvLyBDb3JyZWN0aW9uIHJlcXVlc3QgZm9yIERJViBvcGVyYXRpb24KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtX2NvcnJfcmVxOyAgICAgICAvLyBDb3JyZWN0aW9uIHJlcXVlc3QgZm9yIFJFTShVKSBvcGVyYXRpb25zCi0KLS8vIE1VTC9ESVYgRlNNIHNpZ25hbHMKLXR5cGVfc2NyMV9pYWx1X2ZzbV9zdGF0ZSAgICAgICAgICAgICAgICAgICAgbWR1X2ZzbV9mZjsgICAgICAgICAvLyBDdXJyZW50IEZTTSBzdGF0ZQotdHlwZV9zY3IxX2lhbHVfZnNtX3N0YXRlICAgICAgICAgICAgICAgICAgICBtZHVfZnNtX25leHQ7ICAgICAgIC8vIE5leHQgRlNNIHN0YXRlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9mc21faWRsZTsgICAgICAgLy8gTURVIEZTTSBpcyBpbiBJRExFIHN0YXRlCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X2ZzbV9pdGVyOyAgICAgICAvLyBNRFUgRlNNIGlzIGluIElURVIgc3RhdGUKLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfZnNtX2NvcnI7ICAgICAgIC8vIE1EVSBGU00gaXMgaW4gQ09SUiBzdGF0ZQotCi0vLyBNRFUgY29tbWFuZCBzaWduYWxzCi10eXBlX3NjcjFfaWFsdV9tZHVfY21kICAgICAgICAgICAgICAgICAgICAgIG1kdV9jbWQ7ICAgICAgICAgICAgLy8gTURVIGNvbW1hbmQ6IDAwIC0gTk9ORSwgMDEgLSBNVUwsICAxMCAtIERJVgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfY21kX211bDsgICAgICAgIC8vIE1EVSBjb21tYW5kIGlzIE1VTChIU1UpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9jbWRfZGl2OyAgICAgICAgLy8gTURVIGNvbW1hbmQgaXMgRElWKFUpL1JFTShVKQotbG9naWMgICAgICAgIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxfY21kOyAgICAgICAgICAgIC8vIE1VTCBjb21tYW5kOiAwMCAtIE1VTCwgIDAxIC0gTVVMSCwgMTAgLSBNVUxIU1UsIDExIC0gTVVMSFUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX2NtZF9oaTsgICAgICAgICAvLyBIaWdoIHBhcnQgb2YgTVVMIHJlc3VsdCBpcyByZXF1ZXN0ZWQKLWxvZ2ljICAgICAgICBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X2NtZDsgICAgICAgICAgICAvLyBESVYgY29tbWFuZDogMDAgLSBESVYsICAwMSAtIERJVlUsIDEwIC0gUkVNLCAgICAxMSAtIFJFTVUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X2NtZF9kaXY7ICAgICAgICAvLyBESVYgY29tbWFuZCBpcyBESVYKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X2NtZF9yZW07ICAgICAgICAvLyBESVYgY29tbWFuZCBpcyBSRU0oVSkKLQotLy8gTXVsdGlwbGllciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9vcDFfaXNfc2duOyAgICAgLy8gRmlyc3QgTVVMIG9wZXJhbmQgaXMgc2lnbmVkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9vcDJfaXNfc2duOyAgICAgLy8gU2Vjb25kIE1VTCBvcGVyYW5kIGlzIHNpZ25lZAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxfb3AxX3NnbjsgICAgICAgIC8vIEZpcnN0IE1VTCBvcGVyYW5kIGlzIG5lZ2F0aXZlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9vcDJfc2duOyAgICAgICAgLy8gU2Vjb25kIE1VTCBvcGVyYW5kIGlzIG5lZ2F0aXZlCi1sb2dpYyBzaWduZWQgW2BTQ1IxX1hMRU46MF0gICAgICAgICAgICAgICAgIG11bF9vcDE7ICAgICAgICAgICAgLy8gTVVMIG9wZXJhbmQgMQotbG9naWMgc2lnbmVkIFtTQ1IxX01VTF9XSURUSDowXSAgICAgICAgICAgICBtdWxfb3AyOyAgICAgICAgICAgIC8vIE1VTCBvcGVyYW5kIDEKLSBgaWZkZWYgU0NSMV9GQVNUX01VTAotbG9naWMgc2lnbmVkIFtTQ1IxX01VTF9SRVNfV0lEVEgtMTowXSAgICAgICBtdWxfcmVzOyAgICAgICAgICAgIC8vIE1VTCByZXN1bHQKLSBgZWxzZSAvLyB+U0NSMV9GQVNUX01VTAotbG9naWMgc2lnbmVkIFtTQ1IxX01EVV9TVU1fV0lEVEg6MF0gICAgICAgICBtdWxfcGFydF9wcm9kOwotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtdWxfcmVzX2hpOwotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtdWxfcmVzX2xvOwotIGBlbmRpZiAvLyB+U0NSMV9GQVNUX01VTAotCi0vLyBEaXZpc29yIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X29wc19hcmVfc2duOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfb3AxX2lzX25lZzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X29wMl9pc19uZWc7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdl9yZXNfcmVtX2M7Ci1sb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIGRpdl9yZXNfcmVtOwotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBkaXZfcmVzX3F1bzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X3F1b19iaXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdl9kdmRuZF9sb191cGQ7Ci1sb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIGRpdl9kdmRuZF9sb19mZjsKLWxvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgZGl2X2R2ZG5kX2xvX25leHQ7Ci0KLS8vIE1EVSBhZGRlciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9zdW1fc3ViOyAgICAgICAgLy8gTURVIGFkZGVyIG9wZXJhdGlvbjogMCAtIGFkZCwgMSAtIHN1YgotbG9naWMgc2lnbmVkIFtTQ1IxX01EVV9TVU1fV0lEVEgtMTowXSAgICAgICBtZHVfc3VtX29wMTsgICAgICAgIC8vIE1EVSBhZGRlciBvcGVyYW5kIDEKLWxvZ2ljIHNpZ25lZCBbU0NSMV9NRFVfU1VNX1dJRFRILTE6MF0gICAgICAgbWR1X3N1bV9vcDI7ICAgICAgICAvLyBNRFUgYWRkZXIgb3BlcmFuZCAyCi1sb2dpYyBzaWduZWQgW1NDUjFfTURVX1NVTV9XSURUSC0xOjBdICAgICAgIG1kdV9zdW1fcmVzOyAgICAgICAgLy8gTURVIGFkZGVyIHJlc3VsdAotCi0vLyBNRFUgaXRlcmF0aW9uIGNvdW50ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfaXRlcl9jbnRfZW47Ci1sb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIG1kdV9pdGVyX2NudDsKLWxvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgbWR1X2l0ZXJfY250X25leHQ7Ci0KLS8vIEludGVybWVkaWF0ZSByZXN1bHRzIHJlZ2lzdGVycwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfcmVzX3VwZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X3Jlc19jX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfcmVzX2NfbmV4dDsKLWxvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgbWR1X3Jlc19oaV9mZjsKLWxvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgbWR1X3Jlc19oaV9uZXh0OwotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtZHVfcmVzX2xvX2ZmOwotbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtZHVfcmVzX2xvX25leHQ7Ci1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFpbiBhZGRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIE1haW4gYWRkZXIgaXMgdXNlZCBmb3IgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBvcGVyYXRpb25zOgotIC8vIC0gQWRkaXRpb24vc3VidHJhY3Rpb24gICAgICAgICAgKEFERC9BRERJL1NVQikKLSAvLyAtIEJyYW5jaCBjb21wYXJpc29ucyAgICAgICAgICAgIChCRVEvQk5FL0JMVChVKS9CR0UoVSkpCi0gLy8gLSBBcml0aG1ldGljIGNvbXBhcmlzb25zICAgICAgICAoU0xUKFUpL1NMVEkoVSkpCi0vLwotCi0vLyBDYXJyeSBvdXQgKE1TQiBvZiBtYWluX3N1bV9yZXMpIGlzIGV2YWx1YXRlZCBjb3JyZWN0bHkgYmVjYXVzZSB0aGUgcmVzdWx0Ci0vLyB3aWR0aCBlcXVhbHMgdG8gdGhlIG1heGltdW0gd2lkdGggb2YgYm90aCB0aGUgcmlnaHQtaGFuZCBhbmQgbGVmdC1oYW5kIHNpZGUgdmFyaWFibGVzCi1hbHdheXNfY29tYiBiZWdpbgotICAgIG1haW5fc3VtX3JlcyA9IChleHUyaWFsdV9jbWRfaSAhPSBTQ1IxX0lBTFVfQ01EX0FERCkKLSAgICAgICAgICAgICAgICAgPyAoZXh1MmlhbHVfbWFpbl9vcDFfaSAtIGV4dTJpYWx1X21haW5fb3AyX2kpICAgLy8gU3VidHJhY3Rpb24gYW5kIGNvbXBhcmlzb24KLSAgICAgICAgICAgICAgICAgOiAoZXh1MmlhbHVfbWFpbl9vcDFfaSArIGV4dTJpYWx1X21haW5fb3AyX2kpOyAgLy8gQWRkaXRpb24KLQotICAgIG1haW5fc3VtX3Bvc19vdmZsdyA9IH5leHUyaWFsdV9tYWluX29wMV9pW2BTQ1IxX1hMRU4tMV0KLSAgICAgICAgICAgICAgICAgICAgICAgJiAgZXh1MmlhbHVfbWFpbl9vcDJfaVtgU0NSMV9YTEVOLTFdCi0gICAgICAgICAgICAgICAgICAgICAgICYgIG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTFdOwotICAgIG1haW5fc3VtX25lZ19vdmZsdyA9ICBleHUyaWFsdV9tYWluX29wMV9pW2BTQ1IxX1hMRU4tMV0KLSAgICAgICAgICAgICAgICAgICAgICAgJiB+ZXh1MmlhbHVfbWFpbl9vcDJfaVtgU0NSMV9YTEVOLTFdCi0gICAgICAgICAgICAgICAgICAgICAgICYgfm1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTFdOwotCi0gICAgLy8gRkxBR1MxIC0gZmxhZ3MgZm9yIGNvbXBhcmlzb24gKHJlc3VsdCBvZiBzdWJ0cmFjdGlvbikKLSAgICBtYWluX3N1bV9mbGFncy5jID0gbWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU5dOwotICAgIG1haW5fc3VtX2ZsYWdzLnogPSB+fG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTE6MF07Ci0gICAgbWFpbl9zdW1fZmxhZ3MucyA9IG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTFdOwotICAgIG1haW5fc3VtX2ZsYWdzLm8gPSBtYWluX3N1bV9wb3Nfb3ZmbHcgfCBtYWluX3N1bV9uZWdfb3ZmbHc7Ci1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBZGRyZXNzIGFkZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gQWRkaXRpb25hbCBhZGRlciBpcyB1c2VkIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9wZXJhdGlvbnM6Ci0gLy8gLSBQQy1iYXNlZCBhZGRyZXNzIGNhbGN1bGF0aW9uICAgICAgICAgIChBVUlQQykKLSAvLyAtIElNRU0gYnJhbmNoIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgKEJFUS9CTkUvQkxUKFUpL0JHRShVKSkKLSAvLyAtIElNRU0ganVtcCBhZGRyZXNzIGNhbGN1bGF0aW9uICAgICAgICAgKEpBTC9KQUxSKQotIC8vIC0gRE1FTSBsb2FkIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgICAoTEIoVSkvTEgoVSkvTFcpCi0gLy8gLSBETUVNIHN0b3JlIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgIChTQi9TSC9TVykKLS8vCi0KLWFzc2lnbiBpYWx1MmV4dV9hZGRyX3Jlc19vID0gZXh1MmlhbHVfYWRkcl9vcDFfaSArIGV4dTJpYWx1X2FkZHJfb3AyX2k7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2hpZnQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIC8vCi0gLy8gU2hpZnQgbG9naWMgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBzaGlmdCBvcGVyYXRpb25zOgotIC8vIC0gTG9naWNhbCBsZWZ0IHNoaWZ0ICAgICAgKFNMTEkvU0xMKQotIC8vIC0gTG9naWNhbCByaWdodCBzaGlmdCAgICAgKFNSTEkvU1JMKQotIC8vIC0gQXJpdGhtZXRpYyByaWdodCBzaGlmdCAgKFNSQUkvU1JBKQotLy8KLQotYXNzaWduIGlhbHVfY21kX3NoZnQgPSAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9TTEwpCi0gICAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX1NSTCkKLSAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfU1JBKTsKLWFzc2lnbiBzaGZ0X2NtZCAgICAgID0gaWFsdV9jbWRfc2hmdAotICAgICAgICAgICAgICAgICAgICAgPyB7KGV4dTJpYWx1X2NtZF9pICE9IFNDUjFfSUFMVV9DTURfU0xMKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX1NSQSl9Ci0gICAgICAgICAgICAgICAgICAgICA6IDInYjAwOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHNoZnRfb3AxID0gZXh1MmlhbHVfbWFpbl9vcDFfaTsKLSAgICBzaGZ0X29wMiA9IGV4dTJpYWx1X21haW5fb3AyX2lbNDowXTsKLSAgICBjYXNlIChzaGZ0X2NtZCkKLSAgICAgICAgMidiMTAgICA6IHNoZnRfcmVzID0gc2hmdF9vcDEgID4+IHNoZnRfb3AyOwotICAgICAgICAyJ2IxMSAgIDogc2hmdF9yZXMgPSBzaGZ0X29wMSA+Pj4gc2hmdF9vcDI7Ci0gICAgICAgIGRlZmF1bHQgOiBzaGZ0X3JlcyA9IHNoZnRfb3AxICA8PCBzaGZ0X29wMjsKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfUlZNX0VYVAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNVUwvRElWIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gTVVML0RJViBpbnN0cnVjdGlvbnMgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIE1VTC9ESVYgRlNNIGNvbnRyb2wgbG9naWMsIGluY2x1ZGluZyBpdGVyYXRpb24gbnVtYmVyIGNvdW50ZXIKLSAvLyAtIE1VTC9ESVYgRlNNCi0gLy8gLSBNVUwgbG9naWMKLSAvLyAtIERJViBsb2dpYwotIC8vIC0gTURVIGFkZGVyIHRvIHByb2R1Y2UgYW4gaW50ZXJtZWRpYXRlIHJlc3VsdAotIC8vIC0gMiByZWdpc3RlcnMgdG8gc2F2ZSB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCAoc2hhcmVkIGJldHdlZW4gTVVMIGFuZCBESVYKLSAvLyAgIG9wZXJhdGlvbnMpCi0vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1VTC9ESVYgRlNNIENvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbWR1X2NtZF9kaXYgPSAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9ESVYpCi0gICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9ESVZVKQotICAgICAgICAgICAgICAgICAgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfUkVNKQotICAgICAgICAgICAgICAgICAgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfUkVNVSk7Ci1hc3NpZ24gbWR1X2NtZF9tdWwgPSAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9NVUwpCi0gICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9NVUxIKQotICAgICAgICAgICAgICAgICAgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfTVVMSFUpCi0gICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9NVUxIU1UpOwotCi1hc3NpZ24gbWR1X2NtZCAgICAgPSBtZHVfY21kX2RpdiA/IFNDUjFfSUFMVV9NRFVfRElWCi0gICAgICAgICAgICAgICAgICAgOiBtZHVfY21kX211bCA/IFNDUjFfSUFMVV9NRFVfTVVMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUFMVV9NRFVfTk9ORTsKLQotYXNzaWduIG1haW5fb3BzX25vbl96ZXJvID0gfGV4dTJpYWx1X21haW5fb3AxX2kgJiB8ZXh1MmlhbHVfbWFpbl9vcDJfaTsKLWFzc2lnbiBtYWluX29wc19kaWZmX3NnbiA9IGV4dTJpYWx1X21haW5fb3AxX2lbYFNDUjFfWExFTi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgIF4gZXh1MmlhbHVfbWFpbl9vcDJfaVtgU0NSMV9YTEVOLTFdOwotCi0gYGlmZGVmIFNDUjFfRkFTVF9NVUwKLSAgICBhc3NpZ24gbWR1X2NtZF9pc19pdGVyID0gbWR1X2NtZF9kaXY7Ci0gYGVsc2UgLy8gflNDUjFfRkFTVF9NVUwKLSAgICBhc3NpZ24gbWR1X2NtZF9pc19pdGVyID0gbWR1X2NtZF9tdWwgfCBtZHVfY21kX2RpdjsKLSBgZW5kaWYgLy8gflNDUjFfRkFTVF9NVUwKLQotYXNzaWduIG1kdV9pdGVyX3JlcSA9IG1kdV9jbWRfaXNfaXRlciA/IChtYWluX29wc19ub25femVybyAmIG1kdV9mc21faWRsZSkgOiAxJ2IwOwotYXNzaWduIG1kdV9pdGVyX3JkeSA9IG1kdV9pdGVyX2NudFswXTsKLQotYXNzaWduIGRpdl9jbWRfZGl2ID0gKGRpdl9jbWQgPT0gMidiMDApOwotYXNzaWduIGRpdl9jbWRfcmVtID0gZGl2X2NtZFsxXTsKLQotLy8gQ29ycmVjdGlvbiByZXF1ZXN0IHNpZ25hbHMKLWFzc2lnbiBkaXZfY29ycl9yZXEgPSBkaXZfY21kX2RpdiAmIG1haW5fb3BzX2RpZmZfc2duOwotYXNzaWduIHJlbV9jb3JyX3JlcSA9IGRpdl9jbWRfcmVtICYgfGRpdl9yZXNfcmVtICYgKGRpdl9vcDFfaXNfbmVnIF4gZGl2X3Jlc19yZW1fYyk7Ci1hc3NpZ24gbWR1X2NvcnJfcmVxID0gbWR1X2NtZF9kaXYgJiAoZGl2X2NvcnJfcmVxIHwgcmVtX2NvcnJfcmVxKTsKLQotLy8gTURVIGl0ZXJhdGlvbiBjb3VudGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbWR1X2l0ZXJfY250X2VuID0gZXh1MmlhbHVfcnZtX2NtZF92ZF9pICYgfmlhbHUyZXh1X3J2bV9yZXNfcmR5X287Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChtZHVfaXRlcl9jbnRfZW4pIGJlZ2luCi0gICAgICAgIG1kdV9pdGVyX2NudCA8PSBtZHVfaXRlcl9jbnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gbWR1X2l0ZXJfY250X25leHQgPSB+bWR1X2ZzbV9pZGxlID8gbWR1X2l0ZXJfY250ID4+IDEKLSAgICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9jbWRfZGl2ICAgPyBTQ1IxX0RJVl9DTlRfSU5JVAotIGBpZm5kZWYgU0NSMV9GQVNUX01VTAotICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X2NtZF9tdWwgICA/IFNDUjFfTVVMX0NOVF9JTklUCi0gYGVuZGlmIC8vIH5TQ1IxX0ZBU1RfTVVMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X2l0ZXJfY250OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1VTC9ESVYgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgbWR1X2ZzbV9mZiA8PSBTQ1IxX0lBTFVfTURVX0ZTTV9JRExFOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIG1kdV9mc21fZmYgPD0gbWR1X2ZzbV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgbWR1X2ZzbV9uZXh0ID0gU0NSMV9JQUxVX01EVV9GU01fSURMRTsKLQotICAgIGlmIChleHUyaWFsdV9ydm1fY21kX3ZkX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKG1kdV9mc21fZmYpCi0gICAgICAgICAgICBTQ1IxX0lBTFVfTURVX0ZTTV9JRExFIDogYmVnaW4KLSAgICAgICAgICAgICAgICBtZHVfZnNtX25leHQgPSBtZHVfaXRlcl9yZXEgID8gU0NSMV9JQUxVX01EVV9GU01fSVRFUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lBTFVfTURVX0ZTTV9JRExFOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lBTFVfTURVX0ZTTV9JVEVSIDogYmVnaW4KLSAgICAgICAgICAgICAgICBtZHVfZnNtX25leHQgPSB+bWR1X2l0ZXJfcmR5ID8gU0NSMV9JQUxVX01EVV9GU01fSVRFUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9jb3JyX3JlcSAgPyBTQ1IxX0lBTFVfTURVX0ZTTV9DT1JSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUFMVV9NRFVfRlNNX0lETEU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfSUFMVV9NRFVfRlNNX0NPUlIgOiBiZWdpbgotICAgICAgICAgICAgICAgIG1kdV9mc21fbmV4dCA9IFNDUjFfSUFMVV9NRFVfRlNNX0lETEU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBtZHVfZnNtX2lkbGUgPSAobWR1X2ZzbV9mZiA9PSBTQ1IxX0lBTFVfTURVX0ZTTV9JRExFKTsKLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotYXNzaWduIG1kdV9mc21faXRlciA9IChtZHVfZnNtX2ZmID09IFNDUjFfSUFMVV9NRFVfRlNNX0lURVIpOwotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi1hc3NpZ24gbWR1X2ZzbV9jb3JyID0gKG1kdV9mc21fZmYgPT0gU0NSMV9JQUxVX01EVV9GU01fQ09SUik7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTXVsdGlwbGllciBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIE11bHRpcGxpY2F0aW9uIGhhcyAyIG9wdGlvbnM6IGZhc3QgKDEgY3ljbGUpIGFuZCBSYWRpeC0yICgzMiBjeWNsZXMpIG11bHRpcGxpY2F0aW9uLgotIC8vCi0gLy8gMS4gRmFzdCBtdWx0aXBsaWNhdGlvbiB1c2VzIHRoZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggd2hlbiAyIG9wZXJhbmRzIGFyZQotIC8vIG11bHRpcGxpZWQgaW4gb25lIGN5Y2xlCi0gLy8KLSAvLyAyLiBSYWRpeC0yIG11bHRpcGxpY2F0aW9uIHVzZXMgMiByZWdpc3RlcnMgKGhpZ2ggYW5kIGxvdyBwYXJ0IG9mIG11bHRpcGxpY2F0aW9uKQotIC8vCi0gLy8gUmFkaXgtMiBhbGdvcml0aG06Ci0gLy8gMS4gSW5pdGlhbGl6ZSByZWdpc3RlcnMKLSAvLyAyLiBDcmVhdGUgYSBwYXJ0aWFsIHByb2R1Y3QgYnkgbXVsdGlwbHlpbmcgbXVsdGlwbGljYW5kIGJ5IHRoZSBMU0Igb2YgbXVsdGlwbGllcgotIC8vIDMuIEFkZCB0aGUgcGFydGlhbCBwcm9kdWN0IHRvIHRoZSBwcmV2aW91cyAoaW50ZXJtZWRpYXRlKSB2YWx1ZSBvZiBtdWx0aXBsaWNhdGlvbgotIC8vICAgIHJlc3VsdCAoc3RvcmVkIGludG8gaGlnaCBhbmQgbG93IHBhcnRzIG9mIG11bHRpcGxpY2F0aW9uIHJlc3VsdCByZWdpc3RlcikKLSAvLyA0LiBTaGlmdCB0aGUgbG93IHBhcnQgb2YgbXVsdGlwbGljYXRpb24gcmVzdWx0IHJlZ2lzdGVyIHJpZ2h0Ci0gLy8gNC4gU3RvcmUgdGhlIGFkZGl0aW9uIHJlc3VsdCBpbnRvIHRoZSBoaWdoIHBhcnQgb2YgbXVsdGlwbGljYXRpb24gcmVzdWx0IHJlZ2lzdGVyCi0gLy8gNi4gSWYgaXRlcmF0aW9uIGlzIG5vdCByZWFkeSwgZ28gdG8gc3RlcCAyLiBPdGhlcndpc2UgbXVsdGlwbGljYXRpb24gaXMgZG9uZQotIC8vCi0vLwotCi1hc3NpZ24gbXVsX2NtZCAgPSB7KChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTEhVKSB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTEhTVSkpLAotICAgICAgICAgICAgICAgICAgICgoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9NVUxIVSkgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9NVUxIKSl9OwotCi1hc3NpZ24gbXVsX2NtZF9oaSAgICAgPSB8bXVsX2NtZDsKLWFzc2lnbiBtdWxfb3AxX2lzX3NnbiA9IH4mbXVsX2NtZDsKLWFzc2lnbiBtdWxfb3AyX2lzX3NnbiA9IH5tdWxfY21kWzFdOwotYXNzaWduIG11bF9vcDFfc2duICAgID0gbXVsX29wMV9pc19zZ24gJiBleHUyaWFsdV9tYWluX29wMV9pW2BTQ1IxX1hMRU4tMV07Ci1hc3NpZ24gbXVsX29wMl9zZ24gICAgPSBtdWxfb3AyX2lzX3NnbiAmIGV4dTJpYWx1X21haW5fb3AyX2lbYFNDUjFfWExFTi0xXTsKLQotYGlmZGVmIFNDUjFfRkFTVF9NVUwKLWFzc2lnbiBtdWxfb3AxID0gbWR1X2NtZF9tdWwgPyAkc2lnbmVkKHttdWxfb3AxX3NnbiwgZXh1MmlhbHVfbWFpbl9vcDFfaX0pIDogJzA7Ci1hc3NpZ24gbXVsX29wMiA9IG1kdV9jbWRfbXVsID8gJHNpZ25lZCh7bXVsX29wMl9zZ24sIGV4dTJpYWx1X21haW5fb3AyX2l9KSA6ICcwOwotYXNzaWduIG11bF9yZXMgPSBtZHVfY21kX211bCA/IG11bF9vcDEgKiBtdWxfb3AyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnc2IwOwotYGVsc2UgLy8gflNDUjFfRkFTVF9NVUwKLWFzc2lnbiBtdWxfb3AxID0gbWR1X2NtZF9tdWwgID8gJHNpZ25lZCh7bXVsX29wMV9zZ24sIGV4dTJpYWx1X21haW5fb3AxX2l9KSA6ICcwOwotYXNzaWduIG11bF9vcDIgPSB+bWR1X2NtZF9tdWwgPyAnMAotICAgICAgICAgICAgICAgOiBtZHVfZnNtX2lkbGUgPyAkc2lnbmVkKHsxJ2IwLCBleHUyaWFsdV9tYWluX29wMl9pW1NDUjFfTVVMX1dJRFRILTE6MF19KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkc2lnbmVkKHsobWR1X2l0ZXJfY250WzBdICYgbXVsX29wMl9pc19zZ24gJiBtZHVfcmVzX2xvX2ZmW1NDUjFfTVVMX1dJRFRILTFdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9yZXNfbG9fZmZbU0NSMV9NVUxfV0lEVEgtMTowXX0pOwotCi1hc3NpZ24gbXVsX3BhcnRfcHJvZCAgICAgICAgICAgID0gbWR1X2NtZF9tdWwgID8gbXVsX29wMSAqIG11bF9vcDIgOiAnc2IwOwotYXNzaWduIHttdWxfcmVzX2hpLCBtdWxfcmVzX2xvfSA9IH5tZHVfY21kX211bCA/ICcwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X2ZzbV9pZGxlID8gKHttZHVfc3VtX3JlcywgZXh1MmlhbHVfbWFpbl9vcDJfaVtgU0NSMV9YTEVOLTE6U0NSMV9NVUxfV0lEVEhdfSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoe21kdV9zdW1fcmVzLCBtZHVfcmVzX2xvX2ZmW2BTQ1IxX1hMRU4tMTpTQ1IxX01VTF9XSURUSF19KTsKLWBlbmRpZiAvLyB+U0NSMV9GQVNUX01VTAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERpdmlkZXIgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBEaXZpc2lvbiB1c2VzIGEgbm9uLXJlc3RvcmluZyBhbGdvcml0aG0uIDMgcmVnaXN0ZXJzIGFyZSB1c2VkOgotIC8vIC0gUmVtYWluZGVyIHJlZ2lzdGVyCi0gLy8gLSBRdW90aWVudCByZWdpc3RlcgotIC8vIC0gRGl2aWRlbmQgbG93IHBhcnQgcmVnaXN0ZXIgKGZvciBjb3JuZXIgY2FzZSBxdW90aWVudCBiaXQgY2FsY3VsYXRpb24pCi0gLy8KLSAvLyBBbGdvcml0aG06Ci0gLy8gMS4gSW5pdGlhbGl6ZSByZWdpc3RlcnMKLSAvLyAyLiBTaGlmdCByZW1haW5kZXIgYW5kIGRpdmlkZW5kIGxvdyBwYXJ0IHJlZ2lzdGVycyBsZWZ0Ci0gLy8gMy4gQ29tcGFyZSByZW1haW5kZXIgcmVnaXN0ZXIgd2l0aCB0aGUgZGl2aXNvciAodGFraW5nIHByZXZpb3VzIHF1b3RpZW50IGJpdAotIC8vICAgIGFuZCBvcGVyYW5kcyBzaWducyBpbnRvIGFjY291bnQpIGFuZCBjYWxjdWxhdGUgcXVvdGllbnQgYml0IGJhc2VkIG9uIHRoZQotIC8vICAgIGNvbXBhcmlzb24gcmVzdWx0cwotIC8vIDQuIFNoaWZ0IHF1b3RpZW50IHJlZ2lzdGVyIGxlZnQsIGFwcGVuZCBxdW90aWVudCBiaXQgdG8gdGhlIHF1b3RpZW50IHJlZ2lzdGVyCi0gLy8gNS4gSWYgaXRlcmF0aW9uIGlzIG5vdCByZWFkeSwgZ28gdG8gc3RlcCAyLiBPdGhlcndpc2UgZ28gdG8gc3RlcCA2Ci0gLy8gNi4gRG8gY29ycmVjdGlvbiBpZiBuZWNlc3NhcnksIG90aGVyd2lzZSBkaXZpc2lvbiBpcyBkb25lCi0gLy8KLSAvLyBRdW90aWVudCBiaXQgY2FsY3VsYXRpb24gaGFzIGEgY29ybmVyIGNhc2U6Ci0gLy8gV2hlbiBkaXZpZGVuZCBpcyBuZWdhdGl2ZSByZXN1bHQgY2FycnkgYml0IGNoZWNrIHRha2VzIGludG8gYWNjb3VudCBvbmx5Ci0gLy8gdGhlIGNhc2Ugb2YgcmVtYWluZGVyIHJlZ2lzdGVyIGJlZW4gZ3JlYXRlciB0aGFuIGRpdmlzb3IuIFRvIGhhbmRsZQotIC8vIGVxdWFsaXR5IGNhc2Ugd2Ugc2hvdWxkIGNoZWNrIGlmIGJvdGggdGhlIGNvbXBhcmlzb24gcmVzdWx0IGFuZCB0aGUKLSAvLyBsb3dlciBwYXJ0IG9mIGRpdmlkZW5kIGFyZSB6ZXJvCi0vLwotCi1hc3NpZ24gZGl2X2NtZCAgPSB7KChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX1JFTSkgICB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX1JFTVUpKSwKLSAgICAgICAgICAgICAgICAgICAoKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfUkVNVSkgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfRElWVSkpfTsKLQotYXNzaWduIGRpdl9vcHNfYXJlX3NnbiA9IH5kaXZfY21kWzBdOwotYXNzaWduIGRpdl9vcDFfaXNfbmVnICA9IGRpdl9vcHNfYXJlX3NnbiAmIGV4dTJpYWx1X21haW5fb3AxX2lbYFNDUjFfWExFTi0xXTsKLWFzc2lnbiBkaXZfb3AyX2lzX25lZyAgPSBkaXZfb3BzX2FyZV9zZ24gJiBleHUyaWFsdV9tYWluX29wMl9pW2BTQ1IxX1hMRU4tMV07Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgZGl2X3Jlc19yZW1fYyA9ICcwOwotICAgIGRpdl9yZXNfcmVtICAgPSAnMDsKLSAgICBkaXZfcmVzX3F1byAgID0gJzA7Ci0gICAgZGl2X3F1b19iaXQgICA9IDEnYjA7Ci0gICAgaWYgKG1kdV9jbWRfZGl2ICYgfm1kdV9mc21fY29ycikgYmVnaW4KLSAgICAgICAgZGl2X3Jlc19yZW1fYyA9IG1kdV9zdW1fcmVzW1NDUjFfTURVX1NVTV9XSURUSC0xXTsKLSAgICAgICAgZGl2X3Jlc19yZW0gICA9IG1kdV9zdW1fcmVzW1NDUjFfTURVX1NVTV9XSURUSC0yOjBdOwotICAgICAgICBkaXZfcXVvX2JpdCAgID0gfihkaXZfb3AxX2lzX25lZyBeIGRpdl9yZXNfcmVtX2MpCi0gICAgICAgICAgICAgICAgICAgICAgfCAoZGl2X29wMV9pc19uZWcgJiAoe21kdV9zdW1fcmVzLCBkaXZfZHZkbmRfbG9fbmV4dH0gPT0gJzApKTsKLSAgICAgICAgZGl2X3Jlc19xdW8gICA9IG1kdV9mc21faWRsZQotICAgICAgICAgICAgICAgICAgICAgID8geycwLCBkaXZfcXVvX2JpdH0KLSAgICAgICAgICAgICAgICAgICAgICA6IHttZHVfcmVzX2xvX2ZmW2BTQ1IxX1hMRU4tMjowXSwgZGl2X3F1b19iaXR9OwotICAgIGVuZAotZW5kCi0KLS8vIERpdmlkZW5kIGxvdyBwYXJ0IHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gZGl2X2R2ZG5kX2xvX3VwZCA9IGV4dTJpYWx1X3J2bV9jbWRfdmRfaSAmIH5pYWx1MmV4dV9ydm1fcmVzX3JkeV9vOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoZGl2X2R2ZG5kX2xvX3VwZCkgYmVnaW4KLSAgICAgICAgZGl2X2R2ZG5kX2xvX2ZmIDw9IGRpdl9kdmRuZF9sb19uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBkaXZfZHZkbmRfbG9fbmV4dCA9ICh+bWR1X2NtZF9kaXYgfCBtZHVfZnNtX2NvcnIpID8gJzAKLSAgICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9mc21faWRsZSAgICAgICAgICAgICAgICAgID8gZXh1MmlhbHVfbWFpbl9vcDFfaSA8PCAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRpdl9kdmRuZF9sb19mZiAgICAgPDwgMTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNRFUgYWRkZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgICAgICAgICAgIHNnbjsKLWxvZ2ljICAgICAgICAgICBpbnY7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgbWR1X3N1bV9zdWIgICAgPSAxJ2IwOwotICAgIG1kdV9zdW1fb3AxICAgID0gJzA7Ci0gICAgbWR1X3N1bV9vcDIgICAgPSAnMDsKLSAgICBzZ24gICAgICAgICAgICA9ICcwOyAvLyB5b3N5cyAtIGxhdGNoIGZpeAotICAgIGludiAgICAgICAgICAgID0gJzA7IC8vIHlvc3lzIC0gbGF0Y2ggZml4Ci0gICAgY2FzZSAobWR1X2NtZCkKLSAgICAgICAgU0NSMV9JQUxVX01EVV9ESVYgOiBiZWdpbgotICAgICAgICAgICAgc2duICAgICAgICAgPSBtZHVfZnNtX2NvcnIgPyBkaXZfb3AxX2lzX25lZyBeIG1kdV9yZXNfY19mZgotICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfZnNtX2lkbGUgPyAxJ2IwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IH5tZHVfcmVzX2xvX2ZmWzBdOwotICAgICAgICAgICAgaW52ICAgICAgICAgPSBkaXZfb3BzX2FyZV9zZ24gJiBtYWluX29wc19kaWZmX3NnbjsKLSAgICAgICAgICAgIG1kdV9zdW1fc3ViID0gfmludiBeIHNnbjsKLSAgICAgICAgICAgIG1kdV9zdW1fb3AxID0gbWR1X2ZzbV9jb3JyID8gJHNpZ25lZCh7MSdiMCwgbWR1X3Jlc19oaV9mZn0pCi0gICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9mc21faWRsZSA/ICRzaWduZWQoe2Rpdl9vcDFfaXNfbmVnLCBleHUyaWFsdV9tYWluX29wMV9pW2BTQ1IxX1hMRU4tMV19KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkc2lnbmVkKHttZHVfcmVzX2hpX2ZmLCBkaXZfZHZkbmRfbG9fZmZbYFNDUjFfWExFTi0xXX0pOwotICAgICAgICAgICAgbWR1X3N1bV9vcDIgPSAkc2lnbmVkKHtkaXZfb3AyX2lzX25lZywgZXh1MmlhbHVfbWFpbl9vcDJfaX0pOwotICAgICAgICBlbmQKLWBpZm5kZWYgU0NSMV9GQVNUX01VTAotICAgICAgICBTQ1IxX0lBTFVfTURVX01VTCA6IGJlZ2luCi0gICAgICAgICAgICBtZHVfc3VtX29wMSA9IG1kdV9mc21faWRsZQotICAgICAgICAgICAgICAgICAgICAgICAgPyAnMAotICAgICAgICAgICAgICAgICAgICAgICAgOiAkc2lnbmVkKHsobXVsX29wMV9pc19zZ24gJiBtZHVfcmVzX2hpX2ZmW2BTQ1IxX1hMRU4tMV0pLCBtZHVfcmVzX2hpX2ZmfSk7Ci0gICAgICAgICAgICBtZHVfc3VtX29wMiA9IG11bF9wYXJ0X3Byb2Q7Ci0gICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfRkFTVF9NVUwKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luIGVuZAotICAgIGVuZGNhc2UKLSAgICBtZHVfc3VtX3JlcyA9IG1kdV9zdW1fc3ViCi0gICAgICAgICAgICAgICAgPyAobWR1X3N1bV9vcDEgLSBtZHVfc3VtX29wMikKLSAgICAgICAgICAgICAgICA6IChtZHVfc3VtX29wMSArIG1kdV9zdW1fb3AyKTsKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1VTC9ESVYgaW50ZXJtZWRpYXRlIHJlc3VsdHMgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIG1kdV9yZXNfdXBkID0gZXh1MmlhbHVfcnZtX2NtZF92ZF9pICYgfmlhbHUyZXh1X3J2bV9yZXNfcmR5X287Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChtZHVfcmVzX3VwZCkgYmVnaW4KLSAgICAgICAgbWR1X3Jlc19jX2ZmICA8PSBtZHVfcmVzX2NfbmV4dDsKLSAgICAgICAgbWR1X3Jlc19oaV9mZiA8PSBtZHVfcmVzX2hpX25leHQ7Ci0gICAgICAgIG1kdV9yZXNfbG9fZmYgPD0gbWR1X3Jlc19sb19uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBtZHVfcmVzX2NfbmV4dCAgPSBtZHVfY21kX2RpdiA/IGRpdl9yZXNfcmVtX2MgOiBtZHVfcmVzX2NfZmY7Ci1hc3NpZ24gbWR1X3Jlc19oaV9uZXh0ID0gbWR1X2NtZF9kaXYgPyBkaXZfcmVzX3JlbQotIGBpZm5kZWYgU0NSMV9GQVNUX01VTAotICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9jbWRfbXVsID8gbXVsX3Jlc19oaQotIGBlbmRpZiAvLyBTQ1IxX0ZBU1RfTVVMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfcmVzX2hpX2ZmOwotYXNzaWduIG1kdV9yZXNfbG9fbmV4dCA9IG1kdV9jbWRfZGl2ID8gZGl2X3Jlc19xdW8KLSBgaWZuZGVmIFNDUjFfRkFTVF9NVUwKLSAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfY21kX211bCA/IG11bF9yZXNfbG8KLSBgZW5kaWYgLy8gU0NSMV9GQVNUX01VTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X3Jlc19sb19mZjsKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBPcGVyYXRpb24gcmVzdWx0IGZvcm1pbmcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSAnMDsKLSAgICBpYWx1MmV4dV9jbXBfcmVzX28gICAgID0gMSdiMDsKLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLSAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vID0gMSdiMTsKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotICAgIGNhc2UgKGV4dTJpYWx1X2NtZF9pKQotICAgICAgICBTQ1IxX0lBTFVfQ01EX0FORCA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gZXh1MmlhbHVfbWFpbl9vcDFfaSAmIGV4dTJpYWx1X21haW5fb3AyX2k7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX09SIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBleHUyaWFsdV9tYWluX29wMV9pIHwgZXh1MmlhbHVfbWFpbl9vcDJfaTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSUFMVV9DTURfWE9SIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBleHUyaWFsdV9tYWluX29wMV9pIF4gZXh1MmlhbHVfbWFpbl9vcDJfaTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSUFMVV9DTURfQUREIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBtYWluX3N1bV9yZXNbYFNDUjFfWExFTi0xOjBdOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUIgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTE6MF07Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1NVQl9MVCA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gYFNDUjFfWExFTicobWFpbl9zdW1fZmxhZ3MucyBeIG1haW5fc3VtX2ZsYWdzLm8pOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IG1haW5fc3VtX2ZsYWdzLnMgXiBtYWluX3N1bV9mbGFncy5vOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfTFRVIDogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBgU0NSMV9YTEVOJyhtYWluX3N1bV9mbGFncy5jKTsKLSAgICAgICAgICAgIGlhbHUyZXh1X2NtcF9yZXNfbyAgPSBtYWluX3N1bV9mbGFncy5jOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfRVEgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IGBTQ1IxX1hMRU4nKG1haW5fc3VtX2ZsYWdzLnopOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IG1haW5fc3VtX2ZsYWdzLno7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1NVQl9ORSA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gYFNDUjFfWExFTicofm1haW5fc3VtX2ZsYWdzLnopOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IH5tYWluX3N1bV9mbGFncy56OwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfR0UgOiBiZWdpbgotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IGBTQ1IxX1hMRU4nKH4obWFpbl9zdW1fZmxhZ3MucyBeIG1haW5fc3VtX2ZsYWdzLm8pKTsKLSAgICAgICAgICAgIGlhbHUyZXh1X2NtcF9yZXNfbyAgPSB+KG1haW5fc3VtX2ZsYWdzLnMgXiBtYWluX3N1bV9mbGFncy5vKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSUFMVV9DTURfU1VCX0dFVSA6IGJlZ2luCi0gICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gYFNDUjFfWExFTicofm1haW5fc3VtX2ZsYWdzLmMpOwotICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IH5tYWluX3N1bV9mbGFncy5jOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9TTEwsCi0gICAgICAgIFNDUjFfSUFMVV9DTURfU1JMLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1NSQTogYmVnaW4KLSAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBzaGZ0X3JlczsKLSAgICAgICAgZW5kCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgIFNDUjFfSUFMVV9DTURfTVVMLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX01VTEhVLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX01VTEhTVSwKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9NVUxIIDogYmVnaW4KLSBgaWZkZWYgU0NSMV9GQVNUX01VTAotICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IG11bF9jbWRfaGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdWxfcmVzW1NDUjFfTVVMX1JFU19XSURUSC0xOmBTQ1IxX1hMRU5dCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXVsX3Jlc1tgU0NSMV9YTEVOLTE6MF07Ci0gYGVsc2UgLy8gflNDUjFfRkFTVF9NVUwKLSAgICAgICAgICAgIGNhc2UgKG1kdV9mc21fZmYpCi0gICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fSURMRSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSAnMDsKLSAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfbyA9IH5tZHVfaXRlcl9yZXE7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fSVRFUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSBtdWxfY21kX2hpID8gbXVsX3Jlc19oaSA6IG11bF9yZXNfbG87Ci0gICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X28gPSBtZHVfaXRlcl9yZHk7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gYGVuZGlmIC8vIH5TQ1IxX0ZBU1RfTVVMCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0lBTFVfQ01EX0RJViwKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9ESVZVLAotICAgICAgICBTQ1IxX0lBTFVfQ01EX1JFTSwKLSAgICAgICAgU0NSMV9JQUxVX0NNRF9SRU1VIDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKG1kdV9mc21fZmYpCi0gICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fSURMRSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSAofGV4dTJpYWx1X21haW5fb3AyX2kgfCBkaXZfY21kX3JlbSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGV4dTJpYWx1X21haW5fb3AxX2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxOwotICAgICAgICAgICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vID0gfm1kdV9pdGVyX3JlcTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBTQ1IxX0lBTFVfTURVX0ZTTV9JVEVSIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyAgICA9IGRpdl9jbWRfcmVtID8gZGl2X3Jlc19yZW0gOiBkaXZfcmVzX3F1bzsKLSAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfbyA9IG1kdV9pdGVyX3JkeSAmIH5tZHVfY29ycl9yZXE7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fQ09SUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSBkaXZfY21kX3JlbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWR1X3N1bV9yZXNbYFNDUjFfWExFTi0xOjBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtbWR1X3Jlc19sb19mZltgU0NSMV9YTEVOLTE6MF07Ci0gICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X28gPSAxJ2IxOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi0KLS8vIFggY2hlY2tzCi0KLVNDUjFfU1ZBX0lBTFVfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKHtleHUyaWFsdV9ydm1fY21kX3ZkX2ksIG1kdV9mc21fZmZ9KQotICAgICkgZWxzZSAkZXJyb3IoIklBTFUgRXJyb3I6IHVua25vd24gdmFsdWVzIik7Ci0KLVNDUjFfU1ZBX0lBTFVfWENIRUNLX1FVRVVFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dTJpYWx1X3J2bV9jbWRfdmRfaSB8LT4KLSAgICAhJGlzdW5rbm93bih7ZXh1MmlhbHVfbWFpbl9vcDFfaSwgZXh1MmlhbHVfbWFpbl9vcDJfaSwgZXh1MmlhbHVfY21kX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIklBTFUgRXJyb3I6IHVua25vd24gdmFsdWVzIGluIHF1ZXVlIik7Ci0KLS8vIEJlaGF2aW9yIGNoZWNrcwotCi1TQ1IxX1NWQV9JQUxVX0lMTF9TVEFURSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAkb25laG90MCh7fmV4dTJpYWx1X3J2bV9jbWRfdmRfaSwgbWR1X2ZzbV9pdGVyLCBtZHVfZnNtX2NvcnJ9KQotICAgICkgZWxzZSAkZXJyb3IoIklBTFUgRXJyb3I6IGlsbGVnYWwgc3RhdGUiKTsKLQotYGlmbmRlZiBWRVJJTEFUT1IgICAgCi1TQ1IxX1NWQV9JQUxVX0pVTVBfRlJPTV9JRExFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChtZHVfZnNtX2lkbGUgJiAofmV4dTJpYWx1X3J2bV9jbWRfdmRfaSB8IH5tZHVfaXRlcl9yZXEpKSB8PT4gbWR1X2ZzbV9pZGxlCi0gICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIGp1bXAgZnJvbSBJRExFIHN0YXRlIik7Ci0KLVNDUjFfU1ZBX0lBTFVfSURMRV9UT19JVEVSIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChtZHVfZnNtX2lkbGUgJiBleHUyaWFsdV9ydm1fY21kX3ZkX2kgJiBtZHVfaXRlcl9yZXEpIHw9PiBtZHVfZnNtX2l0ZXIKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IGlsbGVnYWwgY2hhbmdlIHN0YXRlIGZvcm0gSURMRSB0byBJVEVSIik7Ci0KLVNDUjFfU1ZBX0lBTFVfSlVNUF9GUk9NX0lURVIgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKG1kdV9mc21faXRlciAmIH5tZHVfaXRlcl9yZHkpIHw9PiBtZHVfZnNtX2l0ZXIKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IGlsbGVnYWwganVtcCBmcm9tIElURVIgc3RhdGUiKTsKLQotU0NSMV9TVkFfSUFMVV9JVEVSX1RPX0lETEUgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKG1kdV9mc21faXRlciAmIG1kdV9pdGVyX3JkeSAmIH5tZHVfY29ycl9yZXEpIHw9PiBtZHVfZnNtX2lkbGUKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IGlsbGVnYWwgc3RhdGUgY2hhbmdlIElURVIgdG8gSURMRSIpOwotCi1TQ1IxX1NWQV9JQUxVX0lURVJfVE9fQ09SUiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAobWR1X2ZzbV9pdGVyICYgbWR1X2l0ZXJfcmR5ICYgbWR1X2NvcnJfcmVxKSB8PT4gbWR1X2ZzbV9jb3JyCi0gICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIHN0YXRlIGNoYW5nZSBJVEVSIHRvIENPUlIiKTsKLQotU0NSMV9TVkFfSUFMVV9DT1JSX1RPX0lETEUgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbWR1X2ZzbV9jb3JyIHw9PiBtZHVfZnNtX2lkbGUKLSAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IGlsbGVnYWwgc3RhdGUgc3RheSBpbiBDT1JSIik7Ci1gZW5kaWYgLy8gVkVSSUxBVE9SCi0KLWBlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfcGlwZV9pYWx1CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lkdS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiNGQ0MS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2CisrKyAvZGV2L251bGwKQEAgLTEsODg1ICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pZHUuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gRGVjb2RlciBVbml0IChJRFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBEZWNvZGVzIHRoZSBpbnN0cnVjdGlvbiBhbmQgY3JlYXRlcyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBzaWduYWxzIGZvciBFWFUKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIEluc3RydWN0aW9uIGRlY29kZXIKLSAvLyAtIElEVSA8LT4gSUZVIGkvZgotIC8vIC0gSURVIDwtPiBFWFUgaS9mCi0gLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1tb2R1bGUgc2NyMV9waXBlX2lkdQotKAotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIElEVSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBJRFUgY2xvY2sKLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi0gICAgLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5X28sICAgICAgICAgIC8vIElEVSByZWFkeSBmb3IgbmV3IGRhdGEKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgaWZ1MmlkdV9pbnN0cl9pLCAgICAgICAgLy8gSUZVIGluc3RydWN0aW9uCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfaSwgICAgIC8vIEluc3RydWN0aW9uIGFjY2VzcyBmYXVsdCBleGNlcHRpb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX2ksICAgLy8gMSAtIGltZW0gZmF1bHQgd2hlbiB0cnlpbmcgdG8gZmV0Y2ggc2Vjb25kIGhhbGYgb2YgYW4gdW5hbGlnbmVkIFJWSSBpbnN0cnVjdGlvbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX2ksICAgICAgICAgICAvLyBJRlUgcmVxdWVzdAotCi0gICAgLy8gSURVIDwtPiBFWFUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfcmVxX28sICAgICAgICAgIC8vIElEVSByZXF1ZXN0Ci0gICAgb3V0cHV0ICB0eXBlX3NjcjFfZXh1X2NtZF9zICAgICAgICAgICAgIGlkdTJleHVfY21kX28sICAgICAgICAgIC8vIElEVSBjb21tYW5kCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vLCAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMxCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vLCAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMyCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28sICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcmQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28sICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyBpbW1lZGlhdGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlkdV9yZHlfaSAgICAgICAgICAgLy8gRVhVIHJlYWR5IGZvciBuZXcgZGF0YQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfWkVST19BRERSICAgPSA1J2QwOwotbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfUkFfQUREUiAgICAgPSA1J2QxOwotbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfU1BfQUREUiAgICAgPSA1J2QyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICBpbnN0cjsKLXR5cGVfc2NyMV9pbnN0cl90eXBlX2UgICAgICAgICAgICAgIGluc3RyX3R5cGU7Ci10eXBlX3NjcjFfcnZpX29wY29kZV9lICAgICAgICAgICAgICBydmlfb3Bjb2RlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZpX2lsbGVnYWw7Ci1sb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDM7Ci1sb2dpYyBbNjowXSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDc7Ci1sb2dpYyBbMTE6MF0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDEyOwotbG9naWMgWzQ6MF0gICAgICAgICAgICAgICAgICAgICAgICAgc2hhbXQ7Ci1gaWZkZWYgU0NSMV9SVkNfRVhUCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmNfaWxsZWdhbDsKLWBlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVfaWxsZWdhbDsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gZGVjb2RpbmcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaWR1MmlmdV9yZHlfbyAgPSBleHUyaWR1X3JkeV9pOwotYXNzaWduIGlkdTJleHVfcmVxX28gID0gaWZ1MmlkdV92ZF9pOwotYXNzaWduIGluc3RyICAgICAgICAgID0gaWZ1MmlkdV9pbnN0cl9pOwotCi0vLyBSVkkgLyBSVkMKLWBpZmRlZiBZT1NZUwotYXNzaWduIGluc3RyX3R5cGUgICA9IDInKGluc3RyWzE6MF0pOwotYGVsc2UgCi0KLWFzc2lnbiBpbnN0cl90eXBlICAgPSB0eXBlX3NjcjFfaW5zdHJfdHlwZV9lJyhpbnN0clsxOjBdKTsKLWBlbmRpZgotCi0vLyBSVkkgLyBSVkMgZmllbGRzCi1gaWZkZWYgWU9TWVMKLWFzc2lnbiBydmlfb3Bjb2RlICAgPSA1JyhpbnN0cls2OjJdKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJWSQotYGVsc2UgCi1hc3NpZ24gcnZpX29wY29kZSAgID0gdHlwZV9zY3IxX3J2aV9vcGNvZGVfZScoaW5zdHJbNjoyXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSVkkKLWBlbmRpZgotYXNzaWduIGZ1bmN0MyAgICAgICA9IChpbnN0cl90eXBlID09IFNDUjFfSU5TVFJfUlZJKSA/IGluc3RyWzE0OjEyXSA6IGluc3RyWzE1OjEzXTsgLy8gUlZJIC8gUlZDCi1hc3NpZ24gZnVuY3Q3ICAgICAgID0gaW5zdHJbMzE6MjVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSVkkKLWFzc2lnbiBmdW5jdDEyICAgICAgPSBpbnN0clszMToyMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJWSSAoU1lTVEVNKQotYXNzaWduIHNoYW10ICAgICAgICA9IGluc3RyWzI0OjIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUlZJCi0KLS8vIFJWMzJJKE1DKSBkZWNvZGUKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgLy8gRGVmYXVsdHMKLSAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfTk9ORTsKLSAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1BDX0lNTTsKLSAgICBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgICAgID0gU0NSMV9MU1VfQ01EX05PTkU7Ci0gICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICA9IFNDUjFfQ1NSX09QX1JFRzsKLSAgICBpZHUyZXh1X2NtZF9vLmNzcl9jbWQgICAgID0gU0NSMV9DU1JfQ01EX05PTkU7Ci0gICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfTk9ORTsKLSAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLmJyYW5jaF9yZXEgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLm1yZXRfcmVxICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLmZlbmNlaV9yZXEgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLndmaV9yZXEgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gJzA7Ci0gICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9ICcwOwotICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSAnMDsKLSAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gJzA7Ci0gICAgaWR1MmV4dV9jbWRfby5leGNfcmVxICAgICA9IDEnYjA7Ci0gICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR047Ci0KLSAgICAvLyBDbG9jayBnYXRpbmcKLSAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMDsKLSAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMDsKLQotICAgIHJ2aV9pbGxlZ2FsICAgICAgICAgICAgID0gMSdiMDsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICBydmVfaWxsZWdhbCAgICAgICAgICAgICA9IDEnYjA7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIHJ2Y19pbGxlZ2FsICAgICAgICAgICAgID0gMSdiMDsKLWBlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCi0KLSAgICAvLyBDaGVjayBmb3IgSU1FTSBhY2Nlc3MgZmF1bHQKLSAgICBpZiAoaWZ1MmlkdV9pbWVtX2Vycl9pKSBiZWdpbgotICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19yZXEgICAgID0gMSdiMTsKLSAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfSU5TVFJfQUNDRVNTX0ZBVUxUOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gaWZ1MmlkdV9lcnJfcnZpX2hpX2k7Ci0gICAgZW5kIGVsc2UgYmVnaW4gIC8vIG5vIGltZW0gZmF1bHQKLSAgICAgICAgY2FzZSAoaW5zdHJfdHlwZSkKLSAgICAgICAgICAgIFNDUjFfSU5TVFJfUlZJICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzE5OjE1XTsKLSAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbMjQ6MjBdOwotICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICBjYXNlIChydmlfb3Bjb2RlKQotICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9BVUlQQyAgICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfU1VNMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7aW5zdHJbMzE6MTJdLCAxMidiMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfQVVJUEMKLQotICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9MVUkgICAgICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7aW5zdHJbMzE6MTJdLCAxMidiMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfTFVJCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfSkFMICAgICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1BDX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lOQ19QQzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MTJ7aW5zdHJbMzFdfX0sIGluc3RyWzE5OjEyXSwgaW5zdHJbMjBdLCBpbnN0clszMDoyMV0sIDEnYjB9OwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX0pBTAotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX0xPQUQgICAgICAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9MU1U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syMXtpbnN0clszMV19fSwgaW5zdHJbMzA6MjBdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xCOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfTEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGlkdTJleHVfY21kX28ubHN1X2NtZCA9IFNDUjFfTFNVX0NNRF9MVzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDAgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xCVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDEgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xIVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0gfCBpbnN0clsxOV0pICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfTE9BRAotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX1NUT1JFICAgICAgICAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syMXtpbnN0clszMV19fSwgaW5zdHJbMzA6MjVdLCBpbnN0clsxMTo3XX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGlkdTJleHVfY21kX28ubHN1X2NtZCA9IFNDUjFfTFNVX0NNRF9TQjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX1NIOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfU1c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTldIHwgaW5zdHJbMjRdKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX1NUT1JFCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfT1AgICAgICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDAwMDAwMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfQUREOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9TTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1VCX0xUVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfWE9SOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9TUkw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX09SOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9BTkQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vIDcnYjAwMDAwMDAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAxMDAwMDAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1JBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLy8gNydiMDEwMDAwMAotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAwMDAwMDEgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX01VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfTVVMSDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfTVVMSFNVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9NVUxIVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfRElWOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9ESVZVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9SRU07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1JFTVU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vIDcnYjAwMDAwMDEKLWBlbmRpZiAgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3Q3Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldIHwgaW5zdHJbMjRdKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX09QCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfT1BfSU1NICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzMxXX19LCBpbnN0clszMDoyMF19OwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX0FERDsgICAgICAgIC8vIEFEREkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVDsgICAgIC8vIFNMVEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVFU7ICAgIC8vIFNMVElVCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9YT1I7ICAgICAgICAvLyBYT1JJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9PUjsgICAgICAgICAvLyBPUkkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX0FORDsgICAgICAgIC8vIEFOREkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3Q3KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDAwMDAwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNMTEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gYFNDUjFfWExFTicoc2hhbXQpOyAgIC8vIHplcm8tZXh0ZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU0xMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IHJ2aV9pbGxlZ2FsICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0NwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3J2IwMDAwMDAwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1JMSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSBgU0NSMV9YTEVOJyhzaGFtdCk7ICAgLy8gemVyby1leHRlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9TUkw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAxMDAwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTUkFJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IGBTQ1IxX1hMRU4nKHNoYW10KTsgICAvLyB6ZXJvLWV4dGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBydmlfaWxsZWdhbCAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX09QX0lNTQotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX01JU0NfTUVNICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58e2luc3RyWzMxOjI4XSwgaW5zdHJbMTk6MTVdLCBpbnN0clsxMTo3XX0pIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGRU5DRSA9IE5PUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBydmlfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fHtpbnN0clszMToxNV0sIGluc3RyWzExOjddfSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZFTkNFLkkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uZmVuY2VpX3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX01JU0NfTUVNCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfQlJBTkNIICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIwe2luc3RyWzMxXX19LCBpbnN0cls3XSwgaW5zdHJbMzA6MjVdLCBpbnN0clsxMTo4XSwgMSdiMH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmJyYW5jaF9yZXEgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kID0gU0NSMV9JQUxVX0NNRF9TVUJfRVE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCA9IFNDUjFfSUFMVV9DTURfU1VCX0xUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kID0gU0NSMV9JQUxVX0NNRF9TVUJfR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9MVFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9HRVU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTldIHwgaW5zdHJbMjRdKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX0JSQU5DSAotCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX0pBTFIgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSkFMUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCA9IFNDUjFfUkRfV0JfSU5DX1BDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgID0ge3syMXtpbnN0clszMV19fSwgaW5zdHJbMzA6MjBdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9KQUxSCi0KLSAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfU1lTVEVNICAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgPSBgU0NSMV9YTEVOJyh7ZnVuY3QzLCBpbnN0clszMToyMF19KTsgICAgICAvLyB7ZnVuY3QzLCBDU1IgYWRkcmVzc30KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgPSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICh7aW5zdHJbMTk6MTVdLCBpbnN0clsxMTo3XX0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCdkMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QxMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTInaDAwMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFQ0FMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfcmVxICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgID0gU0NSMV9FWENfQ09ERV9FQ0FMTF9NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTInaDAwMSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFQlJFQUsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uZXhjX3JlcSAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyJ2gzMDIgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTVJFVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5tcmV0X3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMidoMTA1IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdGSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby53ZmlfcmVxICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QxMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIHtpbnN0clsxOToxNV0sIGluc3RyWzExOjddfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSVwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX1dSSVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX1JFRzsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfU0VUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX1JFRzsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDExICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfQ0xFQVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX29wICAgICAgICAgID0gU0NSMV9DU1JfT1BfUkVHOwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NSUldJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsgICAgICAgICAgICAgLy8gemltbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgICAgICA9IFNDUjFfUkRfV0JfQ1NSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9jbWQgICAgICAgICA9IFNDUjFfQ1NSX0NNRF9XUklURTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICAgICAgPSBTQ1IxX0NTUl9PUF9JTU07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSU0kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOyAgICAgICAgICAgICAvLyB6aW1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX1NFVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICAgICAgPSBTQ1IxX0NTUl9PUF9JTU07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSQ0kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOyAgICAgICAgICAgICAvLyB6aW1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX0NMRUFSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX0lNTTsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9TWVNURU0KLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJ2aV9pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBydmlfb3Bjb2RlCi0gICAgICAgICAgICBlbmQgLy8gU0NSMV9JTlNUUl9SVkkKLQotYGlmZGVmIFNDUjFfUlZDX0VYVAotCi0gICAgICAgICAgICAvLyBRdWFkcmFudCAwCi0gICAgICAgICAgICBTQ1IxX0lOU1RSX1JWQzAgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW5zdHJfcnZjICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKLSAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAofnxpbnN0clsxMjo1XSkgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFEREk0U1BOCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FERDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gU0NSMV9NUFJGX1NQX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gezInYjAxLCBpbnN0cls0OjJdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjInZDAsIGluc3RyWzEwOjddLCBpbnN0clsxMjoxMV0sIGluc3RyWzVdLCBpbnN0cls2XSwgMidiMDB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkxXCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgPSBTQ1IxX0xTVV9DTURfTFc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9MU1U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSB7MidiMDEsIGluc3RyWzQ6Ml19OwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNSdkMCwgaW5zdHJbNV0sIGluc3RyWzEyOjEwXSwgaW5zdHJbNl0sIDInYjAwfTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIDMnYjExMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TVwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgICAgID0gU0NSMV9MU1VfQ01EX1NXOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IHsyJ2IwMSwgaW5zdHJbOTo3XX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gezInYjAxLCBpbnN0cls0OjJdfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjUnZDAsIGluc3RyWzVdLCBpbnN0clsxMjoxMF0sIGluc3RyWzZdLCAyJ2IwMH07Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKLSAgICAgICAgICAgIGVuZCAvLyBRdWFkcmFudCAwCi0KLSAgICAgICAgICAgIC8vIFF1YWRyYW50IDEKLSAgICAgICAgICAgIFNDUjFfSU5TVFJfUlZDMSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbnN0cl9ydmMgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQotICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQURESSAvIEMuTk9QCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FERDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTE6N107Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gaW5zdHJbMTE6N107Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syN3tpbnN0clsxMl19fSwgaW5zdHJbNjoyXX07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkpBTAotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JTkNfUEM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBTQ1IxX01QUkZfUkFfQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzEyXX19LCBpbnN0cls4XSwgaW5zdHJbMTA6OV0sIGluc3RyWzZdLCBpbnN0cls3XSwgaW5zdHJbMl0sIGluc3RyWzExXSwgaW5zdHJbNTozXSwgMSdiMH07Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuTEkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezI3e2luc3RyWzEyXX19LCBpbnN0cls2OjJdfTsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fHtpbnN0clsxMl0sIGluc3RyWzY6Ml19KSBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTE6N10gPT0gU0NSMV9NUFJGX1NQX0FERFIpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5BRERJMTZTUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FERDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gU0NSMV9NUFJGX1NQX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IFNDUjFfTVBSRl9TUF9BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIze2luc3RyWzEyXX19LCBpbnN0cls0OjNdLCBpbnN0cls1XSwgaW5zdHJbMl0sIGluc3RyWzZdLCA0J2QwfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5MVUkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezE1e2luc3RyWzEyXX19LCBpbnN0cls2OjJdLCAxMidkMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSB7MidiMDEsIGluc3RyWzk6N119OwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9IHsyJ2IwMSwgaW5zdHJbNDoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoaW5zdHJbMTE6MTBdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDInYjAwICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTJdKSAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1JMSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNydkMCwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDInYjAxICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTJdKSAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1JBSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNydkMCwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDInYjEwICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFOREkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syN3tpbnN0clsxMl19fSwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMidiMTEgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICh7aW5zdHJbMTJdLCBpbnN0cls2OjVdfSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1VCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1VCOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLlhPUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1hPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5PUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX09SOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFORAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX0FORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8ge2luc3RyWzEyXSwgaW5zdHJbNjo1XX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gaW5zdHJbMTE6MTBdCi0gICAgICAgICAgICAgICAgICAgIGVuZCAvLyBmdW5jdDMgPT0gMydiMTAwCi0gICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5KCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5qdW1wX3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syMXtpbnN0clsxMl19fSwgaW5zdHJbOF0sIGluc3RyWzEwOjldLCBpbnN0cls2XSwgaW5zdHJbN10sIGluc3RyWzJdLCBpbnN0clsxMV0sIGluc3RyWzU6M10sIDEnYjB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkJFUVoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9FUTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5icmFuY2hfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBTQ1IxX01QUkZfWkVST19BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjR7aW5zdHJbMTJdfX0sIGluc3RyWzY6NV0sIGluc3RyWzJdLCBpbnN0clsxMToxMF0sIGluc3RyWzQ6M10sIDEnYjB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkJORVoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NVQl9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5icmFuY2hfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBTQ1IxX01QUkZfWkVST19BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjR7aW5zdHJbMTJdfX0sIGluc3RyWzY6NV0sIGluc3RyWzJdLCBpbnN0clsxMToxMF0sIGluc3RyWzQ6M10sIDEnYjB9OwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0MwotICAgICAgICAgICAgZW5kIC8vIFF1YWRyYW50IDEKLQotICAgICAgICAgICAgLy8gUXVhZHJhbnQgMgotICAgICAgICAgICAgU0NSMV9JTlNUUl9SVkMyIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCi0gICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzEyXSkgICAgICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TTExJCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNydkMCwgaW5zdHJbNjoyXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9TTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58aW5zdHJbMTE6N10pICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5MV1NQCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5sc3VfY21kICAgICA9IFNDUjFfTFNVX0NNRF9MVzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0xTVTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfU1BfQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjQnZDAsIGluc3RyWzM6Ml0sIGluc3RyWzEyXSwgaW5zdHJbNjo0XSwgMidiMDB9OwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pbnN0clsxMl0pIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHxpbnN0cls2OjJdKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLk1WCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfWkVST19BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbNjoyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOwotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdfGluc3RyWzZdKSBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fGluc3RyWzExOjddKSAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5KUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzExOjddOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gMDsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luICAvLyBpbnN0clsxMl0gPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fGluc3RyWzExOjJdKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkVCUkVBSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19yZXEgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAofnxpbnN0cls2OjJdKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkpBTFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JTkNfUEM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTE6N107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBTQ1IxX01QUkZfUkFfQUREUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IDA7Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKLWBlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5BREQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBpbnN0clsxMTo3XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9IGluc3RyWzY6Ml07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXXxpbnN0cls2XSkgcnZlX2lsbGVnYWwgPSAxJ2IxOwotYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAvLyBpbnN0clsxMl0gPT0gMQotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDLlNXU1AKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgPSBTQ1IxX0xTVV9DTURfU1c7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gU0NSMV9NUFJGX1NQX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbNjoyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7MjQnZDAsIGluc3RyWzg6N10sIGluc3RyWzEyOjldLCAyJ2IwMH07Ci1gaWZkZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbNl0pICAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7Ci1gZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCi0gICAgICAgICAgICBlbmQgLy8gUXVhZHJhbnQgMgotCi0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgZW5kCi1gZWxzZSAgIC8vIFNDUjFfUlZDX0VYVAotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMTsKLSAgICAgICAgICAgICAgICBydmlfaWxsZWdhbCAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBlbmQKLWBlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCi0gICAgICAgIGVuZGNhc2UgLy8gaW5zdHJfdHlwZQotICAgIGVuZCAvLyBubyBpbWVtIGZhdWx0Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBpbnN0cnVjdGlvbiBpcyBmdWxseSBkZWNvZGVkCi0gICAgLy8gZ2l2ZW4gdGhhdCBubyBpbWVtIGZhdWx0IGhhcyBoYXBwZW5lZAotCi0gICAgLy8gQ2hlY2sgaWxsZWdhbCBpbnN0cnVjdGlvbgotICAgIGlmICgKLSAgICBydmlfaWxsZWdhbAotYGlmZGVmIFNDUjFfUlZDX0VYVAotICAgIHwgcnZjX2lsbGVnYWwKLWBlbmRpZgotYGlmZGVmIFNDUjFfUlZFX0VYVAotICAgIHwgcnZlX2lsbGVnYWwKLWBlbmRpZgotICAgICkgYmVnaW4KLSAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICAgICAgPSBTQ1IxX0lBTFVfQ01EX05PTkU7Ci0gICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgICAgID0gU0NSMV9MU1VfQ01EX05PTkU7Ci0gICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX05PTkU7Ci0gICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9OT05FOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgICAgICA9IDEnYjA7Ci0gICAgICAgIGlkdTJleHVfY21kX28uYnJhbmNoX3JlcSAgICAgID0gMSdiMDsKLSAgICAgICAgaWR1MmV4dV9jbWRfby5tcmV0X3JlcSAgICAgICAgPSAxJ2IwOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmZlbmNlaV9yZXEgICAgICA9IDEnYjA7Ci0gICAgICAgIGlkdTJleHVfY21kX28ud2ZpX3JlcSAgICAgICAgID0gMSdiMDsKLQotICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgICAgICA9IDEnYjA7Ci0gICAgICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgICAgID0gMSdiMDsKLSAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICAgICAgPSAxJ2IwOwotCi1gaWZuZGVmIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgotICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgICAgICA9IDEnYjA7Ci1gZWxzZSAvLyBTQ1IxX01UVkFMX0lMTEVHQUxfSU5TVFJfRU4KLSAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICAgICAgPSAxJ2IxOwotICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgICAgICA9IGluc3RyOwotYGVuZGlmIC8vIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgotCi0gICAgICAgIGlkdTJleHVfY21kX28uZXhjX3JlcSAgICAgICAgID0gMSdiMTsKLSAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfY29kZSAgICAgICAgPSBTQ1IxX0VYQ19DT0RFX0lMTEVHQUxfSU5TVFI7Ci0gICAgZW5kCi0KLWVuZCAvLyBSVjMySShNQykgZGVjb2RlCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBYIGNoZWNrcwotCi1TQ1IxX1NWQV9JRFVfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKHtpZnUyaWR1X3ZkX2ksIGV4dTJpZHVfcmR5X2l9KQotICAgICkgZWxzZSAkZXJyb3IoIklEVSBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfSURVX1hDSEVDSzIgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgaWZ1MmlkdV92ZF9pIHwtPiAhJGlzdW5rbm93bih7aWZ1MmlkdV9pbWVtX2Vycl9pLCAoaWZ1MmlkdV9pbWVtX2Vycl9pID8gMCA6IGlmdTJpZHVfaW5zdHJfaSl9KQotICAgICkgZWxzZSAkZXJyb3IoIklEVSBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotLy8gQmVoYXZpb3IgY2hlY2tzCi0KLVNDUjFfU1ZBX0lEVV9JQUxVX0NNRF9SQU5HRSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAoaWZ1MmlkdV92ZF9pICYgfmlmdTJpZHVfaW1lbV9lcnJfaSkgfC0+Ci0gICAgKChpZHUyZXh1X2NtZF9vLmlhbHVfY21kID49IFNDUjFfSUFMVV9DTURfTk9ORSkgJgotICAgIChpZHUyZXh1X2NtZF9vLmlhbHVfY21kIDw9Ci1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JQUxVX0NNRF9SRU1VCi1gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSUFMVV9DTURfU1JBCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgICkpCi0gICAgKSBlbHNlICRlcnJvcigiSURVIEVycm9yOiBJQUxVX0NNRCBvdXQgb2YgcmFuZ2UiKTsKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfcGlwZV9pZHUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWZ1LnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGY1NjJiLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw4MzAgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9waXBlX2lmdS5zdj4KLS8vLyBAYnJpZWYgICAgICBJbnN0cnVjdGlvbiBGZXRjaCBVbml0IChJRlUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBDb250cm9scyBpbnN0cnVjdGlvbiBmZXRjaGluZyBwcm9jZXNzOgotIC8vICAgLSBGZXRjaGVzIGluc3RydWN0aW9ucyBlaXRoZXIgZnJvbSBJTUVNIG9yIGZyb20gUHJvZ3JhbSBCdWZmZXIsIHN1cHBvcnRpbmcKLSAvLyAgICAgcGVuZGluZyBJTUVNIGluc3RydWN0aW9ucyBoYW5kbGluZwotIC8vICAgLSBIYW5kbGVzIG5ldyBQQyBtaXNhbGlnbm1lbnQgYW5kIGNvbnN0cnVjdHMgdGhlIGNvcnJlY3QgaW5zdHJ1Y3Rpb24gKHN1cHBvcnRzCi0gLy8gICAgIFJWSSBhbmQgUlZDIGluc3RydWN0aW9ucykKLSAvLyAgIC0gRWl0aGVyIHN0b3JlcyBpbnN0cnVjdGlvbnMgaW4gdGhlIGluc3RydWN0aW9uIHF1ZXVlIG9yIGJ5cGFzc2VzIHRvIHRoZQotIC8vICAgICBJRFUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGlzIHVzZWQKLSAvLyAgIC0gRmx1c2hlcyBpbnN0cnVjdGlvbiBxdWV1ZSBpZiByZXF1ZXN0ZWQKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIEluc3RydWN0aW9uIHF1ZXVlCi0gLy8gLSBJRlUgRlNNCi0gLy8gLSBJRlUgPC0+IElNRU0gaS9mCi0gLy8gLSBJRlUgPC0+IElEVSBpL2YKLSAvLyAtIElGVSA8LT4gSERVIGkvZgotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpZmRlZiBTQ1IxX0RCR19FTgotYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1tb2R1bGUgc2NyMV9waXBlX2lmdQotKAotICAgIC8vIENvbnRyb2wgc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBJRlUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUZVIGNsb2NrCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJpZnVfc3RvcF9mZXRjaF9pLCAgICAgIC8vIFN0b3AgaW5zdHJ1Y3Rpb24gZmV0Y2gKLQotICAgIC8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtMmlmdV9yZXFfYWNrX2ksICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IHJlcXVlc3QgYWNrbm93bGVkZ2VtZW50Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmltZW1fcmVxX28sICAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSByZXF1ZXN0Ci0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgaWZ1MmltZW1fY21kX28sICAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSBjb21tYW5kIChSRUFEL1dSSVRFKQotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgIGlmdTJpbWVtX2FkZHJfbywgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGltZW0yaWZ1X3JkYXRhX2ksICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgcmVhZCBkYXRhCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgaW1lbTJpZnVfcmVzcF9pLCAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSByZXNwb25zZQotCi0gICAgLy8gSUZVIDwtPiBFWFUgTmV3IFBDIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJpZnVfcGNfbmV3X3JlcV9pLCAgICAgICAvLyBOZXcgUEMgcmVxdWVzdCAoanVtcHMsIGJyYW5jaGVzLCB0cmFwcyBldGMpCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgZXh1MmlmdV9wY19uZXdfaSwgICAgICAgICAgIC8vIE5ldyBQQwotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBJRlUgPC0+IEhEVSBQcm9ncmFtIEJ1ZmZlciBpbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfZmV0Y2hfaSwgICAgICAgLy8gRmV0Y2ggaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkIGJ5IFByb2dyYW0gQnVmZmVyCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmhkdV9wYnVmX3JkeV9vLCAgICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGkvZiByZWFkeQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJpZnVfcGJ1Zl92ZF9pLCAgICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiB2YWxpZAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJpZnVfcGJ1Zl9lcnJfaSwgICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpL2YgZXJyb3IKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRILTE6MF0gICBoZHUyaWZ1X3BidWZfaW5zdHJfaSwgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaXRzZWxmCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJwaXBlX2ltZW1fdHhuc19wbmRfbywgICAvLyBUaGVyZSBhcmUgcGVuZGluZyBpbWVtIHRyYW5zYWN0aW9ucwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmlmdV9yZHlfaSwgICAgICAgICAgICAgIC8vIElEVSByZWFkeSBmb3IgbmV3IGRhdGEKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICBpZnUyaWR1X2luc3RyX28sICAgICAgICAgICAgLy8gSUZVIGluc3RydWN0aW9uCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vLCAgICAgICAgIC8vIEluc3RydWN0aW9uIGFjY2VzcyBmYXVsdCBleGNlcHRpb24KLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X2Vycl9ydmlfaGlfbywgICAgICAgLy8gMSAtIGltZW0gZmF1bHQgd2hlbiB0cnlpbmcgdG8gZmV0Y2ggc2Vjb25kIGhhbGYgb2YgYW4gdW5hbGlnbmVkIFJWSSBpbnN0cnVjdGlvbgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICAgICAgICAvLyBJRlUgcmVxdWVzdAotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gU0NSMV9JRlVfUV9TSVpFX1dPUkQgICAgID0gMjsKLWxvY2FscGFyYW0gU0NSMV9JRlVfUV9TSVpFX0hBTEYgICAgID0gU0NSMV9JRlVfUV9TSVpFX1dPUkQgKiAyOwotbG9jYWxwYXJhbSBTQ1IxX1RYTl9DTlRfVyAgICAgICAgICAgPSAzOwotCi1sb2NhbHBhcmFtIFNDUjFfSUZVX1FVRVVFX0FEUl9XICAgICA9ICRjbG9nMihTQ1IxX0lGVV9RX1NJWkVfSEFMRik7Ci1sb2NhbHBhcmFtIFNDUjFfSUZVX1FVRVVFX1BUUl9XICAgICA9IFNDUjFfSUZVX1FVRVVFX0FEUl9XICsgMTsKLQotbG9jYWxwYXJhbSBTQ1IxX0lGVV9RX0ZSRUVfSF9XICAgICAgPSAkY2xvZzIoU0NSMV9JRlVfUV9TSVpFX0hBTEYgKyAxKTsKLWxvY2FscGFyYW0gU0NSMV9JRlVfUV9GUkVFX1dfVyAgICAgID0gJGNsb2cyKFNDUjFfSUZVX1FfU0laRV9XT1JEICsgMSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0lGVV9GU01fSURMRSwKLSAgICBTQ1IxX0lGVV9GU01fRkVUQ0gKLX0gdHlwZV9zY3IxX2lmdV9mc21fZTsKLQotdHlwZWRlZiBlbnVtIGxvZ2ljWzE6MF0gewotICAgIFNDUjFfSUZVX1FVRVVFX1dSX05PTkUsICAgICAgLy8gTm8gd3JpdGUgdG8gcXVldWUKLSAgICBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMLCAgICAgIC8vIFdyaXRlIDMyIHJkYXRhIGJpdHMgdG8gcXVldWUKLSAgICBTQ1IxX0lGVV9RVUVVRV9XUl9ISSAgICAgICAgIC8vIFdyaXRlIDE2IHVwcGVyIHJkYXRhIGJpdHMgdG8gcXVldWUKLX0gdHlwZV9zY3IxX2lmdV9xdWV1ZV93cl9lOwotCi10eXBlZGVmIGVudW0gbG9naWNbMTowXSB7Ci0gICAgU0NSMV9JRlVfUVVFVUVfUkRfTk9ORSwgICAgICAvLyBObyBxdWV1ZSByZWFkCi0gICAgU0NSMV9JRlVfUVVFVUVfUkRfSFdPUkQsICAgICAvLyBSZWFkIGhhbGZ3b3JkCi0gICAgU0NSMV9JRlVfUVVFVUVfUkRfV09SRCAgICAgICAvLyBSZWFkIHdvcmQKLX0gdHlwZV9zY3IxX2lmdV9xdWV1ZV9yZF9lOwotCi1gaWZkZWYgU0NSMV9OT19ERUNfU1RBR0UKLXR5cGVkZWYgZW51bSBsb2dpY1sxOjBdIHsKLSAgICBTQ1IxX0JZUEFTU19OT05FLCAgICAgICAgICAgICAgIC8vIE5vIGJ5cGFzcwotICAgIFNDUjFfQllQQVNTX1JWQywgICAgICAgICAgICAgICAgLy8gQnlwYXNzIFJWQwotICAgIFNDUjFfQllQQVNTX1JWSV9SREFUQV9RVUVVRSwgICAgLy8gQnlwYXNzIFJWSSwgcmRhdGErcXVldWUKLSAgICBTQ1IxX0JZUEFTU19SVklfUkRBVEEgICAgICAgICAgIC8vIEJ5cGFzcyBSVkksIHJkYXRhIG9ubHkKLX0gdHlwZV9zY3IxX2J5cGFzc19lOwotYGVuZGlmIC8vIFNDUjFfTk9fREVDX1NUQUdFCi0KLXR5cGVkZWYgZW51bSBsb2dpYyBbMjowXSB7Ci0gICAgLy8gU0NSMV9JRlVfSU5TVFJfPFVQUEVSXzE2X0JJVFM+XzxMT1dFUl8xNl9CSVRTPgotICAgIFNDUjFfSUZVX0lOU1RSX05PTkUsICAgICAgICAgICAgICAgIC8vIE5vIHZhbGlkIGluc3RydWN0aW9uCi0gICAgU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTywgICAgICAgLy8gRnVsbCBSVjMySSBpbnN0cnVjdGlvbgotICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19SVkMsCi0gICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWQywKLSAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfUlZJX0hJLAotICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVklfSEksCi0gICAgU0NSMV9JRlVfSU5TVFJfUlZDX05WLCAgICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gYWZ0ZXIgdW5hbGlnbmVkIG5ld19wYwotICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9MT19OViAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIGFmdGVyIHVuYWxpZ25lZCBuZXdfcGMKLX0gdHlwZV9zY3IxX2lmdV9pbnN0cl9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5zdHJ1Y3Rpb24gcXVldWUgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTmV3IFBDIHVuYWxpZ25lZCBmbGFnIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGNfdW5hbGlnbmVkX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF91cGQ7Ci0KLS8vIElNRU0gaW5zdHJ1Y3Rpb24gdHlwZSBkZWNvZGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9oaV9pc19ydmk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9sb19pc19ydmk7Ci10eXBlX3NjcjFfaWZ1X2luc3RyX2UgICAgICAgICAgICAgICBpbnN0cl90eXBlOwotCi0vLyBSZWdpc3RlciB0byBzdG9yZSBpZiB0aGUgcHJldmlvdXMgSU1FTSBpbnN0cnVjdGlvbiBoYWQgbG93IHBhcnQgb2YgUlZJIGluc3RydWN0aW9uCi0vLyBpbiBpdHMgaGlnaCBwYXJ0Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9oaV9ydmlfbG9fZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9oaV9ydmlfbG9fbmV4dDsKLQotLy8gUXVldWUgcmVhZC93cml0ZSBzaXplIGRlY29kZXJzCi10eXBlX3NjcjFfaWZ1X3F1ZXVlX3JkX2UgICAgICAgICAgICBxX3JkX3NpemU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3JkX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9yZF9ub25lOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9yZF9od29yZDsKLXR5cGVfc2NyMV9pZnVfcXVldWVfd3JfZSAgICAgICAgICAgIHFfd3Jfc2l6ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3Jfbm9uZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3JfZnVsbDsKLQotLy8gV3JpdGUvcmVhZCBwb2ludGVyIHJlZ2lzdGVycwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV9ycHRyOwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV9ycHRyX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3JwdHJfdXBkOwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV93cHRyOwotbG9naWMgW1NDUjFfSUZVX1FVRVVFX1BUUl9XLTE6MF0gICAgcV93cHRyX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3dwdHJfdXBkOwotCi0vLyBJbnN0cnVjdGlvbiBxdWV1ZSBjb250cm9sIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfd3JfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2ZsdXNoX3JlcTsKLQotLy8gUXVldWUgZGF0YSByZWdpc3RlcnMKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC8yLTE6MF0gICAgIHFfZGF0YSAgW1NDUjFfSUZVX1FfU0laRV9IQUxGXTsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC8yLTE6MF0gICAgIHFfZGF0YV9oZWFkOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILzItMTowXSAgICAgcV9kYXRhX25leHQ7Ci0KLS8vIFF1ZXVlIGVycm9yIGZsYWdzIHJlZ2lzdGVycwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9lcnIgICBbU0NSMV9JRlVfUV9TSVpFX0hBTEZdOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9lcnJfaGVhZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZXJyX25leHQ7Ci0KLS8vIEluc3RydWN0aW9uIHF1ZXVlIHN0YXR1cyBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2lzX2VtcHR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9oYXNfZnJlZV9zbG90czsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfaGFzXzFfb2NwZF9odzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfaGVhZF9pc19ydmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2hlYWRfaXNfcnZpOwotbG9naWMgW1NDUjFfSUZVX1FfRlJFRV9IX1ctMTowXSAgICAgcV9vY3BkX2g7Ci1sb2dpYyBbU0NSMV9JRlVfUV9GUkVFX0hfVy0xOjBdICAgICBxX2ZyZWVfaF9uZXh0OwotbG9naWMgW1NDUjFfSUZVX1FfRlJFRV9XX1ctMTowXSAgICAgcV9mcmVlX3dfbmV4dDsKLQotLy8gSUZVIEZTTSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJRlUgRlNNIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1X2ZldGNoX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdV9zdG9wX3JlcTsKLQotdHlwZV9zY3IxX2lmdV9mc21fZSAgICAgICAgICAgICAgICAgaWZ1X2ZzbV9jdXJyOwotdHlwZV9zY3IxX2lmdV9mc21fZSAgICAgICAgICAgICAgICAgaWZ1X2ZzbV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1X2ZzbV9mZXRjaDsKLQotLy8gSU1FTSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJTUVNIHJlc3BvbnNlIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9vazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9lcjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9yZWNlaXZlZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF92ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faGFuZHNoYWtlX2RvbmU7Ci0KLWxvZ2ljIFsxNTowXSAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmRhdGFfbG87Ci1sb2dpYyBbMzE6MTZdICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JkYXRhX2hpOwotCi0vLyBJTUVNIGFkZHJlc3Mgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9hZGRyX3VwZDsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6Ml0gICAgICAgICAgICAgIGltZW1fYWRkcl9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6Ml0gICAgICAgICAgICAgIGltZW1fYWRkcl9uZXh0OwotCi0vLyBJTUVNIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGNvdW50ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcG5kX3R4bnNfY250X3VwZDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcG5kX3R4bnNfY250OwotbG9naWMgW1NDUjFfVFhOX0NOVF9XLTE6MF0gICAgICAgICAgaW1lbV9wbmRfdHhuc19jbnRfbmV4dDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fdmRfcG5kX3R4bnNfY250OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9wbmRfdHhuc19xX2Z1bGw7Ci0KLS8vIElNRU0gcmVzcG9uc2VzIGRpc2NhcmQgY291bnRlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXNwX2Rpc2NhcmRfY250X3VwZDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX2NudDsKLWxvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX2NudF9uZXh0OwotCi1gaWZkZWYgU0NSMV9ORVdfUENfUkVHCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGNfcmVxX2ZmOwotYGVuZGlmIC8vIFNDUjFfTkVXX1BDX1JFRwotCi0vLyBJbnN0cnVjdGlvbiBieXBhc3Mgc2lnbmFscwotYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCi10eXBlX3NjcjFfYnlwYXNzX2UgICAgICAgICAgICAgICAgICBpbnN0cl9ieXBhc3NfdHlwZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyX2J5cGFzc192ZDsKLWBlbmRpZiAvLyBTQ1IxX05PX0RFQ19TVEFHRQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gcXVldWUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIEluc3RydWN0aW9uIHF1ZXVlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIE5ldyBQQyB1bmFsaWduZWQgZmxhZyByZWdpc3RlcgotIC8vIC0gSW5zdHJ1Y3Rpb24gdHlwZSBkZWNvZGVyLCBpbmNsdWRpbmcgcmVnaXN0ZXIgdG8gc3RvcmUgaWYgdGhlIHByZXZpb3VzCi0gLy8gICBJTUVNIGluc3RydWN0aW9uIGhhZCBsb3cgcGFydCBvZiBSVkkgaW5zdHJ1Y3Rpb24gaW4gaXRzIGhpZ2ggcGFydAotIC8vIC0gUmVhZC93cml0ZSBzaXplIGRlY29kZXJzCi0gLy8gLSBSZWFkL3dyaXRlIHBvaW50ZXIgcmVnaXN0ZXJzCi0gLy8gLSBEYXRhIGFuZCBlcnJvciBmbGFnIHJlZ2lzdGVycwotIC8vIC0gU3RhdHVzIGxvZ2ljCi0vLwotCi0vLyBOZXcgUEMgdW5hbGlnbmVkIGZsYWcgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBuZXdfcGNfdW5hbGlnbmVkX3VwZCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9pIHwgaW1lbV9yZXNwX3ZkOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBuZXdfcGNfdW5hbGlnbmVkX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKG5ld19wY191bmFsaWduZWRfdXBkKSBiZWdpbgotICAgICAgICBuZXdfcGNfdW5hbGlnbmVkX2ZmIDw9IG5ld19wY191bmFsaWduZWRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gbmV3X3BjX3VuYWxpZ25lZF9uZXh0ID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgPyBleHUyaWZ1X3BjX25ld19pWzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogfmltZW1fcmVzcF92ZCAgICAgICAgPyBuZXdfcGNfdW5hbGlnbmVkX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxJ2IwOwotCi0vLyBJbnN0cnVjdGlvbiB0eXBlIGRlY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpbnN0cl9oaV9pc19ydmkgPSAmaW1lbTJpZnVfcmRhdGFfaVsxNzoxNl07Ci1hc3NpZ24gaW5zdHJfbG9faXNfcnZpID0gJmltZW0yaWZ1X3JkYXRhX2lbMTowXTsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpbnN0cl90eXBlID0gU0NSMV9JRlVfSU5TVFJfTk9ORTsKLQotICAgIGlmIChpbWVtX3Jlc3Bfb2sgJiB+aW1lbV9yZXNwX2Rpc2NhcmRfcmVxKSBiZWdpbgotICAgICAgICBpZiAobmV3X3BjX3VuYWxpZ25lZF9mZikgYmVnaW4KLSAgICAgICAgICAgIGluc3RyX3R5cGUgPSBpbnN0cl9oaV9pc19ydmkgPyBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9JTlNUUl9SVkNfTlY7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIH5uZXdfcGNfdW5hbGlnbmVkX2ZmCi0gICAgICAgICAgICBpZiAoaW5zdHJfaGlfcnZpX2xvX2ZmKSBiZWdpbgotICAgICAgICAgICAgICAgIGluc3RyX3R5cGUgPSBpbnN0cl9oaV9pc19ydmkgPyBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZJX0hJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX0lOU1RSX1JWQ19SVklfSEk7Ci0gICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBTQ1IxX09USEVSCi0gICAgICAgICAgICAgICAgY2FzZXogKHtpbnN0cl9oaV9pc19ydmksIGluc3RyX2xvX2lzX3J2aX0pCi0gICAgICAgICAgICAgICAgICAgIDInYj8xICAgOiBpbnN0cl90eXBlICAgPSBTQ1IxX0lGVV9JTlNUUl9SVklfSElfUlZJX0xPOwotICAgICAgICAgICAgICAgICAgICAyJ2IwMCAgIDogaW5zdHJfdHlwZSAgID0gU0NSMV9JRlVfSU5TVFJfUlZDX1JWQzsKLSAgICAgICAgICAgICAgICAgICAgMidiMTAgICA6IGluc3RyX3R5cGUgICA9IFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVkM7Ci0gICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vIFJlZ2lzdGVyIHRvIHN0b3JlIGlmIHRoZSBwcmV2aW91cyBJTUVNIGluc3RydWN0aW9uIGhhZCBsb3cgcGFydCBvZiBSVkkKLS8vIGluc3RydWN0aW9uIGluIGl0cyBoaWdoIHBhcnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGluc3RyX2hpX3J2aV9sb19mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChleHUyaWZ1X3BjX25ld19yZXFfaSkgYmVnaW4KLSAgICAgICAgICAgIGluc3RyX2hpX3J2aV9sb19mZiA8PSAxJ2IwOwotICAgICAgICBlbmQgZWxzZSBpZiAoaW1lbV9yZXNwX3ZkKSBiZWdpbgotICAgICAgICAgICAgaW5zdHJfaGlfcnZpX2xvX2ZmIDw9IGluc3RyX2hpX3J2aV9sb19uZXh0OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaW5zdHJfaGlfcnZpX2xvX25leHQgPSAoaW5zdHJfdHlwZSA9PSBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoaW5zdHJfdHlwZSA9PSBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZJX0hJKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGluc3RyX3R5cGUgPT0gU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWQyk7Ci0KLS8vIFF1ZXVlIHdyaXRlL3JlYWQgc2l6ZSBkZWNvZGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUXVldWUgcmVhZCBzaXplIGRlY29kZXIKLWFzc2lnbiBxX3JkX3ZkICAgID0gfnFfaXNfZW1wdHkgJiBpZnUyaWR1X3ZkX28gJiBpZHUyaWZ1X3JkeV9pOwotYXNzaWduIHFfcmRfaHdvcmQgPSBxX2hlYWRfaXNfcnZjIHwgcV9lcnJfaGVhZAotYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCi0gICAgICAgICAgICAgICAgICB8IChxX2hlYWRfaXNfcnZpICYgaW5zdHJfYnlwYXNzX3ZkKQotYGVuZGlmIC8vIFNDUjFfTk9fREVDX1NUQUdFCi0gICAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gcV9yZF9zaXplICA9IH5xX3JkX3ZkICAgPyBTQ1IxX0lGVV9RVUVVRV9SRF9OT05FCi0gICAgICAgICAgICAgICAgICA6IHFfcmRfaHdvcmQgPyBTQ1IxX0lGVV9RVUVVRV9SRF9IV09SRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfUVVFVUVfUkRfV09SRDsKLWFzc2lnbiBxX3JkX25vbmUgID0gKHFfcmRfc2l6ZSA9PSBTQ1IxX0lGVV9RVUVVRV9SRF9OT05FKTsKLQotLy8gUXVldWUgd3JpdGUgc2l6ZSBkZWNvZGVyCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHFfd3Jfc2l6ZSA9IFNDUjFfSUZVX1FVRVVFX1dSX05PTkU7Ci0gICAgaWYgKH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEpIGJlZ2luCi0gICAgICAgIGlmIChpbWVtX3Jlc3Bfb2spIGJlZ2luCi1gaWZkZWYgU0NSMV9OT19ERUNfU1RBR0UKLSAgICAgICAgICAgIGNhc2UgKGluc3RyX3R5cGUpCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfTk9ORSAgICAgICAgIDogcV93cl9zaXplID0gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORTsKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9ISTsKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfTlYgICAgICAgOiBxX3dyX3NpemUgPSAoaW5zdHJfYnlwYXNzX3ZkICYgaWR1MmlmdV9yZHlfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfUVVFVUVfV1JfSEk7Ci0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTzogcV93cl9zaXplID0gKGluc3RyX2J5cGFzc192ZCAmIGlkdTJpZnVfcmR5X2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEw7Ci0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX1JWQywKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZDLAotICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19SVklfSEksCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWSV9ISTogcV93cl9zaXplID0gKGluc3RyX2J5cGFzc192ZCAmIGlkdTJpZnVfcmR5X2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9JRlVfUVVFVUVfV1JfSEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMOwotICAgICAgICAgICAgZW5kY2FzZSAvLyBpbnN0cl90eXBlCi1gZWxzZSAvLyBTQ1IxX05PX0RFQ19TVEFHRQotICAgICAgICAgICAgY2FzZSAoaW5zdHJfdHlwZSkKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9OT05FICAgICAgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FOwotICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19OViwKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9ISTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgOiBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMOwotICAgICAgICAgICAgZW5kY2FzZSAvLyBpbnN0cl90eXBlCi1gZW5kaWYgLy8gU0NSMV9OT19ERUNfU1RBR0UKLSAgICAgICAgZW5kIGVsc2UgaWYgKGltZW1fcmVzcF9lcikgYmVnaW4KLSAgICAgICAgICAgIHFfd3Jfc2l6ZSA9IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEw7Ci0gICAgICAgIGVuZCAvLyBpbWVtX3Jlc3BfZXIKLSAgICBlbmQgLy8gfmltZW1fcmVzcF9kaXNjYXJkX3JlcQotZW5kCi0KLWFzc2lnbiBxX3dyX25vbmUgICA9IChxX3dyX3NpemUgPT0gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORSk7Ci1hc3NpZ24gcV93cl9mdWxsICAgPSAocV93cl9zaXplID09IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEwpOwotCi0vLyBXcml0ZS9yZWFkIHBvaW50ZXIgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gcV9mbHVzaF9yZXEgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IHBpcGUyaWZ1X3N0b3BfZmV0Y2hfaTsKLQotLy8gUXVldWUgd3JpdGUgcG9pbnRlciByZWdpc3RlcgotYXNzaWduIHFfd3B0cl91cGQgID0gcV9mbHVzaF9yZXEgfCB+cV93cl9ub25lOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBxX3dwdHIgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKHFfd3B0cl91cGQpIGJlZ2luCi0gICAgICAgIHFfd3B0ciA8PSBxX3dwdHJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcV93cHRyX25leHQgPSBxX2ZsdXNoX3JlcSA/ICcwCi0gICAgICAgICAgICAgICAgICAgOiB+cV93cl9ub25lICA/IHFfd3B0ciArIChxX3dyX2Z1bGwgPyAyJ2QyIDogMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcV93cHRyOwotCi0vLyBRdWV1ZSByZWFkIHBvaW50ZXIgcmVnaXN0ZXIKLWFzc2lnbiBxX3JwdHJfdXBkICA9IHFfZmx1c2hfcmVxIHwgfnFfcmRfbm9uZTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcV9ycHRyIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChxX3JwdHJfdXBkKSBiZWdpbgotICAgICAgICBxX3JwdHIgPD0gcV9ycHRyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHFfcnB0cl9uZXh0ID0gcV9mbHVzaF9yZXEgPyAnMAotICAgICAgICAgICAgICAgICAgIDogfnFfcmRfbm9uZSAgPyBxX3JwdHIgKyAocV9yZF9od29yZCA/IDEnYjEgOiAyJ2QyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBxX3JwdHI7Ci0KLS8vIFF1ZXVlIGRhdGEgYW5kIGVycm9yIGZsYWcgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gaW1lbV9yZGF0YV9oaSA9IGltZW0yaWZ1X3JkYXRhX2lbMzE6MTZdOwotYXNzaWduIGltZW1fcmRhdGFfbG8gPSBpbWVtMmlmdV9yZGF0YV9pWzE1OjBdOwotCi1hc3NpZ24gcV93cl9lbiA9IGltZW1fcmVzcF92ZCAmIH5xX2ZsdXNoX3JlcTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgYGlmZGVmIFNDUjFfTVBSRl9SU1RfRU4gLy8gVHdvIGRpbWVuc2lvbmFsIGFycmF5IGluaXQgbm90IGFsbG93ZWQgaW4gWU9TWVMgLSBjcC4xMwotICAgICAgICBxX2RhdGEgIDw9ICd7U0NSMV9JRlVfUV9TSVpFX0hBTEZ7JzB9fTsKLSAgICAgICAgcV9lcnIgICA8PSAne1NDUjFfSUZVX1FfU0laRV9IQUxGezEnYjB9fTsKLSAgICAgYGVuZGlmCi0gICAgZW5kIGVsc2UgaWYgKHFfd3JfZW4pIGJlZ2luCi0gICAgICAgIGNhc2UgKHFfd3Jfc2l6ZSkKLSAgICAgICAgICAgIFNDUjFfSUZVX1FVRVVFX1dSX0hJICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICBxX2RhdGFbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0cildICAgICAgICAgPD0gaW1lbV9yZGF0YV9oaTsKLSAgICAgICAgICAgICAgICBxX2VyciBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0cildICAgICAgICAgPD0gaW1lbV9yZXNwX2VyOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgcV9kYXRhW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIpXSAgICAgICAgIDw9IGltZW1fcmRhdGFfbG87Ci0gICAgICAgICAgICAgICAgcV9lcnIgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIpXSAgICAgICAgIDw9IGltZW1fcmVzcF9lcjsKLSAgICAgICAgICAgICAgICBxX2RhdGFbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0ciArIDEnYjEpXSAgPD0gaW1lbV9yZGF0YV9oaTsKLSAgICAgICAgICAgICAgICBxX2VyciBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfd3B0ciArIDEnYjEpXSAgPD0gaW1lbV9yZXNwX2VyOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcV9kYXRhX2hlYWQgPSBxX2RhdGEgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3JwdHIpXTsKLWFzc2lnbiBxX2RhdGFfbmV4dCA9IHFfZGF0YSBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfcnB0ciArIDEnYjEpXTsKLWFzc2lnbiBxX2Vycl9oZWFkICA9IHFfZXJyICBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfcnB0cildOwotYXNzaWduIHFfZXJyX25leHQgID0gcV9lcnIgIFtTQ1IxX0lGVV9RVUVVRV9BRFJfVycocV9ycHRyICsgMSdiMSldOwotCi0vLyBRdWV1ZSBzdGF0dXMgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBxX29jcGRfaCAgICAgICAgID0gU0NSMV9JRlVfUV9GUkVFX0hfVycocV93cHRyIC0gcV9ycHRyKTsKLWFzc2lnbiBxX2ZyZWVfaF9uZXh0ICAgID0gU0NSMV9JRlVfUV9GUkVFX0hfVycoU0NSMV9JRlVfUV9TSVpFX0hBTEYgLSAocV93cHRyIC0gcV9ycHRyX25leHQpKTsKLWFzc2lnbiBxX2ZyZWVfd19uZXh0ICAgID0gU0NSMV9JRlVfUV9GUkVFX1dfVycocV9mcmVlX2hfbmV4dCA+PiAxJ2IxKTsKLQotYXNzaWduIHFfaXNfZW1wdHkgICAgICAgPSAocV9ycHRyID09IHFfd3B0cik7Ci1hc3NpZ24gcV9oYXNfZnJlZV9zbG90cyA9IChTQ1IxX1RYTl9DTlRfVycocV9mcmVlX3dfbmV4dCkgPiBpbWVtX3ZkX3BuZF90eG5zX2NudCk7Ci1hc3NpZ24gcV9oYXNfMV9vY3BkX2h3ICA9IChxX29jcGRfaCA9PSBTQ1IxX0lGVV9RX0ZSRUVfSF9XJygxKSk7Ci0KLWFzc2lnbiBxX2hlYWRfaXNfcnZpICAgID0gJihxX2RhdGFfaGVhZFsxOjBdKTsKLWFzc2lnbiBxX2hlYWRfaXNfcnZjICAgID0gfnFfaGVhZF9pc19ydmk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJRlUgRlNNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJRlUgRlNNIGNvbnRyb2wgc2lnbmFscwotYXNzaWduIGlmdV9mZXRjaF9yZXEgPSBleHUyaWZ1X3BjX25ld19yZXFfaSAmIH5waXBlMmlmdV9zdG9wX2ZldGNoX2k7Ci1hc3NpZ24gaWZ1X3N0b3BfcmVxICA9IHBpcGUyaWZ1X3N0b3BfZmV0Y2hfaQotICAgICAgICAgICAgICAgICAgICAgfCAoaW1lbV9yZXNwX2VyX2Rpc2NhcmRfcG5kICYgfmV4dTJpZnVfcGNfbmV3X3JlcV9pKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaWZ1X2ZzbV9jdXJyIDw9IFNDUjFfSUZVX0ZTTV9JRExFOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmdV9mc21fY3VyciA8PSBpZnVfZnNtX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChpZnVfZnNtX2N1cnIpCi0gICAgICAgIFNDUjFfSUZVX0ZTTV9JRExFICAgOiBiZWdpbgotICAgICAgICAgICAgaWZ1X2ZzbV9uZXh0ID0gaWZ1X2ZldGNoX3JlcSA/IFNDUjFfSUZVX0ZTTV9GRVRDSAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX0ZTTV9JRExFOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9JRlVfRlNNX0ZFVENIICA6IGJlZ2luCi0gICAgICAgICAgICBpZnVfZnNtX25leHQgPSBpZnVfc3RvcF9yZXEgID8gU0NSMV9JRlVfRlNNX0lETEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9GU01fRkVUQ0g7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gaWZ1X2ZzbV9mZXRjaCA9IChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0ZFVENIKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gSU1FTSByZXNwb25zZSBsb2dpYwotIC8vIC0gSU1FTSBhZGRyZXNzIHJlZ2lzdGVyCi0gLy8gLSBQZW5kaW5nIElNRU0gdHJhbnNhY3Rpb25zIGNvdW50ZXIKLSAvLyAtIElNRU0gZGlzY2FyZCByZXNwb25zZXMgY291bnRlcgotIC8vIC0gSUZVIDwtPiBJTUVNIGludGVyZmFjZSBvdXRwdXQgc2lnbmFscwotLy8KLQotLy8gSU1FTSByZXNwb25zZSBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGltZW1fcmVzcF9lciAgICAgICAgICAgICA9IChpbWVtMmlmdV9yZXNwX2kgPT0gU0NSMV9NRU1fUkVTUF9SRFlfRVIpOwotYXNzaWduIGltZW1fcmVzcF9vayAgICAgICAgICAgICA9IChpbWVtMmlmdV9yZXNwX2kgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spOwotYXNzaWduIGltZW1fcmVzcF9yZWNlaXZlZCAgICAgICA9IGltZW1fcmVzcF9vayB8IGltZW1fcmVzcF9lcjsKLWFzc2lnbiBpbWVtX3Jlc3BfdmQgICAgICAgICAgICAgPSBpbWVtX3Jlc3BfcmVjZWl2ZWQgJiB+aW1lbV9yZXNwX2Rpc2NhcmRfcmVxOwotYXNzaWduIGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZCA9IGltZW1fcmVzcF9lciAmIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXE7Ci0KLWFzc2lnbiBpbWVtX2hhbmRzaGFrZV9kb25lID0gaWZ1MmltZW1fcmVxX28gJiBpbWVtMmlmdV9yZXFfYWNrX2k7Ci0KLS8vIElNRU0gYWRkcmVzcyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGltZW1fYWRkcl91cGQgPSBpbWVtX2hhbmRzaGFrZV9kb25lIHwgZXh1MmlmdV9wY19uZXdfcmVxX2k7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGltZW1fYWRkcl9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBpZiAoaW1lbV9hZGRyX3VwZCkgYmVnaW4KLSAgICAgICAgaW1lbV9hZGRyX2ZmIDw9IGltZW1fYWRkcl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWBpZm5kZWYgU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaW1lbV9hZGRyX25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSA/IGV4dTJpZnVfcGNfbmV3X2lbYFNDUjFfWExFTi0xOjJdICAgICAgICAgICAgICAgICArIGltZW1faGFuZHNoYWtlX2RvbmUKLSAgICAgICAgICAgICAgICAgICAgICA6ICZpbWVtX2FkZHJfZmZbNToyXSAgID8gaW1lbV9hZGRyX2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW1lbV9oYW5kc2hha2VfZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7aW1lbV9hZGRyX2ZmW2BTQ1IxX1hMRU4tMTo2XSwgaW1lbV9hZGRyX2ZmWzU6Ml0gKyBpbWVtX2hhbmRzaGFrZV9kb25lfTsKLWBlbHNlIC8vIFNDUjFfTkVXX1BDX1JFRwotYXNzaWduIGltZW1fYWRkcl9uZXh0ID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgPyBleHUyaWZ1X3BjX25ld19pW2BTQ1IxX1hMRU4tMToyXQotICAgICAgICAgICAgICAgICAgICAgIDogJmltZW1fYWRkcl9mZls1OjJdICAgPyBpbWVtX2FkZHJfZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbWVtX2hhbmRzaGFrZV9kb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtpbWVtX2FkZHJfZmZbYFNDUjFfWExFTi0xOjZdLCBpbWVtX2FkZHJfZmZbNToyXSArIGltZW1faGFuZHNoYWtlX2RvbmV9OwotYGVuZGlmIC8vIFNDUjFfTkVXX1BDX1JFRwotCi0vLyBQZW5kaW5nIElNRU0gdHJhbnNhY3Rpb25zIGNvdW50ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQZW5kaW5nIElNRU0gdHJhbnNhY3Rpb25zIG9jY3VyIGlmIElGVSByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZCwgYnV0Ci0vLyByZXNwb25zZSBjb21lcyBpbiB0aGUgbmV4dCBjeWNsZSBvciBsYXRlcgotCi1hc3NpZ24gaW1lbV9wbmRfdHhuc19jbnRfdXBkICA9IGltZW1faGFuZHNoYWtlX2RvbmUgXiBpbWVtX3Jlc3BfcmVjZWl2ZWQ7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGltZW1fcG5kX3R4bnNfY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpbWVtX3BuZF90eG5zX2NudF91cGQpIGJlZ2luCi0gICAgICAgIGltZW1fcG5kX3R4bnNfY250IDw9IGltZW1fcG5kX3R4bnNfY250X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGltZW1fcG5kX3R4bnNfY250X25leHQgPSBpbWVtX3BuZF90eG5zX2NudCArIChpbWVtX2hhbmRzaGFrZV9kb25lIC0gaW1lbV9yZXNwX3JlY2VpdmVkKTsKLWFzc2lnbiBpbWVtX3BuZF90eG5zX3FfZnVsbCAgID0gJmltZW1fcG5kX3R4bnNfY250OwotCi0vLyBJTUVNIGRpc2NhcmQgcmVzcG9uc2VzIGNvdW50ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJTUVNIGluc3RydWN0aW9ucyBzaG91bGQgYmUgZGlzY2FyZGVkIGluIHRoZSBmb2xsb3dpbmcgMiBjYXNlczoKLS8vIDEuIE5ldyBQQyBpcyByZXF1ZXN0ZWQgYnkganVtcCwgYnJhbmNoLCBtcmV0IG9yIG90aGVyIGluc3RydWN0aW9uCi0vLyAyLiBJTUVNIHJlc3BvbnNlIHdhcyBlcnJvbmVvdXMgYW5kIG5vdCBkaXNjYXJkZWQKLS8vCi0vLyBJbiBib3RoIGNhc2VzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGJlIGRpc2NhcmRlZCBlcXVhbHMgdG8gdGhlIG51bWJlcgotLy8gb2YgcGVuZGluZyBpbnN0cnVjdGlvbnMuCi0vLyBJbiB0aGUgMXN0IGNhc2Ugd2UgZG9uJ3QgbmVlZCBhbGwgdGhlIGluc3RydWN0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBmZXRjaGVkCi0vLyB5ZXQsIHNpbmNlIHRoZSBQQyBoYXMgY2hhbmdlZC4KLS8vIEluIHRoZSAybmQgY2FzZSwgc2luY2UgdGhlIElNRU0gcmVzcG9uY2Ugd2FzIGVycm9uZW91cyB0aGVyZSBpcyBubyBndWFyYW50ZWUKLS8vIHRoYXQgc3Vic2VxdWVudCBJTUVNIGluc3RydWN0aW9ucyB3b3VsZCBiZSB2YWxpZC4KLQotYXNzaWduIGltZW1fcmVzcF9kaXNjYXJkX2NudF91cGQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IGltZW1fcmVzcF9lcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoaW1lbV9yZXNwX29rICYgaW1lbV9yZXNwX2Rpc2NhcmRfcmVxKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaW1lbV9yZXNwX2Rpc2NhcmRfY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChpbWVtX3Jlc3BfZGlzY2FyZF9jbnRfdXBkKSBiZWdpbgotICAgICAgICBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgPD0gaW1lbV9yZXNwX2Rpc2NhcmRfY250X25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYGlmbmRlZiBTQ1IxX05FV19QQ19SRUcKLWFzc2lnbiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnRfbmV4dCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9pICAgICA/IGltZW1fcG5kX3R4bnNfY250X25leHQgLSBpbWVtX2hhbmRzaGFrZV9kb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWVtX3Jlc3BfZXJfZGlzY2FyZF9wbmQgPyBpbWVtX3BuZF90eG5zX2NudF9uZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgLSAxJ2IxOwotYGVsc2UgLy8gU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaW1lbV9yZXNwX2Rpc2NhcmRfY250X25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW1lbV9wbmRfdHhuc19jbnRfbmV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZXNwX2Rpc2NhcmRfY250IC0gMSdiMTsKLWBlbmRpZiAvLyBTQ1IxX05FV19QQ19SRUcKLQotYXNzaWduIGltZW1fdmRfcG5kX3R4bnNfY250ICA9IGltZW1fcG5kX3R4bnNfY250IC0gaW1lbV9yZXNwX2Rpc2NhcmRfY250OwotYXNzaWduIGltZW1fcmVzcF9kaXNjYXJkX3JlcSA9IHxpbWVtX3Jlc3BfZGlzY2FyZF9jbnQ7Ci0KLS8vIElGVSA8LT4gSU1FTSBpbnRlcmZhY2Ugb3V0cHV0IHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZm5kZWYgU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaWZ1MmltZW1fcmVxX28gID0gKGV4dTJpZnVfcGNfbmV3X3JlcV9pICYgfmltZW1fcG5kX3R4bnNfcV9mdWxsICYgfnBpcGUyaWZ1X3N0b3BfZmV0Y2hfaSkKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoaWZ1X2ZzbV9mZXRjaCAgICAgICAgJiB+aW1lbV9wbmRfdHhuc19xX2Z1bGwgJiBxX2hhc19mcmVlX3Nsb3RzKTsKLWFzc2lnbiBpZnUyaW1lbV9hZGRyX28gPSBleHUyaWZ1X3BjX25ld19yZXFfaQotICAgICAgICAgICAgICAgICAgICAgICA/IHtleHUyaWZ1X3BjX25ld19pW2BTQ1IxX1hMRU4tMToyXSwgMidiMDB9Ci0gICAgICAgICAgICAgICAgICAgICAgIDoge2ltZW1fYWRkcl9mZiwgMidiMDB9OwotYGVsc2UgLy8gU0NSMV9ORVdfUENfUkVHCi1hc3NpZ24gaWZ1MmltZW1fcmVxX28gID0gaWZ1X2ZzbV9mZXRjaCAmIH5pbWVtX3BuZF90eG5zX3FfZnVsbCAmIHFfaGFzX2ZyZWVfc2xvdHM7Ci1hc3NpZ24gaWZ1MmltZW1fYWRkcl9vID0ge2ltZW1fYWRkcl9mZiwgMidiMDB9OwotYGVuZGlmIC8vIFNDUjFfTkVXX1BDX1JFRwotCi1hc3NpZ24gaWZ1MmltZW1fY21kX28gID0gU0NSMV9NRU1fQ01EX1JEOwotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi1hc3NpZ24gaWZ1MnBpcGVfaW1lbV90eG5zX3BuZF9vID0gfGltZW1fcG5kX3R4bnNfY250OwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBJRlUgPC0+IElEVSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgotIC8vIC0gSW5zdHJ1Y3Rpb24gYnlwYXNzIHR5cGUgZGVjb2RlcgotIC8vIC0gSUZVIDwtPiBJRFUgc3RhdHVzIHNpZ25hbHMKLSAvLyAtIE91dHB1dCBpbnN0cnVjdGlvbiBtdWx0aXBsZXhlcgotLy8KLQotYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCi0KLS8vIEluc3RydWN0aW9uIGJ5cGFzcyB0eXBlIGRlY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBpbnN0cl9ieXBhc3NfdmQgID0gKGluc3RyX2J5cGFzc190eXBlICE9IFNDUjFfQllQQVNTX05PTkUpOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGluc3RyX2J5cGFzc190eXBlICAgID0gU0NSMV9CWVBBU1NfTk9ORTsKLQotICAgIGlmIChpbWVtX3Jlc3BfdmQpIGJlZ2luCi0gICAgICAgIGlmIChxX2lzX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgY2FzZSAoaW5zdHJfdHlwZSkKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfTlYsCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX1JWQywKLSAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZDICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgaW5zdHJfYnlwYXNzX3R5cGUgPSBTQ1IxX0JZUEFTU19SVkM7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTyAgICA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGluc3RyX2J5cGFzc190eXBlID0gU0NSMV9CWVBBU1NfUlZJX1JEQVRBOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UgLy8gaW5zdHJfdHlwZQotICAgICAgICBlbmQgZWxzZSBpZiAocV9oYXNfMV9vY3BkX2h3ICYgcV9oZWFkX2lzX3J2aSkgYmVnaW4KLSAgICAgICAgICAgIGlmIChpbnN0cl9oaV9ydmlfbG9fZmYpIGJlZ2luCi0gICAgICAgICAgICAgICAgaW5zdHJfYnlwYXNzX3R5cGUgPSBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgZW5kIC8vIGltZW1fcmVzcF92ZAotZW5kCi0KLS8vIElGVSA8LT4gSURVIGludGVyZmFjZSBzdGF0dXMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZnUyaWR1X3ZkX28gICAgICAgICA9IDEnYjA7Ci0gICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgPSAxJ2IwOwotICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vID0gMSdiMDsKLQotICAgIGlmIChpZnVfZnNtX2ZldGNoIHwgfnFfaXNfZW1wdHkpIGJlZ2luCi0gICAgICAgIGlmIChpbnN0cl9ieXBhc3NfdmQpIGJlZ2luCi0gICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgPSAxJ2IxOwotICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gKGluc3RyX2J5cGFzc190eXBlID09IFNDUjFfQllQQVNTX1JWSV9SREFUQV9RVUVVRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpbWVtX3Jlc3BfZXIgfCBxX2Vycl9oZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZXNwX2VyOwotICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28gID0gKGluc3RyX2J5cGFzc190eXBlID09IFNDUjFfQllQQVNTX1JWSV9SREFUQV9RVUVVRSkgJiBpbWVtX3Jlc3BfZXI7Ci0gICAgICAgIGVuZCBlbHNlIGlmICh+cV9pc19lbXB0eSkgYmVnaW4KLSAgICAgICAgICAgIGlmIChxX2hhc18xX29jcGRfaHcpIGJlZ2luCi0gICAgICAgICAgICAgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgPSBxX2hlYWRfaXNfcnZjIHwgcV9lcnJfaGVhZDsKLSAgICAgICAgICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICA9IHFfZXJyX2hlYWQ7Ci0gICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28gPSB+cV9lcnJfaGVhZCAmIHFfaGVhZF9pc19ydmkgJiBxX2Vycl9uZXh0OwotICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgPSBxX2Vycl9oZWFkID8gMSdiMSA6IChxX2hlYWRfaXNfcnZpICYgcV9lcnJfbmV4dCk7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kIC8vIH5xX2lzX2VtcHR5Ci0gICAgZW5kCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBpZiAoaGR1MmlmdV9wYnVmX2ZldGNoX2kpIGJlZ2luCi0gICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IGhkdTJpZnVfcGJ1Zl92ZF9pOwotICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICAgPSBoZHUyaWZ1X3BidWZfZXJyX2k7Ci0gICAgZW5kCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWVuZAotCi0vLyBPdXRwdXQgaW5zdHJ1Y3Rpb24gbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoaW5zdHJfYnlwYXNzX3R5cGUpCi0gICAgICAgIFNDUjFfQllQQVNTX1JWQyAgICAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGBTQ1IxX0lNRU1fRFdJRFRIJyhuZXdfcGNfdW5hbGlnbmVkX2ZmID8gaW1lbV9yZGF0YV9oaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWVtX3JkYXRhX2xvKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfQllQQVNTX1JWSV9SREFUQSAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGltZW0yaWZ1X3JkYXRhX2k7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUU6IGJlZ2luCi0gICAgICAgICAgICBpZnUyaWR1X2luc3RyX28gPSB7aW1lbV9yZGF0YV9sbywgcV9kYXRhX2hlYWR9OwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgOiBiZWdpbgotICAgICAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0gYFNDUjFfSU1FTV9EV0lEVEgnKHFfaGVhZF9pc19ydmMgPyBxX2RhdGFfaGVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7cV9kYXRhX25leHQsIHFfZGF0YV9oZWFkfSk7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UgLy8gaW5zdHJfYnlwYXNzX3R5cGUKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlmIChoZHUyaWZ1X3BidWZfZmV0Y2hfaSkgYmVnaW4KLSAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0gYFNDUjFfSU1FTV9EV0lEVEgnKHsnMCwgaGR1MmlmdV9wYnVmX2luc3RyX2l9KTsKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotZW5kCi0KLWBlbHNlICAgLy8gU0NSMV9OT19ERUNfU1RBR0UKLQotLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlIHN0YXR1cyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IDEnYjA7Ci0gICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gMSdiMDsKLSAgICBpZnUyaWR1X2Vycl9ydmlfaGlfbyAgPSAxJ2IwOwotICAgIGlmICh+cV9pc19lbXB0eSkgYmVnaW4KLSAgICAgICAgaWYgKHFfaGFzXzFfb2NwZF9odykgYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IHFfaGVhZF9pc19ydmMgfCBxX2Vycl9oZWFkOwotICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gcV9lcnJfaGVhZDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICAgPSBxX2Vycl9oZWFkID8gMSdiMSA6IChxX2hlYWRfaXNfcnZpICYgcV9lcnJfbmV4dCk7Ci0gICAgICAgICAgICBpZnUyaWR1X2Vycl9ydmlfaGlfbyAgPSB+cV9lcnJfaGVhZCAmIHFfaGVhZF9pc19ydmkgJiBxX2Vycl9uZXh0OwotICAgICAgICBlbmQKLSAgICBlbmQgLy8gfnFfaXNfZW1wdHkKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlmIChoZHUyaWZ1X3BidWZfZmV0Y2hfaSkgYmVnaW4KLSAgICAgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgID0gaGR1MmlmdV9wYnVmX3ZkX2k7Ci0gICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgICA9IGhkdTJpZnVfcGJ1Zl9lcnJfaTsKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotZW5kCi0KLS8vIE91dHB1dCBpbnN0cnVjdGlvbiBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBpZnUyaWR1X2luc3RyX28gPSBxX2hlYWRfaXNfcnZjID8gYFNDUjFfSU1FTV9EV0lEVEgnKHFfZGF0YV9oZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7cV9kYXRhX25leHQsIHFfZGF0YV9oZWFkfTsKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlmIChoZHUyaWZ1X3BidWZfZmV0Y2hfaSkgYmVnaW4KLSAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0gYFNDUjFfSU1FTV9EV0lEVEgnKHsnMCwgaGR1MmlmdV9wYnVmX2luc3RyX2l9KTsKLSAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotZW5kCi0KLWBlbmRpZiAgLy8gU0NSMV9OT19ERUNfU1RBR0UKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1hc3NpZ24gaWZ1MmhkdV9wYnVmX3JkeV9vID0gaWR1MmlmdV9yZHlfaTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi0KLVNDUjFfU1ZBX0lGVV9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2ltZW0yaWZ1X3JlcV9hY2tfaSwgaWR1MmlmdV9yZHlfaSwgZXh1MmlmdV9wY19uZXdfcmVxX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfSUZVX1hDSEVDS19SRVEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgaWZ1MmltZW1fcmVxX28gfC0+ICEkaXN1bmtub3duKHtpZnUyaW1lbV9hZGRyX28sIGlmdTJpbWVtX2NtZF9vfSkKLSAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IHVua25vd24ge2lmdTJpbWVtX2FkZHJfbywgaWZ1MmltZW1fY21kX299Iik7Ci0KLS8vIEJlaGF2aW9yIGNoZWNrcwotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0lGVV9EUkNfVU5ERVJGTE9XIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEgfD0+IH4oaW1lbV9yZXNwX2Rpc2NhcmRfY250ID09IFNDUjFfVFhOX0NOVF9XJygnMSkpCi0gICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgdW5kZXJmbG93Iik7Ci1gZW5kaWYgLy8gVkVSSUxBVE9SCi1TQ1IxX1NWQV9JRlVfRFJDX1JBTkdFIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgPj0gMCkgJiAoaW1lbV9yZXNwX2Rpc2NhcmRfY250IDw9IGltZW1fcG5kX3R4bnNfY250KQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogaW1lbV9yZXNwX2Rpc2NhcmRfY250IG91dCBvZiByYW5nZSIpOwotCi1TQ1IxX1NWQV9JRlVfUVVFVUVfT1ZGIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIChxX29jcGRfaCA+PSBTQ1IxX0lGVV9RX0ZSRUVfSF9XJyhTQ1IxX0lGVV9RX1NJWkVfSEFMRi0xKSkgfC0+Ci0gICAgKChxX29jcGRfaCA9PSBTQ1IxX0lGVV9RX0ZSRUVfSF9XJyhTQ1IxX0lGVV9RX1NJWkVfSEFMRi0xKSkgPyAocV93cl9zaXplICE9IFNDUjFfSUZVX1FVRVVFX1dSX0ZVTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocV93cl9zaXplID09IFNDUjFfSUZVX1FVRVVFX1dSX05PTkUpKQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogcXVldWUgb3ZlcmZsb3ciKTsKLQotYGlmbmRlZiBWRVJJTEFUT1IKLVNDUjFfU1ZBX0lGVV9JTUVNX0VSUl9CRUggOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGltZW1fcmVzcF9lciAmIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEgJiB+ZXh1MmlmdV9wY19uZXdfcmVxX2kpIHw9PgotICAgIChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0lETEUpICYgKGltZW1fcmVzcF9kaXNjYXJkX2NudCA9PSBpbWVtX3BuZF90eG5zX2NudCkKLSAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGluY29ycmVjdCBiZWhhdmlvciBhZnRlciBtZW1vcnkgZXJyb3IiKTsKLQotU0NSMV9TVkFfSUZVX05FV19QQ19SRVFfQkVIIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGV4dTJpZnVfcGNfbmV3X3JlcV9pIHw9PiBxX2lzX2VtcHR5Ci0gICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBpbmNvcnJlY3QgYmVoYXZpb3IgYWZ0ZXIgZXh1MmlmdV9wY19uZXdfcmVxX2kiKTsKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLVNDUjFfU1ZBX0lGVV9JTUVNX0FERFJfQUxJR05FRCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBpZnUyaW1lbV9yZXFfbyB8LT4gfnxpZnUyaW1lbV9hZGRyX29bMTowXQotICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogdW5hbGlnbmVkIElNRU0gYWNjZXNzIik7Ci0KLWBpZm5kZWYgVkVSSUxBVE9SCi1TQ1IxX1NWQV9JRlVfU1RPUF9GRVRDSCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBwaXBlMmlmdV9zdG9wX2ZldGNoX2kgfD0+IChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0lETEUpCi0gICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBmZXRjaCBub3Qgc3RvcHBlZCIpOwotYGVuZGlmIC8vIFZFUklMQVRPUgotU0NSMV9TVkFfSUZVX0lNRU1fRkFVTFRfUlZJX0hJIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vIHwtPiBpZnUyaWR1X2ltZW1fZXJyX28KLSAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGlmdTJpZHVfaW1lbV9lcnJfbyA9PSAwIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3BpcGVfaWZ1CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2xzdS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4Nzk5My4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2CisrKyAvZGV2L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9sc3Uuc3Y+Ci0vLy8gQGJyaWVmICAgICAgTG9hZC9TdG9yZSBVbml0IChMU1UpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQZXJmb3JtcyBsb2FkIGFuZCBzdG9yZSBvcGVyYXRpb25zIGluIERhdGEgTWVtb3J5Ci0gLy8gLSBHZW5lcmF0ZXMgRE1FTSBhZGRyZXNzIG1pc2FsaWduIGFuZCBhY2Nlc3MgZmF1bHQgZXhjZXB0aW9ucwotIC8vIC0gUGFzc2VzIERNRU0gb3BlcmF0aW9ucyBpbmZvcm1hdGlvbiB0byBURFUgYW5kIGdlbmVyYXRlcyBMU1UgYnJlYWtwb2ludCBleGNlcHRpb24KLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIEZTTQotIC8vIC0gRXhjZXB0aW9ucyBsb2dpYwotIC8vIC0gTFNVIDwtPiBFWFUgaW50ZXJmYWNlCi0gLy8gLSBMU1UgPC0+IERNRU0gaW50ZXJmYWNlCi0gLy8gLSBMU1UgPC0+IFREVSBpbnRlcmZhY2UKLSAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCi1gaWZkZWYgU0NSMV9URFVfRU4KLWBpbmNsdWRlICJzY3IxX3RkdS5zdmgiCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotbW9kdWxlIHNjcjFfcGlwZV9sc3UgKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIExTVSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIExTVSBjbG9jawotCi0gICAgLy8gTFNVIDwtPiBFWFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUybHN1X3JlcV9pLCAgICAgICAgICAgICAgLy8gUmVxdWVzdCB0byBMU1UKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9sc3VfY21kX3NlbF9lICAgICAgICAgICAgIGV4dTJsc3VfY21kX2ksICAgICAgICAgICAgICAvLyBMU1UgY29tbWFuZAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1MmxzdV9hZGRyX2ksICAgICAgICAgICAgIC8vIEFkZHJlc3Mgb2YgRE1FTQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1MmxzdV9zZGF0YV9pLCAgICAgICAgICAgIC8vIERhdGEgZm9yIHN0b3JlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3UyZXh1X3JkeV9vLCAgICAgICAgICAgICAgLy8gTFNVIHJlY2VpdmVkIERNRU0gcmVzcG9uc2UKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGxzdTJleHVfbGRhdGFfbywgICAgICAgICAgICAvLyBMb2FkIGRhdGEKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdTJleHVfZXhjX28sICAgICAgICAgICAgICAvLyBFeGNlcHRpb24gZnJvbSBMU1UKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9leGNfY29kZV9lICAgICAgICAgICAgICAgIGxzdTJleHVfZXhjX2NvZGVfbywgICAgICAgICAvLyBFeGNlcHRpb24gY29kZQotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAvLyBMU1UgPC0+IFREVSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9icmttX2xzdV9tb25fcyAgICAgICAgICAgIGxzdTJ0ZHVfZG1vbl9vLCAgICAgICAgICAgICAvLyBEYXRhIGFkZHJlc3Mgc3RyZWFtIG1vbml0b3JpbmcKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSwgICAvLyBJbnN0cnVjdGlvbiBCUCBleGNlcHRpb24gcmVxdWVzdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pLCAgIC8vIERhdGEgQlAgZXhjZXB0aW9uIHJlcXVlc3QKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0gICAgLy8gTFNVIDwtPiBETUVNIGludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1MmRtZW1fcmVxX28sICAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlcXVlc3QKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgIGxzdTJkbWVtX2NtZF9vLCAgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBjb21tYW5kIChSRUFEL1dSSVRFKQotICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgbHN1MmRtZW1fd2lkdGhfbywgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IGRhdGEgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgIGxzdTJkbWVtX2FkZHJfbywgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBsc3UyZG1lbV93ZGF0YV9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbTJsc3VfcmVxX2Fja19pLCAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGRtZW0ybHN1X3JkYXRhX2ksICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZWFkIGRhdGEKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgIGRtZW0ybHN1X3Jlc3BfaSAgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZXNwb25zZQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfTFNVX0ZTTV9JRExFLAotICAgIFNDUjFfTFNVX0ZTTV9CVVNZCi19IHR5cGVfc2NyMV9sc3VfZnNtX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBMU1UgRlNNIHNpZ25hbHMKLXR5cGVfc2NyMV9sc3VfZnNtX2UgICAgICAgICBsc3VfZnNtX2N1cnI7ICAgICAgIC8vIExTVSBGU00gY3VycmVudCBzdGF0ZQotdHlwZV9zY3IxX2xzdV9mc21fZSAgICAgICAgIGxzdV9mc21fbmV4dDsgICAgICAgLy8gTFNVIEZTTSBuZXh0IHN0YXRlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2ZzbV9pZGxlOyAgICAgICAvLyBMU1UgRlNNIGlzIGluIElETEUgc3RhdGUKLQotLy8gTFNVIENvbW1hbmQgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxzdV9jbWRfdXBkOyAgICAgICAgLy8gTFNVIENvbW1hbmQgcmVnaXN0ZXIgdXBkYXRlCi10eXBlX3NjcjFfbHN1X2NtZF9zZWxfZSAgICAgbHN1X2NtZF9mZjsgICAgICAgICAvLyBMU1UgQ29tbWFuZCByZWdpc3RlciB2YWx1ZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxzdV9jbWRfZmZfbG9hZDsgICAgLy8gUmVnaXN0ZXJlZCBMU1UgQ29tbWFuZCBpcyBsb2FkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2NtZF9mZl9zdG9yZTsgICAvLyBSZWdpc3RlcmVkIExTVSBDb21tYW5kIGlzIHN0b3JlCi0KLS8vIERNRU0gY29tbWFuZCBhbmQgd2lkdGggZmxhZ3MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2NtZF9sb2FkOyAgICAgIC8vIERNRU0gY29tbWFuZCBpcyBsb2FkCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9jbWRfc3RvcmU7ICAgICAvLyBETUVNIENvbW1hbmQgaXMgc3RvcmUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3dkdGhfd29yZDsgICAgIC8vIERNRU0gZGF0YSB3aWR0aCBpcyBXT1JECi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV93ZHRoX2h3b3JkOyAgICAvLyBETUVNIGRhdGEgd2lkdGggaXMgSEFMRldPUkQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3dkdGhfYnl0ZTsgICAgIC8vIERNRU0gZGF0YSB3aWR0aCBpcyBCWVRFCi0KLS8vIERNRU0gcmVzcG9uc2UgYW5kIHJlcXVlc3QgY29udHJvbCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXNwX29rOyAgICAgICAvLyBETUVNIHJlc3BvbnNlIGlzIE9LCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXNwX2VyOyAgICAgICAvLyBETUVNIHJlc3BvbnNlIGlzIGVycm9uZW91cwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVzcF9yZWNlaXZlZDsgLy8gRE1FTSByZXNwb25zZSBpcyByZWNlaXZlZAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX3ZkOyAgICAgICAgLy8gRE1FTSByZXF1ZXN0IGlzIHZhbGlkIChyZXFfYWNrIHJlY2VpdmVkKQotCi0vLyBFeGNlcHRpb25zIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfZXhjX3JlcTsgICAgICAgIC8vIExTVSBleGNlcHRpb24gcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fYWRkcl9tc2xnbjsgICAgLy8gRE1FTSBhZGRyZXNzIGlzIG1pc2FsaWduZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2FkZHJfbXNsZ25fbDsgIC8vIERNRU0gbG9hZCBhZGRyZXNzIGlzIG1pc2FsaWduZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2FkZHJfbXNsZ25fczsgIC8vIERNRU0gc3RvcmUgYWRkcmVzcyBpcyBtaXNhbGlnbmVkCi1gaWZkZWYgU0NSMV9URFVfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfZXhjX2h3YnJrOyAgICAgIC8vIExTVSBoYXJkd2FyZSBicmVha3BvaW50IGV4Y2VwdGlvbgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb250cm9sIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBETUVNIHJlc3BvbnNlIGFuZCByZXF1ZXN0IGNvbnRyb2wgc2lnbmFscwotYXNzaWduIGRtZW1fcmVzcF9vayAgICAgICA9IChkbWVtMmxzdV9yZXNwX2kgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spOwotYXNzaWduIGRtZW1fcmVzcF9lciAgICAgICA9IChkbWVtMmxzdV9yZXNwX2kgPT0gU0NSMV9NRU1fUkVTUF9SRFlfRVIpOwotYXNzaWduIGRtZW1fcmVzcF9yZWNlaXZlZCA9IGRtZW1fcmVzcF9vayB8IGRtZW1fcmVzcF9lcjsKLWFzc2lnbiBkbWVtX3JlcV92ZCAgICAgICAgPSBleHUybHN1X3JlcV9pICYgZG1lbTJsc3VfcmVxX2Fja19pICYgfmxzdV9leGNfcmVxOwotCi0vLyBMU1UgbG9hZCBhbmQgc3RvcmUgY29tbWFuZCBmbGFncwotYXNzaWduIGRtZW1fY21kX2xvYWQgID0gKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xCICkKLSAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MQlUpCi0gICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEggKQotICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xIVSkKLSAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MVyApOwotYXNzaWduIGRtZW1fY21kX3N0b3JlID0gKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX1NCICkKLSAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9TSCApCi0gICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfU1cgKTsKLQotLy8gTFNVIGRhdGEgd2lkdGggZmxhZ3MKLWFzc2lnbiBkbWVtX3dkdGhfd29yZCAgPSAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTFcgKQotICAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9TVyApOwotYXNzaWduIGRtZW1fd2R0aF9od29yZCA9IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MSCApCi0gICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xIVSkKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfU0ggKTsKLWFzc2lnbiBkbWVtX3dkdGhfYnl0ZSAgPSAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEIgKQotICAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MQlUpCi0gICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX1NCICk7Ci0KLS8vIExTVSBjb21tYW5kIHJlZ2lzdGVyCi1hc3NpZ24gbHN1X2NtZF91cGQgPSBsc3VfZnNtX2lkbGUgJiBkbWVtX3JlcV92ZDsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgbHN1X2NtZF9mZiA8PSBTQ1IxX0xTVV9DTURfTk9ORTsKLSAgICBlbmQgZWxzZSBpZiAobHN1X2NtZF91cGQpIGJlZ2luCi0gICAgICAgIGxzdV9jbWRfZmYgPD0gZXh1MmxzdV9jbWRfaTsKLSAgICBlbmQKLWVuZAotCi0vLyBMU1UgcmVnaXN0ZXJlZCBsb2FkIGFuZCBzdG9yZSBjb21tYW5kIGZsYWdzCi1hc3NpZ24gbHN1X2NtZF9mZl9sb2FkICA9IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9MQiApCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9MQlUpCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9MSCApCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9MSFUpCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9MVyApOwotYXNzaWduIGxzdV9jbWRfZmZfc3RvcmUgPSAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfU0IgKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfU0ggKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAobHN1X2NtZF9mZiA9PSBTQ1IxX0xTVV9DTURfU1cgKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExTVSBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBMU1UgRlNNIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgTFNVIDwtPiBETUVNIGludGVyZmFjZQotIC8vCi0vLwotCi0vLyBVcGRhdGluZyBMU1UgRlNNIHN0YXRlCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBsc3VfZnNtX2N1cnIgPD0gU0NSMV9MU1VfRlNNX0lETEU7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgbHN1X2ZzbV9jdXJyIDw9IGxzdV9mc21fbmV4dDsKLSAgICBlbmQKLWVuZAotCi0vLyBMU1UgRlNNIG5leHQgc3RhdGUgbG9naWMKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAobHN1X2ZzbV9jdXJyKQotICAgICAgICBTQ1IxX0xTVV9GU01fSURMRTogYmVnaW4KLSAgICAgICAgICAgIGxzdV9mc21fbmV4dCA9IGRtZW1fcmVxX3ZkICAgICAgICA/IFNDUjFfTFNVX0ZTTV9CVVNZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0xTVV9GU01fSURMRTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfTFNVX0ZTTV9CVVNZOiBiZWdpbgotICAgICAgICAgICAgbHN1X2ZzbV9uZXh0ID0gZG1lbV9yZXNwX3JlY2VpdmVkID8gU0NSMV9MU1VfRlNNX0lETEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTFNVX0ZTTV9CVVNZOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYXNzaWduIGxzdV9mc21faWRsZSA9IChsc3VfZnNtX2N1cnIgPT0gU0NSMV9MU1VfRlNNX0lETEUpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXhjZXB0aW9ucyBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIFRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgZXhjZXB0aW9ucyBhcmUgc3VwcG9ydGVkOgotIC8vIC0gTG9hZCBhZGRyZXNzIG1pc2FsaWduCi0gLy8gLSBMb2FkIGFjY2VzcyBmYXVsdAotIC8vIC0gU3RvcmUgYWRkcmVzcyBtaXNhbGlnbgotIC8vIC0gU3RvcmUgYWNjZXNzIGZhdWx0Ci0gLy8gLSBMU1UgYnJlYWtwb2ludCBleGNlcHRpb24KLS8vCi0KLS8vIERNRU0gYWRkciBtaXNhbGlnbiBsb2dpYwotYXNzaWduIGRtZW1fYWRkcl9tc2xnbiAgID0gZXh1MmxzdV9yZXFfaSAmICggKGRtZW1fd2R0aF9od29yZCAmIGV4dTJsc3VfYWRkcl9pWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGRtZW1fd2R0aF93b3JkICAmIHxleHUybHN1X2FkZHJfaVsxOjBdKSk7Ci1hc3NpZ24gZG1lbV9hZGRyX21zbGduX2wgPSBkbWVtX2FkZHJfbXNsZ24gJiBkbWVtX2NtZF9sb2FkOwotYXNzaWduIGRtZW1fYWRkcl9tc2xnbl9zID0gZG1lbV9hZGRyX21zbGduICYgZG1lbV9jbWRfc3RvcmU7Ci0KLS8vIEV4Y2VwdGlvbiBjb2RlIGxvZ2ljCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKDEnYjEpCi0gICAgICAgIGRtZW1fcmVzcF9lciAgICAgOiBsc3UyZXh1X2V4Y19jb2RlX28gPSBsc3VfY21kX2ZmX2xvYWQgID8gU0NSMV9FWENfQ09ERV9MRF9BQ0NFU1NfRkFVTFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxzdV9jbWRfZmZfc3RvcmUgPyBTQ1IxX0VYQ19DT0RFX1NUX0FDQ0VTU19GQVVMVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR047Ci1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgbHN1X2V4Y19od2JyayAgICA6IGxzdTJleHVfZXhjX2NvZGVfbyA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgICAgICBkbWVtX2FkZHJfbXNsZ25fbDogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9MRF9BRERSX01JU0FMSUdOOwotICAgICAgICBkbWVtX2FkZHJfbXNsZ25fczogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9TVF9BRERSX01JU0FMSUdOOwotICAgICAgICBkZWZhdWx0ICAgICAgICAgIDogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9JTlNUUl9NSVNBTElHTjsKLSAgICBlbmRjYXNlIC8vIDEnYjEKLWVuZAotCi1hc3NpZ24gbHN1X2V4Y19yZXEgPSBkbWVtX2FkZHJfbXNsZ25fbCB8IGRtZW1fYWRkcl9tc2xnbl9zCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgICAgICAgICAgICB8IGxzdV9leGNfaHdicmsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTFNVIDwtPiBFWFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbHN1MmV4dV9yZHlfbyA9IGRtZW1fcmVzcF9yZWNlaXZlZDsKLWFzc2lnbiBsc3UyZXh1X2V4Y19vID0gZG1lbV9yZXNwX2VyIHwgbHN1X2V4Y19yZXE7Ci0KLS8vIFNpZ24tIG9yIHplcm8tZXh0ZW5kaW5nIGRhdGEgcmVjZWl2ZWQgZnJvbSBETUVNCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNhc2UgKGxzdV9jbWRfZmYpCi0gICAgICAgIFNDUjFfTFNVX0NNRF9MSCA6IGxzdTJleHVfbGRhdGFfbyA9IHt7MTZ7ZG1lbTJsc3VfcmRhdGFfaVsxNV19fSwgZG1lbTJsc3VfcmRhdGFfaVsxNTowXX07Ci0gICAgICAgIFNDUjFfTFNVX0NNRF9MSFU6IGxzdTJleHVfbGRhdGFfbyA9IHsgMTYnYjAsICAgICAgICAgICAgICAgICAgICAgZG1lbTJsc3VfcmRhdGFfaVsxNTowXX07Ci0gICAgICAgIFNDUjFfTFNVX0NNRF9MQiA6IGxzdTJleHVfbGRhdGFfbyA9IHt7MjR7ZG1lbTJsc3VfcmRhdGFfaVs3XX19LCAgZG1lbTJsc3VfcmRhdGFfaVs3OjBdfTsKLSAgICAgICAgU0NSMV9MU1VfQ01EX0xCVTogbHN1MmV4dV9sZGF0YV9vID0geyAyNCdiMCwgICAgICAgICAgICAgICAgICAgICBkbWVtMmxzdV9yZGF0YV9pWzc6MF19OwotICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBsc3UyZXh1X2xkYXRhX28gPSBkbWVtMmxzdV9yZGF0YV9pOwotICAgIGVuZGNhc2UgLy8gbHN1X2NtZF9mZgotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMU1UgPC0+IERNRU0gaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gbHN1MmRtZW1fcmVxX28gICA9IGV4dTJsc3VfcmVxX2kgJiB+bHN1X2V4Y19yZXEgJiBsc3VfZnNtX2lkbGU7Ci1hc3NpZ24gbHN1MmRtZW1fYWRkcl9vICA9IGV4dTJsc3VfYWRkcl9pOwotYXNzaWduIGxzdTJkbWVtX3dkYXRhX28gPSBleHUybHN1X3NkYXRhX2k7Ci1hc3NpZ24gbHN1MmRtZW1fY21kX28gICA9IGRtZW1fY21kX3N0b3JlICA/IFNDUjFfTUVNX0NNRF9XUiA6IFNDUjFfTUVNX0NNRF9SRDsKLWFzc2lnbiBsc3UyZG1lbV93aWR0aF9vID0gZG1lbV93ZHRoX2J5dGUgID8gU0NSMV9NRU1fV0lEVEhfQllURQotICAgICAgICAgICAgICAgICAgICAgICAgOiBkbWVtX3dkdGhfaHdvcmQgPyBTQ1IxX01FTV9XSURUSF9IV09SRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9XSURUSF9XT1JEOwotCi1gaWZkZWYgU0NSMV9URFVfRU4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMU1UgPC0+IFREVSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBsc3UydGR1X2Rtb25fby52ZCAgICA9IGV4dTJsc3VfcmVxX2kgJiBsc3VfZnNtX2lkbGUgJiB+dGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9pOwotYXNzaWduIGxzdTJ0ZHVfZG1vbl9vLmFkZHIgID0gZXh1MmxzdV9hZGRyX2k7Ci1hc3NpZ24gbHN1MnRkdV9kbW9uX28ubG9hZCAgPSBkbWVtX2NtZF9sb2FkOwotYXNzaWduIGxzdTJ0ZHVfZG1vbl9vLnN0b3JlID0gZG1lbV9jbWRfc3RvcmU7Ci0KLWFzc2lnbiBsc3VfZXhjX2h3YnJrID0gKGV4dTJsc3VfcmVxX2kgJiB0ZHUybHN1X2licmtwdF9leGNfcmVxX2kpCi0gICAgICAgICAgICAgICAgICAgICB8IHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaTsKLQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi0KLVNDUjFfU1ZBX0xTVV9YQ0hFQ0tfQ1RSTCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bih7ZXh1MmxzdV9yZXFfaSwgbHN1X2ZzbV9jdXJyCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAgICAgLCB0ZHUybHN1X2licmtwdF9leGNfcmVxX2ksIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaQotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0gICAgfSkKLSAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZSIpOwotCi1TQ1IxX1NWQV9MU1VfWENIRUNLX0NNRCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUybHN1X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZXh1MmxzdV9jbWRfaSwgZXh1MmxzdV9hZGRyX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogdW5kZWZpbmVkIENNRCBvciBhZGRyZXNzIik7Ci0KLVNDUjFfU1ZBX0xTVV9YQ0hFQ0tfU0RBVEEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGV4dTJsc3VfcmVxX2kgJiAobHN1MmRtZW1fY21kX28gPT0gU0NSMV9NRU1fQ01EX1dSKSkgfC0+ICEkaXN1bmtub3duKHtleHUybHN1X3NkYXRhX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogdW5kZWZpbmVkIHN0b3JlIGRhdGEiKTsKLQotU0NSMV9TVkFfTFNVX1hDSEVDS19FWEMgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1MmV4dV9leGNfbyB8LT4gISRpc3Vua25vd24obHN1MmV4dV9leGNfY29kZV9vKQotICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogZXhjZXB0aW9uIGNvZGUgdW5kZWZpbmVkIik7Ci0KLVNDUjFfU1ZBX0xTVV9JTUVNX0NUUkwgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1MmRtZW1fcmVxX28gfC0+ICEkaXN1bmtub3duKHtsc3UyZG1lbV9jbWRfbywgbHN1MmRtZW1fd2lkdGhfbywgbHN1MmRtZW1fYWRkcl9vfSkKLSAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IHVuZGVmaW5lZCBkbWVtIGNvbnRyb2wiKTsKLQotU0NSMV9TVkFfTFNVX0lNRU1fQUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGxzdTJkbWVtX3JlcV9vIHwtPiAhJGlzdW5rbm93bihkbWVtMmxzdV9yZXFfYWNrX2kpCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiB1bmRlZmluZWQgZG1lbSBhY2siKTsKLQotU0NSMV9TVkFfTFNVX0lNRU1fV0RBVEEgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1MmRtZW1fcmVxX28gJiAobHN1MmRtZW1fY21kX28gPT0gU0NSMV9NRU1fQ01EX1dSKQotICAgIHwtPiAhJGlzdW5rbm93bihsc3UyZG1lbV93ZGF0YV9vWzg6MF0pCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiB1bmRlZmluZWQgZG1lbSB3ZGF0YSIpOwotCi0vLyBCZWhhdmlvciBjaGVja3MKLQotU0NSMV9TVkFfTFNVX0VYQ19PTkVIT1QgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgJG9uZWhvdDAoe2RtZW1fcmVzcF9lciwgZG1lbV9hZGRyX21zbGduX2wsIGRtZW1fYWRkcl9tc2xnbl9zfSkKLSAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IG1vcmUgdGhhbiBvbmUgZXhjZXB0aW9uIGF0IGEgdGltZSIpOwotCi1TQ1IxX1NWQV9MU1VfVU5FWFBFQ1RFRF9ETUVNX1JFU1AgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgbHN1X2ZzbV9pZGxlIHwtPiB+ZG1lbV9yZXNwX3JlY2VpdmVkCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiBub3QgZXhwZWN0aW5nIG1lbW9yeSByZXNwb25zZSIpOwotCi1TQ1IxX1NWQV9MU1VfUkVRX0VYQyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBsc3UyZXh1X2V4Y19vIHwtPiBleHUybHN1X3JlcV9pCi0gICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiBpbXBvc3NpYmxlIGV4Y2VwdGlvbiIpOwotCi1gaWZkZWYgU0NSMV9URFVfRU4KLQotU0NSMV9DT1ZfTFNVX01JU0FMSUdOX0JSS1BUIDogY292ZXIgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgKGRtZW1fYWRkcl9tc2xnbl9sIHwgZG1lbV9hZGRyX21zbGduX3MpICYgbHN1X2V4Y19od2JyawotKTsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX2xzdQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX21wcmYuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNiMmEzNC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfbXByZi5zdj4KLS8vLyBAYnJpZWYgICAgICBNdWx0aSBQb3J0IFJlZ2lzdGVyIEZpbGUgKE1QUkYpCi0vLy8KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKLQotbW9kdWxlIHNjcjFfcGlwZV9tcHJmICgKLSAgICAvLyBDb21tb24KLWBpZmRlZiBTQ1IxX01QUkZfUlNUX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gTVBSRiByZXNldAotYGVuZGlmIC8vIFNDUjFfTVBSRl9SU1RfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBNUFJGIGNsb2NrCi0KLSAgICAvLyBFWFUgPC0+IE1QUkYgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBleHUybXByZl9yczFfYWRkcl9pLCAgICAgICAgLy8gTVBSRiByczEgcmVhZCBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBtcHJmMmV4dV9yczFfZGF0YV9vLCAgICAgICAgLy8gTVBSRiByczEgcmVhZCBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBleHUybXByZl9yczJfYWRkcl9pLCAgICAgICAgLy8gTVBSRiByczIgcmVhZCBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBtcHJmMmV4dV9yczJfZGF0YV9vLCAgICAgICAgLy8gTVBSRiByczIgcmVhZCBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUybXByZl93X3JlcV9pLCAgICAgICAgICAgLy8gTVBSRiB3cml0ZSByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBleHUybXByZl9yZF9hZGRyX2ksICAgICAgICAgLy8gTVBSRiByZCB3cml0ZSBhZGRyZXNzCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUybXByZl9yZF9kYXRhX2kgICAgICAgICAgLy8gTVBSRiByZCB3cml0ZSBkYXRhCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICB3cl9yZXFfdmQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgcnMxX2FkZHJfdmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9hZGRyX3ZkOwotCi1gaWZkZWYgIFNDUjFfTVBSRl9SQU0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgcnMxX2FkZHJfdmRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9hZGRyX3ZkX2ZmOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9uZXdfZGF0YV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9uZXdfZGF0YV9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9uZXdfZGF0YV9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMl9uZXdfZGF0YV9yZXFfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbmV3X2RhdGFfcmVxOwotCi1sb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJkX2RhdGFfZmY7Ci0KLWxvZ2ljICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgcnMxX2RhdGFfZmY7Ci1sb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJzMl9kYXRhX2ZmOwotCi0vLyB3aGVuIHVzaW5nIFJBTSwgMiBtZW1vcmllcyBhcmUgbmVlZGVkIGJlY2F1c2UgMyBzaW11bHRhbmVvdXMgaW5kZXBlbmRlbnQKLS8vIHdyaXRlL3JlYWQgb3BlcmF0aW9ucyBjYW4gb2NjdXIKLSBgaWZkZWYgU0NSMV9UUkdUX0ZQR0FfSU5URUxfTUFYMTAKLSgqIHJhbXN0eWxlID0gIk05SyIgKikgICAgICBsb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci0oKiByYW1zdHlsZSA9ICJNOUsiICopICAgICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50MiAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOwotIGBlbHNpZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYKLSgqIHJhbXN0eWxlID0gIk0xMEsiICopICAgICBsb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci0oKiByYW1zdHlsZSA9ICJNMTBLIiAqKSAgICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50MiAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOwotIGBlbHNlCi1sb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci1sb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgbXByZl9pbnQyICBbMTpgU0NSMV9NUFJGX1NJWkUtMV07Ci0gYGVuZGlmCi1gZWxzZSAgLy8gZGlzdHJpYnV0ZWQgbG9naWMgaW1wbGVtZW50YXRpb24KLXR5cGVfc2NyMV9tcHJmX3YgWzE6YFNDUjFfTVBSRl9TSVpFLTFdICAgICAgICAgICAgICAgICAgbXByZl9pbnQ7Ci1gZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1QUkYgY29udHJvbCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gY29udHJvbCBzaWduYWxzIGNvbW1vbiBmb3IgZGlzdHJpYnV0ZWQgbG9naWMgYW5kIFJBTSBpbXBsZW1lbnRhdGlvbnMKLWFzc2lnbiAgcnMxX2FkZHJfdmQgID0gICB8ZXh1Mm1wcmZfcnMxX2FkZHJfaTsKLWFzc2lnbiAgcnMyX2FkZHJfdmQgID0gICB8ZXh1Mm1wcmZfcnMyX2FkZHJfaTsKLQotYXNzaWduICB3cl9yZXFfdmQgID0gICBleHUybXByZl93X3JlcV9pICYgfGV4dTJtcHJmX3JkX2FkZHJfaTsKLQotLy8gUkFNIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGNvbnRyb2wgc2lnbmFscwotYGlmZGVmIFNDUjFfTVBSRl9SQU0KLWFzc2lnbiAgcnMxX25ld19kYXRhX3JlcSAgICA9ICAgd3JfcmVxX3ZkICYgKCBleHUybXByZl9yczFfYWRkcl9pID09IGV4dTJtcHJmX3JkX2FkZHJfaSApOwotYXNzaWduICByczJfbmV3X2RhdGFfcmVxICAgID0gICB3cl9yZXFfdmQgJiAoIGV4dTJtcHJmX3JzMl9hZGRyX2kgPT0gZXh1Mm1wcmZfcmRfYWRkcl9pICk7Ci1hc3NpZ24gIHJlYWRfbmV3X2RhdGFfcmVxICAgPSAgIHJzMV9uZXdfZGF0YV9yZXEgfCByczJfbmV3X2RhdGFfcmVxOwotCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIHJzMV9hZGRyX3ZkX2ZmICAgICAgICAgIDw9ICByczFfYWRkcl92ZDsKLSAgICByczJfYWRkcl92ZF9mZiAgICAgICAgICA8PSAgcnMyX2FkZHJfdmQ7Ci0gICAgcnMxX25ld19kYXRhX3JlcV9mZiAgICAgPD0gIHJzMV9uZXdfZGF0YV9yZXE7Ci0gICAgcnMyX25ld19kYXRhX3JlcV9mZiAgICAgPD0gIHJzMl9uZXdfZGF0YV9yZXE7Ci1lbmQKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUkFNCi0KLWBpZmRlZiAgU0NSMV9NUFJGX1JBTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSQU0gaW1wbGVtZW50YXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSQU0gaXMgaW1wbGVtZW50ZWQgd2l0aCAyIHNpbXBsZSBkdWFsLXBvcnQgbWVtb3JpZXMgd2l0aCBzeW5jIHJlYWQgb3BlcmF0aW9uOwotLy8gbG9naWMgZm9yICJ3cml0ZS1maXJzdCIgUkRXIGJlaGF2aW9yIGlzIGltcGxlbWVudGVkIGV4dGVybmFsbHkgdG8gdGhlIGVtYmVkZGVkCi0vLyBtZW1vcnkgYmxvY2tzCi0KLS8vIGJ5cGFzcyBuZXcgd3JfZGF0YSB0byB0aGUgcmVhZCBvdXRwdXQgaWYgd3JpdGUvcmVhZCBjb2xsaXNpb24gb2NjdXJzCi1hc3NpZ24gIG1wcmYyZXh1X3JzMV9kYXRhX28gICA9ICAgKCByczFfbmV3X2RhdGFfcmVxX2ZmICkgPyByZF9kYXRhX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCggcnMxX2FkZHJfdmRfZmYgKSAgID8gcnMxX2RhdGFfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCApOwotCi1hc3NpZ24gIG1wcmYyZXh1X3JzMl9kYXRhX28gICA9ICAgKCByczJfbmV3X2RhdGFfcmVxX2ZmICkgPyByZF9kYXRhX2ZmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCggcnMyX2FkZHJfdmRfZmYgKSAgID8gcnMyX2RhdGFfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCApOwotCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIGlmICggcmVhZF9uZXdfZGF0YV9yZXEgKSBiZWdpbgotICAgICAgICByZF9kYXRhX2ZmICAgICA8PSAgZXh1Mm1wcmZfcmRfZGF0YV9pOwotICAgIGVuZAotZW5kCi0KLS8vIHN5bmNocm9ub3VzIHJlYWQgb3BlcmF0aW9uCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIHJzMV9kYXRhX2ZmICAgPD0gICBtcHJmX2ludFtleHUybXByZl9yczFfYWRkcl9pXTsKLSAgICByczJfZGF0YV9mZiAgIDw9ICAgbXByZl9pbnQyW2V4dTJtcHJmX3JzMl9hZGRyX2ldOwotZW5kCi0KLS8vIHdyaXRlIG9wZXJhdGlvbgotYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KLSAgICBpZiAoIHdyX3JlcV92ZCApIGJlZ2luCi0gICAgICAgIG1wcmZfaW50W2V4dTJtcHJmX3JkX2FkZHJfaV0gIDw9IGV4dTJtcHJmX3JkX2RhdGFfaTsKLSAgICAgICAgbXByZl9pbnQyW2V4dTJtcHJmX3JkX2FkZHJfaV0gPD0gZXh1Mm1wcmZfcmRfZGF0YV9pOwotICAgIGVuZAotZW5kCi1gZWxzZSAgIC8vIGRpc3RyaWJ1dGVkIGxvZ2ljIGltcGxlbWVudGF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGlzdHJpYnV0ZWQgbG9naWMgaW1wbGVtZW50YXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIGFzeW5jaHJvbm91cyByZWFkIG9wZXJhdGlvbgotYXNzaWduICBtcHJmMmV4dV9yczFfZGF0YV9vID0gKCByczFfYWRkcl92ZCApID8gbXByZl9pbnRbZXh1Mm1wcmZfcnMxX2FkZHJfaV0gOiAnMDsKLWFzc2lnbiAgbXByZjJleHVfcnMyX2RhdGFfbyA9ICggcnMyX2FkZHJfdmQgKSA/IG1wcmZfaW50W2V4dTJtcHJmX3JzMl9hZGRyX2ldIDogJzA7Ci0KLS8vIHdyaXRlIG9wZXJhdGlvbgotIGBpZmRlZiBTQ1IxX01QUkZfUlNUX0VOCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24gKSBiZWdpbgotICAgIGlmICggfnJzdF9uICkgYmVnaW4KLSAgICAgICAgbXByZl9pbnQgPD0gJ3tkZWZhdWx0OiAnMH07Ci0gICAgZW5kIGVsc2UgaWYgKCB3cl9yZXFfdmQgKSBiZWdpbgotICAgICAgICBtcHJmX2ludFtleHUybXByZl9yZF9hZGRyX2ldIDw9IGV4dTJtcHJmX3JkX2RhdGFfaTsKLSAgICBlbmQKLWVuZAotIGBlbHNlIC8vIH5TQ1IxX01QUkZfUlNUX0VOCi1hbHdheXNfZmYgQCggcG9zZWRnZSBjbGsgKSBiZWdpbgotICAgIGlmICggd3JfcmVxX3ZkICkgYmVnaW4KLSAgICAgICAgbXByZl9pbnRbZXh1Mm1wcmZfcmRfYWRkcl9pXSA8PSBleHUybXByZl9yZF9kYXRhX2k7Ci0gICAgZW5kCi1lbmQKLSBgZW5kaWYgLy8gflNDUjFfTVBSRl9SU1RfRU4KLWBlbmRpZgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX01QUkZfUlNUX0VOCi1TQ1IxX1NWQV9NUFJGX1dSSVRFWCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBleHUybXByZl93X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZXh1Mm1wcmZfcmRfYWRkcl9pLCAofGV4dTJtcHJmX3JkX2FkZHJfaSA/IGV4dTJtcHJmX3JkX2RhdGFfaSA6IGBTQ1IxX1hMRU4nZDApfSkKLSAgICApIGVsc2UgJGVycm9yKCJNUFJGIGVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotYGVuZGlmIC8vIFNDUjFfTVBSRl9SU1RfRU4KLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfcGlwZV9tcHJmCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RkdS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0ZmY0Mi4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2CisrKyAvZGV2L251bGwKQEAgLTEsNjEyICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV90ZHUuc3Y+Ci0vLy8gQGJyaWVmICAgICAgVHJpZ2dlciBEZWJ1ZyBVbml0IChURFUpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBQcm92aWRlcyByZWFkL3dyaXRlIGludGVyZmFjZSBmb3IgVERVIENTUnMKLSAvLyAtIFByb3ZpZGVzIHRyaWdnZXJzIGZ1bmN0aW9uYWxpdHk6Ci0gLy8gICAtIFN1cHBvcnRzIHRyaWdnZXJzIGVpdGhlciBpbiBib3RoIERlYnVnIGFuZCBNIG1vZGVzIG9yIGluIERlYnVnIG1vZGUgb25seQotIC8vICAgLSBTdXBwb3J0cyB2aXJ0dWFsIGFkZHJlc3MgbWF0Y2hpbmcgKGxvYWQsIHN0b3JlLCBleGVjKSB0cmlnZ2VycwotIC8vICAgLSBTdXBwb3J0cyBpbnN0cnVjdGlvbiBjb3VudCB0cmlnZ2VycwotIC8vICAgLSBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgb24gdHJpZ2dlciBmaXJpbmc6Ci0gLy8gICAgIC0gQnJlYWtwb2ludCBleGNlcHRpb24gcmFpc2luZwotIC8vICAgICAtIERlYnVnIE1vZGUgZW50ZXJpbmcKLSAvLyAgIC0gU3VwcG9ydHMgdHJpZ2dlcnMgY2hhaW5pbmcKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIENTUiByZWFkL3dyaXRlIGkvZgotIC8vIC0gVERVIENTUnM6Ci0gLy8gICAtIFRTRUxFQ1QKLSAvLyAgIC0gVERBVEExL01DT05UUk9ML0lDT1VOVAotIC8vICAgLSBUREFUQTIKLSAvLyAgIC0gVElORk8KLSAvLyAtIFREVSA8LT4gRVhVIGkvZgotIC8vIC0gVERVIDwtPiBMU1UgaS9mCi0gLy8gLSBURFUgPC0+IEhEVSBpL2YKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLWBpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCi1gaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotCi1tb2R1bGUgc2NyMV9waXBlX3RkdSAoCi0gICAgLy8gQ29tbW9uIHNpZ25hbHMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBURFUgcmVzZXQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBURFUgY2xvY2sKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbiwgICAgICAgICAgICAgICAgICAgICAvLyBURFUgY2xvY2sgZW5hYmxlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHVfZHNibF9pLCAgICAgICAgICAgICAgICAgLy8gVERVIERpc2FibGUKLQotICAgIC8vIFREVSA8LT4gQ1NSIGludGVyZmFjZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9yZXFfaSwgICAgICAgICAgICAgIC8vIENTUi1URFUgaS9mIHJlcXVlc3QKLSAgICBpbnB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfY21kX2ksICAgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiBjb21tYW5kCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgICAgICAgICAgICBjc3IydGR1X2FkZHJfaSwgICAgICAgICAgICAgLy8gQ1NSLVREVSBpL2YgYWRkcmVzcwotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9URFVfREFUQV9XLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV93ZGF0YV9pLCAgICAgICAgICAgIC8vIENTUi1URFUgaS9mIHdyaXRlIGRhdGEKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0RBVEFfVy0xOjBdICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfbywgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiByZWFkIGRhdGEKLSAgICBvdXRwdXQgdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmVzcF9vLCAgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiByZXNwb25zZQotCi0gICAgLy8gVERVIDwtPiBFWFUgaW50ZXJmYWNlCi0gICAgaW5wdXQgIHR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zICAgICAgICAgICAgICAgICAgICAgICBleHUydGR1X2ltb25faSwgICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc3RyZWFtIG1vbml0b3JpbmcKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTEgOiAwXSAgICAgICAgICAgICAgIHRkdTJleHVfaWJya3B0X21hdGNoX28sICAgICAvLyBJbnN0cnVjdGlvbiBCUCBtYXRjaAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vLCAgIC8vIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0Ci0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX1REVV9BTExUUklHX05VTS0xIDogMF0gICAgICAgICAgICAgICBleHUydGR1X2JwX3JldGlyZV9pLCAgICAgICAgLy8gTWFwIG9mIEJQcyBiZWluZyByZXRpcmVkCi0KLSAgICAvLyBURFUgPC0+IExTVSBpbnRlcmZhY2UKLWBpZm5kZWYgU0NSMV9URFVfRU4KLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfYnJrX2VuX28sICAgICAgICAgICAvLyBURFUtTFNVIEJyZWFrcG9pbnQgZW5hYmxlCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfbywgICAvLyBURFUtTFNVIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0Ci0gICAgaW5wdXQgIHR5cGVfc2NyMV9icmttX2xzdV9tb25fcyAgICAgICAgICAgICAgICAgICAgICAgICBsc3UydGR1X2Rtb25faSwgICAgICAgICAgICAgLy8gVERVLUxTVSBEYXRhIGFkZHJlc3Mgc3RyZWFtIG1vbml0b3JpbmcKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX01UUklHX05VTS0xIDogMF0gICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X21hdGNoX28sICAgICAvLyBURFUtTFNVIERhdGEgQlAgbWF0Y2gKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfbywgICAvLyBURFUtTFNVIERhdGEgQlAgZXhjZXB0aW9uIHJlcXVlc3QKLQotICAgIC8vIFREVSA8LT4gSERVIGludGVyZmFjZQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmhkdV9kbW9kZV9yZXFfbyAgICAgICAgIC8vIERlYnVnIE1vZGUgcmVkaXJlY3Rpb24gcmVxdWVzdAotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIE1UUklHX05VTSAgID0gU0NSMV9URFVfTVRSSUdfTlVNOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgQUxMVFJJR19OVU0gPSBTQ1IxX1REVV9BTExUUklHX05VTTsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIEFMTFRSSUdfVyAgID0gJGNsb2cyKEFMTFRSSUdfTlVNKzEpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVERVIENTUnMgcmVhZC93cml0ZSBpL2Ygc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gV3JpdGUgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3dyX3JlcTsKLWxvZ2ljIFtTQ1IxX1REVV9EQVRBX1ctMTowXSAgICAgICAgICAgICAgICAgICAgIGNzcl93cl9kYXRhOwotCi0vLyBSZWdpc3RlciBzZWxlY3QKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RzZWxlY3Q7Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl9tY29udHJvbDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RkYXRhMjsKLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX2ljb3VudDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotLy8gVERVIENTUnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRTRUxFQ1QgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90c2VsZWN0X3VwZDsKLWxvZ2ljIFtBTExUUklHX1ctMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90c2VsZWN0X2ZmOwotCi0vLyBNQ09OVFJPTCByZWdpc3RlcgotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX3dyX3JlcTsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9jbGtfZW47Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfdXBkOwotCi1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfZmY7Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9tX2ZmOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX21fbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2ZmOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9sb2FkX2ZmOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2xvYWRfbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9mZjsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9uZXh0OwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2FjdGlvbl9mZjsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fbmV4dDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9oaXRfZmY7Ci1sb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X25leHQ7Ci0KLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2hpdDsKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9sZHN0X2hpdDsKLQotLy8gSUNPVU5UIHJlZ2lzdGVyCi1gaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfY2xrX2VuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF91cGQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfZG1vZGVfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X21fZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X21fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfYWN0aW9uX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF9hY3Rpb25fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfaGl0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF9oaXRfbmV4dDsKLWxvZ2ljIFtTQ1IxX1REVV9JQ09VTlRfQ09VTlRfSEktU0NSMV9URFVfSUNPVU5UX0NPVU5UX0xPOjBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2NvdW50X2ZmOwotbG9naWMgW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISS1TQ1IxX1REVV9JQ09VTlRfQ09VTlRfTE86MF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfY291bnRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfc2tpcF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfc2tpcF9uZXh0OwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2RlY3JfZW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2NvdW50X2RlY3I7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X3NraXBfZHNibDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfaGl0OwotYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgotCi0vLyBUREFUQTIgcmVnaXN0ZXIKLWxvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90ZGF0YTJfdXBkOwotbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3RkYXRhMl9mZiBbU0NSMV9URFVfREFUQV9XLTE6MF07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlYWQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB0ZHUyY3NyX3Jlc3BfbyA9IGNzcjJ0ZHVfcmVxX2kgPyBTQ1IxX0NTUl9SRVNQX09LIDogU0NSMV9DU1JfUkVTUF9FUjsKLWludGVnZXIgaTsKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaSA9IDA7IC8vIHlvc3lzIGxhdGNoIHdhcm5pbmcgZml4Ci0gICAgdGR1MmNzcl9yZGF0YV9vID0gJzA7Ci0gICAgaWYgKGNzcjJ0ZHVfcmVxX2kpIGJlZ2luCi0gICAgICAgIGNhc2UgKGNzcjJ0ZHVfYWRkcl9pKQotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UU0VMRUNUOiBiZWdpbgotICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfbyA9IHsnMCwgY3NyX3RzZWxlY3RfZmZ9OwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgTVRSSUdfTlVNOyBpPWkrMSkgYmVnaW4gLy8gY3AuNAotICAgICAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKGkpKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vID0gY3NyX3RkYXRhMl9mZltpXTsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVERBVEExIDogYmVnaW4KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBNVFJJR19OVU07IGk9aSsxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoaSkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfVERBVEExX1RZUEVfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9UREFUQTFfVFlQRV9MT10gICAgICA9IFNDUjFfVERVX01DT05UUk9MX1RZUEVfVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX1REQVRBMV9ETU9ERV0gICAgICAgPSBjc3JfbWNvbnRyb2xfZG1vZGVfZmZbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfTE9dID0gU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfSElUXSAgICAgICA9IGNzcl9tY29udHJvbF9oaXRfZmZbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfU0VMRUNUXSAgICA9IFNDUjFfVERVX01DT05UUk9MX1NFTEVDVF9WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfVElNSU5HXSAgICA9IFNDUjFfVERVX01DT05UUk9MX1RJTUlOR19WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfQUNUSU9OX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfQUNUSU9OX0xPXSAgPSB7NSdiMCwgY3NyX21jb250cm9sX2FjdGlvbl9mZltpXX07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfQ0hBSU5dICAgICA9IDEnYjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTUFUQ0hfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9NQVRDSF9MT10gICA9IDQnYjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTV0gICAgICAgICA9IGNzcl9tY29udHJvbF9tX2ZmW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1JFU0VSVkVEQV0gPSBTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREFfVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1NdICAgICAgICAgPSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1VdICAgICAgICAgPSAxJ2IwOwotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX0VYRUNVVEVdICAgPSBjc3JfbWNvbnRyb2xfZXhlY19mZiBbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfU1RPUkVdICAgICA9IGNzcl9tY29udHJvbF9zdG9yZV9mZltpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9MT0FEXSAgICAgID0gY3NyX21jb250cm9sX2xvYWRfZmYgW2ldOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKFNDUjFfVERVX0FMTFRSSUdfTlVNIC0gMSdiMSkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9UREFUQTFfVFlQRV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfVERBVEExX1RZUEVfTE9dICAgID0gU0NSMV9URFVfSUNPVU5UX1RZUEVfVkFMOwotICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfVERBVEExX0RNT0RFXSAgICAgPSBjc3JfaWNvdW50X2Rtb2RlX2ZmOwotICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfSUNPVU5UX0hJVF0gICAgICAgPSBjc3JfaWNvdW50X2hpdF9mZjsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX0NPVU5UX0xPXSAgID0gY3NyX2ljb3VudF9jb3VudF9mZjsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9VXSAgICAgICAgID0gMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9TXSAgICAgICAgID0gMSdiMDsKLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9NXSAgICAgICAgID0gY3NyX2ljb3VudF9tX2ZmOwotICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfSUNPVU5UX0FDVElPTl9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX0FDVElPTl9MT10gID0gezUnYjAsIGNzcl9pY291bnRfYWN0aW9uX2ZmfTsKLSAgICAgICAgICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19USU5GTyA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgTVRSSUdfTlVNOyBpPWkrMSkgYmVnaW4gLy8gY3AuNAotICAgICAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKGkpKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1RZUEVfVkFMXSA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotYGlmZGVmIFNDUjFfVERVX0lDT1VOVF9FTgotICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoU0NSMV9URFVfQUxMVFJJR19OVU0gLSAxJ2IxKSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9UWVBFX1ZBTF0gPSAxJ2IxOwotICAgICAgICAgICAgICAgIGVuZAotYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8gV3JpdGUgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY3NyX3dyX3JlcSAgPSAxJ2IwOwotICAgIGNzcl93cl9kYXRhID0gJzA7Ci0KLSAgICBjYXNlIChjc3IydGR1X2NtZF9pKQotICAgICAgICBTQ1IxX0NTUl9DTURfV1JJVEU6IGJlZ2luCi0gICAgICAgICAgICBjc3Jfd3JfcmVxICA9IDEnYjE7Ci0gICAgICAgICAgICBjc3Jfd3JfZGF0YSA9IGNzcjJ0ZHVfd2RhdGFfaTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQgIDogYmVnaW4KLSAgICAgICAgICAgIGNzcl93cl9yZXEgID0gfGNzcjJ0ZHVfd2RhdGFfaTsKLSAgICAgICAgICAgIGNzcl93cl9kYXRhID0gdGR1MmNzcl9yZGF0YV9vIHwgY3NyMnRkdV93ZGF0YV9pOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9DU1JfQ01EX0NMRUFSOiBiZWdpbgotICAgICAgICAgICAgY3NyX3dyX3JlcSAgPSB8Y3NyMnRkdV93ZGF0YV9pOwotICAgICAgICAgICAgY3NyX3dyX2RhdGEgPSB0ZHUyY3NyX3JkYXRhX28gJiB+Y3NyMnRkdV93ZGF0YV9pOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBSZWdpc3RlciBzZWxlY3Rpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnRlZ2VyIGs7Ci1hbHdheXNfY29tYiBiZWdpbgotICAgIGsgPSAwOyAvLyB5b3N5cyBsYXRjaCB3YXJuaW5nIGZpeAotICAgIGNzcl9hZGRyX3RzZWxlY3QgID0gMSdiMDsKLSAgICBjc3JfYWRkcl90ZGF0YTIgICA9ICcwOwotICAgIGNzcl9hZGRyX21jb250cm9sID0gJzA7Ci1gaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCi0gICAgY3NyX2FkZHJfaWNvdW50ICAgPSAnMDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotICAgIGlmIChjc3IydGR1X3JlcV9pKSBiZWdpbgotICAgICAgICBjYXNlIChjc3IydGR1X2FkZHJfaSkKLSAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVFNFTEVDVDogYmVnaW4KLSAgICAgICAgICAgICAgICBjc3JfYWRkcl90c2VsZWN0ID0gMSdiMTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTEgOiBiZWdpbgotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IE1UUklHX05VTTsgaz1rKzEpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoaykpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl9tY29udHJvbFtrXSA9IDEnYjE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotYGlmZGVmIFNDUjFfVERVX0lDT1VOVF9FTgotICAgICAgICAgICAgICAgIGlmKGNzcl90c2VsZWN0X2ZmID09IEFMTFRSSUdfVycoU0NSMV9URFVfQUxMVFJJR19OVU0gLSAxJ2IxKSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgY3NyX2FkZHJfaWNvdW50ID0gMSdiMTsKLSAgICAgICAgICAgICAgICBlbmQKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IE1UUklHX05VTTsgaz1rKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhrKSApIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl90ZGF0YTJba10gPSAxJ2IxOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBURFUgQ1NScwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gVERVIENTUnMgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyczoKLSAvLyAtIFRTRUxFQ1QKLSAvLyAtIFREQVRBMS9NQ09OVFJPTC9JQ09VTlQgKGRlcGVuZGluZyBvbiB0aGUgdHlwZSBmaWVsZCB2YWx1ZSkKLSAvLyAtIFREQVRBMgotLy8KLQotLy8gVFNFTEVDVCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERldGVybWluZXMgd2hpY2ggdHJpZ2dlciBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG90aGVyIHRyaWdnZXIgcmVnaXN0ZXJzCi0KLWFzc2lnbiBjc3JfdHNlbGVjdF91cGQgPSBjbGtfZW4gJiBjc3JfYWRkcl90c2VsZWN0ICYgY3NyX3dyX3JlcQotICAgICAgICAgICAgICAgICAgICAgICAmIChjc3Jfd3JfZGF0YVtBTExUUklHX1ctMTowXSA8IEFMTFRSSUdfVycoQUxMVFJJR19OVU0pKTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYofnJzdF9uKSBiZWdpbgotICAgICAgICBjc3JfdHNlbGVjdF9mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBpZihjc3JfdHNlbGVjdF91cGQpIGJlZ2luCi0gICAgICAgIGNzcl90c2VsZWN0X2ZmIDw9IGNzcl93cl9kYXRhW0FMTFRSSUdfVy0xOjBdOwotICAgIGVuZAotZW5kCi0KLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLS8vIElDT1VOVCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFByb3ZpZGVzIGEgdHJpZ2dlciB0aGF0IGZpcmVzIHdoZW4gdGhlIGNlcnRhaW4gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBoYXMgcmV0aXJlZAotLy8gSXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHNpbmdsZSBzdGVwIHRyaWdnZXIgKGluIHRoaXMgY2FzZSBjb3VudCBtdXN0IGJlIDEpCi0KLWFzc2lnbiBjc3JfaWNvdW50X3dyX3JlcSA9IGNzcl9hZGRyX2ljb3VudCAmIGNzcl93cl9yZXE7Ci1hc3NpZ24gY3NyX2ljb3VudF9jbGtfZW4gPSBjbGtfZW4gJiAoY3NyX2ljb3VudF93cl9yZXEgfCBjc3JfaWNvdW50X21fZmYpOwotYXNzaWduIGNzcl9pY291bnRfdXBkICAgID0gfmNzcl9pY291bnRfZG1vZGVfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9pY291bnRfd3JfcmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiB0ZHVfZHNibF9pICYgY3NyX2ljb3VudF93cl9yZXE7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX2ljb3VudF9kbW9kZV9mZiAgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9tX2ZmICAgICAgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9hY3Rpb25fZmYgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9oaXRfZmYgICAgPD0gMSdiMDsKLSAgICAgICAgY3NyX2ljb3VudF9jb3VudF9mZiAgPD0gJzA7Ci0gICAgICAgIGNzcl9pY291bnRfc2tpcF9mZiAgIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKGNzcl9pY291bnRfY2xrX2VuKSBiZWdpbgotICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX2ZmICA8PSBjc3JfaWNvdW50X2Rtb2RlX25leHQ7Ci0gICAgICAgIGNzcl9pY291bnRfbV9mZiAgICAgIDw9IGNzcl9pY291bnRfbV9uZXh0OwotICAgICAgICBjc3JfaWNvdW50X2FjdGlvbl9mZiA8PSBjc3JfaWNvdW50X2FjdGlvbl9uZXh0OwotICAgICAgICBjc3JfaWNvdW50X2hpdF9mZiAgICA8PSBjc3JfaWNvdW50X2hpdF9uZXh0OwotICAgICAgICBjc3JfaWNvdW50X2NvdW50X2ZmICA8PSBjc3JfaWNvdW50X2NvdW50X25leHQ7Ci0gICAgICAgIGNzcl9pY291bnRfc2tpcF9mZiAgIDw9IGNzcl9pY291bnRfc2tpcF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBjc3JfaWNvdW50X2RlY3JfZW4gICAgPSAofnRkdV9kc2JsX2kgJiBjc3JfaWNvdW50X21fZmYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXh1MnRkdV9pbW9uX2kudmQgJiAoY3NyX2ljb3VudF9jb3VudF9mZiAhPSAxNCdiMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxJ2IwOwotYXNzaWduIGNzcl9pY291bnRfY291bnRfZGVjciA9IGV4dTJ0ZHVfaW1vbl9pLnJlcSAmIGNzcl9pY291bnRfZGVjcl9lbiAmIH5jc3JfaWNvdW50X3NraXBfZmY7Ci1hc3NpZ24gY3NyX2ljb3VudF9za2lwX2RzYmwgID0gZXh1MnRkdV9pbW9uX2kucmVxICYgY3NyX2ljb3VudF9kZWNyX2VuICYgY3NyX2ljb3VudF9za2lwX2ZmOwotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChjc3JfaWNvdW50X3VwZCkgYmVnaW4KLSAgICAgICAgY3NyX2ljb3VudF9kbW9kZV9uZXh0ICA9IGNzcl93cl9kYXRhW1NDUjFfVERVX1REQVRBMV9ETU9ERV07Ci0gICAgICAgIGNzcl9pY291bnRfbV9uZXh0ICAgICAgPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9JQ09VTlRfTV07Ci0gICAgICAgIGNzcl9pY291bnRfYWN0aW9uX25leHQgPSAoY3NyX3dyX2RhdGFbU0NSMV9URFVfSUNPVU5UX0FDVElPTl9ISQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlNDUjFfVERVX0lDT1VOVF9BQ1RJT05fTE9dID09ICdiMSk7Ci0gICAgICAgIGNzcl9pY291bnRfaGl0X25leHQgICAgPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9JQ09VTlRfSElUXTsKLSAgICAgICAgY3NyX2ljb3VudF9jb3VudF9uZXh0ICA9IGNzcl93cl9kYXRhW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISTpTQ1IxX1REVV9JQ09VTlRfQ09VTlRfTE9dOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNzcl9pY291bnRfZG1vZGVfbmV4dCAgPSBjc3JfaWNvdW50X2Rtb2RlX2ZmOwotICAgICAgICBjc3JfaWNvdW50X21fbmV4dCAgICAgID0gY3NyX2ljb3VudF9tX2ZmOwotICAgICAgICBjc3JfaWNvdW50X2FjdGlvbl9uZXh0ID0gY3NyX2ljb3VudF9hY3Rpb25fZmY7Ci0gICAgICAgIGNzcl9pY291bnRfaGl0X25leHQgICAgPSBleHUydGR1X2JwX3JldGlyZV9pW0FMTFRSSUdfTlVNIC0gMSdiMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9pY291bnRfaGl0X2ZmOwotICAgICAgICBjc3JfaWNvdW50X2NvdW50X25leHQgID0gY3NyX2ljb3VudF9jb3VudF9kZWNyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjc3JfaWNvdW50X2NvdW50X2ZmIC0gMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2ljb3VudF9jb3VudF9mZjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gY3NyX2ljb3VudF9za2lwX25leHQgPSBjc3JfaWNvdW50X3dyX3JlcSAgICA/IGNzcl93cl9kYXRhW1NDUjFfVERVX0lDT1VOVF9NXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2ljb3VudF9za2lwX2RzYmwgPyAxJ2IwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9pY291bnRfc2tpcF9mZjsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotLy8gTUNPTlRST0wgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHJvdmlkZXMgYSB0cmlnZ2VyIHRoYXQgZmlyZXMgb24gdGhlIHZpcnR1YWwgYWRkcmVzcyAoc3RvcmVkIGluIFREQVRBMikgbWF0Y2gKLS8vIChsb2FkLCBzdG9yZSwgZXhlYyBvcHRpb25zIHN1cHBvcnRlZCkuIFRyaWdnZXJzIGNoYWluaW5nIHN1cHBvcnRlZAotCi1nZW52YXIgdHJpZzsKLWdlbmVyYXRlCi1mb3IgKHRyaWcgPSAwOyAkdW5zaWduZWQodHJpZykgPCBNVFJJR19OVU07IHRyaWc9dHJpZysxKSBiZWdpbiA6IGdibG9ja19tdHJpZwotCi1hc3NpZ24gY3NyX21jb250cm9sX3dyX3JlcVt0cmlnXSA9IGNzcl9hZGRyX21jb250cm9sW3RyaWddICYgY3NyX3dyX3JlcTsKLWFzc2lnbiBjc3JfbWNvbnRyb2xfY2xrX2VuW3RyaWddID0gY2xrX2VuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChjc3JfbWNvbnRyb2xfd3JfcmVxW3RyaWddIHwgY3NyX21jb250cm9sX21fZmZbdHJpZ10pOwotYXNzaWduIGNzcl9tY29udHJvbF91cGQgICBbdHJpZ10gPSB+Y3NyX21jb250cm9sX2Rtb2RlX2ZmW3RyaWddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9tY29udHJvbF93cl9yZXFbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGR1X2RzYmxfaSAmIGNzcl9tY29udHJvbF93cl9yZXFbdHJpZ107Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3NyX21jb250cm9sX2Rtb2RlX2ZmIFt0cmlnXSA8PSAxJ2IwOwotICAgICAgICBjc3JfbWNvbnRyb2xfbV9mZiAgICAgW3RyaWddIDw9IDEnYjA7Ci0gICAgICAgIGNzcl9tY29udHJvbF9leGVjX2ZmICBbdHJpZ10gPD0gMSdiMDsKLSAgICAgICAgY3NyX21jb250cm9sX2xvYWRfZmYgIFt0cmlnXSA8PSAxJ2IwOwotICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfZmYgW3RyaWddIDw9IDEnYjA7Ci0gICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbdHJpZ10gPD0gMSdiMDsKLSAgICAgICAgY3NyX21jb250cm9sX2hpdF9mZiAgIFt0cmlnXSA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmKGNzcl9tY29udHJvbF9jbGtfZW5bdHJpZ10pIGJlZ2luCi0gICAgICAgIGNzcl9tY29udHJvbF9kbW9kZV9mZiBbdHJpZ10gPD0gY3NyX21jb250cm9sX2Rtb2RlX25leHRbdHJpZ107Ci0gICAgICAgIGNzcl9tY29udHJvbF9tX2ZmICAgICBbdHJpZ10gPD0gY3NyX21jb250cm9sX21fbmV4dFt0cmlnXTsKLSAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfZmYgIFt0cmlnXSA8PSBjc3JfbWNvbnRyb2xfZXhlY19uZXh0W3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfbG9hZF9mZiAgW3RyaWddIDw9IGNzcl9tY29udHJvbF9sb2FkX25leHRbdHJpZ107Ci0gICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9mZiBbdHJpZ10gPD0gY3NyX21jb250cm9sX3N0b3JlX25leHRbdHJpZ107Ci0gICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbdHJpZ10gPD0gY3NyX21jb250cm9sX2FjdGlvbl9uZXh0W3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X2ZmICAgW3RyaWddIDw9IGNzcl9tY29udHJvbF9oaXRfbmV4dFt0cmlnXTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmIChjc3JfbWNvbnRyb2xfdXBkW3RyaWddKSBiZWdpbgotICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dCBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9UREFUQTFfRE1PREVdOwotICAgICAgICBjc3JfbWNvbnRyb2xfbV9uZXh0ICAgICBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9NXTsKLSAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfbmV4dCAgW3RyaWddID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfTUNPTlRST0xfRVhFQ1VURV07Ci0gICAgICAgIGNzcl9tY29udHJvbF9sb2FkX25leHQgIFt0cmlnXSA9IGNzcl93cl9kYXRhW1NDUjFfVERVX01DT05UUk9MX0xPQURdOwotICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfbmV4dCBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9TVE9SRV07Ci0gICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fbmV4dFt0cmlnXSA9IChjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9BQ1RJT05fSEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlNDUjFfVERVX01DT05UUk9MX0FDVElPTl9MT10gPT0gJ2IxKTsKLSAgICAgICAgY3NyX21jb250cm9sX2hpdF9uZXh0ICAgW3RyaWddID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfTUNPTlRST0xfSElUXTsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dCBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfZG1vZGVfZmYgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfbV9uZXh0ICAgICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfbV9mZiAgICAgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfZXhlY19uZXh0ICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfZXhlY19mZiAgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfbG9hZF9uZXh0ICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfbG9hZF9mZiAgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfbmV4dCBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfc3RvcmVfZmYgW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfYWN0aW9uX25leHRbdHJpZ10gPSBjc3JfbWNvbnRyb2xfYWN0aW9uX2ZmW3RyaWddOwotICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X25leHQgICBbdHJpZ10gPSBleHUydGR1X2JwX3JldGlyZV9pW3RyaWddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jb250cm9sX2hpdF9mZlt0cmlnXTsKLSAgICBlbmQKLWVuZAotCi0vLyBUREFUQTIgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjc3JfdGRhdGEyX3VwZFt0cmlnXSA9IH5jc3JfbWNvbnRyb2xfZG1vZGVfZmZbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNsa19lbiAmIGNzcl9hZGRyX3RkYXRhMlt0cmlnXSAmIGNzcl93cl9yZXEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNsa19lbiAmIGNzcl9hZGRyX3RkYXRhMlt0cmlnXSAmIGNzcl93cl9yZXEgJiB0ZHVfZHNibF9pOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY3NyX3RkYXRhMl91cGRbdHJpZ10pIGJlZ2luCi0gICAgICAgIGNzcl90ZGF0YTJfZmZbdHJpZ10gPD0gY3NyX3dyX2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotZW5kCi1lbmRnZW5lcmF0ZSAvLyBnYmxvY2tfbXRyaWcKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFREVSA8LT4gRVhVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGNzcl9pY291bnRfaGl0ID0gfnRkdV9kc2JsX2kgJiBjc3JfaWNvdW50X21fZmYKLSAgICAgICAgICAgICAgICAgICAgICA/IGV4dTJ0ZHVfaW1vbl9pLnZkICYgKGNzcl9pY291bnRfY291bnRfZmYgPT0gMTQnYjEpICYgfmNzcl9pY291bnRfc2tpcF9mZgotICAgICAgICAgICAgICAgICAgICAgIDogMSdiMDsKLQotYGlmbmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLWFzc2lnbiB0ZHUyZXh1X2licmtwdF9tYXRjaF9vICAgPSBjc3JfbWNvbnRyb2xfZXhlY19oaXQ7Ci1hc3NpZ24gdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vID0gfGNzcl9tY29udHJvbF9leGVjX2hpdDsKLWBlbHNlCi1hc3NpZ24gdGR1MmV4dV9pYnJrcHRfbWF0Y2hfbyAgID0ge2Nzcl9pY291bnRfaGl0LCBjc3JfbWNvbnRyb2xfZXhlY19oaXR9OwotYXNzaWduIHRkdTJleHVfaWJya3B0X2V4Y19yZXFfbyA9IHxjc3JfbWNvbnRyb2xfZXhlY19oaXQgfCBjc3JfaWNvdW50X2hpdDsKLWBlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFREVSA8LT4gTFNVIGludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQnJlYWtwb2ludCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZ2VuZXJhdGUKLWZvciAodHJpZyA9IDA7ICR1bnNpZ25lZCh0cmlnKSA8IE1UUklHX05VTTsgdHJpZz10cmlnKzEpIGJlZ2luIDogZ2Jsb2NrX2JyZWFrX3RyaWcKLWFzc2lnbiBjc3JfbWNvbnRyb2xfZXhlY19oaXRbdHJpZ10gPSB+dGR1X2RzYmxfaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGNzcl9tY29udHJvbF9tX2ZmW3RyaWddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgY3NyX21jb250cm9sX2V4ZWNfZmZbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBleHUydGR1X2ltb25faS52ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGV4dTJ0ZHVfaW1vbl9pLmFkZHIgPT0gY3NyX3RkYXRhMl9mZlt0cmlnXTsKLWVuZAotZW5kZ2VuZXJhdGUKLQotYGlmbmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLWFzc2lnbiB0ZHUybHN1X2licmtwdF9leGNfcmVxX28gPSB8Y3NyX21jb250cm9sX2V4ZWNfaGl0OwotYGVsc2UKLWFzc2lnbiB0ZHUybHN1X2licmtwdF9leGNfcmVxX28gPSB8Y3NyX21jb250cm9sX2V4ZWNfaGl0IHwgY3NyX2ljb3VudF9oaXQ7Ci1gZW5kaWYgLy8gU0NSMV9URFVfSUNPVU5UX0VOCi0KLS8vIFdhdGNocG9pbnQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWdlbmVyYXRlCi1mb3IoIHRyaWcgPSAwOyAkdW5zaWduZWQodHJpZykgPCBNVFJJR19OVU07IHRyaWc9dHJpZysxICkgYmVnaW4gOiBnYmxvY2tfd2F0Y2hfdHJpZwotYXNzaWduIGNzcl9tY29udHJvbF9sZHN0X2hpdFt0cmlnXSA9IH50ZHVfZHNibF9pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgY3NyX21jb250cm9sX21fZmZbdHJpZ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBsc3UydGR1X2Rtb25faS52ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmICggKGNzcl9tY29udHJvbF9sb2FkX2ZmIFt0cmlnXSAmIGxzdTJ0ZHVfZG1vbl9pLmxvYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoY3NyX21jb250cm9sX3N0b3JlX2ZmW3RyaWddICYgbHN1MnRkdV9kbW9uX2kuc3RvcmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGxzdTJ0ZHVfZG1vbl9pLmFkZHIgPT0gY3NyX3RkYXRhMl9mZlt0cmlnXTsKLWVuZAotZW5kZ2VuZXJhdGUKLQotYXNzaWduIHRkdTJsc3VfZGJya3B0X21hdGNoX28gICA9IGNzcl9tY29udHJvbF9sZHN0X2hpdDsKLWFzc2lnbiB0ZHUybHN1X2RicmtwdF9leGNfcmVxX28gPSB8Y3NyX21jb250cm9sX2xkc3RfaGl0OwotCi1gaWZuZGVmIFNDUjFfVERVX0VOCi1hc3NpZ24gdGR1MmxzdV9icmtfZW5fbyA9IHxjc3JfbWNvbnRyb2xfbV9mZiB8IGNzcl9pY291bnRfbV9mZjsKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVERVIDwtPiBIRFUgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50ZWdlciBqOwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9vID0gMSdiMDsKLQotICAgIGZvcihqID0gMDsgaiA8IE1UUklHX05VTTsgaj1qKzEpIGJlZ2luCi0gICAgICAgIHRkdTJoZHVfZG1vZGVfcmVxX28gfD0gKGNzcl9tY29udHJvbF9hY3Rpb25fZmZbal0gJiBleHUydGR1X2JwX3JldGlyZV9pW2pdKTsKLSAgICBlbmQKLWBpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9vIHw9IChjc3JfaWNvdW50X2FjdGlvbl9mZiAmIGV4dTJ0ZHVfYnBfcmV0aXJlX2lbQUxMVFJJR19OVU0tMV0pOwotYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgotZW5kCi0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU1ZBX1REVV9YX0NPTlRST0wgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oe2Nsa19lbiwgdGR1X2RzYmxfaSwgY3NyMnRkdV9yZXFfaSwKLSAgICAgICAgICAgICAgICAgZXh1MnRkdV9pbW9uX2kudmQsIGxzdTJ0ZHVfZG1vbl9pLnZkLCBleHUydGR1X2JwX3JldGlyZV9pfSkKLSAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGNvbnRyb2wgc2lnbmFscyBpcyBYIC0gJTBiIiwge2Nsa19lbiwKLSAgICB0ZHVfZHNibF9pLCBjc3IydGR1X3JlcV9pLCBleHUydGR1X2ltb25faS52ZCwgbHN1MnRkdV9kbW9uX2kudmQsIGV4dTJ0ZHVfYnBfcmV0aXJlX2l9KTsKLQotU1ZBX0RNX1hfQ0xLX0VOIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGNsa19lbikKLSAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGNsa19lbiBjb250cm9sIHNpZ25hbHMgaXMgWCIpOwotCi1TVkFfRE1fWF9EU0JMIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKHRkdV9kc2JsX2kpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiB0ZHVfZHNibF9pIGNvbnRyb2wgc2lnbmFscyBpcyBYIik7Ci0KLVNWQV9ETV9YX0NTUjJURFVfUkVRIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGNzcjJ0ZHVfcmVxX2kpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3IydGR1X3JlcV9pIGNvbnRyb2wgc2lnbmFscyBpcyBYIik7Ci0KLVNWQV9ETV9YX0lfTU9OX1ZEIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGV4dTJ0ZHVfaW1vbl9pLnZkKQotICAgICkgZWxzZSAkZXJyb3IoIlREVSBFcnJvcjogZXh1MnRkdV9pbW9uX2kudmQgY29udHJvbCBzaWduYWxzIGlzIFgiKTsKLQotU1ZBX0RNX1hfRF9NT05fVkQgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24obHN1MnRkdV9kbW9uX2kudmQpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBsc3UydGR1X2Rtb25faS52ZCBjb250cm9sIHNpZ25hbHMgaXMgWCIpOwotCi1TVkFfRE1fWF9CUF9SRVRJUkUgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oZXh1MnRkdV9icF9yZXRpcmVfaSkKLSAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGV4dTJ0ZHVfYnBfcmV0aXJlX2kgY29udHJvbCBzaWduYWxzIGlzIFgiKTsKLQotU1ZBX1REVV9YX0NTUiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBjc3IydGR1X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7Y3NyMnRkdV9jbWRfaSxjc3IydGR1X2FkZHJfaX0pCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3IgaXMgWCIpOwotCi1TVkFfVERVX1hXX0NTUiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAoY3NyMnRkdV9yZXFfaSAmIGNzcl93cl9yZXEpIHwtPiAhJGlzdW5rbm93bihjc3IydGR1X3dkYXRhX2kpCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3Igd2RhdGEgaXMgWCAiKTsKLQotU1ZBX1REVV9YX0lNT04gOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgZXh1MnRkdV9pbW9uX2kudmQgfC0+ICEkaXN1bmtub3duKHtleHUydGR1X2ltb25faS5yZXEsZXh1MnRkdV9pbW9uX2kuYWRkcn0pCi0gICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBpbW9uaXRvciBpcyBYIik7Ci0KLVNWQV9URFVfWF9ETU9OIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGxzdTJ0ZHVfZG1vbl9pLnZkIHwtPiAhJGlzdW5rbm93bih7bHN1MnRkdV9kbW9uX2l9KQotICAgICkgZWxzZSAkZXJyb3IoIlREVSBFcnJvcjogZG1vbml0b3IgaXMgWCIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9waXBlX3RkdQotCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90b3Auc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWVhMGQxLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90b3Auc3YKKysrIC9kZXYvbnVsbApAQCAtMSw4MDkgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9waXBlX3RvcC5zdj4KLS8vLyBAYnJpZWYgICAgICBTQ1IxIHBpcGVsaW5lIHRvcAotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKLWBpbmNsdWRlICJzY3IxX2Nzci5zdmgiCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWBpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX2hkdS5zdmgiCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVERVX0VOCi1gaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLW1vZHVsZSBzY3IxX3BpcGVfdG9wICgKLSAgICAvLyBDb21tb24KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9yc3RfbiwgICAgICAgICAgICAgICAgIC8vIFBpcGUgcmVzZXQKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmhkdV9yZGNfcWxmeV9pLCAgICAgICAgLy8gUGlwZSBSREMgcXVhbGlmaWVyCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19yc3RfbiwgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyByZXNldAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBQaXBlIGNsb2NrCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBNZW1vcnkgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaW1lbV9yZXFfbywgICAgICAgICAgICAvLyBJTUVNIHJlcXVlc3QKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJpbWVtX2NtZF9vLCAgICAgICAgICAgIC8vIElNRU0gY29tbWFuZAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICBwaXBlMmltZW1fYWRkcl9vLCAgICAgICAgICAgLy8gSU1FTSBhZGRyZXNzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW0ycGlwZV9yZXFfYWNrX2ksICAgICAgICAvLyBJTUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgaW1lbTJwaXBlX3JkYXRhX2ksICAgICAgICAgIC8vIElNRU0gcmVhZCBkYXRhCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIGltZW0ycGlwZV9yZXNwX2ksICAgICAgICAgICAvLyBJTUVNIHJlc3BvbnNlCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbWVtX3JlcV9vLCAgICAgICAgICAgIC8vIERNRU0gcmVxdWVzdAotICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtZW1fY21kX28sICAgICAgICAgICAgLy8gRE1FTSBjb21tYW5kCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1lbV93aWR0aF9vLCAgICAgICAgICAvLyBETUVNIGRhdGEgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgcGlwZTJkbWVtX2FkZHJfbywgICAgICAgICAgIC8vIERNRU0gYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICBwaXBlMmRtZW1fd2RhdGFfbywgICAgICAgICAgLy8gRE1FTSB3cml0ZSBkYXRhCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0ycGlwZV9yZXFfYWNrX2ksICAgICAgICAvLyBETUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgZG1lbTJwaXBlX3JkYXRhX2ksICAgICAgICAgIC8vIERNRU0gcmVhZCBkYXRhCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0ycGlwZV9yZXNwX2ksICAgICAgICAgICAvLyBETUVNIHJlc3BvbnNlCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIGludGVyZmFjZToKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX2VuLCAgICAgICAgICAgICAgICAgICAgIC8vIDEgLSBkZWJ1ZyBvcGVyYXRpb25zIGVuYWJsZWQKLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IEhBUlQgUnVuIENvbnRyb2wgaS9mCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfYWN0aXZlX2ksICAgICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgYWN0aXZlIGZsYWcKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfcmVxX2ksICAgICAgICAgIC8vIFJlcXVlc3QgZnJvbSBEZWJ1ZyBNb2R1bGUKLSAgICBpbnB1dCAgdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfaSwgICAgICAgICAgICAgIC8vIENvbW1hbmQgZnJvbSBEZWJ1ZyBNb2R1bGUKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9jbWRfcmVzcF9vLCAgICAgICAgIC8vIFJlc3BvbnNlIHRvIERlYnVnIE1vZHVsZQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2NtZF9yY29kZV9vLCAgICAgICAgLy8gRGVidWcgTW9kdWxlIHJldHVybiBjb2RlOiAwIC0gT2s7IDEgLSBFcnJvcgotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2hhcnRfZXZlbnRfbywgICAgICAgLy8gSEFSVCBldmVudCBmbGFnCi0gICAgb3V0cHV0IHR5cGVfc2NyMV9oZHVfaGFydHN0YXR1c19zICAgICAgICAgICAgICAgICAgIHBpcGUyZG1faGFydF9zdGF0dXNfbywgICAgICAvLyBIQVJUIHN0YXR1cwotCi0gICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBQcm9ncmFtIEJ1ZmZlciAtIEhBUlQgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGkvZgotICAgIG91dHB1dCBsb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICBwaXBlMmRtX3BidWZfYWRkcl9vLCAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgYWRkcmVzcwotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSC0xOjBdICAgICAgICBkbTJwaXBlX3BidWZfaW5zdHJfaSwgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgaW5zdHJ1Y3Rpb24KLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ19yZXFfbywgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlcXVlc3QKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3dyX28sICAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUKLSAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3dkYXRhX28sICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUgZGF0YQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmVzcF9pLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZXNwb25zZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfZmFpbF9pLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciBmYWlsIC0gcG9zc2libHkgbm90IG5lZWRlZD8KLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9kcmVnX3JkYXRhX2ksICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVhZCBkYXRhCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmc6IFBDIGkvZgotICAgIG91dHB1dCBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX3BjX3NhbXBsZV9vLCAgICAgICAgLy8gQ3VycmVudCBQQyBmb3Igc2FtcGxpbmcKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9JUlFfTElORVNfTlVNLTE6MF0gICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9saW5lc19pLCAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcwotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9leHRfaSwgICAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MycGlwZV9pcnFfc29mdF9pLCAgICAgICAgLy8gU29mdHdhcmUgZ2VuZXJhdGVkIGludGVycnVwdCByZXF1ZXN0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9tdGltZXJfaSwgICAgICAvLyBNYWNoaW5lIHRpbWVyIGludGVycnVwdCByZXF1ZXN0Ci0KLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgaW5wdXQgICBsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX210aW1lcl92YWxfaSwgICAgICAvLyBNYWNoaW5lIHRpbWVyIHZhbHVlCi0KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAvLyBDTEtfQ1RSTCBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJjbGtjdGxfc2xlZXBfcmVxX28sICAgIC8vIENMSyBkaXNhYmxlIHJlcXVlc3QgdG8gQ0xLIGdhdGluZyBjaXJjdWl0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyY2xrY3RsX3dha2VfcmVxX28sICAgICAvLyBDTEsgZW5hYmxlIHJlcXVlc3QgdG8gQ0xLIGdhdGluZyBjaXJjdWl0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19hbHdfb25faSwgICAvLyBOb3QgZ2F0ZWQgQ0xLCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19kYmdjX2ksICAgICAvLyBDTEsgZm9yIEhEVSAobm90IGdhdGVkIGZvciBub3cpCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19lbl9pLCAgICAgICAvLyBDTEsgZW5hYmxlZCBmbGFnCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLSAgICAvLyBGdXNlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICAgICAvLyBGdXNlIE1IQVJUSUQgdmFsdWUKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFBpcGVsaW5lIGNvbnRyb2wKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3Vycl9wYzsgICAgICAgICAgICAgICAgLy8gQ3VycmVudCBQQwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBuZXh0X3BjOyAgICAgICAgICAgICAgICAvLyBJcyB3cml0dGVuIHRvIE1FUEMgb24gaW50ZXJydXB0IHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3JlcTsgICAgICAgICAgICAgLy8gTmV3IFBDIHJlcXVlc3QgKGp1bXBzLCBicmFuY2hlcywgdHJhcHMgZXRjKQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBuZXdfcGM7ICAgICAgICAgICAgICAgICAvLyBOZXcgUEMKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX2ZldGNoOyAgICAgICAgICAgICAvLyBTdG9wIElGVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcTsgICAgICAgICAgICAvLyBFeGNlcHRpb24gcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmtwdDsgICAgICAgICAgICAgICAgICAvLyBCcmVha3BvaW50IChzdykgb24gY3VycmVudCBpbnN0cnVjdGlvbgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfaW5pdF9wYzsgICAgICAgICAgICAvLyBSZXNldCBleGl0Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9ydW4yaGFsdDsgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gV0ZJIGhhbHRlZCBzdGF0ZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cmV0OyAgICAgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiByZXRpcmVtZW50ICh3aXRoIG9yIHdpdGhvdXQgZXhjZXB0aW9uKQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cmV0X25leGM7ICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiByZXRpcmVtZW50ICh3aXRob3V0IGV4Y2VwdGlvbikKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpYzJjc3JfaXJxOyAgICAgICAgICAgLy8gSVJRIHJlcXVlc3QgZnJvbSBJUElDCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi1gaWZkZWYgU0NSMV9URFVfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJrcHRfaHc7ICAgICAgICAgICAgICAgLy8gSGFyZHdhcmUgYnJlYWtwb2ludCBvbiBjdXJyZW50IGluc3RydWN0aW9uCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV90eG5zX3BlbmRpbmc7ICAgICAgLy8gVGhlcmUgYXJlIHBlbmRpbmcgaW1lbSB0cmFuc2FjdGlvbnMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRlZDsgICAgICAgICAgICAgLy8gV0ZJIGhhbHRlZCBzdGF0ZQotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0vLyBJRlUgPC0+IElEVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkOyAgICAgICAgICAgICAvLyBJRlUgcmVxdWVzdAotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICBpZnUyaWR1X2luc3RyOyAgICAgICAgICAvLyBJRlUgaW5zdHJ1Y3Rpb24KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2VycjsgICAgICAgLy8gSUZVIGluc3RydWN0aW9uIGFjY2VzcyBmYXVsdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X2Vycl9ydmlfaGk7ICAgICAvLyAxIC0gaW1lbSBmYXVsdCB3aGVuIHRyeWluZyB0byBmZXRjaCBzZWNvbmQgaGFsZiBvZiBhbiB1bmFsaWduZWQgUlZJIGluc3RydWN0aW9uCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5OyAgICAgICAgICAgIC8vIElEVSByZWFkeSBmb3IgbmV3IGRhdGEKLQotLy8gSURVIDwtPiBFWFUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9yZXE7ICAgICAgICAgICAgLy8gSURVIHJlcXVlc3QKLXR5cGVfc2NyMV9leHVfY21kX3MgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWQ7ICAgICAgICAgICAgLy8gSURVIGNvbW1hbmQgKHNlZSBzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgpCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMTsgICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMxCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMjsgICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkOyAgICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcmQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tOyAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyBpbW1lZGlhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlkdV9yZHk7ICAgICAgICAgICAgLy8gRVhVIHJlYWR5IGZvciBuZXcgZGF0YQotCi0vLyBFWFUgPC0+IE1QUkYKLWxvZ2ljIFtgU0NSMV9NUFJGX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgZXh1Mm1wcmZfcnMxX2FkZHI7ICAgICAgLy8gTVBSRiByczEgcmVhZCBhZGRyZXNzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIG1wcmYyZXh1X3JzMV9kYXRhOyAgICAgIC8vIE1QUkYgcnMxIHJlYWQgZGF0YQotbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgICAgICAgICBleHUybXByZl9yczJfYWRkcjsgICAgICAvLyBNUFJGIHJzMiByZWFkIGFkZHJlc3MKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgbXByZjJleHVfcnMyX2RhdGE7ICAgICAgLy8gTVBSRiByczIgcmVhZCBkYXRhCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJtcHJmX3dfcmVxOyAgICAgICAgIC8vIE1QUkYgd3JpdGUgcmVxdWVzdAotbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgICAgICAgICBleHUybXByZl9yZF9hZGRyOyAgICAgICAvLyBNUFJGIHJkIHdyaXRlIGFkZHJlc3MKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfcmRfZGF0YTsgICAgICAgLy8gTVBSRiByZCB3cml0ZSBkYXRhCi0KLS8vIEVYVSA8LT4gQ1NSCi1sb2dpYyBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgIGV4dTJjc3JfcndfYWRkcjsgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFkZHJlc3MKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9yX3JlcTsgICAgICAgICAgLy8gQ1NSIHJlYWQgcmVxdWVzdAotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X3JfZGF0YTsgICAgICAgICAvLyBDU1IgcmVhZCBkYXRhCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXE7ICAgICAgICAgIC8vIENTUiB3cml0ZSByZXF1ZXN0Ci10eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19jbWQ7ICAgICAgICAgIC8vIENTUiB3cml0ZSBjb21tYW5kCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19kYXRhOyAgICAgICAgIC8vIENTUiB3cml0ZSBkYXRhCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcndfZXhjOyAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFjY2VzcyBleGNlcHRpb24KLQotLy8gRVhVIDwtPiBDU1IgZXZlbnQgaW50ZXJmYWNlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdGFrZV9pcnE7ICAgICAgIC8vIFRha2UgSVJRIHRyYXAKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2V4YzsgICAgICAgLy8gVGFrZSBleGNlcHRpb24gdHJhcAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX21yZXRfdXBkYXRlOyAgICAvLyBNUkVUIHVwZGF0ZSBDU1IKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9tcmV0X2luc3RyOyAgICAgLy8gTVJFVCBpbnN0cnVjdGlvbgotdHlwZV9zY3IxX2V4Y19jb2RlX2UgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX2V4Y19jb2RlOyAgICAgICAvLyBFeGNlcHRpb24gY29kZSAoc2VlIHNjcjFfYXJjaF90eXBlcy5zdmgpCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdHJhcF92YWw7ICAgICAgIC8vIFRyYXAgdmFsdWUKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9uZXdfcGM7ICAgICAgICAgLy8gRXhjZXB0aW9uL0lSUS9NUkVUIG5ldyBQQwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lycTsgICAgICAgICAgICAvLyBJUlEgcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lwX2llOyAgICAgICAgICAvLyBTb21lIElSUSBwZW5kaW5nIGFuZCBsb2NhbGx5IGVuYWJsZWQKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9tc3RhdHVzX21pZV91cDsgLy8gTVNUQVRVUyBvciBNSUUgdXBkYXRlIGluIHRoZSBjdXJyZW50IGN5Y2xlCi0KLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLS8vIENTUiA8LT4gSVBJQwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY19yX3JlcTsgICAgICAgICAvLyBJUElDIHJlYWQgcmVxdWVzdAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY193X3JlcTsgICAgICAgICAvLyBJUElDIHdyaXRlIHJlcXVlc3QKLWxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfYWRkcjsgICAgICAgICAgLy8gSVBJQyBhZGRyZXNzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dkYXRhOyAgICAgICAgIC8vIElQSUMgd3JpdGUgZGF0YQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YTsgICAgICAgICAvLyBJUElDIHJlYWQgZGF0YQotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLS8vIENTUiA8LT4gVERVCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfcmVxOyAgICAgICAgICAgLy8gUmVxdWVzdCB0byBURFUKLXR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9jbWQ7ICAgICAgICAgICAvLyBURFUgY29tbWFuZAotbG9naWMgW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdICAgICAgICBjc3IydGR1X2FkZHI7ICAgICAgICAgIC8vIFREVSBhZGRyZXNzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfd2RhdGE7ICAgICAgICAgLy8gVERVIHdyaXRlIGRhdGEKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YTsgICAgICAgICAvLyBURFUgcmVhZCBkYXRhCi10eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmVzcDsgICAgICAgICAgLy8gVERVIHJlc3BvbnNlCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWxpZmllZCBURFUgaW5wdXQgc2lnbmFscyBmcm9tIHBpcGVfcnN0X24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgZG9tYWluOgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X3JlcV9xbGZ5OyAgICAgIC8vICAgICBSZXF1ZXN0IHRvIFREVQotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0vLyBFWFUvTFNVIDwtPiBURFUKLXR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zICAgICAgICAgICAgICAgICAgZXh1MnRkdV9pX21vbjsgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtb25pdG9yCi10eXBlX3NjcjFfYnJrbV9sc3VfbW9uX3MgICAgICAgICAgICAgICAgICAgIGxzdTJ0ZHVfZF9tb247ICAgICAgICAgLy8gRGF0YSBtb25pdG9yCi1sb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgICAgICAgIHRkdTJleHVfaV9tYXRjaDsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludChzKSBtYXRjaAotbG9naWMgW1NDUjFfVERVX01UUklHX05VTS0xOjBdICAgICAgICAgICAgICB0ZHUybHN1X2RfbWF0Y2g7ICAgICAgIC8vIERhdGEgYnJlYWtwb2ludChzKSBtYXRjaAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyZXh1X2lfeF9yZXE7ICAgICAgIC8vIEluc3RydWN0aW9uIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaV94X3JlcTsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCBleGNlcHRpb24KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9kX3hfcmVxOyAgICAgICAvLyBEYXRhIGJyZWFrcG9pbnQgZXhjZXB0aW9uCi1sb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgICAgICAgIGV4dTJ0ZHVfYnBfcmV0aXJlOyAgICAgLy8gSW5zdHJ1Y3Rpb24gd2l0aCBicmVha3BvaW50IGZsYWcgcmV0aXJlCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWxpZmllZCBURFUgaW5wdXQgc2lnbmFscyBmcm9tIHBpcGVfcnN0X24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgZG9tYWluOgotdHlwZV9zY3IxX2Jya21faW5zdHJfbW9uX3MgICAgICAgICAgICAgICAgICBleHUydGR1X2lfbW9uX3FsZnk7ICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbW9uaXRvcgotdHlwZV9zY3IxX2Jya21fbHN1X21vbl9zICAgICAgICAgICAgICAgICAgICBsc3UydGR1X2RfbW9uX3FsZnk7ICAgICAgICAgLy8gRGF0YSBtb25pdG9yCi1sb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgICAgICAgIGV4dTJ0ZHVfYnBfcmV0aXJlX3FsZnk7ICAgICAvLyBJbnN0cnVjdGlvbiB3aXRoIGJyZWFrcG9pbnQgZmxhZyByZXRpcmUKLSBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIERlYnVnIHNpZ25hbHM6Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX3BidWY7ICAgICAgICAgICAgIC8vIEZldGNoIGluc3RydWN0aW9ucyBwcm92aWRlZCBieSBQcm9ncmFtIEJ1ZmZlciAodmlhIEhEVSkKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9yZXE7ICAgICAgICAgICAgLy8gUmVxdWVzdCB0byBIRFUKLXR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9jbWQ7ICAgICAgICAgICAgLy8gSERVIGNvbW1hbmQKLWxvZ2ljIFtTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRILTE6MF0gICAgY3NyMmhkdV9hZGRyOyAgICAgICAgICAgLy8gSERVIGFkZHJlc3MKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV93ZGF0YTsgICAgICAgICAgLy8gSERVIHdyaXRlIGRhdGEKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgaGR1MmNzcl9yZGF0YTsgICAgICAgICAgLy8gSERVIHJlYWQgZGF0YQotdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3Jlc3A7ICAgICAgICAgICAvLyBIRFUgcmVzcG9uc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhbGlmaWVkIEhEVSBpbnB1dCBzaWduYWxzIGZyb20gcGlwZV9yc3RfbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBkb21haW46Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfcmVxX3FsZnk7ICAgICAgIC8vICAgICBSZXF1ZXN0IHRvIEhEVQotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YnJrX2RzYmw7ICAgICAgICAgICAgIC8vIERpc2FibGVzIFREVQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHVfaHdicmtfZHNibDsgICAgICAgICAvLyBEaXNhYmxlcyBURFUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmhkdV9kbW9kZV9yZXE7ICAgICAgLy8gVERVIHJlcXVlc3RzIHRyYW5zaXRpb24gdG8gZGVidWcgbW9kZQotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9ub19jb21taXQ7ICAgICAgICAgIC8vIEZvcmJpZCBpbnN0cnVjdGlvbiBjb21taXRtZW50Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9pcnFfZHNibDsgICAgICAgICAgIC8vIERpc2FibGUgSVJRCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9wY19hZHZtdF9kc2JsOyAgICAgIC8vIEZvcmJpZCBQQyBhZHZhbmNlbWVudAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZG1vZGVfc3N0ZXBfZW47ICAgICAvLyBFbmFibGUgc2luZ2xlLXN0ZXAKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfaGFsdGVkOyAgICAgICAgICAgICAvLyBEZWJ1ZyBoYWx0ZWQgc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3J1bjJoYWx0OyAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBkZWJ1ZyBoYWx0ZWQgc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX2hhbHQycnVuOyAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBydW4gc3RhdGUKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3J1bl9zdGFydDsgICAgICAgICAgLy8gRmlyc3QgY3ljbGUgb2YgcnVuIHN0YXRlCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGRiZ19uZXdfcGM7ICAgICAgICAgICAgIC8vIE5ldyBQQyBhcyBzdGFydGluZyBwb2ludCBmb3IgSEFSVCBSZXN1bWUKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaGR1X3BidWZfcmR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfdmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJpZnVfcGJ1Zl9lcnI7Ci1sb2dpYyBbU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSC0xOjBdICAgICAgIGhkdTJpZnVfcGJ1Zl9pbnN0cjsKLQotLy8gUXVhbGlmaWVkIEhEVSBpbnB1dCBzaWduYWxzIGZyb20gcGlwZV9yc3RfbiByZXNldCBkb21haW46Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJoZHVfcGJ1Zl9yZHlfcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X2J1c3lfcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJldF9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfaW5pdF9wY19xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfZXhjX3JlcV9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmtwdF9xbGZ5OwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfYnVzeTsKLQotCi1gaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmNsa2N0bF93YWtlX3JlcV9vOwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBpcGVsaW5lIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBzdG9wX2ZldGNoICAgPSB3ZmlfcnVuMmhhbHQKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICB8IGZldGNoX3BidWYKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotICAgICAgICAgICAgICAgICAgICA7Ci0KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLWFzc2lnbiBwaXBlMmNsa2N0bF9zbGVlcF9yZXFfbyA9IHdmaV9oYWx0ZWQgJiB+aW1lbV90eG5zX3BlbmRpbmc7Ci1hc3NpZ24gcGlwZTJjbGtjdGxfd2FrZV9yZXFfbyAgPSBjc3IyZXh1X2lwX2llCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgfCBkbTJwaXBlX2FjdGl2ZV9pCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAgICAgICAgICAgICAgICAgOwotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWFzc2lnbiBwaXBlMmRtX3BjX3NhbXBsZV9vID0gY3Vycl9wYzsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIGZldGNoIHVuaXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9waXBlX2lmdSBpX3BpcGVfaWZ1ICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgKSwKLQotICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UKLSAgICAuaW1lbTJpZnVfcmVxX2Fja19pICAgICAgIChpbWVtMnBpcGVfcmVxX2Fja19pKSwKLSAgICAuaWZ1MmltZW1fcmVxX28gICAgICAgICAgIChwaXBlMmltZW1fcmVxX28gICAgKSwKLSAgICAuaWZ1MmltZW1fY21kX28gICAgICAgICAgIChwaXBlMmltZW1fY21kX28gICAgKSwKLSAgICAuaWZ1MmltZW1fYWRkcl9vICAgICAgICAgIChwaXBlMmltZW1fYWRkcl9vICAgKSwKLSAgICAuaW1lbTJpZnVfcmRhdGFfaSAgICAgICAgIChpbWVtMnBpcGVfcmRhdGFfaSAgKSwKLSAgICAuaW1lbTJpZnVfcmVzcF9pICAgICAgICAgIChpbWVtMnBpcGVfcmVzcF9pICAgKSwKLQotICAgIC8vIE5ldyBQQyBpbnRlcmZhY2UKLSAgICAuZXh1MmlmdV9wY19uZXdfcmVxX2kgICAgIChuZXdfcGNfcmVxICAgICAgICAgKSwKLSAgICAuZXh1MmlmdV9wY19uZXdfaSAgICAgICAgIChuZXdfcGMgICAgICAgICAgICAgKSwKLSAgICAucGlwZTJpZnVfc3RvcF9mZXRjaF9pICAgIChzdG9wX2ZldGNoICAgICAgICAgKSwKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gSUZVIDwtPiBIRFUgUHJvZ3JhbSBCdWZmZXIgaW50ZXJmYWNlCi0gICAgLmhkdTJpZnVfcGJ1Zl9mZXRjaF9pICAgICAoZmV0Y2hfcGJ1ZiAgICAgICAgICksCi0gICAgLmlmdTJoZHVfcGJ1Zl9yZHlfbyAgICAgICAoaWZ1MmhkdV9wYnVmX3JkeSAgICksCi0gICAgLmhkdTJpZnVfcGJ1Zl92ZF9pICAgICAgICAoaGR1MmlmdV9wYnVmX3ZkICAgICksCi0gICAgLmhkdTJpZnVfcGJ1Zl9lcnJfaSAgICAgICAoaGR1MmlmdV9wYnVmX2VyciAgICksCi0gICAgLmhkdTJpZnVfcGJ1Zl9pbnN0cl9pICAgICAoaGR1MmlmdV9wYnVmX2luc3RyICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuaWZ1MnBpcGVfaW1lbV90eG5zX3BuZF9vIChpbWVtX3R4bnNfcGVuZGluZyAgKSwKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotICAgIC8vIElGVSA8LT4gSURVIGludGVyZmFjZQotICAgIC5pZHUyaWZ1X3JkeV9pICAgICAgICAgICAgKGlkdTJpZnVfcmR5ICAgICAgICApLAotICAgIC5pZnUyaWR1X2luc3RyX28gICAgICAgICAgKGlmdTJpZHVfaW5zdHIgICAgICApLAotICAgIC5pZnUyaWR1X2ltZW1fZXJyX28gICAgICAgKGlmdTJpZHVfaW1lbV9lcnIgICApLAotICAgIC5pZnUyaWR1X2Vycl9ydmlfaGlfbyAgICAgKGlmdTJpZHVfZXJyX3J2aV9oaSApLAotICAgIC5pZnUyaWR1X3ZkX28gICAgICAgICAgICAgKGlmdTJpZHVfdmQgICAgICAgICApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIGRlY29kZSB1bml0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfcGlwZV9pZHUgaV9waXBlX2lkdSAoCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotICAgIC5pZHUyaWZ1X3JkeV9vICAgICAgICAgIChpZHUyaWZ1X3JkeSAgICAgICApLAotICAgIC5pZnUyaWR1X2luc3RyX2kgICAgICAgIChpZnUyaWR1X2luc3RyICAgICApLAotICAgIC5pZnUyaWR1X2ltZW1fZXJyX2kgICAgIChpZnUyaWR1X2ltZW1fZXJyICApLAotICAgIC5pZnUyaWR1X2Vycl9ydmlfaGlfaSAgIChpZnUyaWR1X2Vycl9ydmlfaGkpLAotICAgIC5pZnUyaWR1X3ZkX2kgICAgICAgICAgIChpZnUyaWR1X3ZkICAgICAgICApLAotCi0gICAgLmlkdTJleHVfcmVxX28gICAgICAgICAgKGlkdTJleHVfcmVxICAgICAgICksCi0gICAgLmlkdTJleHVfY21kX28gICAgICAgICAgKGlkdTJleHVfY21kICAgICAgICksCi0gICAgLmlkdTJleHVfdXNlX3JzMV9vICAgICAgKGlkdTJleHVfdXNlX3JzMSAgICksCi0gICAgLmlkdTJleHVfdXNlX3JzMl9vICAgICAgKGlkdTJleHVfdXNlX3JzMiAgICksCi0gICAgLmlkdTJleHVfdXNlX3JkX28gICAgICAgKGlkdTJleHVfdXNlX3JkICAgICksCi0gICAgLmlkdTJleHVfdXNlX2ltbV9vICAgICAgKGlkdTJleHVfdXNlX2ltbSAgICksCi0gICAgLmV4dTJpZHVfcmR5X2kgICAgICAgICAgKGV4dTJpZHVfcmR5ICAgICAgICkKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXhlY3V0aW9uIHVuaXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9waXBlX2V4dSBpX3BpcGVfZXh1ICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICksCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgLmNsa19hbHdfb24gICAgICAgICAgICAgICAgICAgICAoY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9pKSwKLSAgICAuY2xrX3BpcGVfZW4gICAgICAgICAgICAgICAgICAgIChjbGtjdGwycGlwZV9jbGtfZW5faSksCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLSAgICAvLyBJRFUgPC0+IEVYVSBpbnRlcmZhY2UKLSAgICAuaWR1MmV4dV9yZXFfaSAgICAgICAgICAgICAgICAgIChpZHUyZXh1X3JlcSAgICAgICAgICAgICApLAotICAgIC5leHUyaWR1X3JkeV9vICAgICAgICAgICAgICAgICAgKGV4dTJpZHVfcmR5ICAgICAgICAgICAgICksCi0gICAgLmlkdTJleHVfY21kX2kgICAgICAgICAgICAgICAgICAoaWR1MmV4dV9jbWQgICAgICAgICAgICAgKSwKLSAgICAuaWR1MmV4dV91c2VfcnMxX2kgICAgICAgICAgICAgIChpZHUyZXh1X3VzZV9yczEgICAgICAgICApLAotICAgIC5pZHUyZXh1X3VzZV9yczJfaSAgICAgICAgICAgICAgKGlkdTJleHVfdXNlX3JzMiAgICAgICAgICksCi1gaWZuZGVmIFNDUjFfTk9fRVhFX1NUQUdFCi0gICAgLmlkdTJleHVfdXNlX3JkX2kgICAgICAgICAgICAgICAoaWR1MmV4dV91c2VfcmQgICAgICAgICAgKSwKLSAgICAuaWR1MmV4dV91c2VfaW1tX2kgICAgICAgICAgICAgIChpZHUyZXh1X3VzZV9pbW0gICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfTk9fRVhFX1NUQUdFCi0KLSAgICAvLyBFWFUgPC0+IE1QUkYgaW50ZXJmYWNlCi0gICAgLmV4dTJtcHJmX3JzMV9hZGRyX28gICAgICAgICAgICAoZXh1Mm1wcmZfcnMxX2FkZHIgICAgICAgKSwKLSAgICAubXByZjJleHVfcnMxX2RhdGFfaSAgICAgICAgICAgIChtcHJmMmV4dV9yczFfZGF0YSAgICAgICApLAotICAgIC5leHUybXByZl9yczJfYWRkcl9vICAgICAgICAgICAgKGV4dTJtcHJmX3JzMl9hZGRyICAgICAgICksCi0gICAgLm1wcmYyZXh1X3JzMl9kYXRhX2kgICAgICAgICAgICAobXByZjJleHVfcnMyX2RhdGEgICAgICAgKSwKLSAgICAuZXh1Mm1wcmZfd19yZXFfbyAgICAgICAgICAgICAgIChleHUybXByZl93X3JlcSAgICAgICAgICApLAotICAgIC5leHUybXByZl9yZF9hZGRyX28gICAgICAgICAgICAgKGV4dTJtcHJmX3JkX2FkZHIgICAgICAgICksCi0gICAgLmV4dTJtcHJmX3JkX2RhdGFfbyAgICAgICAgICAgICAoZXh1Mm1wcmZfcmRfZGF0YSAgICAgICAgKSwKLQotICAgIC8vIEVYVSA8LT4gQ1NSIHJlYWQvd3JpdGUgaW50ZXJmYWNlCi0gICAgLmV4dTJjc3JfcndfYWRkcl9vICAgICAgICAgICAgICAoZXh1MmNzcl9yd19hZGRyICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl9yX3JlcV9vICAgICAgICAgICAgICAgIChleHUyY3NyX3JfcmVxICAgICAgICAgICApLAotICAgIC5jc3IyZXh1X3JfZGF0YV9pICAgICAgICAgICAgICAgKGNzcjJleHVfcl9kYXRhICAgICAgICAgICksCi0gICAgLmV4dTJjc3Jfd19yZXFfbyAgICAgICAgICAgICAgICAoZXh1MmNzcl93X3JlcSAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl93X2NtZF9vICAgICAgICAgICAgICAgIChleHUyY3NyX3dfY21kICAgICAgICAgICApLAotICAgIC5leHUyY3NyX3dfZGF0YV9vICAgICAgICAgICAgICAgKGV4dTJjc3Jfd19kYXRhICAgICAgICAgICksCi0gICAgLmNzcjJleHVfcndfZXhjX2kgICAgICAgICAgICAgICAoY3NyMmV4dV9yd19leGMgICAgICAgICAgKSwKLQotICAgIC8vIEVYVSA8LT4gQ1NSIGV2ZW50IGludGVyZmFjZQotICAgIC5leHUyY3NyX3Rha2VfaXJxX28gICAgICAgICAgICAgKGV4dTJjc3JfdGFrZV9pcnEgICAgICAgICksCi0gICAgLmV4dTJjc3JfdGFrZV9leGNfbyAgICAgICAgICAgICAoZXh1MmNzcl90YWtlX2V4YyAgICAgICAgKSwKLSAgICAuZXh1MmNzcl9tcmV0X3VwZGF0ZV9vICAgICAgICAgIChleHUyY3NyX21yZXRfdXBkYXRlICAgICApLAotICAgIC5leHUyY3NyX21yZXRfaW5zdHJfbyAgICAgICAgICAgKGV4dTJjc3JfbXJldF9pbnN0ciAgICAgICksCi0gICAgLmV4dTJjc3JfZXhjX2NvZGVfbyAgICAgICAgICAgICAoZXh1MmNzcl9leGNfY29kZSAgICAgICAgKSwKLSAgICAuZXh1MmNzcl90cmFwX3ZhbF9vICAgICAgICAgICAgIChleHUyY3NyX3RyYXBfdmFsICAgICAgICApLAotICAgIC5jc3IyZXh1X25ld19wY19pICAgICAgICAgICAgICAgKGNzcjJleHVfbmV3X3BjICAgICAgICAgICksCi0gICAgLmNzcjJleHVfaXJxX2kgICAgICAgICAgICAgICAgICAoY3NyMmV4dV9pcnEgICAgICAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9pcF9pZV9pICAgICAgICAgICAgICAgIChjc3IyZXh1X2lwX2llICAgICAgICAgICApLAotICAgIC5jc3IyZXh1X21zdGF0dXNfbWllX3VwX2kgICAgICAgKGNzcjJleHVfbXN0YXR1c19taWVfdXAgICksCi0KLSAgICAvLyBFWFUgPC0+IERNRU0gaW50ZXJmYWNlCi0gICAgLmV4dTJkbWVtX3JlcV9vICAgICAgICAgICAgICAgICAocGlwZTJkbWVtX3JlcV9vICAgICAgICAgKSwKLSAgICAuZXh1MmRtZW1fY21kX28gICAgICAgICAgICAgICAgIChwaXBlMmRtZW1fY21kX28gICAgICAgICApLAotICAgIC5leHUyZG1lbV93aWR0aF9vICAgICAgICAgICAgICAgKHBpcGUyZG1lbV93aWR0aF9vICAgICAgICksCi0gICAgLmV4dTJkbWVtX2FkZHJfbyAgICAgICAgICAgICAgICAocGlwZTJkbWVtX2FkZHJfbyAgICAgICAgKSwKLSAgICAuZXh1MmRtZW1fd2RhdGFfbyAgICAgICAgICAgICAgIChwaXBlMmRtZW1fd2RhdGFfbyAgICAgICApLAotICAgIC5kbWVtMmV4dV9yZXFfYWNrX2kgICAgICAgICAgICAgKGRtZW0ycGlwZV9yZXFfYWNrX2kgICAgICksCi0gICAgLmRtZW0yZXh1X3JkYXRhX2kgICAgICAgICAgICAgICAoZG1lbTJwaXBlX3JkYXRhX2kgICAgICAgKSwKLSAgICAuZG1lbTJleHVfcmVzcF9pICAgICAgICAgICAgICAgIChkbWVtMnBpcGVfcmVzcF9pICAgICAgICApLAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBFWFUgPC0+IEhEVSBpbnRlcmZhY2UKLSAgICAuaGR1MmV4dV9ub19jb21taXRfaSAgICAgICAgICAgIChleHVfbm9fY29tbWl0ICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2lycV9kc2JsX2kgICAgICAgICAgICAgKGV4dV9pcnFfZHNibCAgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfcGNfYWR2bXRfZHNibF9pICAgICAgICAoZXh1X3BjX2Fkdm10X2RzYmwgICAgICAgKSwKLSAgICAuaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9pICAgICAgIChleHVfZG1vZGVfc3N0ZXBfZW4gICAgICApLAotICAgIC5oZHUyZXh1X3BidWZfZmV0Y2hfaSAgICAgICAgICAgKGZldGNoX3BidWYgICAgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX2hhbHRlZF9pICAgICAgICAgICAoZGJnX2hhbHRlZCAgICAgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9kYmdfcnVuMmhhbHRfaSAgICAgICAgIChkYmdfcnVuMmhhbHQgICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2RiZ19oYWx0MnJ1bl9pICAgICAgICAgKGRiZ19oYWx0MnJ1biAgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX3J1bl9zdGFydF9pICAgICAgICAoZGJnX3J1bl9zdGFydCAgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9kYmdfbmV3X3BjX2kgICAgICAgICAgIChkYmdfbmV3X3BjICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotICAgIC8vIEVYVSA8LT4gVERVIGludGVyZmFjZQotICAgIC5leHUydGR1X2ltb25fbyAgICAgICAgICAgICAgICAgKGV4dTJ0ZHVfaV9tb24gICAgICAgICAgICksCi0gICAgLnRkdTJleHVfaWJya3B0X21hdGNoX2kgICAgICAgICAodGR1MmV4dV9pX21hdGNoICAgICAgICAgKSwKLSAgICAudGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9pICAgICAgICh0ZHUyZXh1X2lfeF9yZXEgICAgICAgICApLAotICAgIC5sc3UydGR1X2Rtb25fbyAgICAgICAgICAgICAgICAgKGxzdTJ0ZHVfZF9tb24gICAgICAgICAgICksCi0gICAgLnRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSAgICAgICAodGR1MmxzdV9pX3hfcmVxICAgICAgICAgKSwKLSAgICAudGR1MmxzdV9kYnJrcHRfbWF0Y2hfaSAgICAgICAgICh0ZHUybHN1X2RfbWF0Y2ggICAgICAgICApLAotICAgIC50ZHUybHN1X2RicmtwdF9leGNfcmVxX2kgICAgICAgKHRkdTJsc3VfZF94X3JlcSAgICAgICAgICksCi0gICAgLmV4dTJ0ZHVfaWJya3B0X3JldF9vICAgICAgICAgICAoZXh1MnRkdV9icF9yZXRpcmUgICAgICAgKSwKLSAgICAuZXh1MmhkdV9pYnJrcHRfaHdfbyAgICAgICAgICAgIChicmtwdF9odyAgICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfVERVX0VOCi0KLSAgICAvLyBFWFUgY29udHJvbAotICAgIC5leHUycGlwZV9leGNfcmVxX28gICAgICAgICAgICAgKGV4dV9leGNfcmVxICAgICAgICAgICAgICksCi0gICAgLmV4dTJwaXBlX2Jya3B0X28gICAgICAgICAgICAgICAoYnJrcHQgICAgICAgICAgICAgICAgICAgKSwKLSAgICAuZXh1MnBpcGVfaW5pdF9wY19vICAgICAgICAgICAgIChleHVfaW5pdF9wYyAgICAgICAgICAgICApLAotICAgIC5leHUycGlwZV93ZmlfcnVuMmhhbHRfbyAgICAgICAgKHdmaV9ydW4yaGFsdCAgICAgICAgICAgICksCi0gICAgLmV4dTJwaXBlX2luc3RyZXRfbyAgICAgICAgICAgICAoaW5zdHJldCAgICAgICAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19vICAgICAgIChpbnN0cmV0X25leGMgICAgICAgICAgICApLAotICAgIC5leHUycGlwZV9leHVfYnVzeV9vICAgICAgICAgICAgKGV4dV9idXN5ICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBQQyBpbnRlcmZhY2UKLWBpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KLSAgICAuZXh1MnBpcGVfd2ZpX2hhbHRlZF9vICAgICAgICAgICh3ZmlfaGFsdGVkICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5leHUycGlwZV9wY19jdXJyX28gICAgICAgICAgICAgKGN1cnJfcGMgICAgICAgICAgICAgICAgICksCi0gICAgLmV4dTJjc3JfcGNfbmV4dF9vICAgICAgICAgICAgICAobmV4dF9wYyAgICAgICAgICAgICAgICAgKSwKLSAgICAuZXh1MmlmdV9wY19uZXdfcmVxX28gICAgICAgICAgIChuZXdfcGNfcmVxICAgICAgICAgICAgICApLAotICAgIC5leHUyaWZ1X3BjX25ld19vICAgICAgICAgICAgICAgKG5ld19wYyAgICAgICAgICAgICAgICAgICkKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTXVsdGktcG9ydCByZWdpc3RlciBmaWxlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfcGlwZV9tcHJmIGlfcGlwZV9tcHJmICgKLWBpZmRlZiBTQ1IxX01QUkZfUlNUX0VOCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUlNUX0VOCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKLQotICAgIC8vIEVYVSA8LT4gTVBSRiBpbnRlcmZhY2UKLSAgICAuZXh1Mm1wcmZfcnMxX2FkZHJfaSAgICAoZXh1Mm1wcmZfcnMxX2FkZHIpLAotICAgIC5tcHJmMmV4dV9yczFfZGF0YV9vICAgIChtcHJmMmV4dV9yczFfZGF0YSksCi0gICAgLmV4dTJtcHJmX3JzMl9hZGRyX2kgICAgKGV4dTJtcHJmX3JzMl9hZGRyKSwKLSAgICAubXByZjJleHVfcnMyX2RhdGFfbyAgICAobXByZjJleHVfcnMyX2RhdGEpLAotICAgIC5leHUybXByZl93X3JlcV9pICAgICAgIChleHUybXByZl93X3JlcSAgICksCi0gICAgLmV4dTJtcHJmX3JkX2FkZHJfaSAgICAgKGV4dTJtcHJmX3JkX2FkZHIgKSwKLSAgICAuZXh1Mm1wcmZfcmRfZGF0YV9pICAgICAoZXh1Mm1wcmZfcmRfZGF0YSApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9waXBlX2NzciBpX3BpcGVfY3NyICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICApLAotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGtfYWx3X29uICAgICAgICAgICAgICAgICAoY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9pKSwKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotICAgIC8vIEVYVSA8LT4gQ1NSIHJlYWQvd3JpdGUgaW50ZXJmYWNlCi0gICAgLmV4dTJjc3Jfcl9yZXFfaSAgICAgICAgICAgIChleHUyY3NyX3JfcmVxICAgICAgICAgICApLAotICAgIC5leHUyY3NyX3J3X2FkZHJfaSAgICAgICAgICAoZXh1MmNzcl9yd19hZGRyICAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9yX2RhdGFfbyAgICAgICAgICAgKGNzcjJleHVfcl9kYXRhICAgICAgICAgICksCi0gICAgLmV4dTJjc3Jfd19yZXFfaSAgICAgICAgICAgIChleHUyY3NyX3dfcmVxICAgICAgICAgICApLAotICAgIC5leHUyY3NyX3dfY21kX2kgICAgICAgICAgICAoZXh1MmNzcl93X2NtZCAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl93X2RhdGFfaSAgICAgICAgICAgKGV4dTJjc3Jfd19kYXRhICAgICAgICAgICksCi0gICAgLmNzcjJleHVfcndfZXhjX28gICAgICAgICAgIChjc3IyZXh1X3J3X2V4YyAgICAgICAgICApLAotCi0gICAgLy8gRVhVIDwtPiBDU1IgZXZlbnQgaW50ZXJmYWNlCi0gICAgLmV4dTJjc3JfdGFrZV9pcnFfaSAgICAgICAgIChleHUyY3NyX3Rha2VfaXJxICAgICAgICApLAotICAgIC5leHUyY3NyX3Rha2VfZXhjX2kgICAgICAgICAoZXh1MmNzcl90YWtlX2V4YyAgICAgICAgKSwKLSAgICAuZXh1MmNzcl9tcmV0X3VwZGF0ZV9pICAgICAgKGV4dTJjc3JfbXJldF91cGRhdGUgICAgICksCi0gICAgLmV4dTJjc3JfbXJldF9pbnN0cl9pICAgICAgIChleHUyY3NyX21yZXRfaW5zdHIgICAgICApLAotICAgIC5leHUyY3NyX2V4Y19jb2RlX2kgICAgICAgICAoZXh1MmNzcl9leGNfY29kZSAgICAgICAgKSwKLSAgICAuZXh1MmNzcl90cmFwX3ZhbF9pICAgICAgICAgKGV4dTJjc3JfdHJhcF92YWwgICAgICAgICksCi0gICAgLmNzcjJleHVfbmV3X3BjX28gICAgICAgICAgIChjc3IyZXh1X25ld19wYyAgICAgICAgICApLAotICAgIC5jc3IyZXh1X2lycV9vICAgICAgICAgICAgICAoY3NyMmV4dV9pcnEgICAgICAgICAgICAgKSwKLSAgICAuY3NyMmV4dV9pcF9pZV9vICAgICAgICAgICAgKGNzcjJleHVfaXBfaWUgICAgICAgICAgICksCi0gICAgLmNzcjJleHVfbXN0YXR1c19taWVfdXBfbyAgIChjc3IyZXh1X21zdGF0dXNfbWllX3VwICApLAotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgLy8gQ1NSIDwtPiBJUElDIGludGVyZmFjZQotICAgIC5jc3IyaXBpY19yX3JlcV9vICAgICAgICAgICAoY3NyMmlwaWNfcl9yZXEgICAgICAgICAgKSwKLSAgICAuY3NyMmlwaWNfd19yZXFfbyAgICAgICAgICAgKGNzcjJpcGljX3dfcmVxICAgICAgICAgICksCi0gICAgLmNzcjJpcGljX2FkZHJfbyAgICAgICAgICAgIChjc3IyaXBpY19hZGRyICAgICAgICAgICApLAotICAgIC5jc3IyaXBpY193ZGF0YV9vICAgICAgICAgICAoY3NyMmlwaWNfd2RhdGEgICAgICAgICAgKSwKLSAgICAuaXBpYzJjc3JfcmRhdGFfaSAgICAgICAgICAgKGlwaWMyY3NyX3JkYXRhICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0KLSAgICAvLyBDU1IgPC0+IFBDIGludGVyZmFjZQotICAgIC5leHUyY3NyX3BjX2N1cnJfaSAgICAgICAgICAoY3Vycl9wYyAgICAgICAgICAgICAgICAgKSwKLSAgICAuZXh1MmNzcl9wY19uZXh0X2kgICAgICAgICAgKG5leHRfcGMgICAgICAgICAgICAgICAgICksCi1gaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0gICAgLmV4dTJjc3JfaW5zdHJldF9ub19leGNfaSAgIChpbnN0cmV0X25leGMgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAuc29jMmNzcl9pcnFfZXh0X2kgICAgICAgICAgKGlwaWMyY3NyX2lycSAgICAgICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX0lQSUNfRU4KLSAgICAuc29jMmNzcl9pcnFfZXh0X2kgICAgICAgICAgKHNvYzJwaXBlX2lycV9leHRfaSAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0gICAgLnNvYzJjc3JfaXJxX3NvZnRfaSAgICAgICAgIChzb2MycGlwZV9pcnFfc29mdF9pICAgICApLAotICAgIC5zb2MyY3NyX2lycV9tdGltZXJfaSAgICAgICAoc29jMnBpcGVfaXJxX210aW1lcl9pICAgKSwKLQotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICAuc29jMmNzcl9tdGltZXJfdmFsX2kgICAgICAgKHNvYzJwaXBlX210aW1lcl92YWxfaSAgICksCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIENTUiA8LT4gSERVIGludGVyZmFjZQotICAgIC5jc3IyaGR1X3JlcV9vICAgICAgICAgICAgICAoY3NyMmhkdV9yZXEgICAgICAgICAgICAgKSwKLSAgICAuY3NyMmhkdV9jbWRfbyAgICAgICAgICAgICAgKGNzcjJoZHVfY21kICAgICAgICAgICAgICksCi0gICAgLmNzcjJoZHVfYWRkcl9vICAgICAgICAgICAgIChjc3IyaGR1X2FkZHIgICAgICAgICAgICApLAotICAgIC5jc3IyaGR1X3dkYXRhX28gICAgICAgICAgICAoY3NyMmhkdV93ZGF0YSAgICAgICAgICAgKSwKLSAgICAuaGR1MmNzcl9yZGF0YV9pICAgICAgICAgICAgKGhkdTJjc3JfcmRhdGEgICAgICAgICAgICksCi0gICAgLmhkdTJjc3JfcmVzcF9pICAgICAgICAgICAgIChoZHUyY3NyX3Jlc3AgICAgICAgICAgICApLAotICAgIC5oZHUyY3NyX25vX2NvbW1pdF9pICAgICAgICAoZXh1X25vX2NvbW1pdCAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9URFVfRU4KLSAgICAvLyBDU1IgPC0+IFREVSBpbnRlcmZhY2UKLSAgICAuY3NyMnRkdV9yZXFfbyAgICAgICAgICAgICAgKGNzcjJ0ZHVfcmVxICAgICAgICAgICAgICksCi0gICAgLmNzcjJ0ZHVfY21kX28gICAgICAgICAgICAgIChjc3IydGR1X2NtZCAgICAgICAgICAgICApLAotICAgIC5jc3IydGR1X2FkZHJfbyAgICAgICAgICAgICAoY3NyMnRkdV9hZGRyICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRkdV93ZGF0YV9vICAgICAgICAgICAgKGNzcjJ0ZHVfd2RhdGEgICAgICAgICAgICksCi0gICAgLnRkdTJjc3JfcmRhdGFfaSAgICAgICAgICAgICh0ZHUyY3NyX3JkYXRhICAgICAgICAgICApLAotICAgIC50ZHUyY3NyX3Jlc3BfaSAgICAgICAgICAgICAodGR1MmNzcl9yZXNwICAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotICAgIC5zb2MyY3NyX2Z1c2VfbWhhcnRpZF9pICAgICAoc29jMnBpcGVfZnVzZV9taGFydGlkX2kgKQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlZ3JhdGVkIHByb2dyYW1tYWJsZSBpbnRlcnJ1cHQgY29udHJvbGxlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZkZWYgU0NSMV9JUElDX0VOCi1zY3IxX2lwaWMgaV9waXBlX2lwaWMgKAotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICAgICAgICApLAotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgIChjbGtjdGwycGlwZV9jbGtfYWx3X29uX2kpLAotYGVsc2UgLy8gU0NSMV9DTEtDVFJMX0VOCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0gICAgLnNvYzJpcGljX2lycV9saW5lc19pICAgKHNvYzJwaXBlX2lycV9saW5lc19pICAgICksCi0gICAgLmNzcjJpcGljX3JfcmVxX2kgICAgICAgKGNzcjJpcGljX3JfcmVxICAgICAgICAgICksCi0gICAgLmNzcjJpcGljX3dfcmVxX2kgICAgICAgKGNzcjJpcGljX3dfcmVxICAgICAgICAgICksCi0gICAgLmNzcjJpcGljX2FkZHJfaSAgICAgICAgKGNzcjJpcGljX2FkZHIgICAgICAgICAgICksCi0gICAgLmNzcjJpcGljX3dkYXRhX2kgICAgICAgKGNzcjJpcGljX3dkYXRhICAgICAgICAgICksCi0gICAgLmlwaWMyY3NyX3JkYXRhX28gICAgICAgKGlwaWMyY3NyX3JkYXRhICAgICAgICAgICksCi0gICAgLmlwaWMyY3NyX2lycV9tX3JlcV9vICAgKGlwaWMyY3NyX2lycSAgICAgICAgICAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQnJlYWtwb2ludCBtb2R1bGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfVERVX0VOCi1zY3IxX3BpcGVfdGR1IGlfcGlwZV90ZHUgKAotICAgIC8vIENvbW1vbiBzaWduYWxzCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChkYmdfcnN0X24gICAgICAgICAgICAgKSwKLSBgZWxzZQotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAocnN0X24gICAgICAgICAgICAgICAgICksCi0gYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgKSwKLSAgICAuY2xrX2VuICAgICAgICAgICAgICAgICAgICAgKDEnYjEgICAgICAgICAgICAgICAgICApLAotIGBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC50ZHVfZHNibF9pICAgICAgICAgICAgICAgICAoaHdicmtfZHNibCAgICAgICAgICAgICksCi0gYGVsc2UgLy8gU0NSMV9EQkdfRU4KLSAgICAudGR1X2RzYmxfaSAgICAgICAgICAgICAgICAgKDEnYjAgICAgICAgICAgICAgICAgICApLAotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gVERVIDwtPiBDU1IgaW50ZXJmYWNlCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLmNzcjJ0ZHVfcmVxX2kgICAgICAgICAgICAgIChjc3IydGR1X3JlcV9xbGZ5ICAgICAgKSwKLSAgICAuY3NyMnRkdV9jbWRfaSAgICAgICAgICAgICAgKGNzcjJ0ZHVfY21kICAgICAgICAgICApLAotICAgIC5jc3IydGR1X2FkZHJfaSAgICAgICAgICAgICAoY3NyMnRkdV9hZGRyICAgICAgICAgICksCi0gICAgLmNzcjJ0ZHVfd2RhdGFfaSAgICAgICAgICAgIChjc3IydGR1X3dkYXRhICAgICAgICAgKSwKLSBgZWxzZSAvLyBTQ1IxX0RCR19FTgotICAgIC5jc3IydGR1X3JlcV9pICAgICAgICAgICAgICAoY3NyMnRkdV9yZXEgICAgICAgICAgICksCi0gICAgLmNzcjJ0ZHVfY21kX2kgICAgICAgICAgICAgIChjc3IydGR1X2NtZCAgICAgICAgICAgKSwKLSAgICAuY3NyMnRkdV9hZGRyX2kgICAgICAgICAgICAgKGNzcjJ0ZHVfYWRkciAgICAgICAgICApLAotICAgIC5jc3IydGR1X3dkYXRhX2kgICAgICAgICAgICAoY3NyMnRkdV93ZGF0YSAgICAgICAgICksCi0gYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgLnRkdTJjc3JfcmRhdGFfbyAgICAgICAgICAgICh0ZHUyY3NyX3JkYXRhICAgICAgICAgKSwKLSAgICAudGR1MmNzcl9yZXNwX28gICAgICAgICAgICAgKHRkdTJjc3JfcmVzcCAgICAgICAgICApLAotCi0gICAgLy8gVERVIDwtPiBFWFUgaW50ZXJmYWNlCi0gYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLmV4dTJ0ZHVfaW1vbl9pICAgICAgICAgICAgIChleHUydGR1X2lfbW9uX3FsZnkgICAgKSwKLSBgZWxzZSAvLyBTQ1IxX0RCR19FTgotICAgIC5leHUydGR1X2ltb25faSAgICAgICAgICAgICAoZXh1MnRkdV9pX21vbiAgICAgICAgICksCi0gYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0gICAgLnRkdTJleHVfaWJya3B0X21hdGNoX28gICAgICh0ZHUyZXh1X2lfbWF0Y2ggICAgICAgKSwKLSAgICAudGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vICAgKHRkdTJleHVfaV94X3JlcSAgICAgICApLAotIGBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC5leHUydGR1X2JwX3JldGlyZV9pICAgICAgICAoZXh1MnRkdV9icF9yZXRpcmVfcWxmeSksCi0gYGVsc2UgLy8gU0NSMV9EQkdfRU4KLSAgICAuZXh1MnRkdV9icF9yZXRpcmVfaSAgICAgICAgKGV4dTJ0ZHVfYnBfcmV0aXJlICAgICApLAotIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gVERVIDwtPiBMU1UgaW50ZXJmYWNlCi0gICAgLnRkdTJsc3VfaWJya3B0X2V4Y19yZXFfbyAgICh0ZHUybHN1X2lfeF9yZXEgICAgICAgKSwKLSBgaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAubHN1MnRkdV9kbW9uX2kgICAgICAgICAgICAgKGxzdTJ0ZHVfZF9tb25fcWxmeSAgICApLAotIGBlbHNlIC8vIFNDUjFfREJHX0VOCi0gICAgLmxzdTJ0ZHVfZG1vbl9pICAgICAgICAgICAgIChsc3UydGR1X2RfbW9uICAgICAgICAgKSwKLSBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSAgICAudGR1MmxzdV9kYnJrcHRfbWF0Y2hfbyAgICAgKHRkdTJsc3VfZF9tYXRjaCAgICAgICApLAotICAgIC50ZHUybHN1X2RicmtwdF9leGNfcmVxX28gICAodGR1MmxzdV9kX3hfcmVxICAgICAgICksCi0gICAgLy8gRVBVIEkvRgotIGBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC50ZHUyaGR1X2Rtb2RlX3JlcV9vICAgICAgICAodGR1MmhkdV9kbW9kZV9yZXEgICAgICkKLSBgZWxzZSAvLyBTQ1IxX0RCR19FTgotICAgIC50ZHUyaGR1X2Rtb2RlX3JlcV9vICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICkKLSBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KLSk7Ci0KLSBgaWZkZWYgU0NSMV9EQkdfRU4KLWFzc2lnbiBod2Jya19kc2JsICAgICAgICAgICAgICAgPSAofmRiZ19lbikgfCBoZHVfaHdicmtfZHNibDsKLS8vCi1hc3NpZ24gY3NyMnRkdV9yZXFfcWxmeSAgICAgICAgID0gZGJnX2VuICYgY3NyMnRkdV9yZXEgJiBwaXBlMmhkdV9yZGNfcWxmeV9pOwotLy8KLWFzc2lnbiBleHUydGR1X2lfbW9uX3FsZnkudmQgICAgPSBleHUydGR1X2lfbW9uLnZkICYgcGlwZTJoZHVfcmRjX3FsZnlfaTsKLWFzc2lnbiBleHUydGR1X2lfbW9uX3FsZnkucmVxICAgPSBleHUydGR1X2lfbW9uLnJlcTsKLWFzc2lnbiBleHUydGR1X2lfbW9uX3FsZnkuYWRkciAgPSBleHUydGR1X2lfbW9uLmFkZHI7Ci1hc3NpZ24gbHN1MnRkdV9kX21vbl9xbGZ5LnZkICAgID0gbHN1MnRkdV9kX21vbi52ZCAmIHBpcGUyaGR1X3JkY19xbGZ5X2k7Ci1hc3NpZ24gbHN1MnRkdV9kX21vbl9xbGZ5LmxvYWQgID0gbHN1MnRkdV9kX21vbi5sb2FkOwotYXNzaWduIGxzdTJ0ZHVfZF9tb25fcWxmeS5zdG9yZSA9IGxzdTJ0ZHVfZF9tb24uc3RvcmU7Ci1hc3NpZ24gbHN1MnRkdV9kX21vbl9xbGZ5LmFkZHIgID0gbHN1MnRkdV9kX21vbi5hZGRyOwotYXNzaWduIGV4dTJ0ZHVfYnBfcmV0aXJlX3FsZnkgICA9IGV4dTJ0ZHVfYnBfcmV0aXJlICYgeyRiaXRzKGV4dTJ0ZHVfYnBfcmV0aXJlKXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07Ci0gYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhBUlQgRGVidWcgVW5pdCAoSERVKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZkZWYgU0NSMV9EQkdfRU4KLXNjcjFfcGlwZV9oZHUgaV9waXBlX2hkdSAoCi0gICAgLy8gQ29tbW9uIHNpZ25hbHMKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKGRiZ19yc3RfbiAgICAgICAgICAgICApLAotICAgIC5jbGtfZW4gICAgICAgICAgICAgICAgICAgICAoZG0ycGlwZV9hY3RpdmVfaSAgICAgICksCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0gICAgLmNsa19waXBlX2VuICAgICAgICAgICAgICAgIChjbGtjdGwycGlwZV9jbGtfZW5faSAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsa2N0bDJwaXBlX2Nsa19kYmdjX2kpLAotYGVsc2UKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gQ29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIGkvZgotICAgIC5jc3IyaGR1X3JlcV9pICAgICAgICAgICAgICAoY3NyMmhkdV9yZXFfcWxmeSAgICAgICksCi0gICAgLmNzcjJoZHVfY21kX2kgICAgICAgICAgICAgIChjc3IyaGR1X2NtZCAgICAgICAgICAgKSwKLSAgICAuY3NyMmhkdV9hZGRyX2kgICAgICAgICAgICAgKGNzcjJoZHVfYWRkciAgICAgICAgICApLAotICAgIC5jc3IyaGR1X3dkYXRhX2kgICAgICAgICAgICAoY3NyMmhkdV93ZGF0YSAgICAgICAgICksCi0gICAgLmhkdTJjc3JfcmVzcF9vICAgICAgICAgICAgIChoZHUyY3NyX3Jlc3AgICAgICAgICAgKSwKLSAgICAuaGR1MmNzcl9yZGF0YV9vICAgICAgICAgICAgKGhkdTJjc3JfcmRhdGEgICAgICAgICApLAotCi0gICAgLy8gSEFSVCBSdW4gQ29udHJvbCBpL2YKLSAgICAucGlwZTJoZHVfcmRjX3FsZnlfaSAgICAgICAgKHBpcGUyaGR1X3JkY19xbGZ5X2kgICApLAotICAgIC5kbTJoZHVfY21kX3JlcV9pICAgICAgICAgICAoZG0ycGlwZV9jbWRfcmVxX2kgICAgICksCi0gICAgLmRtMmhkdV9jbWRfaSAgICAgICAgICAgICAgIChkbTJwaXBlX2NtZF9pICAgICAgICAgKSwKLSAgICAuaGR1MmRtX2NtZF9yZXNwX28gICAgICAgICAgKHBpcGUyZG1fY21kX3Jlc3BfbyAgICApLAotICAgIC5oZHUyZG1fY21kX3Jjb2RlX28gICAgICAgICAocGlwZTJkbV9jbWRfcmNvZGVfbyAgICksCi0gICAgLmhkdTJkbV9oYXJ0X2V2ZW50X28gICAgICAgIChwaXBlMmRtX2hhcnRfZXZlbnRfbyAgKSwKLSAgICAuaGR1MmRtX2hhcnRfc3RhdHVzX28gICAgICAgKHBpcGUyZG1faGFydF9zdGF0dXNfbyApLAotCi0gICAgLy8gUHJvZ3JhbSBCdWZmZXIgLSBIQVJUIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpL2YKLSAgICAuaGR1MmRtX3BidWZfYWRkcl9vICAgICAgICAgKHBpcGUyZG1fcGJ1Zl9hZGRyX28gICApLAotICAgIC5kbTJoZHVfcGJ1Zl9pbnN0cl9pICAgICAgICAoZG0ycGlwZV9wYnVmX2luc3RyX2kgICksCi0KLSAgICAvLyBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKLSAgICAuaGR1MmRtX2RyZWdfcmVxX28gICAgICAgICAgKHBpcGUyZG1fZHJlZ19yZXFfbyAgICApLAotICAgIC5oZHUyZG1fZHJlZ193cl9vICAgICAgICAgICAocGlwZTJkbV9kcmVnX3dyX28gICAgICksCi0gICAgLmhkdTJkbV9kcmVnX3dkYXRhX28gICAgICAgIChwaXBlMmRtX2RyZWdfd2RhdGFfbyAgKSwKLSAgICAuZG0yaGR1X2RyZWdfcmVzcF9pICAgICAgICAgKGRtMnBpcGVfZHJlZ19yZXNwX2kgICApLAotICAgIC5kbTJoZHVfZHJlZ19mYWlsX2kgICAgICAgICAoZG0ycGlwZV9kcmVnX2ZhaWxfaSAgICksCi0gICAgLmRtMmhkdV9kcmVnX3JkYXRhX2kgICAgICAgIChkbTJwaXBlX2RyZWdfcmRhdGFfaSAgKSwKLSAgICAvLwotYGlmZGVmIFNDUjFfVERVX0VOCi0gICAgLy8gSERVIDwtPiBURFUgaW50ZXJmYWNlCi0gICAgLmhkdTJ0ZHVfaHdicmtfZHNibF9vICAgICAgIChoZHVfaHdicmtfZHNibCAgICAgICAgKSwKLSAgICAudGR1MmhkdV9kbW9kZV9yZXFfaSAgICAgICAgKHRkdTJoZHVfZG1vZGVfcmVxICAgICApLAotICAgIC5leHUyaGR1X2licmtwdF9od19pICAgICAgICAoYnJrcHRfaHcgICAgICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotICAgIC8vIEhBUlQgUnVuIFN0YXR1cwotICAgIC5waXBlMmhkdV9leHVfYnVzeV9pICAgICAgICAoZXh1X2J1c3lfcWxmeSAgICAgICAgICksCi0gICAgLnBpcGUyaGR1X2luc3RyZXRfaSAgICAgICAgIChpbnN0cmV0X3FsZnkgICAgICAgICAgKSwKLSAgICAucGlwZTJoZHVfaW5pdF9wY19pICAgICAgICAgKGV4dV9pbml0X3BjX3FsZnkgICAgICApLAotCi0gICAgLy8gSEFSVCBIYWx0IFN0YXR1cwotICAgIC5waXBlMmhkdV9leHVfZXhjX3JlcV9pICAgICAoZXh1X2V4Y19yZXFfcWxmeSAgICAgICksCi0gICAgLnBpcGUyaGR1X2Jya3B0X2kgICAgICAgICAgIChicmtwdF9xbGZ5ICAgICAgICAgICAgKSwKLQotICAgIC8vIEhBUlQgUnVuIENvbnRyb2wKLSAgICAuaGR1MmV4dV9wYnVmX2ZldGNoX28gICAgICAgKGZldGNoX3BidWYgICAgICAgICAgICApLAotICAgIC5oZHUyZXh1X25vX2NvbW1pdF9vICAgICAgICAoZXh1X25vX2NvbW1pdCAgICAgICAgICksCi0gICAgLmhkdTJleHVfaXJxX2RzYmxfbyAgICAgICAgIChleHVfaXJxX2RzYmwgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9wY19hZHZtdF9kc2JsX28gICAgKGV4dV9wY19hZHZtdF9kc2JsICAgICApLAotICAgIC5oZHUyZXh1X2Rtb2RlX3NzdGVwX2VuX28gICAoZXh1X2Rtb2RlX3NzdGVwX2VuICAgICksCi0KLSAgICAvLyBIQVJUIHN0YXRlCi0gICAgLmhkdTJleHVfZGJnX2hhbHRlZF9vICAgICAgIChkYmdfaGFsdGVkICAgICAgICAgICAgKSwKLSAgICAuaGR1MmV4dV9kYmdfcnVuMmhhbHRfbyAgICAgKGRiZ19ydW4yaGFsdCAgICAgICAgICApLAotICAgIC5oZHUyZXh1X2RiZ19oYWx0MnJ1bl9vICAgICAoZGJnX2hhbHQycnVuICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX3J1bl9zdGFydF9vICAgIChkYmdfcnVuX3N0YXJ0ICAgICAgICAgKSwKLQotICAgIC8vIFBDIGludGVyZmFjZQotICAgIC5waXBlMmhkdV9wY19jdXJyX2kgICAgICAgICAoY3Vycl9wYyAgICAgICAgICAgICAgICksCi0gICAgLmhkdTJleHVfZGJnX25ld19wY19vICAgICAgIChkYmdfbmV3X3BjICAgICAgICAgICAgKSwKLQotICAgIC8vIFByZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaW50ZXJmYWNlCi0gICAgLmlmdTJoZHVfcGJ1Zl9pbnN0cl9yZHlfaSAgIChpZnUyaGR1X3BidWZfcmR5X3FsZnkgKSwKLSAgICAuaGR1MmlmdV9wYnVmX2luc3RyX3ZkX28gICAgKGhkdTJpZnVfcGJ1Zl92ZCAgICAgICApLAotICAgIC5oZHUyaWZ1X3BidWZfaW5zdHJfZXJyX28gICAoaGR1MmlmdV9wYnVmX2VyciAgICAgICksCi0gICAgLmhkdTJpZnVfcGJ1Zl9pbnN0cl9vICAgICAgIChoZHUyaWZ1X3BidWZfaW5zdHIgICAgKQotKTsKLQotYXNzaWduIGNzcjJoZHVfcmVxX3FsZnkgICAgICAgICA9IGNzcjJoZHVfcmVxICYgZGJnX2VuICYgcGlwZTJoZHVfcmRjX3FsZnlfaTsKLS8vCi1hc3NpZ24gZXh1X2J1c3lfcWxmeSAgICAgICAgICAgID0gZXh1X2J1c3kgICAgICAgICAgJiB7JGJpdHMoZXh1X2J1c3kpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKLWFzc2lnbiBpbnN0cmV0X3FsZnkgICAgICAgICAgICAgPSBpbnN0cmV0ICAgICAgICAgICAmIHskYml0cyhpbnN0cmV0KXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07Ci1hc3NpZ24gZXh1X2luaXRfcGNfcWxmeSAgICAgICAgID0gZXh1X2luaXRfcGMgICAgICAgJiB7JGJpdHMoZXh1X2luaXRfcGMpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKLWFzc2lnbiBleHVfZXhjX3JlcV9xbGZ5ICAgICAgICAgPSBleHVfZXhjX3JlcSAgICAgICAmIHskYml0cyhleHVfZXhjX3JlcSl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OwotYXNzaWduIGJya3B0X3FsZnkgICAgICAgICAgICAgICA9IGJya3B0ICAgICAgICAgICAgICYgeyRiaXRzKGJya3B0KXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07Ci1hc3NpZ24gaWZ1MmhkdV9wYnVmX3JkeV9xbGZ5ICAgID0gaWZ1MmhkdV9wYnVmX3JkeSAgJiB7JGJpdHMoaWZ1MmhkdV9wYnVmX3JkeSl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRyYWNlbG9nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc2NyMV90cmFjZWxvZyBpX3RyYWNlbG9nICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAotICAgIC5zb2MycGlwZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgKHNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICAgICAgICAgICAgKSwKLQotICAgIC8vIE1QUkYKLSAgICAubXByZjJ0cmFjZV9pbnRfaSAgICAgICAgICAgICAgIChpX3BpcGVfbXByZi5tcHJmX2ludCAgICAgICAgICAgICAgICksCi0gICAgLm1wcmYydHJhY2Vfd3JfZW5faSAgICAgICAgICAgICAoaV9waXBlX21wcmYuZXh1Mm1wcmZfd19yZXFfaSAgICAgICApLAotICAgIC5tcHJmMnRyYWNlX3dyX2FkZHJfaSAgICAgICAgICAgKGlfcGlwZV9tcHJmLmV4dTJtcHJmX3JkX2FkZHJfaSAgICAgKSwKLSAgICAubXByZjJ0cmFjZV93cl9kYXRhX2kgICAgICAgICAgIChpX3BpcGVfbXByZi5leHUybXByZl9yZF9kYXRhX2kgICAgICksCi0KLSAgICAvLyBFWFUKLSAgICAuZXh1MnRyYWNlX3VwZGF0ZV9wY19lbl9pICAgICAgIChpX3BpcGVfZXh1LnVwZGF0ZV9wY19lbiAgICAgICAgICAgICksCi0gICAgLmV4dTJ0cmFjZV91cGRhdGVfcGNfaSAgICAgICAgICAoaV9waXBlX2V4dS51cGRhdGVfcGMgICAgICAgICAgICAgICApLAotCi0gICAgLy8gSUZVCi0gICAgLmlmdTJ0cmFjZV9pbnN0cl9pICAgICAgICAgICAgICAoaV9waXBlX2lmdS5pZnUyaWR1X2luc3RyX28gICAgICAgICApLAotCi0gICAgLy8gQ1NSCi0gICAgLmNzcjJ0cmFjZV9tc3RhdHVzX21pZV9pICAgICAgICAoaV9waXBlX2Nzci5jc3JfbXN0YXR1c19taWVfZmYgICAgICApLAotICAgIC5jc3IydHJhY2VfbXN0YXR1c19tcGllX2kgICAgICAgKGlfcGlwZV9jc3IuY3NyX21zdGF0dXNfbXBpZV9mZiAgICAgKSwKLSAgICAuY3NyMnRyYWNlX210dmVjX2Jhc2VfaSAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tdHZlY19iYXNlICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9tdHZlY19tb2RlX2kgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbXR2ZWNfbW9kZSAgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbWllX21laWVfaSAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21pZV9tZWllX2ZmICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21pZV9tdGllX2kgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9taWVfbXRpZV9mZiAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9taWVfbXNpZV9pICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWllX21zaWVfZmYgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbWlwX21laXBfaSAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21pcF9tZWlwICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21pcF9tdGlwX2kgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9taXBfbXRpcCAgICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9taXBfbXNpcF9pICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWlwX21zaXAgICAgICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbWVwY19pICAgICAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21lcGNfZmYgICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21jYXVzZV9pcnFfaSAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tY2F1c2VfaV9mZiAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9tY2F1c2VfZWNfaSAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWNhdXNlX2VjX2ZmICAgICAgICApLAotICAgIC5jc3IydHJhY2VfbXR2YWxfaSAgICAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX210dmFsX2ZmICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX21zdGF0dXNfbWllX3VwX2kgICAgIChpX3BpcGVfY3NyLmNzcjJleHVfbXN0YXR1c19taWVfdXBfbyksCi0KLSAgICAvLyBFdmVudHMKLSAgICAuY3NyMnRyYWNlX2VfZXhjX2kgICAgICAgICAgICAgIChpX3BpcGVfY3NyLmVfZXhjICAgICAgICAgICAgICAgICAgICksCi0gICAgLmNzcjJ0cmFjZV9lX2lycV9pICAgICAgICAgICAgICAoaV9waXBlX2Nzci5lX2lycSAgICAgICAgICAgICAgICAgICApLAotICAgIC5waXBlMnRyYWNlX2Vfd2FrZV9pICAgICAgICAgICAgKHBpcGUyY2xrY3RsX3dha2VfcmVxX28gICAgICAgICAgICAgKSwKLSAgICAuY3NyMnRyYWNlX2VfbXJldF9pICAgICAgICAgICAgIChpX3BpcGVfY3NyLmVfbXJldCAgICAgICAgICAgICAgICAgICkKLSk7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3BpcGVfdG9wCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3RyYWNlbG9nLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV90cmFjZWxvZy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4NjAwMS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3RyYWNlbG9nLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNDU1ICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdHJhY2Vsb2cuc3Y+Ci0vLy8gQGJyaWVmICAgICAgQ29yZSB0cmFjZWxvZyBtb2R1bGUKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLW1vZHVsZSBzY3IxX3RyYWNlbG9nICgKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhY2Vsb2cgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhY2Vsb2cgY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgc29jMnBpcGVfZnVzZV9taGFydGlkX2ksICAgICAgLy8gRnVzZSBNSEFSVElECi0KLSAgICAvLyBNUFJGCi1gaWZkZWYgIFNDUjFfTVBSRl9SQU0KLSAgICBpbnB1dCAgIGxvZ2ljICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgIG1wcmYydHJhY2VfaW50X2kgICBbMTpgU0NSMV9NUFJGX1NJWkUtMV0sIC8vIE1QUkYgcmVnaXN0ZXJzIGNvbnRlbnQKLWBlbHNlIC8vIFNDUjFfTVBSRl9SQU0KLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tcHJmX3YgWzE6YFNDUjFfTVBSRl9TSVpFLTFdIG1wcmYydHJhY2VfaW50X2ksICAgICAgICAgICAgIC8vIE1QUkYgcmVnaXN0ZXJzIGNvbnRlbnQKLWBlbmRpZiAvLyBTQ1IxX01QUkZfUkFNCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wcmYydHJhY2Vfd3JfZW5faSwgICAgICAgICAgIC8vIE1QUkYgd3JpdGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICAgIG1wcmYydHJhY2Vfd3JfYWRkcl9pLCAgICAgICAgIC8vIE1QUkYgd3JpdGUgYWRkcmVzcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICBtcHJmMnRyYWNlX3dyX2RhdGFfaSwgICAgICAgICAvLyBNUFJGIHdyaXRlIGRhdGEKLQotICAgIC8vIEVYVQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUydHJhY2VfdXBkYXRlX3BjX2VuX2ksICAgICAvLyBQQyB1cGRhdGVkIGZsYWcKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgZXh1MnRyYWNlX3VwZGF0ZV9wY19pLCAgICAgICAgLy8gTmV4dCBQQyB2YWx1ZQotCi0gICAgLy8gSUZVCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgIGlmdTJ0cmFjZV9pbnN0cl9pLCAgICAgICAgICAgIC8vIEN1cnJlbnQgaW5zdHJ1Y3Rpb24gZnJvbSBJRlUgc3RhZ2UKLQotICAgIC8vIENTUgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbXN0YXR1c19taWVfaSwgICAgICAvLyBDU1IgTVNUQVRVUy5taWUgYml0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tc3RhdHVzX21waWVfaSwgICAgIC8vIENTUiBNU1RBVFVTLm1waWUgYml0Ci0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjZdICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tdHZlY19iYXNlX2ksICAgICAgIC8vIENTUiBNVFZFQy4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX210dmVjX21vZGVfaSwgICAgICAgLy8gQ1NSIE1UVkVDLgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWllX21laWVfaSwgICAgICAgICAvLyBDU1IgTUlFLm1laWUgYml0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9taWVfbXRpZV9pLCAgICAgICAgIC8vIENTUiBNSUUubXRpZSBiaXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21pZV9tc2llX2ksICAgICAgICAgLy8gQ1NSIE1JRS5tc2llIGJpdAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWlwX21laXBfaSwgICAgICAgICAvLyBDU1IgTUlQLm1laXAgYml0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9taXBfbXRpcF9pLCAgICAgICAgIC8vIENTUiBNSVAubXRpcCBiaXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21pcF9tc2lwX2ksICAgICAgICAgLy8gQ1NSIE1JUC5tc2lwIGJpdAotIGBpZmRlZiBTQ1IxX1JWQ19FWFQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MV0gICAgICAgICAgICAgICAgY3NyMnRyYWNlX21lcGNfaSwgICAgICAgICAgICAgLy8gQ1NSIE1FUEMgcmVnaXN0ZXIKLSBgZWxzZSAvLyBTQ1IxX1JWQ19FWFQKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6Ml0gICAgICAgICAgICAgICAgY3NyMnRyYWNlX21lcGNfaSwgICAgICAgICAgICAgLy8gQ1NSIE1FUEMgcmVnaXN0ZXIKLSBgZW5kaWYgLy8gU0NSMV9SVkNfRVhUCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tY2F1c2VfaXJxX2ksICAgICAgIC8vIENTUiBNQ0FVU0UuaW50ZXJydXB0IGJpdAotICAgIGlucHV0ICAgdHlwZV9zY3IxX2V4Y19jb2RlX2UgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWNhdXNlX2VjX2ksICAgICAgICAvLyBDU1IgTUNBVVNFLmV4Y2VwdGlvbl9jb2RlIGJpdAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICBjc3IydHJhY2VfbXR2YWxfaSwgICAgICAgICAgICAvLyBDU1IgTVRWQUwgcmVnaXN0ZXIKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21zdGF0dXNfbWllX3VwX2ksICAgLy8gQ1NSIE1TVEFUVVMubWllIHVwZGF0ZSBmbGFnCi0KLSAgICAvLyBFdmVudHMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX2VfZXhjX2ksICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGV2ZW50Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9lX2lycV9pLCAgICAgICAgICAgIC8vIGludGVycnVwdCBldmVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMnRyYWNlX2Vfd2FrZV9pLCAgICAgICAgICAvLyBwaXBlIHdha2V1cCBldmVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfZV9tcmV0X2kgICAgICAgICAgICAvLyBNUkVUIGluc3RydWN0aW9uCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzAwX1pFUk8gOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDFfUkEgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wMl9TUCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzAzX0dQICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDRfVFAgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wNV9UMCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzA2X1QxICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDdfVDIgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wOF9TMCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzA5X1MxICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTBfQTAgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xMV9BMSAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzEyX0EyICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTNfQTMgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xNF9BNCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzE1X0E1ICAgOwotYGlmbmRlZiBTQ1IxX1JWRV9FWFQKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzE2X0E2ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTdfQTcgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xOF9TMiAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzE5X1MzICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjBfUzQgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yMV9TNSAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzIyX1M2ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjNfUzcgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yNF9TOCAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzI1X1M5ICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjZfUzEwICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yN19TMTEgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzI4X1QzICAgOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjlfVDQgICA7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8zMF9UNSAgIDsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzMxX1Q2ICAgOwotYGVuZGlmIC8vIFNDUjFfUlZFX0VYVAotfSB0eXBlX3NjcjFfaXJlZ19uYW1lX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbXN0YXR1czsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtdHZlYzsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtaWU7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbWlwOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG1lcGM7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbWNhdXNlOwotICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG10dmFsOwotfSB0eXBlX3NjcjFfY3NyX3RyYWNlX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgU2lnbmFsIERlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZV9zY3IxX2lyZWdfbmFtZV9zICAgICAgICAgICAgICAgbXByZl9pbnRfYWxpYXM7Ci0KLWBpZmRlZiBTQ1IxX1RSQUNFX0xPR19FTgotCi10aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWU7Ci0KLS8vIFRyYWNlbG9nIGNvbnRyb2wgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VfZmxhZzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX3VwZGF0ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX3VwZGF0ZV9yOwotYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTsKLQotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgdHJhY2VfcGM7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICB0cmFjZV9ucGM7Ci1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICB0cmFjZV9pbnN0cjsKLQotdHlwZV9zY3IxX2Nzcl90cmFjZV9zICAgICAgICAgICAgICAgY3NyX3RyYWNlMTsKLQotLy8gRmlsZSBoYW5kbGVycwotaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VfZmhhbmRsZXJfY29yZTsKLQotLy8gTVBSRiBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcHJmX3VwOwotbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgbXByZl9hZGRyOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZl93ZGF0YTsKLQotc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydDsKLXN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZTsKLQotYGVuZGlmIC8vIFNDUjFfVFJBQ0VfTE9HX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdGFza3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaWZkZWYgU0NSMV9UUkFDRV9MT0dfRU4KLQotdGFzayB0cmFjZV93cml0ZV9jb21tb247Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiJTE2ZCAgIiwgY3VycmVudF90aW1lKTsKLSAgICAvLyAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgMCAgIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiICVzICAiLCAgZXZlbnRfdHlwZSk7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiICU4eCAgIiwgdHJhY2VfcGMpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAlOHggICIsIHRyYWNlX2luc3RyKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgJTh4ICAiLCB0cmFjZV9ucGMpOwotZW5kdGFzayAvLyB0cmFjZV93cml0ZV9jb21tb24KLQotdGFzayB0cmFjZV93cml0ZV9pbnRfd2FsaWFzOwotICAgIGNhc2UgKG1wcmZfYWRkcikKLSAgICAgICAgMCAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwMF96ZXJvICAiKTsKLSAgICAgICAgMSAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwMV9yYSAgICAiKTsKLSAgICAgICAgMiAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwMl9zcCAgICAiKTsKLSAgICAgICAgMyAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwM19ncCAgICAiKTsKLSAgICAgICAgNCAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwNF90cCAgICAiKTsKLSAgICAgICAgNSAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwNV90MCAgICAiKTsKLSAgICAgICAgNiAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwNl90MSAgICAiKTsKLSAgICAgICAgNyAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwN190MiAgICAiKTsKLSAgICAgICAgOCAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwOF9zMCAgICAiKTsKLSAgICAgICAgOSAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgwOV9zMSAgICAiKTsKLSAgICAgICAgMTAgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxMF9hMCAgICAiKTsKLSAgICAgICAgMTEgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxMV9hMSAgICAiKTsKLSAgICAgICAgMTIgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxMl9hMiAgICAiKTsKLSAgICAgICAgMTMgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxM19hMyAgICAiKTsKLSAgICAgICAgMTQgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxNF9hNCAgICAiKTsKLSAgICAgICAgMTUgOiAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHgxNV9hNSAgICAiKTsKLWBpZm5kZWYgU0NSMV9SVkVfRVhUCi0gICAgICAgIDE2IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTZfYTYgICAgIik7Ci0gICAgICAgIDE3IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTdfYTcgICAgIik7Ci0gICAgICAgIDE4IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MThfczIgICAgIik7Ci0gICAgICAgIDE5IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTlfczMgICAgIik7Ci0gICAgICAgIDIwIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjBfczQgICAgIik7Ci0gICAgICAgIDIxIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjFfczUgICAgIik7Ci0gICAgICAgIDIyIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjJfczYgICAgIik7Ci0gICAgICAgIDIzIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjNfczcgICAgIik7Ci0gICAgICAgIDI0IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjRfczggICAgIik7Ci0gICAgICAgIDI1IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjVfczkgICAgIik7Ci0gICAgICAgIDI2IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjZfczEwICAgIik7Ci0gICAgICAgIDI3IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjdfczExICAgIik7Ci0gICAgICAgIDI4IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjhfdDMgICAgIik7Ci0gICAgICAgIDI5IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MjlfdDQgICAgIik7Ci0gICAgICAgIDMwIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MzBfdDUgICAgIik7Ci0gICAgICAgIDMxIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MzFfdDYgICAgIik7Ci1gZW5kaWYgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgIGRlZmF1bHQ6IGJlZ2luCi0gICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4eHggICAgICAgIik7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZHRhc2sKLQotYGVuZGlmIC8vIFNDUjFfVFJBQ0VfTE9HX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTVBSRiBSZWdpc3RlcnMgYXNzaWdubWVudAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzAwX1pFUk8gICA9ICcwOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wMV9SQSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzFdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wMl9TUCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzJdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wM19HUCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzNdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wNF9UUCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzRdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wNV9UMCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzVdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wNl9UMSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzZdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wN19UMiAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzddOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wOF9TMCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzhdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wOV9TMSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzldOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xMF9BMCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzEwXTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTFfQTEgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxMV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzEyX0EyICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTJdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xM19BMyAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzEzXTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTRfQTQgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxNF07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzE1X0E1ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTVdOwotYGlmbmRlZiBTQ1IxX1JWRV9FWFQKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTZfQTYgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxNl07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzE3X0E3ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTddOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xOF9TMiAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzE4XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTlfUzMgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxOV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzIwX1M0ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjBdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yMV9TNSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzIxXTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjJfUzYgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyMl07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzIzX1M3ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjNdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yNF9TOCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzI0XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjVfUzkgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyNV07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzI2X1MxMCAgICA9IG1wcmYydHJhY2VfaW50X2lbMjZdOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yN19TMTEgICAgPSBtcHJmMnRyYWNlX2ludF9pWzI3XTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjhfVDMgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyOF07Ci1hc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzI5X1Q0ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjldOwotYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8zMF9UNSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzMwXTsKLWFzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMzFfVDYgICAgID0gbXByZjJ0cmFjZV9pbnRfaVszMV07Ci1gZW5kaWYgLy8gU0NSMV9SVkVfRVhUCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTGVnYWN5IHRpbWUgY291bnRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGUgY291bnRlciBpcyBsZWZ0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGN1cnJlbnQgVVZNIGVudmlyb25tZW50Ci0KLWludCAgICAgdGltZV9jbnQ7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHRpbWVfY250ICAgIDw9IDA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGltZV9jbnQgICAgPD0gdGltZV9jbnQgKyAxOwotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5pdGlhbCBwYXJ0IHBpcGVsaW5lIHRyYWNlbG9nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGlmZGVmIFNDUjFfVFJBQ0VfTE9HX0VOCi0vLyBGaWxlcyBvcGVuaW5nIGFuZCB3cml0aW5nIGluaXRpYWwgaGVhZGVyCi1pbml0aWFsIGJlZ2luCi0gICAgJHRpbWVmb3JtYXQoLTksIDAsICIgbnMiLCAxMCk7Ci0gICAgIzEgaGFydC5oZXh0b2Eoc29jMnBpcGVfZnVzZV9taGFydGlkX2kpOwotCi0gICAgdHJhY2VfZmhhbmRsZXJfY29yZSA9ICRmb3Blbih7InRyYWNlbG9nX2NvcmVfIiwgaGFydCwgIi5sb2cifSwgInciKTsKLQotICAgIC8vIFdyaXRpbmcgaW5pdGlhbCBoZWFkZXIKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyBSVExfSUQgJWhcbiIsIFNDUjFfQ1NSX01JTVBJRCk7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiNcbiIpOwotICAgIC8vICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjIFIgLSByZXR1cm4gZnJvbSB0cmFwOlxuIik7Ci0gICAgLy8gJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgMSAtIE1SRVRcbiIpOwotICAgIC8vICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgIDAgLSBubyByZXR1cm5cbiIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjIEV2ZW50czpcbiIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgIE4gLSBubyBldmVudFxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgRSAtIGV4Y2VwdGlvblxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgSSAtIGludGVycnVwdFxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgVyAtIHdha2V1cFxuIik7Ci1lbmQKLQotLy8gQ29yZSByZXNldCBsb2dnaW5nIGFuZCBoZWFkZXIgcHJpbnRpbmcKLWFsd2F5cyBAKHBvc2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLWBpZm5kZWYgVkVSSUxBVE9SCi0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIyAlMTR0IDogQ29yZSBSZXNldFxuIiwgJHRpbWUoKSk7Ci1gZWxzZQotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiMgOiBDb3JlIFJlc2V0XG4iKTsKLWBlbmRpZgotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgVGVzdDogJXNcbiIsIHRlc3RfbmFtZSk7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgICAgICAgICAgIFRpbWUgICIpOwotICAgIC8vICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgUiAgIik7Ci0gICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBFdiAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIEN1cnJfUEMgICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIEluc3RyICAgICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIE5leHRfUEMgICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIFJlZyAgICAgICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIFZhbHVlICAgICAiKTsKLSAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICJcbiIpOwotICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb21tb24gdHJhY2UgcGFydAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB0cmFjZV9mbGFnICAgPSAxJ2IxOwotYXNzaWduIHRyYWNlX3VwZGF0ZSA9IChleHUydHJhY2VfdXBkYXRlX3BjX2VuX2kgfCBtcHJmMnRyYWNlX3dyX2VuX2kpICYgdHJhY2VfZmxhZzsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY3VycmVudF90aW1lICAgIDw9IDA7Ci0gICAgICAgIGV2ZW50X3R5cGUgICAgICA8PSAiTiI7Ci0KLSAgICAgICAgdHJhY2VfcGMgICAgICAgIDw9ICd4OwotICAgICAgICB0cmFjZV9ucGMgICAgICAgPD0gJ3g7Ci0gICAgICAgIHRyYWNlX2luc3RyICAgICA8PSAneDsKLQotICAgICAgICB0cmFjZV91cGRhdGVfciAgPD0gMSdiMDsKLQotICAgICAgICBtcHJmX3VwICAgICAgICAgPD0gJzA7Ci0gICAgICAgIG1wcmZfYWRkciAgICAgICA8PSAnMDsKLSAgICAgICAgbXByZl93ZGF0YSAgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRyYWNlX3VwZGF0ZV9yIDw9IHRyYWNlX3VwZGF0ZTsKLSAgICAgICAgaWYgKHRyYWNlX3VwZGF0ZSkgYmVnaW4KLWBpZmRlZiBWRVJJTEFUT1IKLSAgICAgICAgICAgIGN1cnJlbnRfdGltZSAgPD0gdGltZV9jbnQ7Ci1gZWxzZQotICAgICAgICAgICAgY3VycmVudF90aW1lICA8PSAkdGltZSgpOwotYGVuZGlmCi0gICAgICAgICAgICB0cmFjZV9wYyAgICAgIDw9IHRyYWNlX25wYzsKLSAgICAgICAgICAgIHRyYWNlX25wYyAgICAgPD0gZXh1MnRyYWNlX3VwZGF0ZV9wY19pOwotICAgICAgICAgICAgdHJhY2VfaW5zdHIgICA8PSBpZnUydHJhY2VfaW5zdHJfaTsKLQotICAgICAgICAgICAgaWYgKGNzcjJ0cmFjZV9lX2V4Y19pKSBiZWdpbgotICAgICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGV2ZW50X3R5cGUgIDw9ICJFIjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZSBpZiAoY3NyMnRyYWNlX2VfaXJxX2kpIGJlZ2luCi0gICAgICAgICAgICAgICAgLy8gSVJRCi0gICAgICAgICAgICAgICAgZXZlbnRfdHlwZSAgPD0gIkkiOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbHNlIGlmIChwaXBlMnRyYWNlX2Vfd2FrZV9pKSBiZWdpbgotICAgICAgICAgICAgICAgIC8vIFdha2UKLSAgICAgICAgICAgICAgICBldmVudF90eXBlIDw9ICJXIjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgLy8gaWYgKGNzcjJ0cmFjZV9lX21yZXRfaSkgYmVnaW4KLSAgICAgICAgICAgIC8vICAgICAvLyBNUkVUCi0gICAgICAgICAgICAvLyAgICAgZXZlbnRfdHlwZSAgPD0gIlIiOwotICAgICAgICAgICAgLy8gZW5kCi0gICAgICAgICAgICBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgLy8gTm8gZXZlbnQKLSAgICAgICAgICAgICAgICBldmVudF90eXBlIDw9ICJOIjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgICAgICAvLyBXcml0ZSBsb2cgc2lnbmFscwotICAgICAgICBtcHJmX3VwICAgIDw9IG1wcmYydHJhY2Vfd3JfZW5faTsKLSAgICAgICAgbXByZl9hZGRyICA8PSBtcHJmMnRyYWNlX3dyX2VuX2kgPyBtcHJmMnRyYWNlX3dyX2FkZHJfaSA6ICd4OwotICAgICAgICBtcHJmX3dkYXRhIDw9IG1wcmYydHJhY2Vfd3JfZW5faSA/IG1wcmYydHJhY2Vfd3JfZGF0YV9pIDogJ3g7Ci0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3JlIE1QUkYgbG9nZ2luZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHRyYWNlX3VwZGF0ZV9yKSBiZWdpbgotCi0gICAgICAgICAgICB0cmFjZV93cml0ZV9jb21tb24oKTsKLQotICAgICAgICAgICAgY2FzZSAoZXZlbnRfdHlwZSkKLSAgICAgICAgICAgICAgICAiVyIgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2FrZXVwCi0gICAgICAgICAgICAgICAgICAgIGlmIChjc3JfdHJhY2UxLm1pcCAmIGNzcl90cmFjZTEubWllKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG1pcCAgICAgICAgJTA4eFxuIiwgY3NyX3RyYWNlMS5taXAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX3dyaXRlX2NvbW1vbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG1pZSAgICAgICAgJTA4eCIsIGNzcl90cmFjZTEubWllICk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICJOIiAgICAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyCi0gICAgICAgICAgICAgICAgICAgIGlmIChtcHJmX3VwICYmIG1wcmZfYWRkciAhPSAwKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIHglMmQgICAgICAlMDh4IiwgbXByZl9hZGRyLCBtcHJmX3dkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX3dyaXRlX2ludF93YWxpYXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAlMDh4IiwgbXByZl93ZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgLS0tICAgICAgICAtLS0tLS0tLSIpOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAiUiIgICAgIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gTVJFVAotICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbXN0YXR1cyAgICAlMDh4IiwgY3NyX3RyYWNlMS5tc3RhdHVzKTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAiRSIsICJJIjogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gSVJRL0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbXN0YXR1cyAgICAlMDh4XG4iLCBjc3JfdHJhY2UxLm1zdGF0dXMpOwotICAgICAgICAgICAgICAgICAgICB0cmFjZV93cml0ZV9jb21tb24oKTsKLSAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG1lcGMgICAgICAgJTA4eFxuIiwgY3NyX3RyYWNlMS5tZXBjKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2Vfd3JpdGVfY29tbW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtY2F1c2UgICAgICUwOHhcbiIsIGNzcl90cmFjZTEubWNhdXNlKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2Vfd3JpdGVfY29tbW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtdHZhbCAgICAgICUwOHgiLCAgIGNzcl90cmFjZTEubXR2YWwpOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiXG4iKTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICJcbiIpOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcmUgQ1NSIGxvZ2dpbmcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGNzcl90cmFjZTEubXR2ZWMgICAgICAgID0ge2NzcjJ0cmFjZV9tdHZlY19iYXNlX2ksIDQnZDAsIDInKGNzcjJ0cmFjZV9tdHZlY19tb2RlX2kpfTsKLSAgICBjc3JfdHJhY2UxLm1lcGMgICAgICAgICA9Ci1gaWZkZWYgU0NSMV9SVkNfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3NyMnRyYWNlX21lcGNfaSwgMSdiMH07Ci1gZWxzZSAvLyBTQ1IxX1JWQ19FWFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjc3IydHJhY2VfbWVwY19pLCAyJ2IwMH07Ci1gZW5kaWYgLy8gU0NSMV9SVkNfRVhUCi0gICAgY3NyX3RyYWNlMS5tY2F1c2UgICAgICAgPSB7Y3NyMnRyYWNlX21jYXVzZV9pcnFfaSwgdHlwZV9zY3IxX2Nzcl9tY2F1c2VfZWNfdicoY3NyMnRyYWNlX21jYXVzZV9lY19pKX07Ci0gICAgY3NyX3RyYWNlMS5tdHZhbCAgICAgICAgPSBjc3IydHJhY2VfbXR2YWxfaTsKLQotICAgIGNzcl90cmFjZTEubXN0YXR1cyAgICAgID0gJzA7Ci0gICAgY3NyX3RyYWNlMS5taWUgICAgICAgICAgPSAnMDsKLSAgICBjc3JfdHJhY2UxLm1pcCAgICAgICAgICA9ICcwOwotCi0gICAgY3NyX3RyYWNlMS5tc3RhdHVzW1NDUjFfQ1NSX01TVEFUVVNfTUlFX09GRlNFVF0gICAgID0gY3NyMnRyYWNlX21zdGF0dXNfbWllX2k7Ci0gICAgY3NyX3RyYWNlMS5tc3RhdHVzW1NDUjFfQ1NSX01TVEFUVVNfTVBJRV9PRkZTRVRdICAgID0gY3NyMnRyYWNlX21zdGF0dXNfbXBpZV9pOwotICAgIGNzcl90cmFjZTEubXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01QUF9PRkZTRVQrMTpTQ1IxX0NTUl9NU1RBVFVTX01QUF9PRkZTRVRdICAgPSBTQ1IxX0NTUl9NU1RBVFVTX01QUDsKLSAgICBjc3JfdHJhY2UxLm1pZVtTQ1IxX0NTUl9NSUVfTVNJRV9PRkZTRVRdICAgICAgICAgICAgPSBjc3IydHJhY2VfbWllX21zaWVfaTsKLSAgICBjc3JfdHJhY2UxLm1pZVtTQ1IxX0NTUl9NSUVfTVRJRV9PRkZTRVRdICAgICAgICAgICAgPSBjc3IydHJhY2VfbWllX210aWVfaTsKLSAgICBjc3JfdHJhY2UxLm1pZVtTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVRdICAgICAgICAgICAgPSBjc3IydHJhY2VfbWllX21laWVfaTsKLSAgICBjc3JfdHJhY2UxLm1pcFtTQ1IxX0NTUl9NSUVfTVNJRV9PRkZTRVRdICAgICAgICAgICAgPSBjc3IydHJhY2VfbWlwX21zaXBfaTsKLSAgICBjc3JfdHJhY2UxLm1pcFtTQ1IxX0NTUl9NSUVfTVRJRV9PRkZTRVRdICAgICAgICAgICAgPSBjc3IydHJhY2VfbWlwX210aXBfaTsKLSAgICBjc3JfdHJhY2UxLm1pcFtTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVRdICAgICAgICAgICAgPSBjc3IydHJhY2VfbWlwX21laXBfaTsKLWVuZAotCi1gZW5kaWYgLy8gU0NSMV9UUkFDRV9MT0dfRU4KLQotZW5kbW9kdWxlIDogc2NyMV90cmFjZWxvZwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9jZy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9jZy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmNjE1NC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2NnLnN2PgotLy8vIEBicmllZiAgICAgIFNDUjEgY2xvY2sgZ2F0ZSBwcmltaXRpdmUKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotbW9kdWxlIHNjcjFfY2cgKAotICAgIGlucHV0ICAgbG9naWMgICBjbGssCi0gICAgaW5wdXQgICBsb2dpYyAgIGNsa19lbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgdGVzdF9tb2RlLAotICAgIG91dHB1dCAgbG9naWMgICBjbGtfb3V0Ci0pOwotCi0vLyBUaGUgY29kZSBiZWxvdyBpcyBhIGNsb2NrIGdhdGUgbW9kZWwgZm9yIHNpbXVsYXRpb24uCi0vLyBGb3Igc3ludGhlc2lzLCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMKLS8vIGNsb2NrIGdhdGUgY29kZS4KLQotbG9naWMgbGF0Y2hfZW47Ci0KLWFsd2F5c19sYXRjaCBiZWdpbgotICAgIGlmICh+Y2xrKSBiZWdpbgotICAgICAgICBsYXRjaF9lbiA8PSB0ZXN0X21vZGUgfCBjbGtfZW47Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGNsa19vdXQgID0gbGF0Y2hfZW4gJiBjbGs7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfY2cKLQotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFmMzQ3Yy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfcmVzZXRfY2VsbHMuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9zeW5jX3JzdG4uc3Y+Ci0vLy8gQGJyaWVmICAgICAgQ2VsbHMgZm9yIHJlc2V0IGhhbmRsaW5nCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgQnVmZmVyIENlbGwKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW1vZHVsZSBzY3IxX3Jlc2V0X2J1Zl9jZWxsICgKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBjbGssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgcmVzZXRfbl9pbiwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByZXNldF9uX291dCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByZXNldF9uX3N0YXR1cwotKTsKLQotbG9naWMgICAgICAgcmVzZXRfbl9mZjsKLWxvZ2ljICAgICAgIHJlc2V0X25fc3RhdHVzX2ZmOwotbG9naWMgICAgICAgcnN0X25fbXV4OwotCi1hc3NpZ24gcnN0X25fbXV4ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3RfbjsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3Rfbl9tdXgsIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X25fbXV4KSBiZWdpbgotICAgICAgICByZXNldF9uX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgcmVzZXRfbl9mZiA8PSByZXNldF9uX2luOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiByZXNldF9uX291dCA9ICh0ZXN0X21vZGUgPT0gMSdiMSkgPyB0ZXN0X3JzdF9uIDogcmVzZXRfbl9mZjsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3Rfbl9tdXgsIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X25fbXV4KSBiZWdpbgotICAgICAgICByZXNldF9uX3N0YXR1c19mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHJlc2V0X25fc3RhdHVzX2ZmIDw9IHJlc2V0X25faW47Ci0gICAgZW5kCi1lbmQKLWFzc2lnbiByZXNldF9uX3N0YXR1cyA9IHJlc2V0X25fc3RhdHVzX2ZmOwotCi1lbmRtb2R1bGUgOiBzY3IxX3Jlc2V0X2J1Zl9jZWxsCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IENEQyBTeW5jaHJvbml6YXRpb24gQ2VsbAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbW9kdWxlIHNjcjFfcmVzZXRfc3luY19jZWxsICMoCi0gICAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTVEFHRVNfQU1PVU5UID0gMgotKSAoCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgY2xrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJzdF9uX2luLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJzdF9uX291dAotKTsKLQotbG9naWMgW1NUQUdFU19BTU9VTlQtMTowXSAgIHJzdF9uX2RmZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9yc3Rfbl9pbjsKLQotYXNzaWduIGxvY2FsX3JzdF9uX2luID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3RfbjsKLQotZ2VuZXJhdGUKLQotaWYgKFNUQUdFU19BTU9VTlQgPT0gMSkKLQotYmVnaW4gOiBnZW5fcmVzZXRfc3luY19jZWxsX3NpbmdsZQotICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgbG9jYWxfcnN0X25faW4sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICBpZiAofmxvY2FsX3JzdF9uX2luKSBiZWdpbgotICAgICAgICAgICAgcnN0X25fZGZmIDw9IDEnYjA7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICByc3Rfbl9kZmYgPD0gcnN0X25faW47Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kIDogZ2VuX3Jlc2V0X3N5bmNfY2VsbF9zaW5nbGUKLQotZWxzZSAvLyBTVEFHRVNfQU1PVU5UID4gMQotCi1iZWdpbiA6IGdlbl9yZXNldF9zeW5jX2NlbGxfbXVsdGkKLSAgICBhbHdheXNfZmYgQChuZWdlZGdlIGxvY2FsX3JzdF9uX2luLCBwb3NlZGdlIGNsaykKLSAgICBiZWdpbgotICAgICAgICBpZiAofmxvY2FsX3JzdF9uX2luKSBiZWdpbgotICAgICAgICAgICAgcnN0X25fZGZmIDw9ICcwOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgcnN0X25fZGZmIDw9IHtyc3Rfbl9kZmZbU1RBR0VTX0FNT1VOVC0yOjBdLCByc3Rfbl9pbn07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kIDogZ2VuX3Jlc2V0X3N5bmNfY2VsbF9tdWx0aQotCi1lbmRnZW5lcmF0ZQotCi1hc3NpZ24gcnN0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3Rfbl9kZmZbU1RBR0VTX0FNT1VOVC0xXTsKLQotZW5kbW9kdWxlIDogc2NyMV9yZXNldF9zeW5jX2NlbGwKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBDREMvUkRDIFN5bmNocm9uaXphdGlvbiBDZWxsCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tb2R1bGUgc2NyMV9kYXRhX3N5bmNfY2VsbCAjKAotICAgIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNUQUdFU19BTU9VTlQgPSAxCi0pICgKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBjbGssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgZGF0YV9pbiwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICBkYXRhX291dAotKTsKLQotbG9naWMgW1NUQUdFU19BTU9VTlQtMTowXSBkYXRhX2RmZjsKLQotZ2VuZXJhdGUKLQotaWYgKFNUQUdFU19BTU9VTlQgPT0gMSkKLQotYmVnaW4gOiBnZW5fZGF0YV9zeW5jX2NlbGxfc2luZ2xlCi0gICAgYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspCi0gICAgYmVnaW4KLSAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgICAgIGRhdGFfZGZmIDw9IDEnYjA7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICBkYXRhX2RmZiA8PSBkYXRhX2luOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZCA6IGdlbl9kYXRhX3N5bmNfY2VsbF9zaW5nbGUKLQotZWxzZSAvLyBTVEFHRVNfQU1PVU5UID4gMQotCi1iZWdpbiA6IGdlbl9kYXRhX3N5bmNfY2VsbF9tdWx0aQotICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKQotICAgIGJlZ2luCi0gICAgICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgICAgICBkYXRhX2RmZiA8PSAnMDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGRhdGFfZGZmIDw9IHtkYXRhX2RmZltTVEFHRVNfQU1PVU5ULTI6MF0sIGRhdGFfaW59OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZCA6IGdlbl9kYXRhX3N5bmNfY2VsbF9tdWx0aQotCi1lbmRnZW5lcmF0ZQotCi1hc3NpZ24gZGF0YV9vdXQgPSBkYXRhX2RmZltTVEFHRVNfQU1PVU5ULTFdOwotCi1lbmRtb2R1bGUgOiBzY3IxX2RhdGFfc3luY19jZWxsCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IC8gUkRDIFF1YWxpZnllciBBZGFwdGVyIENlbGwKLS8vICAgKFJlc2V0IEdlbmVyYXRpb24gQ2VsbCB3LyBSREMgUXVhbGlmeWVyIEFkYXB0YXRpb24gY2lyY3VpdHJ5KQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVG90YWwgc3RhZ2VzIGFtb3VudCA9Ci0vLyAgICAxIEZyb250IFN5bmMgc3RhZ2UgXAotLy8gICsgMSAoZGVsYXkgaW50cm9kdWNlZCBieSB0aGUgcmVzZXQgb3V0cHV0IGJ1ZmZlciByZWdpc3RlcikKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW1vZHVsZSBzY3IxX3Jlc2V0X3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgKAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X3JzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfbW9kZSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByZXNldF9uX2luX3N5bmMsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcmVzZXRfbl9vdXRfcWxmeSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByZXNldF9uX291dCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByZXNldF9uX3N0YXR1cwotKTsKLQotbG9naWMgcnN0X25fbXV4OwotbG9naWMgcmVzZXRfbl9mcm9udF9mZjsKLQotLy8gRnJvbnQgc3luYyBzdGFnZQotYXNzaWduIHJzdF9uX211eCA9ICh0ZXN0X21vZGUgPT0gMSdiMSkgPyB0ZXN0X3JzdF9uIDogcnN0X247Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X25fbXV4LCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uX211eCkgYmVnaW4KLSAgICAgICAgcmVzZXRfbl9mcm9udF9mZiAgICA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHJlc2V0X25fZnJvbnRfZmYgICAgPD0gcmVzZXRfbl9pbl9zeW5jOwotICAgIGVuZAotZW5kCi0KLS8vICAgU3luYyByZXNldCBvdXRwdXQgZm9yIGFsbCByZXNldCBxdWFsaWZpZXIgY2hhaW5zIHRhcmdldGluZyB0aGlzIHJlc2V0IGRvbWFpbgotLy8gKGZvciByZXNldC1kb21haW4tY3Jvc3NpbmdzIHdpdGggdGhlIGdpdmVuIHJlc2V0IGRvbWFpbiBhcyBhIGRlc3RpbmF0aW9uKS4KLWFzc2lnbiByZXNldF9uX291dF9xbGZ5ID0gcmVzZXRfbl9mcm9udF9mZjsKLQotLy8gUmVzZXQgb3V0cHV0IGJ1ZmZlcgotc2NyMV9yZXNldF9idWZfY2VsbAotaV9yZXNldF9vdXRwdXRfYnVmICgKLSAgICAucnN0X24gICAgICAgICAgICAgIChyc3RfbiksCi0gICAgLmNsayAgICAgICAgICAgICAgICAoY2xrKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICh0ZXN0X21vZGUpLAotICAgIC50ZXN0X3JzdF9uICAgICAgICAgKHRlc3RfcnN0X24pLAotICAgIC5yZXNldF9uX2luICAgICAgICAgKHJlc2V0X25fZnJvbnRfZmYpLAotICAgIC5yZXNldF9uX291dCAgICAgICAgKHJlc2V0X25fb3V0KSwKLSAgICAucmVzZXRfbl9zdGF0dXMgICAgIChyZXNldF9uX3N0YXR1cykKLSk7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYwotCi1tb2R1bGUgc2NyMV9yZXNldF9hbmQyX2NlbGwgKAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgIHJzdF9uX2luLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJzdF9uX291dAotKTsKLQotYXNzaWduIHJzdF9uX291dCA9ICh0ZXN0X21vZGUgPT0gMSdiMSkgPyB0ZXN0X3JzdF9uIDogKCZyc3Rfbl9pbik7Ci0KLWVuZG1vZHVsZSA6IHNjcjFfcmVzZXRfYW5kMl9jZWxsCi0KLQotbW9kdWxlIHNjcjFfcmVzZXRfYW5kM19jZWxsICgKLSAgICBpbnB1dCAgIGxvZ2ljIFsyOjBdICAgICByc3Rfbl9pbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X3JzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfbW9kZSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByc3Rfbl9vdXQKLSk7Ci0KLWFzc2lnbiByc3Rfbl9vdXQgPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6ICgmcnN0X25faW4pOwotCi1lbmRtb2R1bGUgOiBzY3IxX3Jlc2V0X2FuZDNfY2VsbAotCi0KLW1vZHVsZSBzY3IxX3Jlc2V0X211eDJfY2VsbCAoCi0gICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgcnN0X25faW4sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgc2VsZWN0LAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJzdF9uX291dAotKTsKLQotYXNzaWduIHJzdF9uX291dCA9ICh0ZXN0X21vZGUgPT0gMSdiMSkgPyB0ZXN0X3JzdF9uIDogcnN0X25faW5bc2VsZWN0XTsKLQotZW5kbW9kdWxlIDogc2NyMV9yZXNldF9tdXgyX2NlbGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2Nsa19jdHJsLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9jbGtfY3RybC5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliNzJmNC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2Nsa19jdHJsLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9jbGtfY3RybC5zdj4KLS8vLyBAYnJpZWYgICAgICBTQ1IxIGNsb2NrIGNvbnRyb2wKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgotbW9kdWxlIHNjcjFfY2xrX2N0cmwgKAotICAgIGlucHV0ICAgbG9naWMgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIGNvbnRyb2wgbW9kdWxlIGNsb2NrCi0gICAgaW5wdXQgICBsb2dpYyAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgY29udHJvbCBtb2R1bGUgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgdGVzdF9tb2RlLCAgICAgICAgICAgICAgICAgICAgICAvLyBERlQgVGVzdCBNb2RlCi0gICAgaW5wdXQgICBsb2dpYyAgIHRlc3RfcnN0X24sICAgICAgICAgICAgICAgICAgICAgLy8gREZUIFRlc3QgcmVzZXQKLQotICAgIGlucHV0ICAgbG9naWMgICBwaXBlMmNsa2N0bF9zbGVlcF9yZXFfaSwgICAgICAgIC8vIENMSyBkaXNhYmxlIHJlcXVlc3QgZnJvbSBwaXBlCi0gICAgaW5wdXQgICBsb2dpYyAgIHBpcGUyY2xrY3RsX3dha2VfcmVxX2ksICAgICAgICAgLy8gQ0xLIGVuYWJsZSByZXF1ZXN0IGZyb20gcGlwZQotCi0gICAgb3V0cHV0ICBsb2dpYyAgIGNsa2N0bDJwaXBlX2Nsa19hbHdfb25fbywgICAgICAgLy8gTm90IGdhdGVkIHBpcGUgQ0xLCi0gICAgb3V0cHV0ICBsb2dpYyAgIGNsa2N0bDJwaXBlX2Nsa19vLCAgICAgICAgICAgICAgLy8gR2F0ZWQgcGlwZQotICAgIG91dHB1dCAgbG9naWMgICBjbGtjdGwycGlwZV9jbGtfZW5fbywgICAgICAgICAgIC8vIENMSyBlbmFibGVkIGZsYWcKLSAgICBvdXRwdXQgIGxvZ2ljICAgY2xrY3RsMnBpcGVfY2xrX2RiZ2NfbyAgICAgICAgICAvLyBDTEsgZm9yIHBpcGUgZGVidWcgc3Vic3lzdGVtCi0pOwotCi1sb2dpYyBjdHJsX3JzdF9uOwotCi1hc3NpZ24gY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9vID0gY2xrOwotYXNzaWduIGNsa2N0bDJwaXBlX2Nsa19kYmdjX28gICA9IGNsazsKLWFzc2lnbiBjdHJsX3JzdF9uICAgPSAodGVzdF9tb2RlKSA/IHRlc3RfcnN0X24gOiByc3RfbjsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgY3RybF9yc3RfbikgYmVnaW4KLSAgICBpZiAofmN0cmxfcnN0X24pIGJlZ2luCi0gICAgICAgIGNsa2N0bDJwaXBlX2Nsa19lbl9vIDw9IDEnYjE7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKGNsa2N0bDJwaXBlX2Nsa19lbl9vKSBiZWdpbgotICAgICAgICAgICAgaWYgKHBpcGUyY2xrY3RsX3NsZWVwX3JlcV9pICYgfnBpcGUyY2xrY3RsX3dha2VfcmVxX2kpIGJlZ2luCi0gICAgICAgICAgICAgICAgY2xrY3RsMnBpcGVfY2xrX2VuX28gPD0gMSdiMDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyB+Y2xrY3RsMnBpcGVfY2xrX2VuX28KLSAgICAgICAgICAgIGlmIChwaXBlMmNsa2N0bF93YWtlX3JlcV9pKSBiZWdpbgotICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19lbl9vIDw9IDEnYjE7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kIC8vIHBpcGVsaW5lCi0gICAgZW5kCi1lbmQKLQotc2NyMV9jZyBpX3NjcjFfY2dfcGlwZSAoCi0gICAgLmNsayAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgKSwKLSAgICAuY2xrX2VuICAgICAoY2xrY3RsMnBpcGVfY2xrX2VuX28pLAotICAgIC50ZXN0X21vZGUgICh0ZXN0X21vZGUgICAgICAgICAgICksCi0gICAgLmNsa19vdXQgICAgKGNsa2N0bDJwaXBlX2Nsa19vICAgKQotKTsKLQotZW5kbW9kdWxlIDogc2NyMV9jbGtfY3RybAotCi1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9jb3JlX3RvcC5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfY29yZV90b3Auc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MmU0YmIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9jb3JlX3RvcC5zdgorKysgL2Rldi9udWxsCkBAIC0xLDUxOSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2NvcmVfdG9wLnN2PgotLy8vIEBicmllZiAgICAgIFNDUjEgY29yZSB0b3AKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWBpbmNsdWRlICJzY3IxX3RhcGMuc3ZoIgotYGluY2x1ZGUgInNjcjFfZG0uc3ZoIgotYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotbW9kdWxlIHNjcjFfY29yZV90b3AgKAotICAgIC8vIENvbW1vbgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAvLyBQb3dlci1VcCByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIENQVSByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAvLyBERlQgVGVzdCBNb2RlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yc3RfbiwgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUgY2xvY2sKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX28sICAgICAgICAgICAgICAgLy8gQ29yZSByZXNldAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmRjX3FsZnlfbywgICAgICAgICAgICAvLyBDb3JlIFJEQyBxdWFsaWZpZXIKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9vLCAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gcmVzZXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmRjX3FsZnlfbywgICAgICAgICAgICAgLy8gU3lzdGVtIFJEQyBxdWFsaWZpZXIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICBjb3JlX2Z1c2VfbWhhcnRpZF9pLCAgICAgICAgLy8gRnVzZSBNSEFSVElEIHZhbHVlCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2Z1c2VfaWRjb2RlX2ksICAgICAgICAgLy8gRnVzZSBJRENPREUgdmFsdWUKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9JUlFfTElORVNfTlVNLTE6MF0gICAgICAgICAgY29yZV9pcnFfbGluZXNfaSwgICAgICAgICAgIC8vIEV4dGVybmFsIGludGVycnVwdCByZXF1ZXN0IGxpbmVzCi1gZWxzZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaXJxX2V4dF9pLCAgICAgICAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaXJxX3NvZnRfaSwgICAgICAgICAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgaW50ZXJydXB0IHJlcXVlc3QKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2lycV9tdGltZXJfaSwgICAgICAgICAgLy8gTWFjaGluZSB0aW1lciBpbnRlcnJ1cHQgcmVxdWVzdAotCi0gICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgotICAgIGlucHV0ICAgbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfbXRpbWVyX3ZhbF9pLCAgICAgICAgICAvLyBNYWNoaW5lIHRpbWVyIHZhbHVlCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIEludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uLCAgICAgICAgICAgICAgICAvLyBUZXN0IFJlc2V0IChUUlNUbikKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RjaywgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBDbG9jayAoVENLKQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdG1zLCAgICAgICAgICAgICAgICAgICAvLyBUZXN0IE1vZGUgU2VsZWN0IChUTVMpCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZGksICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgRGF0YSBJbnB1dCAoVERJKQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGRvLCAgICAgICAgICAgICAgICAgICAvLyBUZXN0IERhdGEgT3V0cHV0IChURE8pCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZG9fZW4sICAgICAgICAgICAgICAgIC8vIFRETyBFbmFibGUsIHNpZ25hbCBmb3IgVERPIGJ1ZmZlciBjb250cm9sCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtMmNvcmVfcmVxX2Fja19pLCAgICAgICAgLy8gSU1FTSByZXF1ZXN0IGFja25vd2xlZGdlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJpbWVtX3JlcV9vLCAgICAgICAgICAgIC8vIElNRU0gcmVxdWVzdAotICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgIGNvcmUyaW1lbV9jbWRfbywgICAgICAgICAgICAvLyBJTUVNIGNvbW1hbmQKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICBjb3JlMmltZW1fYWRkcl9vLCAgICAgICAgICAgLy8gSU1FTSBhZGRyZXNzCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgaW1lbTJjb3JlX3JkYXRhX2ksICAgICAgICAgIC8vIElNRU0gcmVhZCBkYXRhCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgaW1lbTJjb3JlX3Jlc3BfaSwgICAgICAgICAgIC8vIElNRU0gcmVzcG9uc2UKLQotICAgIC8vIERhdGEgTWVtb3J5IEludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0yY29yZV9yZXFfYWNrX2ksICAgICAgICAvLyBETUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtZW1fcmVxX28sICAgICAgICAgICAgLy8gRE1FTSByZXF1ZXN0Ci0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgY29yZTJkbWVtX2NtZF9vLCAgICAgICAgICAgIC8vIERNRU0gY29tbWFuZAotICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgIGNvcmUyZG1lbV93aWR0aF9vLCAgICAgICAgICAvLyBETUVNIGRhdGEgd2lkdGgKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICBjb3JlMmRtZW1fYWRkcl9vLCAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJkbWVtX3dkYXRhX28sICAgICAgICAgIC8vIERNRU0gd3JpdGUgZGF0YQotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW0yY29yZV9yZGF0YV9pLCAgICAgICAgICAvLyBETUVNIHJlYWQgZGF0YQotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgIGRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgICAvLyBETUVNIHJlc3BvbnNlCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DT1JFX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgICAgPSAyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZXNldCBMb2dpYwotYGlmZGVmIFNDUjFfREJHX0VOCi1gZWxzZSAvLyBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9pbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9zdGF0dXM7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X247Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3N0YXR1c19zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfc3RhdHVzOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJoZHVfcmRjX3FsZnk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtX3JkY19xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X25fc3luYzsKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0vLyBUQVBDLURNIEludGVyZmFjZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2VsOwotbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgICAgICAgICAgdGFwY19kbWlfY2hfaWQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF9jYXB0dXJlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2hpZnQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF91cGRhdGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZGk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZG87Ci0vLwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2VsX3RhcG91dDsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgICAgICAgIHRhcGNfZG1pX2NoX2lkX3RhcG91dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2NoX2NhcHR1cmVfdGFwb3V0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2hpZnRfdGFwb3V0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfdXBkYXRlX3RhcG91dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2NoX3RkaV90YXBvdXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZG9fdGFwaW47Ci0vLwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV93cjsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgIGRtaV9hZGRyOwotbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICAgICAgICAgZG1pX3dkYXRhOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3Jlc3A7Ci1sb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgICAgICAgICBkbWlfcmRhdGE7Ci0vLyBUQVBDLVNDVSBJbnRlcmZhY2UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfc2N1X2NoX3NlbDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfc2N1X2NoX3NlbF90YXBvdXQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3NjdV9jaF90ZG87Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2NoX3RkbzsKLS8vIFNDVSBuZXRzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X247Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X3N0YXR1czsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3RfbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9yZGNfcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kbV9yc3RfbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9yc3RfbjsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIERNLVBpcGVsaW5lIEludGVyZmFjZQotLy8gSEFSVCBSdW4gQ29udHJvbCBpL2YKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2FjdGl2ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9yZXE7Ci10eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcmVzcDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9yZXNwX3FsZnk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcmNvZGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9oYXJ0X2V2ZW50OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1faGFydF9ldmVudF9xbGZ5OwotdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICAgICAgICAgZG1faGFydF9zdGF0dXM7Ci10eXBlX3NjcjFfaGR1X2hhcnRzdGF0dXNfcyAgICAgICAgICAgICAgICAgICAgICBkbV9oYXJ0X3N0YXR1c19xbGZ5OwotLy8gUHJvZ3JhbSBCdWZmZXIgLSBIQVJUIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpL2YKLWxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgIGRtX3BidWZfYWRkcjsKLWxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgIGRtX3BidWZfYWRkcl9xbGZ5OwotbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICAgICAgZG1fcGJ1Zl9pbnN0cjsKLS8vIEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZHJlZ19yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX3JlcV9xbGZ5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZHJlZ193cjsKLWxvZ2ljIFtTQ1IxX0hEVV9EQVRBX1JFR19XSURUSC0xOjBdICAgICAgICAgICAgIGRtX2RyZWdfd2RhdGE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX3Jlc3A7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX2ZhaWw7Ci1sb2dpYyBbU0NSMV9IRFVfREFUQV9SRUdfV0lEVEgtMTowXSAgICAgICAgICAgICBkbV9kcmVnX3JkYXRhOwotCi1sb2dpYyBbYFNDUjFfWExFTi0xIDogMF0gICAgICAgICAgICAgICAgICAgICAgICBkbV9wY19zYW1wbGU7Ci1sb2dpYyBbYFNDUjFfWExFTi0xIDogMF0gICAgICAgICAgICAgICAgICAgICAgICBkbV9wY19zYW1wbGVfcWxmeTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0vLyBHbG9iYWwgY2xvY2sgZ2F0aW5nIGxvZ2ljCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcF9waXBlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FrZV9waXBlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX3BpcGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfcGlwZV9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19kYmdjOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2Fsd19vbjsKLWBlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IExvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX0RCR19FTgotc2NyMV9zY3UgICAgaV9zY3UgKAotICAgIC8vIEdsb2JhbCBzaWduYWxzCi0gICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICApLAotICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgICAgICAoY3B1X3JzdF9uICAgICAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBUQVBDIHNjYW4tY2hhaW5zCi0gICAgLnRhcGNzeW5jMnNjdV9jaF9zZWxfaSAgICAgICh0YXBjX3NjdV9jaF9zZWwgICAgKSwKLSAgICAudGFwY3N5bmMyc2N1X2NoX2lkX2kgICAgICAgKCcwICAgICAgICAgICAgICAgICApLAotICAgIC50YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pICAodGFwY19kbWlfY2hfY2FwdHVyZSksCi0gICAgLnRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pICAgICh0YXBjX2RtaV9jaF9zaGlmdCAgKSwKLSAgICAudGFwY3N5bmMyc2N1X2NoX3VwZGF0ZV9pICAgKHRhcGNfZG1pX2NoX3VwZGF0ZSApLAotICAgIC50YXBjc3luYzJzY3VfY2hfdGRpX2kgICAgICAodGFwY19kbWlfY2hfdGRpICAgICksCi0gICAgLnNjdTJ0YXBjc3luY19jaF90ZG9fbyAgICAgICh0YXBjX3NjdV9jaF90ZG8gICAgKSwKLQotICAgIC8vIElucHV0IHN5bmMgcmVzZXRzOgotICAgIC5uZG1fcnN0X25faSAgICAgICAgICAgICAgICAobmRtX3JzdF9uICAgICAgICAgICksCi0gICAgLmhhcnRfcnN0X25faSAgICAgICAgICAgICAgIChoYXJ0X3JzdF9uICAgICAgICAgKSwKLQotICAgIC8vIEdlbmVyYXRlZCByZXNldHMKLSAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3RfbiAgICAgICAgICApLAotICAgIC5jb3JlX3JzdF9uX28gICAgICAgICAgICAgICAoY29yZV9yc3RfbiAgICAgICAgICksCi0gICAgLmRtX3JzdF9uX28gICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgKSwKLSAgICAuaGR1X3JzdF9uX28gICAgICAgICAgICAgICAgKGhkdV9yc3RfbiAgICAgICAgICApLAotCi0gICAgLy8gUmVzZXRzIHN0YXR1c2VzCi0gICAgLnN5c19yc3Rfc3RhdHVzX28gICAgICAgICAgIChzeXNfcnN0X3N0YXR1cyAgICAgKSwKLSAgICAuY29yZV9yc3Rfc3RhdHVzX28gICAgICAgICAgKGNvcmVfcnN0X3N0YXR1cyAgICApLAotCi0gICAgLy8gUmVzZXQgRG9tYWluIENyb3NzaW5nIChSREMpIHF1YWxpZmllcnMKLSAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgICApLAotICAgIC5jb3JlX3JkY19xbGZ5X28gICAgICAgICAgICAoY29yZV9yZGNfcWxmeV9vICAgICksCi0gICAgLmNvcmUyaGR1X3JkY19xbGZ5X28gICAgICAgIChjb3JlMmhkdV9yZGNfcWxmeSAgKSwKLSAgICAuY29yZTJkbV9yZGNfcWxmeV9vICAgICAgICAgKGNvcmUyZG1fcmRjX3FsZnkgICApLAotICAgIC5oZHUyZG1fcmRjX3FsZnlfbyAgICAgICAgICAoaGR1MmRtX3JkY19xbGZ5ICAgICkKLSk7Ci0KLWFzc2lnbiBzeXNfcnN0X25fbyAgICAgID0gc3lzX3JzdF9uOwotCi0vLyBSZXNldCBpbnB1dHMgYXJlIGFzc3VtZWQgc3luY2hyb25vdXMKLWFzc2lnbiBwd3J1cF9yc3Rfbl9zeW5jID0gcHdydXBfcnN0X247Ci0KLWBlbHNlIC8vIFNDUjFfREJHX0VOCi0KLS8vIFJlc2V0IGlucHV0cyBhcmUgYXNzdW1lZCBzeW5jaHJvbm91cwotYXNzaWduIHB3cnVwX3JzdF9uX3N5bmMgICA9IHB3cnVwX3JzdF9uOwotYXNzaWduIHJzdF9uX3N5bmMgICAgICAgICA9IHJzdF9uOwotYXNzaWduIGNwdV9yc3Rfbl9zeW5jICAgICA9IGNwdV9yc3RfbjsKLWFzc2lnbiBjb3JlX3JzdF9uX2luX3N5bmMgPSByc3Rfbl9zeW5jICYgY3B1X3JzdF9uX3N5bmM7Ci0KLS8vIENvcmUgUmVzZXQ6IGNvcmVfcnN0X24KLXNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyBpX2NvcmVfcnN0bl9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAodGVzdF9yc3RfbiAgICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICApLAotICAgIC5yZXNldF9uX2luX3N5bmMgICAgKGNvcmVfcnN0X25faW5fc3luYyksCi0gICAgLnJlc2V0X25fb3V0X3FsZnkgICAoY29yZV9yc3Rfbl9xbGZ5ICAgKSwKLSAgICAucmVzZXRfbl9vdXQgICAgICAgIChjb3JlX3JzdF9uICAgICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKGNvcmVfcnN0X25fc3RhdHVzICkKLSk7Ci0KLXNjcjFfZGF0YV9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgIChTQ1IxX0NPUkVfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfY29yZV9yc3RuX3N0YXR1c19zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAotICAgIC5kYXRhX2luICAgICAgICAgICAgIChjb3JlX3JzdF9uX3N0YXR1cyAgICAgKSwKLSAgICAuZGF0YV9vdXQgICAgICAgICAgICAoY29yZV9yc3Rfbl9zdGF0dXNfc3luYykKLSk7Ci0KLWFzc2lnbiBjb3JlX3JzdF9zdGF0dXMgICAgICA9IH5jb3JlX3JzdF9uX3N0YXR1c19zeW5jOwotYXNzaWduIGNvcmVfcmRjX3FsZnlfbyAgICAgID0gY29yZV9yc3Rfbl9xbGZ5OwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWFzc2lnbiBjb3JlX3JzdF9uX28gICAgICAgICA9IGNvcmVfcnN0X247Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0NSMSBwaXBlbGluZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3BpcGVfdG9wIGlfcGlwZV90b3AgKAotICAgIC8vIENvbnRyb2wKLSAgICAucGlwZV9yc3RfbiAgICAgICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uICAgICAgICAgICAgICksCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAucGlwZTJoZHVfcmRjX3FsZnlfaSAgICAgICAgICAgIChjb3JlMmhkdV9yZGNfcWxmeSAgICAgICksCi0gICAgLmRiZ19yc3RfbiAgICAgICAgICAgICAgICAgICAgICAoaGR1X3JzdF9uICAgICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgKSwKLWBlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsa19waXBlICAgICAgICAgICAgICAgKSwKLSAgICAucGlwZTJjbGtjdGxfc2xlZXBfcmVxX28gICAgICAgIChzbGVlcF9waXBlICAgICAgICAgICAgICksCi0gICAgLnBpcGUyY2xrY3RsX3dha2VfcmVxX28gICAgICAgICAod2FrZV9waXBlICAgICAgICAgICAgICApLAotICAgIC5jbGtjdGwycGlwZV9jbGtfYWx3X29uX2kgICAgICAgKGNsa19hbHdfb24gICAgICAgICAgICAgKSwKLSAgICAuY2xrY3RsMnBpcGVfY2xrX2RiZ2NfaSAgICAgICAgIChjbGtfZGJnYyAgICAgICAgICAgICAgICksCi0gICAgLmNsa2N0bDJwaXBlX2Nsa19lbl9pICAgICAgICAgICAoY2xrX3BpcGVfZW4gICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQotICAgIC5waXBlMmltZW1fcmVxX28gICAgICAgICAgICAgICAgKGNvcmUyaW1lbV9yZXFfbyAgICAgICAgKSwKLSAgICAucGlwZTJpbWVtX2NtZF9vICAgICAgICAgICAgICAgIChjb3JlMmltZW1fY21kX28gICAgICAgICksCi0gICAgLnBpcGUyaW1lbV9hZGRyX28gICAgICAgICAgICAgICAoY29yZTJpbWVtX2FkZHJfbyAgICAgICApLAotICAgIC5pbWVtMnBpcGVfcmVxX2Fja19pICAgICAgICAgICAgKGltZW0yY29yZV9yZXFfYWNrX2kgICAgKSwKLSAgICAuaW1lbTJwaXBlX3JkYXRhX2kgICAgICAgICAgICAgIChpbWVtMmNvcmVfcmRhdGFfaSAgICAgICksCi0gICAgLmltZW0ycGlwZV9yZXNwX2kgICAgICAgICAgICAgICAoaW1lbTJjb3JlX3Jlc3BfaSAgICAgICApLAotCi0gICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLnBpcGUyZG1lbV9yZXFfbyAgICAgICAgICAgICAgICAoY29yZTJkbWVtX3JlcV9vICAgICAgICApLAotICAgIC5waXBlMmRtZW1fY21kX28gICAgICAgICAgICAgICAgKGNvcmUyZG1lbV9jbWRfbyAgICAgICAgKSwKLSAgICAucGlwZTJkbWVtX3dpZHRoX28gICAgICAgICAgICAgIChjb3JlMmRtZW1fd2lkdGhfbyAgICAgICksCi0gICAgLnBpcGUyZG1lbV9hZGRyX28gICAgICAgICAgICAgICAoY29yZTJkbWVtX2FkZHJfbyAgICAgICApLAotICAgIC5waXBlMmRtZW1fd2RhdGFfbyAgICAgICAgICAgICAgKGNvcmUyZG1lbV93ZGF0YV9vICAgICAgKSwKLSAgICAuZG1lbTJwaXBlX3JlcV9hY2tfaSAgICAgICAgICAgIChkbWVtMmNvcmVfcmVxX2Fja19pICAgICksCi0gICAgLmRtZW0ycGlwZV9yZGF0YV9pICAgICAgICAgICAgICAoZG1lbTJjb3JlX3JkYXRhX2kgICAgICApLAotICAgIC5kbWVtMnBpcGVfcmVzcF9pICAgICAgICAgICAgICAgKGRtZW0yY29yZV9yZXNwX2kgICAgICAgKSwKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gRGVidWcgaW50ZXJmYWNlOgotICAgIC5kYmdfZW4gICAgICAgICAgICAgICAgICAgICAgICAgKDEnYjEgICAgICAgICAgICAgICAgICAgKSwKLSAgICAvLyBEZWJ1ZyBpbnRlcmZhY2U6Ci0gICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIFJ1biBDb250cm9sIGkvZgotICAgIC5kbTJwaXBlX2FjdGl2ZV9pICAgICAgICAgICAgICAgKGRtX2FjdGl2ZSAgICAgICAgICAgICAgKSwKLSAgICAuZG0ycGlwZV9jbWRfcmVxX2kgICAgICAgICAgICAgIChkbV9jbWRfcmVxICAgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfY21kX2kgICAgICAgICAgICAgICAgICAoZG1fY21kICAgICAgICAgICAgICAgICApLAotICAgIC5waXBlMmRtX2NtZF9yZXNwX28gICAgICAgICAgICAgKGRtX2NtZF9yZXNwICAgICAgICAgICAgKSwKLSAgICAucGlwZTJkbV9jbWRfcmNvZGVfbyAgICAgICAgICAgIChkbV9jbWRfcmNvZGUgICAgICAgICAgICksCi0gICAgLnBpcGUyZG1faGFydF9ldmVudF9vICAgICAgICAgICAoZG1faGFydF9ldmVudCAgICAgICAgICApLAotICAgIC5waXBlMmRtX2hhcnRfc3RhdHVzX28gICAgICAgICAgKGRtX2hhcnRfc3RhdHVzICAgICAgICAgKSwKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogUHJvZ3JhbSBCdWZmZXIgLSBIQVJUIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpL2YKLSAgICAucGlwZTJkbV9wYnVmX2FkZHJfbyAgICAgICAgICAgIChkbV9wYnVmX2FkZHIgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfcGJ1Zl9pbnN0cl9pICAgICAgICAgICAoZG1fcGJ1Zl9pbnN0ciAgICAgICAgICApLAotCi0gICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKLSAgICAucGlwZTJkbV9kcmVnX3JlcV9vICAgICAgICAgICAgIChkbV9kcmVnX3JlcSAgICAgICAgICAgICksCi0gICAgLnBpcGUyZG1fZHJlZ193cl9vICAgICAgICAgICAgICAoZG1fZHJlZ193ciAgICAgICAgICAgICApLAotICAgIC5waXBlMmRtX2RyZWdfd2RhdGFfbyAgICAgICAgICAgKGRtX2RyZWdfd2RhdGEgICAgICAgICAgKSwKLSAgICAuZG0ycGlwZV9kcmVnX3Jlc3BfaSAgICAgICAgICAgIChkbV9kcmVnX3Jlc3AgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfZHJlZ19mYWlsX2kgICAgICAgICAgICAoZG1fZHJlZ19mYWlsICAgICAgICAgICApLAotICAgIC5kbTJwaXBlX2RyZWdfcmRhdGFfaSAgICAgICAgICAgKGRtX2RyZWdfcmRhdGEgICAgICAgICAgKSwKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogUEMgaS9mCi0gICAgLnBpcGUyZG1fcGNfc2FtcGxlX28gICAgICAgICAgICAoZG1fcGNfc2FtcGxlICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAuc29jMnBpcGVfaXJxX2xpbmVzX2kgICAgICAgICAgIChjb3JlX2lycV9saW5lc19pICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX0lQSUNfRU4KLSAgICAuc29jMnBpcGVfaXJxX2V4dF9pICAgICAgICAgICAgIChjb3JlX2lycV9leHRfaSAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0gICAgLnNvYzJwaXBlX2lycV9zb2Z0X2kgICAgICAgICAgICAoY29yZV9pcnFfc29mdF9pICAgICAgICApLAotICAgIC5zb2MycGlwZV9pcnFfbXRpbWVyX2kgICAgICAgICAgKGNvcmVfaXJxX210aW1lcl9pICAgICAgKSwKLQotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICAuc29jMnBpcGVfbXRpbWVyX3ZhbF9pICAgICAgICAgIChjb3JlX210aW1lcl92YWxfaSAgICAgICksCi0KLSAgICAvLyBGdXNlCi0gICAgLnNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICAgICAgICAoY29yZV9mdXNlX21oYXJ0aWRfaSAgICApCi0pOwotCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVAgQ29udHJvbGxlciAoVEFQQykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV90YXBjIGlfdGFwYyAoCi0gICAgLy8gSlRBRyBzaWduYWxzCi0gICAgLnRhcGNfdHJzdF9uICAgICAgICAgICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgICAgICApLAotICAgIC50YXBjX3RjayAgICAgICAgICAgICAgICAgICAgICAgKHRhcGNfdGNrICAgICAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190bXMgICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3RtcyAgICAgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRpICAgICAgICAgICAgICAgICAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgICAgICApLAotICAgIC50YXBjX3RkbyAgICAgICAgICAgICAgICAgICAgICAgKHRhcGNfdGRvICAgICAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG9fZW4gICAgICAgICAgICAgICAgICAgICh0YXBjX3Rkb19lbiAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBGdXNlcwotICAgIC5zb2MydGFwY19mdXNlX2lkY29kZV9pICAgICAgICAgKHRhcGNfZnVzZV9pZGNvZGVfaSAgICAgICAgKSwKLQotICAgIC8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMKLSAgICAudGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX28gICAgICh0YXBjX3NjdV9jaF9zZWxfdGFwb3V0ICAgICksCi0gICAgLnRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9vICAgICAodGFwY19kbWlfY2hfc2VsX3RhcG91dCAgICApLAotICAgIC50YXBjMnRhcGNzeW5jX2NoX2lkX28gICAgICAgICAgKHRhcGNfZG1pX2NoX2lkX3RhcG91dCAgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX28gICAgICh0YXBjX2RtaV9jaF9jYXB0dXJlX3RhcG91dCksCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfc2hpZnRfbyAgICAgICAodGFwY19kbWlfY2hfc2hpZnRfdGFwb3V0ICApLAotICAgIC50YXBjMnRhcGNzeW5jX2NoX3VwZGF0ZV9vICAgICAgKHRhcGNfZG1pX2NoX3VwZGF0ZV90YXBvdXQgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF90ZGlfbyAgICAgICAgICh0YXBjX2RtaV9jaF90ZGlfdGFwb3V0ICAgICksCi0gICAgLnRhcGNzeW5jMnRhcGNfY2hfdGRvX2kgICAgICAgICAodGFwY19kbWlfY2hfdGRvX3RhcGluICAgICApCi0pOwotCi1zY3IxX3RhcGNfc3luY2hyb25pemVyIGlfdGFwY19zeW5jaHJvbml6ZXIgKAotICAgIC8vIFN5c3RlbSBjb21tb24gc2lnbmFscwotICAgIC5wd3J1cF9yc3RfbiAgICAgICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgICAgICAgICAgKSwKLSAgICAuZG1fcnN0X24gICAgICAgICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gSlRBRyBjb21tb24gc2lnbmFscwotICAgIC50YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3RjayAgICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCi0gICAgLnRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9pICAgICAodGFwY19zY3VfY2hfc2VsX3RhcG91dCAgICApLAotICAgIC50YXBjc3luYzJzY3VfY2hfc2VsX28gICAgICAgICAgKHRhcGNfc2N1X2NoX3NlbCAgICAgICAgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX2kgICAgICh0YXBjX2RtaV9jaF9zZWxfdGFwb3V0ICAgICksCi0gICAgLnRhcGNzeW5jMmRtaV9jaF9zZWxfbyAgICAgICAgICAodGFwY19kbWlfY2hfc2VsICAgICAgICAgICApLAotCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfaWRfaSAgICAgICAgICAodGFwY19kbWlfY2hfaWRfdGFwb3V0ICAgICApLAotICAgIC50YXBjc3luYzJjb3JlX2NoX2lkX28gICAgICAgICAgKHRhcGNfZG1pX2NoX2lkICAgICAgICAgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX2kgICAgICh0YXBjX2RtaV9jaF9jYXB0dXJlX3RhcG91dCksCi0gICAgLnRhcGNzeW5jMmNvcmVfY2hfY2FwdHVyZV9vICAgICAodGFwY19kbWlfY2hfY2FwdHVyZSAgICAgICApLAotICAgIC50YXBjMnRhcGNzeW5jX2NoX3NoaWZ0X2kgICAgICAgKHRhcGNfZG1pX2NoX3NoaWZ0X3RhcG91dCAgKSwKLSAgICAudGFwY3N5bmMyY29yZV9jaF9zaGlmdF9vICAgICAgICh0YXBjX2RtaV9jaF9zaGlmdCAgICAgICAgICksCi0gICAgLnRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX2kgICAgICAodGFwY19kbWlfY2hfdXBkYXRlX3RhcG91dCApLAotICAgIC50YXBjc3luYzJjb3JlX2NoX3VwZGF0ZV9vICAgICAgKHRhcGNfZG1pX2NoX3VwZGF0ZSAgICAgICAgKSwKLSAgICAudGFwYzJ0YXBjc3luY19jaF90ZGlfaSAgICAgICAgICh0YXBjX2RtaV9jaF90ZGlfdGFwb3V0ICAgICksCi0gICAgLnRhcGNzeW5jMmNvcmVfY2hfdGRpX28gICAgICAgICAodGFwY19kbWlfY2hfdGRpICAgICAgICAgICApLAotICAgIC50YXBjMnRhcGNzeW5jX2NoX3Rkb19pICAgICAgICAgKHRhcGNfZG1pX2NoX3Rkb190YXBpbiAgICAgKSwKLSAgICAudGFwY3N5bmMyY29yZV9jaF90ZG9fbyAgICAgICAgICh0YXBjX2NoX3RkbyAgICAgICAgICAgICAgICkKLSk7Ci1hc3NpZ24gdGFwY19jaF90ZG8gPSAodGFwY19zY3VfY2hfdGRvICYgdGFwY19zY3VfY2hfc2VsKQotICAgICAgICAgICAgICAgICAgIHwgKHRhcGNfZG1pX2NoX3RkbyAmIHRhcGNfZG1pX2NoX3NlbCk7Ci0KLXNjcjFfZG1pIGlfZG1pICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKGRtX3JzdF9uICAgICAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBUQVAgc2Nhbi1jaGFpbnMKLSAgICAudGFwY3N5bmMyZG1pX2NoX3NlbF9pICAgICAgKHRhcGNfZG1pX2NoX3NlbCAgICApLAotICAgIC50YXBjc3luYzJkbWlfY2hfaWRfaSAgICAgICAodGFwY19kbWlfY2hfaWQgICAgICksCi0gICAgLnRhcGNzeW5jMmRtaV9jaF9jYXB0dXJlX2kgICh0YXBjX2RtaV9jaF9jYXB0dXJlKSwKLSAgICAudGFwY3N5bmMyZG1pX2NoX3NoaWZ0X2kgICAgKHRhcGNfZG1pX2NoX3NoaWZ0ICApLAotICAgIC50YXBjc3luYzJkbWlfY2hfdXBkYXRlX2kgICAodGFwY19kbWlfY2hfdXBkYXRlICksCi0gICAgLnRhcGNzeW5jMmRtaV9jaF90ZGlfaSAgICAgICh0YXBjX2RtaV9jaF90ZGkgICAgKSwKLSAgICAuZG1pMnRhcGNzeW5jX2NoX3Rkb19vICAgICAgKHRhcGNfZG1pX2NoX3RkbyAgICApLAotCi0gICAgLy8gRE1JCi0gICAgLmRtMmRtaV9yZXNwX2kgICAgICAgICAgICAgIChkbWlfcmVzcCAgICAgICAgICAgKSwKLSAgICAuZG0yZG1pX3JkYXRhX2kgICAgICAgICAgICAgKGRtaV9yZGF0YSAgICAgICAgICApLAotICAgIC5kbWkyZG1fcmVxX28gICAgICAgICAgICAgICAoZG1pX3JlcSAgICAgICAgICAgICksCi0gICAgLmRtaTJkbV93cl9vICAgICAgICAgICAgICAgIChkbWlfd3IgICAgICAgICAgICAgKSwKLSAgICAuZG1pMmRtX2FkZHJfbyAgICAgICAgICAgICAgKGRtaV9hZGRyICAgICAgICAgICApLAotICAgIC5kbWkyZG1fd2RhdGFfbyAgICAgICAgICAgICAoZG1pX3dkYXRhICAgICAgICAgICkKLSk7Ci0KLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlYnVnIE1vZHVsZSAoRE0pCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBkbV9jbWRfcmVzcF9xbGZ5ICAgID0gZG1fY21kX3Jlc3AgICAmIHskYml0cyhkbV9jbWRfcmVzcCl7aGR1MmRtX3JkY19xbGZ5fX07Ci1hc3NpZ24gZG1faGFydF9ldmVudF9xbGZ5ICA9IGRtX2hhcnRfZXZlbnQgJiB7JGJpdHMoZG1faGFydF9ldmVudCl7aGR1MmRtX3JkY19xbGZ5fX07Ci1hc3NpZ24gZG1faGFydF9zdGF0dXNfcWxmeS5kYmdfc3RhdGUgPSBoZHUyZG1fcmRjX3FsZnkgPyBkbV9oYXJ0X3N0YXR1cy5kYmdfc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOwotYXNzaWduIGRtX2hhcnRfc3RhdHVzX3FsZnkuZXhjZXB0ICAgID0gZG1faGFydF9zdGF0dXMuZXhjZXB0OwotYXNzaWduIGRtX2hhcnRfc3RhdHVzX3FsZnkuZWJyZWFrICAgID0gZG1faGFydF9zdGF0dXMuZWJyZWFrOwotYXNzaWduIGRtX3BidWZfYWRkcl9xbGZ5ICAgPSBkbV9wYnVmX2FkZHIgICYgeyRiaXRzKGRtX3BidWZfYWRkcil7aGR1MmRtX3JkY19xbGZ5fX07Ci1hc3NpZ24gZG1fZHJlZ19yZXFfcWxmeSAgICA9IGRtX2RyZWdfcmVxICAgJiB7JGJpdHMoZG1fZHJlZ19yZXEpe2hkdTJkbV9yZGNfcWxmeX19OwotYXNzaWduIGRtX3BjX3NhbXBsZV9xbGZ5ICAgPSBkbV9wY19zYW1wbGUgICYgeyRiaXRzKGRtX3BjX3NhbXBsZSl7Y29yZTJkbV9yZGNfcWxmeX19OwotCi1zY3IxX2RtIGlfZG0gKAotICAgIC8vIENvbW1vbiBzaWduYWxzCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICksCi0KLSAgICAvLyBETSBpbnRlcm5hbCBpbnRlcmZhY2UKLSAgICAuZG1pMmRtX3JlcV9pICAgICAgICAgICAgICAgKGRtaV9yZXEgICAgICAgICAgICAgICAgKSwKLSAgICAuZG1pMmRtX3dyX2kgICAgICAgICAgICAgICAgKGRtaV93ciAgICAgICAgICAgICAgICAgKSwKLSAgICAuZG1pMmRtX2FkZHJfaSAgICAgICAgICAgICAgKGRtaV9hZGRyICAgICAgICAgICAgICAgKSwKLSAgICAuZG1pMmRtX3dkYXRhX2kgICAgICAgICAgICAgKGRtaV93ZGF0YSAgICAgICAgICAgICAgKSwKLSAgICAuZG0yZG1pX3Jlc3BfbyAgICAgICAgICAgICAgKGRtaV9yZXNwICAgICAgICAgICAgICAgKSwKLSAgICAuZG0yZG1pX3JkYXRhX28gICAgICAgICAgICAgKGRtaV9yZGF0YSAgICAgICAgICAgICAgKSwKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBSdW4gQ29udHJvbCBpL2YKLSAgICAubmRtX3JzdF9uX28gICAgICAgICAgICAgICAgKG5kbV9yc3RfbiAgICAgICAgICAgICAgKSwKLSAgICAuaGFydF9yc3Rfbl9vICAgICAgICAgICAgICAgKGhhcnRfcnN0X24gICAgICAgICAgICAgKSwKLSAgICAuZG0ycGlwZV9hY3RpdmVfbyAgICAgICAgICAgKGRtX2FjdGl2ZSAgICAgICAgICAgICAgKSwKLSAgICAuZG0ycGlwZV9jbWRfcmVxX28gICAgICAgICAgKGRtX2NtZF9yZXEgICAgICAgICAgICAgKSwKLSAgICAuZG0ycGlwZV9jbWRfbyAgICAgICAgICAgICAgKGRtX2NtZCAgICAgICAgICAgICAgICAgKSwKLSAgICAucGlwZTJkbV9jbWRfcmVzcF9pICAgICAgICAgKGRtX2NtZF9yZXNwX3FsZnkgICAgICAgKSwKLSAgICAucGlwZTJkbV9jbWRfcmNvZGVfaSAgICAgICAgKGRtX2NtZF9yY29kZSAgICAgICAgICAgKSwKLSAgICAucGlwZTJkbV9oYXJ0X2V2ZW50X2kgICAgICAgKGRtX2hhcnRfZXZlbnRfcWxmeSAgICAgKSwKLSAgICAucGlwZTJkbV9oYXJ0X3N0YXR1c19pICAgICAgKGRtX2hhcnRfc3RhdHVzX3FsZnkgICAgKSwKLQotICAgIC5zb2MyZG1fZnVzZV9taGFydGlkX2kgICAgICAoY29yZV9mdXNlX21oYXJ0aWRfaSAgICApLAotICAgIC5waXBlMmRtX3BjX3NhbXBsZV9pICAgICAgICAoZG1fcGNfc2FtcGxlX3FsZnkgICAgICApLAotCi0gICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIEFic3RyYWN0IENvbW1hbmQgLyBQcm9ncmFtIEJ1ZmZlciBpL2YKLSAgICAucGlwZTJkbV9wYnVmX2FkZHJfaSAgICAgICAgKGRtX3BidWZfYWRkcl9xbGZ5ICAgICAgKSwKLSAgICAuZG0ycGlwZV9wYnVmX2luc3RyX28gICAgICAgKGRtX3BidWZfaW5zdHIgICAgICAgICAgKSwKLQotICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCi0gICAgLnBpcGUyZG1fZHJlZ19yZXFfaSAgICAgICAgIChkbV9kcmVnX3JlcV9xbGZ5ICAgICAgICksCi0gICAgLnBpcGUyZG1fZHJlZ193cl9pICAgICAgICAgIChkbV9kcmVnX3dyICAgICAgICAgICAgICksCi0gICAgLnBpcGUyZG1fZHJlZ193ZGF0YV9pICAgICAgIChkbV9kcmVnX3dkYXRhICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfZHJlZ19yZXNwX28gICAgICAgIChkbV9kcmVnX3Jlc3AgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfZHJlZ19mYWlsX28gICAgICAgIChkbV9kcmVnX2ZhaWwgICAgICAgICAgICksCi0gICAgLmRtMnBpcGVfZHJlZ19yZGF0YV9vICAgICAgIChkbV9kcmVnX3JkYXRhICAgICAgICAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotCi1gaWZkZWYgU0NSMV9DTEtDVFJMX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEdsb2JhbCBjbG9jayBnYXRpbmcgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9jbGtfY3RybCBpX2Nsa19jdHJsICgKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAoY29yZV9yc3RfbiApLAotICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfbW9kZSAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICksCi0KLSAgICAvLyBTbGVlcC93YWtlIGludGVyZmFjZQotICAgIC5waXBlMmNsa2N0bF9zbGVlcF9yZXFfaSAgICAgICAgKHNsZWVwX3BpcGUgKSwKLSAgICAucGlwZTJjbGtjdGxfd2FrZV9yZXFfaSAgICAgICAgICh3YWtlX3BpcGUgICksCi0KLSAgICAvLyBDbG9ja3MKLSAgICAuY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9vICAgICAgIChjbGtfYWx3X29uICksCi0gICAgLmNsa2N0bDJwaXBlX2Nsa19vICAgICAgICAgICAgICAoY2xrX3BpcGUgICApLAotICAgIC5jbGtjdGwycGlwZV9jbGtfZW5fbyAgICAgICAgICAgKGNsa19waXBlX2VuKSwKLSAgICAuY2xrY3RsMnBpcGVfY2xrX2RiZ2NfbyAgICAgICAgIChjbGtfZGJnYyAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCi0KLWVuZG1vZHVsZSA6IHNjcjFfY29yZV90b3AKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfZG0uc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2RtLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJkZDUzLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfZG0uc3YKKysrIC9kZXYvbnVsbApAQCAtMSwxNDI3ICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfZG0uc3Y+Ci0vLy8gQGJyaWVmICAgICAgRGVidWcgTW9kdWxlIChETSkKLS8vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIC8vCi0gLy8gRnVuY3Rpb25hbGl0eToKLSAvLyAtIEFsbG93cyBkZWJ1Z2dlciB0byBwZXJmb3JtIGEgc3lzdGVtIHJlc2V0IChuZG1fcnN0KQotIC8vIC0gQWxsb3dzIGRlYnVnZ2VyIHRvIGNvbnRyb2wgdGhlIEhBUlQncyBzdGF0ZQotIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBIQVJUJ3Mgc3RhdGUKLSAvLyAtIFByb3ZpZGVzIGRlYnVnZ2VyIHdpdGggQWJzdHJhY3QgQ29tbWFuZCBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgdG86Ci0gLy8gICAtIEFjY2VzcyBNUFJGIHJlZ2lzdGVycwotIC8vICAgLSBBY2Nlc3MgQ1NSIHJlZ2lzdGVycwotIC8vICAgLSBBY2Nlc3MgbWVtb3J5IHdpdGggdGhlIHNhbWUgdmlldyBhbmQgcGVybWlzc2lvbiBhcyB0aGUgaGFydCBoYXMKLSAvLyAtIFByb3ZpZGVzIGRlYnVnZ2VyIHdpdGggQWJzdHJhY3QgQ29tbWFuZCBzdGF0dXMgaW5mb3JtYXRpb24gKGJ1c3kgZmxhZyBhbmQgZXJyb3IgY29kZSkKLSAvLyAtIFByb3ZpZGVzIGRlYnVnZ2VyIHdpdGggUHJvZ3JhbSBCdWZmZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGFsbG93cyB0byBleGVjdXRlCi0gLy8gICBzbWFsbCBwcm9ncmFtcyBvbiBhIGhhbHRlZCBIQVJUCi0gLy8KLSAvLyBTdHJ1Y3R1cmU6Ci0gLy8gLSBETSA8LT4gRE1JIGludGVyZmFjZQotIC8vIC0gRE0gcmVnaXN0ZXJzOgotIC8vICAgLSBETUNPTlRST0wKLSAvLyAgIC0gRE1TVEFUVVMKLSAvLyAtIEFic3RyYWN0IENvbW1hbmQgQ29udHJvbCBsb2dpYwotIC8vIC0gQWJzdHJhY3QgQ29tbWFuZCBGU00KLSAvLyAtIEFic3RyYWN0IENvbW1hbmQgU3RhdHVzIGxvZ2ljCi0gLy8gLSBBYnN0cmFjdCBJbnN0cnVjdGlvbiBsb2dpYwotIC8vIC0gQWJzdHJhY3QgcmVnaXN0ZXJzOgotIC8vICAgLSBDT01NQU5ECi0gLy8gICAtIEFCU1RSQUNUQVVUTwotIC8vICAgLSBQUk9HQlVGMC4uNQotIC8vICAgLSBEQVRBMC4uMQotIC8vIC0gREhJIEZTTQotIC8vIC0gSEFSVCBjb21tYW5kIHJlZ2lzdGVycwotIC8vIC0gREhJIGludGVyZmFjZQotIC8vCi0vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgotYGluY2x1ZGUgInNjcjFfZG0uc3ZoIgotCi1tb2R1bGUgc2NyMV9kbSAoCi0gICAgLy8gU3lzdGVtCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIERNIHJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIERNIGNsb2NrCi0KLSAgICAvLyBETSBpbnRlcm5hbCBpbnRlcmZhY2UKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWkyZG1fcmVxX2ksICAgICAgICAgICAgICAgLy8gRE1JIHJlcXVlc3QKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWkyZG1fd3JfaSwgICAgICAgICAgICAgICAgLy8gRE1JIHdyaXRlCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0RCR19ETUlfQUREUl9XSURUSC0xOjBdICAgICAgZG1pMmRtX2FkZHJfaSwgICAgICAgICAgICAgIC8vIERNSSBhZGRyZXNzCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgZG1pMmRtX3dkYXRhX2ksICAgICAgICAgICAgIC8vIERNSSB3cml0ZSBkYXRhCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0yZG1pX3Jlc3BfbywgICAgICAgICAgICAgIC8vIERNSSByZXNwb25zZQotICAgIG91dHB1dCBsb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgIGRtMmRtaV9yZGF0YV9vLCAgICAgICAgICAgICAvLyBETUkgcmVhZCBkYXRhCi0KLSAgICAvLyBETSA8LT4gUGlwZWxpbmU6IEhBUlQgUnVuIENvbnRyb2wgaS9mCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRtX3JzdF9uX28sICAgICAgICAgICAgICAgIC8vIE5vbi1ETSBSZXNldCBvdXRwdXQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3JzdF9uX28sICAgICAgICAgICAgICAgLy8gSEFSVCByZXNldCBvdXRwdXQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2FjdGl2ZV9vLCAgICAgICAgICAgLy8gRGVidWcgTW9kdWxlIGFjdGl2ZSBmbGFnCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfcmVxX28sICAgICAgICAgIC8vIFJlcXVlc3QgdG8gcGlwZQotICAgIG91dHB1dCB0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgIGRtMnBpcGVfY21kX28sICAgICAgICAgICAgICAvLyBDb21tYW5kIHRvIHBpcGUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2NtZF9yZXNwX2ksICAgICAgICAgLy8gUmVzcG9uc2UgdG8gRGVidWcgTW9kdWxlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9jbWRfcmNvZGVfaSwgICAgICAgIC8vIEhBUlQgQ29tbWFuZCByZXR1cm4gY29kZTogMCAtIE9rOyAxIC0gRXJyb3IKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2hhcnRfZXZlbnRfaSwgICAgICAgLy8gSEFSVCBldmVudCBmbGFnCi0gICAgaW5wdXQgIHR5cGVfc2NyMV9oZHVfaGFydHN0YXR1c19zICAgICAgICAgICAgICAgcGlwZTJkbV9oYXJ0X3N0YXR1c19pLCAgICAgIC8vIEhBUlQgU3RhdHVzCi0KLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICBzb2MyZG1fZnVzZV9taGFydGlkX2ksICAgICAgLy8gUk8gTUhBUlRJRCB2YWx1ZQotICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fcGNfc2FtcGxlX2ksICAgICAgICAvLyBSTyBQQyB2YWx1ZSBmb3Igc2FtcGxpbmcKLQotICAgIC8vIEhBUlQgQWJzdHJhY3QgQ29tbWFuZCAvIFByb2dyYW0gQnVmZmVyIGkvZgotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgIHBpcGUyZG1fcGJ1Zl9hZGRyX2ksICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBhZGRyZXNzCi0gICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRILTE6MF0gICAgZG0ycGlwZV9wYnVmX2luc3RyX28sICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIGluc3RydWN0aW9uCi0KLSAgICAvLyBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfcmVxX2ksICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZXF1ZXN0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3dyX2ksICAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgd3JpdGUKLSAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfd2RhdGFfaSwgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZSBkYXRhCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9kcmVnX3Jlc3BfbywgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVzcG9uc2UKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfZmFpbF9vLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciBmYWlsIC0gcG9zc2libHkgbm90IG5lZWRlZCA/Ci0gICAgb3V0cHV0IGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgZG0ycGlwZV9kcmVnX3JkYXRhX28gICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVhZCBkYXRhCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVkZWYgZW51bSBsb2dpYyBbMzowXSB7Ci0gICAgQUJTX1NUQVRFX0lETEUsCi0gICAgQUJTX1NUQVRFX0VSUiwKLSAgICBBQlNfU1RBVEVfRVhFQywKLSAgICBBQlNfU1RBVEVfWFJFR19SVywKLSAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRywKLSAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSLAotICAgIEFCU19TVEFURV9NRU1fUlcsCi0gICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRywKLSAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFIsCi0gICAgQUJTX1NUQVRFX0NTUl9STywKLSAgICBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRywKLSAgICBBQlNfU1RBVEVfQ1NSX1JXLAotICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUcKLX0gdHlwZV9zY3IxX2Fic19mc21fZTsKLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFsyOjBdIHsKLSAgICBESElfU1RBVEVfSURMRSwKLSAgICBESElfU1RBVEVfRVhFQywKLSAgICBESElfU1RBVEVfRVhFQ19SVU4sCi0gICAgREhJX1NUQVRFX0VYRUNfSEFMVCwKLSAgICBESElfU1RBVEVfSEFMVF9SRVEsCi0gICAgREhJX1NUQVRFX1JFU1VNRV9SRVEsCi0gICAgREhJX1NUQVRFX1JFU1VNRV9SVU4KLX0gdHlwZV9zY3IxX2RoaV9mc21fZTsKLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIOjBdIHsKLSAgICBBQlNfRVJSX05PTkUgICAgICA9IChTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIKzEpJygnZDApLAotICAgIEFCU19FUlJfQlVTWSAgICAgID0gKFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEgrMSknKCdkMSksCi0gICAgQUJTX0VSUl9DTUQgICAgICAgPSAoU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSCsxKScoJ2QyKSwKLSAgICBBQlNfRVJSX0VYQ0VQVElPTiA9IChTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIKzEpJygnZDMpLAotICAgIEFCU19FUlJfTk9IQUxUICAgID0gKFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEgrMSknKCdkNCkKLX0gdHlwZV9zY3IxX2Fic19lcnJfZTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gb3Bjb2RlIHBhcmFtZXRlcnMKLWxvY2FscGFyYW0gICAgICBTQ1IxX09QX1NZU1RFTSAgICAgID0gNydiMTExXzAwMTE7Ci1sb2NhbHBhcmFtICAgICAgU0NSMV9PUF9MT0FEICAgICAgICA9IDcnYjAwMF8wMDExOwotbG9jYWxwYXJhbSAgICAgIFNDUjFfT1BfU1RPUkUgICAgICAgPSA3J2IwMTBfMDAxMTsKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gZnVuY3QzIHBhcmFtZXRlcnMKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19DU1JSVyAgICAgICA9IDMnYjAwMTsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19DU1JSUyAgICAgICA9IDMnYjAxMDsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19TQiAgICAgICAgICA9IDMnYjAwMDsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19TSCAgICAgICAgICA9IDMnYjAwMTsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19TVyAgICAgICAgICA9IDMnYjAxMDsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19MVyAgICAgICAgICA9IDMnYjAxMDsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19MQlUgICAgICAgICA9IDMnYjEwMDsKLWxvY2FscGFyYW0gICAgICBTQ1IxX0ZVTkNUM19MSFUgICAgICAgICA9IDMnYjEwMTsKLQotLy8gRE1DT05UUk9MIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtICAgICAgRE1DT05UUk9MX0hBUlRSRVNFVCAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNQ09OVFJPTF9SRVNFUlZFREIgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETUNPTlRST0xfSEFTRUwgICAgICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1DT05UUk9MX0hBUlRTRUxMTyAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNQ09OVFJPTF9IQVJUU0VMSEkgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETUNPTlRST0xfUkVTRVJWRURBICAgICA9IDEnZDA7Ci0KLS8vIERNU1RBVFVTIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfUkVTRVJWRURDICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0lNUEVCUkVBSyAgICAgID0gMSdkMTsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19SRVNFUlZFREIgICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfQUxMVU5BVkFJTCAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0FOWVVOQVZBSUwgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19BTExBTllVTkFWQUlMICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfQUxMQU5ZTk9ORVhJU1QgPSAxJ2IwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0FVVEhFTlRJQ0FURUQgID0gMSdkMTsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19BVVRIQlVTWSAgICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfUkVTRVJWRURBICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0RFVlRSRUVWQUxJRCAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBETVNUQVRVU19WRVJTSU9OICAgICAgICA9IDInZDI7Ci0KLS8vIEhBUlRJTkZPIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtICAgICAgSEFSVElORk9fUkVTRVJWRURCICAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIEhBUlRJTkZPX05TQ1JBVENIICAgICAgID0gNCdkMTsKLWxvY2FscGFyYW0gICAgICBIQVJUSU5GT19SRVNFUlZFREEgICAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgSEFSVElORk9fREFUQUFDQ0VTUyAgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIEhBUlRJTkZPX0RBVEFTSVpFICAgICAgID0gNCdkMTsKLWxvY2FscGFyYW0gICAgICBIQVJUSU5GT19EQVRBQUREUiAgICAgICA9IDEyJ2g3YjI7Ci0KLS8vIEFCU1RSQUNUQ1MgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gICAgICBBQlNUUkFDVENTX1JFU0VSVkVERCAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgQUJTVFJBQ1RDU19QUk9HQlVGU0laRSAgPSA1J2Q2OwotbG9jYWxwYXJhbSAgICAgIEFCU1RSQUNUQ1NfUkVTRVJWRURDICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBBQlNUUkFDVENTX1JFU0VSVkVEQiAgICA9IDEnZDA7Ci1sb2NhbHBhcmFtICAgICAgQUJTVFJBQ1RDU19SRVNFUlZFREEgICAgPSAxJ2QwOwotbG9jYWxwYXJhbSAgICAgIEFCU1RSQUNUQ1NfREFUQUNPVU5UICAgID0gNCdkMjsKLQotbG9jYWxwYXJhbSAgICAgIEFCU19DTURfSEFSVFJFRyAgICAgICAgID0gMSdkMDsKLWxvY2FscGFyYW0gICAgICBBQlNfQ01EX0hBUlRNRU0gICAgICAgICA9IDInZDI7Ci1sb2NhbHBhcmFtICAgICAgQUJTX0NNRF9IQVJUUkVHX0NTUiAgICAgPSA0J2IwMDAwOwotbG9jYWxwYXJhbSAgICAgIEFCU19DTURfSEFSVFJFR19JTlRGUFUgID0gNCdiMDAwMTsKLWxvY2FscGFyYW0gICAgICBBQlNfQ01EX0hBUlRSRUdfSU5UICAgICA9IDcnYjAwMF8wMDAwOwotbG9jYWxwYXJhbSAgICAgIEFCU19DTURfSEFSVFJFR19GUFUgICAgID0gNydiMDAwXzAwMDE7Ci1sb2NhbHBhcmFtICAgICAgQUJTX0VYRUNfRUJSRUFLICAgICAgICAgPSAzMidiMDAwMDAwMDAwMDAxXzAwMDAwXzAwMF8wMDAwMF8xMTEwMDExOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRE0gPC0+IERNSSBpbnRlcmZhY2UgaW50ZXJuYWwgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUmVnaXN0ZXIgc2VsZWN0aW9uIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9kbWNvbnRyb2w7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfYWJzdHJhY3RjczsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9hYnN0cmFjdGF1dG87Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfY29tbWFuZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JwdF9jb21tYW5kOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2RhdGEwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2RhdGExOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX3Byb2didWYwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX3Byb2didWYxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX3Byb2didWYyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX3Byb2didWYzOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX3Byb2didWY0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX3Byb2didWY1OwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfYW55OwotCi0vLyBSZWdpc3RlcnMgd3JpdGUgcmVxdWVzdCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF93cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3Nfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMF93cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExX3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJlZ193cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZXhlY193cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2didWYwX3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2J1ZjFfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nYnVmMl93cl9yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2didWYzX3dyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2J1ZjRfd3JfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nYnVmNV93cl9yZXE7Ci0KLS8vIERNIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRE0gY2xvY2sgZW5hYmxlIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2VuX2RtOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfZW5fZG1fZmY7Ci0KLS8vIERNQ09OVFJPTCByZWdpc3RlciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9oYWx0cmVxX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfaGFsdHJlcV9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX25kbXJlc2V0X2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfbmRtcmVzZXRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX2RtYWN0aXZlX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfZG1hY3RpdmVfbmV4dDsKLQotLy8gQXV4aWxhcnkgU2tpcCBSZXNldCBPbiBQb3dlcnVwIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVyZXNldF9za2lwX3B3cnVwX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlcmVzZXRfc2tpcF9wd3J1cF9uZXh0OwotCi0vLyBETVNUQVRVUyByZWdpc3RlciBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX25leHQ7Ci0KLS8vIEFic3RyYWN0IGNvbW1hbmQgY29udHJvbCBsb2dpYyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgICAgICAgICAgIGFic19jbWQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3Jfcm87Ci1sb2dpYyBbU0NSMV9EQkdfQ09NTUFORF9UWVBFX1dEVEg6MF0gICAgICAgICAgICAgIGFic19jbWRfdHlwZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdhY3M7Ci1sb2dpYyBbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVHTk9fSEktMTI6MF0gIGFic19jbWRfcmVndHlwZTsKLWxvZ2ljIFs2OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdmaWxlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ3dyOwotbG9naWMgW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfV0RUSDowXSAgICBhYnNfY21kX3JlZ3NpemU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfZXhlY3Byb2didWY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVndmFsaWQ7Ci1sb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbWVtc2l6ZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tZW13cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tZW12YWxpZDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ3NpemVfdmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbWVtc2l6ZV92ZDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3dyX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3dyX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfbmV4dDsKLWxvZ2ljIFsxMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdubzsKLWxvZ2ljIFsxMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdub19mZjsKLWxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9zaXplX2ZmOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3NpemVfbmV4dDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcmVnX2FjY2Vzc19jc3I7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19yZWdfYWNjZXNzX21wcmY7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9oYXJ0cmVnX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2hhcnRtZW1fdmQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdfYWNjZXNzX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3JfYWNjZXNzX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tcHJmX2FjY2Vzc19yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfZXhlY3Byb2didWZfcmVxOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3JvX2FjY2Vzc192ZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3JfcndfYWNjZXNzX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21wcmZfYWNjZXNzX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21lbV9hY2Nlc3NfdmQ7Ci0KLS8vIEFic3RyYWN0IEZTTSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlX3NjcjFfYWJzX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21fZmY7Ci10eXBlX3NjcjFfYWJzX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21fbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9pZGxlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX2V4ZWM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21fY3NyX3JvOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX2VycjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV91c2VfYWRkcjsKLQotLy8gQWJzdHJhY3QgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbl9hYnM7Ci0KLS8vIEFCU1RSQUNUQ1MgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2J1c3k7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3Nfcm9fZW47Ci0KLS8vIENPTU1BTkQgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY29tbWFuZF9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NvbW1hbmRfbmV4dDsKLQotLy8gQUJTVFJBQ1RBVVRPIHJlZ2lzdGVyIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2F1dG9leGVjX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfYXV0b2V4ZWNfbmV4dDsKLQotLy8gUHJvZ3JhbSBidWZmZXIgcmVnaXN0ZXJzCi1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wcm9nYnVmMF9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3Byb2didWYxX2ZmOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcHJvZ2J1ZjJfZmY7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wcm9nYnVmM19mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3Byb2didWY0X2ZmOwotbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcHJvZ2J1ZjVfZmY7Ci0KLS8vIERhdGEgMC8xIHJlZ2lzdGVycwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMF94cmVnX3NhdmU7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19kYXRhMF9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2RhdGEwX25leHQ7Ci1sb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19kYXRhMV9mZjsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2RhdGExX25leHQ7Ci0KLS8vIEFic3RyYWN0IGNvbW1hbmQgc3RhdHVzIGxvZ2ljIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEFic3RyYWN0IGVycm9yIGV4Y2VwdGlvbiBmbGFnIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnJfZXhjX3VwZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9leGNfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnJfZXhjX25leHQ7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV91cGQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfbmV4dDsKLQotdHlwZV9zY3IxX2Fic19lcnJfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9mZjsKLXR5cGVfc2NyMV9hYnNfZXJyX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dDsKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIHJlcXVlc3QgcmVnaXN0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2V4ZWNfcmVxX25leHQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19leGVjX3JlcV9mZjsKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKLWxvZ2ljIFs0OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2luc3RyX3JkOwotbG9naWMgWzQ6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfaW5zdHJfcnMxOwotbG9naWMgWzQ6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfaW5zdHJfcnMyOwotbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfaW5zdHJfbWVtX2Z1bmN0MzsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2V4ZWNfaW5zdHJfbmV4dDsKLWxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2V4ZWNfaW5zdHJfZmY7Ci0KLS8vIERISSBGU00gc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZV9zY3IxX2RoaV9mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX25leHQ7Ci10eXBlX3NjcjFfZGhpX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21fZmY7Ci10eXBlX3NjcjFfZGhpX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9yZXE7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9pZGxlOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX2V4ZWM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21fZXhlY19oYWx0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX2hhbHRfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX3Jlc3VtZV9yZXE7Ci0KLS8vIERISSBpbnRlcmZhY2Ugc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfcmVzcF9vazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9yc3RfdW5leHA7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbHRfcmVxX3ZkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVfcmVxX3ZkOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9yZXNwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfcmVzcF9leGM7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9wYnVmX2VicmVha19mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9wYnVmX2VicmVha19uZXh0OwotCi0vLyBIQVJUIGNvbW1hbmQgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfY21kX3JlcV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9jbWRfcmVxX25leHQ7Ci0KLXR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9jbWRfZmY7Ci10eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfY21kX25leHQ7Ci0KLS8vIEhBUlQgc3RhdGUgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3N0YXRlX3Jlc2V0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3N0YXRlX3J1bjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9zdGF0ZV9kcnVuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3N0YXRlX2RoYWx0OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRE0gPC0+IERNSSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlZ2lzdGVyIHNlbGVjdGlvbiBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkbWlfcmVxX2RtY29udHJvbCAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX0RNQ09OVFJPTCk7Ci0gICAgZG1pX3JlcV9hYnN0cmFjdGNzICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19BQlNUUkFDVENTKTsKLSAgICBkbWlfcmVxX2Fic3RyYWN0YXV0byA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX0FCU1RSQUNUQVVUTyk7Ci0gICAgZG1pX3JlcV9kYXRhMCAgICAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19EQVRBMCk7Ci0gICAgZG1pX3JlcV9kYXRhMSAgICAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19EQVRBMSk7Ci0gICAgZG1pX3JlcV9jb21tYW5kICAgICAgPSBkbWkyZG1fcmVxX2kgJiAoZG1pMmRtX2FkZHJfaSA9PSBTQ1IxX0RCR19DT01NQU5EKTsKLSAgICBkbWlfcnB0X2NvbW1hbmQgICAgICA9IChhYnNfYXV0b2V4ZWNfZmYgJiBkbWlfcmVxX2RhdGEwKTsKLSAgICBkbWlfcmVxX3Byb2didWYwICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX1BST0dCVUYwKTsKLSAgICBkbWlfcmVxX3Byb2didWYxICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX1BST0dCVUYxKTsKLSAgICBkbWlfcmVxX3Byb2didWYyICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX1BST0dCVUYyKTsKLSAgICBkbWlfcmVxX3Byb2didWYzICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX1BST0dCVUYzKTsKLSAgICBkbWlfcmVxX3Byb2didWY0ICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX1BST0dCVUY0KTsKLSAgICBkbWlfcmVxX3Byb2didWY1ICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX1BST0dCVUY1KTsKLWVuZAotCi1hc3NpZ24gZG1pX3JlcV9hbnkgPSBkbWlfcmVxX2NvbW1hbmQgIHwgZG1pX3JwdF9jb21tYW5kICB8IGRtaV9yZXFfYWJzdHJhY3RhdXRvCi0gICAgICAgICAgICAgICAgICAgfCBkbWlfcmVxX2RhdGEwICAgIHwgZG1pX3JlcV9kYXRhMSAgICB8IGRtaV9yZXFfcHJvZ2J1ZjAKLSAgICAgICAgICAgICAgICAgICB8IGRtaV9yZXFfcHJvZ2J1ZjEgfCBkbWlfcmVxX3Byb2didWYyIHwgZG1pX3JlcV9wcm9nYnVmMwotICAgICAgICAgICAgICAgICAgIHwgZG1pX3JlcV9wcm9nYnVmNCB8IGRtaV9yZXFfcHJvZ2J1ZjU7Ci0KLQotLy8gUmVhZCBkYXRhIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRtMmRtaV9yZGF0YV9vID0gJzA7Ci0KLSAgICBjYXNlIChkbWkyZG1fYWRkcl9pKQotICAgICAgICBTQ1IxX0RCR19ETVNUQVRVUzogYmVnaW4KLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQ19ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQ19MT10gICAgID0gRE1TVEFUVVNfUkVTRVJWRURDOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfSU1QRUJSRUFLXSAgICAgICAgPSBETVNUQVRVU19JTVBFQlJFQUs7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREJfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREJfTE9dICAgICA9IERNU1RBVFVTX1JFU0VSVkVEQjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FMTEhBVkVSRVNFVF0gICAgID0gZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FOWUhBVkVSRVNFVF0gICAgID0gZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FMTFJFU1VNRUFDS10gICAgID0gZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FOWVJFU1VNRUFDS10gICAgID0gZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FMTE5PTkVYSVNURU5UXSAgID0gRE1TVEFUVVNfQUxMQU5ZTk9ORVhJU1Q7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTllOT05FWElTVEVOVF0gICA9IERNU1RBVFVTX0FMTEFOWU5PTkVYSVNUOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQUxMVU5BVkFJTF0gICAgICAgPSBETVNUQVRVU19BTExBTllVTkFWQUlMOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQU5ZVU5BVkFJTF0gICAgICAgPSBETVNUQVRVU19BTExBTllVTkFWQUlMOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQUxMUlVOTklOR10gICAgICAgPSB+ZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FOWVJVTk5JTkddICAgICAgID0gfmRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTExIQUxURURdICAgICAgICA9IGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTllIQUxURURdICAgICAgICA9IGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BVVRIRU5USUNBVEVEXSAgICA9IERNU1RBVFVTX0FVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BVVRIQlVTWV0gICAgICAgICA9IERNU1RBVFVTX0FVVEhCVVNZOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURBXSAgICAgICAgPSBETVNUQVRVU19SRVNFUlZFREE7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19ERVZUUkVFVkFMSURdICAgICA9IERNU1RBVFVTX0RFVlRSRUVWQUxJRDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX1ZFUlNJT05fSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETVNUQVRVU19WRVJTSU9OX0xPXSAgICAgICA9IERNU1RBVFVTX1ZFUlNJT047OwotICAgICAgICBlbmQKLQotICAgICAgICBTQ1IxX0RCR19ETUNPTlRST0w6IGJlZ2luCi0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfSEFMVFJFUV0gICAgICAgICA9IGRtY29udHJvbF9oYWx0cmVxX2ZmOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX1JFU1VNRVJFUV0gICAgICAgPSBkbWNvbnRyb2xfcmVzdW1lcmVxX2ZmOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRSRVNFVF0gICAgICAgPSBETUNPTlRST0xfSEFSVFJFU0VUOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0FDS0hBVkVSRVNFVF0gICAgPSBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X2ZmOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX1JFU0VSVkVEQl0gICAgICAgPSBETUNPTlRST0xfUkVTRVJWRURCOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0hBU0VMXSAgICAgICAgICAgPSBETUNPTlRST0xfSEFTRUw7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTExPX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxMT19MT10gICAgPSBETUNPTlRST0xfSEFSVFNFTExPOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxISV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMSElfTE9dICAgID0gRE1DT05UUk9MX0hBUlRTRUxISTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9SRVNFUlZFREFfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURBX0xPXSAgICA9IERNQ09OVFJPTF9SRVNFUlZFREE7Ci0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfTkRNUkVTRVRdICAgICAgICA9IGRtY29udHJvbF9uZG1yZXNldF9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9ETUFDVElWRV0gICAgICAgID0gZG1jb250cm9sX2RtYWN0aXZlX2ZmOwotICAgICAgICBlbmQKLQotICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTOiBiZWdpbgotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRERfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVERF9MT10gICA9IEFCU1RSQUNUQ1NfUkVTRVJWRUREOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19QUk9HQlVGU0laRV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfUFJPR0JVRlNJWkVfTE9dID0gQUJTVFJBQ1RDU19QUk9HQlVGU0laRTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURDX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRENfTE9dICAgPSBBQlNUUkFDVENTX1JFU0VSVkVEQzsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfQlVTWV0gICAgICAgICAgID0gYWJzdHJhY3Rjc19idXN5OwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFREJdICAgICAgPSBBQlNUUkFDVENTX1JFU0VSVkVEQjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfTE9dICAgICAgPSBhYnN0cmFjdGNzX2NtZGVycl9mZjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRURBX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFREFfTE9dICAgPSBBQlNUUkFDVENTX1JFU0VSVkVEQTsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0FCU1RSQUNUQ1NfREFUQUNPVU5UX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDU19EQVRBQ09VTlRfTE9dICAgPSBBQlNUUkFDVENTX0RBVEFDT1VOVDsKLSAgICAgICAgZW5kCi0KLSAgICAgICAgU0NSMV9EQkdfSEFSVElORk86IGJlZ2luCi0gICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREJfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREJfTE9dICAgICA9IEhBUlRJTkZPX1JFU0VSVkVEQjsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0hBUlRJTkZPX05TQ1JBVENIX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfSEFSVElORk9fTlNDUkFUQ0hfTE9dICAgICAgPSBIQVJUSU5GT19OU0NSQVRDSDsKLSAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQV9MT10gICAgID0gSEFSVElORk9fUkVTRVJWRURBOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfSEFSVElORk9fREFUQUFDQ0VTU10gICAgICAgPSBIQVJUSU5GT19EQVRBQUNDRVNTOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfSEFSVElORk9fREFUQVNJWkVfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19IQVJUSU5GT19EQVRBU0laRV9MT10gICAgICA9IEhBUlRJTkZPX0RBVEFTSVpFOwotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfSEFSVElORk9fREFUQUFERFJfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUREUl9MT10gICAgICA9IEhBUlRJTkZPX0RBVEFBRERSOwotICAgICAgICBlbmQKLQotICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVEFVVE86IGRtMmRtaV9yZGF0YV9vWzBdID0gYWJzX2F1dG9leGVjX2ZmOwotICAgICAgICBTQ1IxX0RCR19EQVRBMCAgICAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX2RhdGEwX2ZmOwotICAgICAgICBTQ1IxX0RCR19EQVRBMSAgICAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX2RhdGExX2ZmOwotICAgICAgICBTQ1IxX0RCR19QUk9HQlVGMCAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX3Byb2didWYwX2ZmOwotICAgICAgICBTQ1IxX0RCR19QUk9HQlVGMSAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX3Byb2didWYxX2ZmOwotICAgICAgICBTQ1IxX0RCR19QUk9HQlVGMiAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX3Byb2didWYyX2ZmOwotICAgICAgICBTQ1IxX0RCR19QUk9HQlVGMyAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX3Byb2didWYzX2ZmOwotICAgICAgICBTQ1IxX0RCR19QUk9HQlVGNCAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX3Byb2didWY0X2ZmOwotICAgICAgICBTQ1IxX0RCR19QUk9HQlVGNSAgICA6IGRtMmRtaV9yZGF0YV9vICAgID0gYWJzX3Byb2didWY1X2ZmOwotICAgICAgICBTQ1IxX0RCR19IQUxUU1VNMCAgICA6IGRtMmRtaV9yZGF0YV9vWzBdID0gZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKLQotICAgICAgICBkZWZhdWx0OiBiZWdpbgotICAgICAgICAgICAgZG0yZG1pX3JkYXRhX28gPSAnMDsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vIFJlc3BvbnNlCi1hc3NpZ24gZG0yZG1pX3Jlc3BfbyA9IDEnYjE7Ci0KLS8vIFdyaXRlIHJlcXVlc3RzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBkbWNvbnRyb2xfd3JfcmVxICA9IGRtaV9yZXFfZG1jb250cm9sICAgICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gZGF0YTBfd3JfcmVxICAgICAgPSBkbWlfcmVxX2RhdGEwICAgICAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIGRhdGExX3dyX3JlcSAgICAgID0gZG1pX3JlcV9kYXRhMSAgICAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBkcmVnX3dyX3JlcSAgICAgICA9IHBpcGUyZG1fZHJlZ19yZXFfaSAgICYgcGlwZTJkbV9kcmVnX3dyX2k7Ci1hc3NpZ24gY29tbWFuZF93cl9yZXEgICAgPSBkbWlfcmVxX2NvbW1hbmQgICAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIGF1dG9leGVjX3dyX3JlcSAgID0gZG1pX3JlcV9hYnN0cmFjdGF1dG8gJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBwcm9nYnVmMF93cl9yZXEgICA9IGRtaV9yZXFfcHJvZ2J1ZjAgICAgICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gcHJvZ2J1ZjFfd3JfcmVxICAgPSBkbWlfcmVxX3Byb2didWYxICAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIHByb2didWYyX3dyX3JlcSAgID0gZG1pX3JlcV9wcm9nYnVmMiAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBwcm9nYnVmM193cl9yZXEgICA9IGRtaV9yZXFfcHJvZ2J1ZjMgICAgICYgZG1pMmRtX3dyX2k7Ci1hc3NpZ24gcHJvZ2J1ZjRfd3JfcmVxICAgPSBkbWlfcmVxX3Byb2didWY0ICAgICAmIGRtaTJkbV93cl9pOwotYXNzaWduIHByb2didWY1X3dyX3JlcSAgID0gZG1pX3JlcV9wcm9nYnVmNSAgICAgJiBkbWkyZG1fd3JfaTsKLWFzc2lnbiBhYnN0cmFjdGNzX3dyX3JlcSA9IGRtaV9yZXFfYWJzdHJhY3RjcyAgICYgZG1pMmRtX3dyX2k7Ci0KLS8vIEhBUlQgc3RhdGUgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGhhcnRfc3RhdGVfcmVzZXQgPSAocGlwZTJkbV9oYXJ0X3N0YXR1c19pLmRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVCk7Ci1hc3NpZ24gaGFydF9zdGF0ZV9ydW4gICA9IChwaXBlMmRtX2hhcnRfc3RhdHVzX2kuZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX1JVTik7Ci1hc3NpZ24gaGFydF9zdGF0ZV9kaGFsdCA9IChwaXBlMmRtX2hhcnRfc3RhdHVzX2kuZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpOwotYXNzaWduIGhhcnRfc3RhdGVfZHJ1biAgPSAocGlwZTJkbV9oYXJ0X3N0YXR1c19pLmRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERNIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gRE0gY2xvY2sgZW5hYmxlIHJlZ2lzdGVyCi0gLy8gLSBBdXhpbGFyeSBTa2lwIFJlc2V0IE9uIFBvd2VydXAgcmVnaXN0ZXIKLSAvLyAtIERNQ09OVFJPTCByZWdpc3RlcgotIC8vIC0gRE1TVEFUVVMgcmVnaXN0ZXIKLQotLy8gRE0gY2xvY2sgZW5hYmxlIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gY2xrX2VuX2RtID0gZG1jb250cm9sX3dyX3JlcSB8IGRtY29udHJvbF9kbWFjdGl2ZV9mZiB8IGNsa19lbl9kbV9mZjsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgY2xrX2VuX2RtX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgY2xrX2VuX2RtX2ZmIDw9IGRtY29udHJvbF9kbWFjdGl2ZV9mZjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gZG0ycGlwZV9hY3RpdmVfbyA9IGNsa19lbl9kbV9mZjsKLQotLy8gRE1DT05UUk9MIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBkbWNvbnRyb2xfZG1hY3RpdmVfZmYgICAgIDw9IDEnYjA7Ci0gICAgICAgIGRtY29udHJvbF9uZG1yZXNldF9mZiAgICAgPD0gMSdiMDsKLSAgICAgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9mZiA8PSAxJ2IwOwotICAgICAgICBkbWNvbnRyb2xfaGFsdHJlcV9mZiAgICAgIDw9IDEnYjA7Ci0gICAgICAgIGRtY29udHJvbF9yZXN1bWVyZXFfZmYgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBkbWNvbnRyb2xfZG1hY3RpdmVfZmYgICAgIDw9IGRtY29udHJvbF9kbWFjdGl2ZV9uZXh0OwotICAgICAgICBkbWNvbnRyb2xfbmRtcmVzZXRfZmYgICAgIDw9IGRtY29udHJvbF9uZG1yZXNldF9uZXh0OwotICAgICAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X2ZmIDw9IGRtY29udHJvbF9hY2toYXZlcmVzZXRfbmV4dDsKLSAgICAgICAgZG1jb250cm9sX2hhbHRyZXFfZmYgICAgICA8PSBkbWNvbnRyb2xfaGFsdHJlcV9uZXh0OwotICAgICAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX2ZmICAgIDw9IGRtY29udHJvbF9yZXN1bWVyZXFfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gZG1jb250cm9sX2RtYWN0aXZlX25leHQgPSBkbWNvbnRyb2xfd3JfcmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19ETUNPTlRST0xfRE1BQ1RJVkVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbWNvbnRyb2xfZG1hY3RpdmVfZmY7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgZG1jb250cm9sX25kbXJlc2V0X25leHQgICAgID0gZG1jb250cm9sX25kbXJlc2V0X2ZmOwotICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfbmV4dCA9IGRtY29udHJvbF9hY2toYXZlcmVzZXRfZmY7Ci0gICAgZG1jb250cm9sX2hhbHRyZXFfbmV4dCAgICAgID0gZG1jb250cm9sX2hhbHRyZXFfZmY7Ci0gICAgZG1jb250cm9sX3Jlc3VtZXJlcV9uZXh0ICAgID0gZG1jb250cm9sX3Jlc3VtZXJlcV9mZjsKLSAgICBpZiAofmRtY29udHJvbF9kbWFjdGl2ZV9mZikgYmVnaW4KLSAgICAgICAgZG1jb250cm9sX25kbXJlc2V0X25leHQgICAgID0gMSdiMDsKLSAgICAgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9uZXh0ID0gMSdiMDsKLSAgICAgICAgZG1jb250cm9sX2hhbHRyZXFfbmV4dCAgICAgID0gMSdiMDsKLSAgICAgICAgZG1jb250cm9sX3Jlc3VtZXJlcV9uZXh0ICAgID0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAoZG1jb250cm9sX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgZG1jb250cm9sX25kbXJlc2V0X25leHQgICAgID0gZG1pMmRtX3dkYXRhX2lbU0NSMV9EQkdfRE1DT05UUk9MX05ETVJFU0VUXTsKLSAgICAgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9uZXh0ID0gZG1pMmRtX3dkYXRhX2lbU0NSMV9EQkdfRE1DT05UUk9MX0FDS0hBVkVSRVNFVF07Ci0gICAgICAgIGRtY29udHJvbF9oYWx0cmVxX25leHQgICAgICA9IGRtaTJkbV93ZGF0YV9pW1NDUjFfREJHX0RNQ09OVFJPTF9IQUxUUkVRXTsKLSAgICAgICAgZG1jb250cm9sX3Jlc3VtZXJlcV9uZXh0ICAgID0gZG1pMmRtX3dkYXRhX2lbU0NSMV9EQkdfRE1DT05UUk9MX1JFU1VNRVJFUV07Ci0gICAgZW5kCi1lbmQKLQotLy8gUmVzZXQgc2lnbmFsIGZvciBzeXN0ZW0gY29udHJvbGxlZCBieSBEZWJ1ZyBNb2R1bGUKLWFzc2lnbiBoYXJ0X3JzdF9uX28gPSB+ZG1jb250cm9sX25kbXJlc2V0X2ZmOwotYXNzaWduIG5kbV9yc3Rfbl9vICA9IH5kbWNvbnRyb2xfbmRtcmVzZXRfZmY7Ci0KLS8vIFNraXAgcmVzZXQgb24gcG93ZXJ1cCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaGF2ZXJlc2V0X3NraXBfcHdydXBfZmYgPD0gMSdiMTsKLSAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBoYXZlcmVzZXRfc2tpcF9wd3J1cF9mZiA8PSBoYXZlcmVzZXRfc2tpcF9wd3J1cF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBoYXZlcmVzZXRfc2tpcF9wd3J1cF9uZXh0ID0gfmRtY29udHJvbF9kbWFjdGl2ZV9mZiAgPyAxJ2IxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhdmVyZXNldF9za2lwX3B3cnVwX2ZmID8gaGFydF9zdGF0ZV9yZXNldCAmIG5kbV9yc3Rfbl9vICYgaGFydF9yc3Rfbl9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGF2ZXJlc2V0X3NraXBfcHdydXBfZmY7Ci0KLS8vIERNU1RBVFVTIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X2ZmIDw9IDEnYjA7Ci0gICAgICAgIGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmYgPD0gMSdiMDsKLSAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZiAgICA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCi0gICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfZmYgPD0gZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9uZXh0OwotICAgICAgICBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmIDw9IGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfbmV4dDsKLSAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZiAgICA8PSBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfbmV4dCA9IH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYgICAgICAgICAgICAgICAgICAgICAgPyAxJ2IwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogfmhhdmVyZXNldF9za2lwX3B3cnVwX2ZmICYgaGFydF9zdGF0ZV9yZXNldCA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X2ZmICAgICAgICAgICAgICAgICAgID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X2ZmOwotYXNzaWduIGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfbmV4dCA9IH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYgID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IH5kbWNvbnRyb2xfcmVzdW1lcmVxX2ZmID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhcnRfc3RhdGVfcnVuICAgICAgICAgID8gMSdiMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZjsKLQotYXNzaWduIGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfbmV4dCAgICA9IH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYgPyAxJ2IwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGFydF9zdGF0ZV9kaGFsdCAgICAgICA/IDEnYjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXJ0X3N0YXRlX3J1biAgICAgICAgID8gMSdiMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQWJzdHJhY3QgQ29tbWFuZCBjb250cm9sIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBDb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6Ci0gLy8gLSBBYnN0cmFjdCBjb21tYW5kIGRlY29kZXIKLSAvLyAtIEFic3RyYWN0IGNvbW1hbmQgYWNjZXNzIHZhbGlkIGZsYWdzCi0gLy8gLSBBYnN0cmFjdCBjb21tYW5kIGNvbnRyb2wgcmVnaXN0ZXJzCi0KLWFzc2lnbiBjbGtfZW5fYWJzID0gY2xrX2VuX2RtICYgZG1jb250cm9sX2RtYWN0aXZlX2ZmOwotCi0vLyBBYnN0cmFjdCBjb21tYW5kIGRlY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBhYnNfY21kID0gZG1pX3JlcV9jb21tYW5kID8gZG1pMmRtX3dkYXRhX2kgOiBhYnNfY29tbWFuZF9mZjsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBhYnNfY21kX3JlZ25vICAgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRUdOT19MTyArOiAxMl07Ci0KLSAgICBhYnNfY21kX2Nzcl9ybyAgICAgID0gKGFic19jbWRfcmVnbm8gPT0gU0NSMV9DU1JfQUREUl9NSVNBKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWJzX2NtZF9yZWdubyA9PSBTQ1IxX0NTUl9BRERSX01WRU5ET1JJRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFic19jbWRfcmVnbm8gPT0gU0NSMV9DU1JfQUREUl9NQVJDSElEKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWJzX2NtZF9yZWdubyA9PSBTQ1IxX0NTUl9BRERSX01JTVBJRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFic19jbWRfcmVnbm8gPT0gU0NSMV9DU1JfQUREUl9NSEFSVElEKQotICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWJzX2NtZF9yZWdubyA9PSBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EUEMpOwotCi0gICAgYWJzX2NtZF90eXBlICAgICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9UWVBFX0hJOlNDUjFfREJHX0NPTU1BTkRfVFlQRV9MT107Ci0gICAgYWJzX2NtZF9yZWdhY3MgICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfVFJBTlNGRVJdOwotICAgIGFic19jbWRfcmVndHlwZSAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFR05PX0hJOjEyXTsKLSAgICBhYnNfY21kX3JlZ2ZpbGUgICAgID0gYWJzX2NtZFsxMTo1XTsKLSAgICBhYnNfY21kX3JlZ3NpemUgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfTE9dOwotICAgIGFic19jbWRfcmVnd3IgICAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1dSSVRFXTsKLSAgICBhYnNfY21kX2V4ZWNwcm9nYnVmID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19QT1NURVhFQ107Ci0KLSAgICBhYnNfY21kX3JlZ3ZhbGlkICAgID0gfih8e2Fic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVTRVJWRURCXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVTRVJWRURBXX0pOwotCi0gICAgYWJzX2NtZF9tZW1zaXplICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNU0laRV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1TSVpFX0xPXTsKLSAgICBhYnNfY21kX21lbXdyICAgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9XUklURV07Ci0KLSAgICBhYnNfY21kX21lbXZhbGlkICAgID0gfih8e2Fic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNVklSVFVBTF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVBPU1RJTkNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREJfSEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQl9ISV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQV9ISToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fUkVTRVJWRURBX0hJXX0pOwotZW5kCi0KLWFzc2lnbiBhYnNfcmVnX2FjY2Vzc19jc3IgID0gKGFic19jbWRfcmVndHlwZSA9PSBBQlNfQ01EX0hBUlRSRUdfQ1NSKTsKLWFzc2lnbiBhYnNfcmVnX2FjY2Vzc19tcHJmID0gKGFic19jbWRfcmVndHlwZSA9PSBBQlNfQ01EX0hBUlRSRUdfSU5URlBVKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoYWJzX2NtZF9yZWdmaWxlID09IEFCU19DTURfSEFSVFJFR19JTlQpOwotCi0vLyBBYnN0cmFjdCBjb21tYW5kIGFjY2VzcyByZXF1ZXN0IGFuZCB2YWxpZCBmbGFncwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGFic19jbWRfcmVnc2l6ZV92ZCAgICAgICA9IChhYnNfY21kX3JlZ3NpemUgPT0gMydoMik7Ci1hc3NpZ24gYWJzX2NtZF9tZW1zaXplX3ZkICAgICAgID0gKGFic19jbWRfbWVtc2l6ZSA8IDMnaDMpOwotCi1hc3NpZ24gYWJzX2NtZF9oYXJ0cmVnX3ZkICAgICAgID0gKGFic19jbWRfdHlwZSA9PSBBQlNfQ01EX0hBUlRSRUcpICYgYWJzX2NtZF9yZWd2YWxpZDsKLWFzc2lnbiBhYnNfY21kX2hhcnRtZW1fdmQgICAgICAgPSAoYWJzX2NtZF90eXBlID09IEFCU19DTURfSEFSVE1FTSkgJiBhYnNfY21kX21lbXZhbGlkOwotCi0vLyBBYnN0cmFjdCBjb21tYW5kIHJlcXVlc3RzCi1hc3NpZ24gYWJzX2NtZF9yZWdfYWNjZXNzX3JlcSAgID0gYWJzX2NtZF9oYXJ0cmVnX3ZkICAgICAmIGFic19jbWRfcmVnYWNzOwotYXNzaWduIGFic19jbWRfY3NyX2FjY2Vzc19yZXEgICA9IGFic19jbWRfcmVnX2FjY2Vzc19yZXEgJiBhYnNfcmVnX2FjY2Vzc19jc3I7Ci1hc3NpZ24gYWJzX2NtZF9tcHJmX2FjY2Vzc19yZXEgID0gYWJzX2NtZF9yZWdfYWNjZXNzX3JlcSAmIGFic19yZWdfYWNjZXNzX21wcmY7Ci1hc3NpZ24gYWJzX2NtZF9leGVjcHJvZ2J1Zl9yZXEgID0gYWJzX2NtZF9oYXJ0cmVnX3ZkICAgICAmIGFic19jbWRfZXhlY3Byb2didWY7Ci0KLS8vIEFic3RyYWN0IGNvbW1hbmQgYWNjZXNzIHZhbGlkIGZsYWdzCi1hc3NpZ24gYWJzX2NtZF9jc3Jfcm9fYWNjZXNzX3ZkID0gYWJzX2NtZF9jc3JfYWNjZXNzX3JlcSAgJiBhYnNfY21kX3JlZ3NpemVfdmQgJiB+YWJzX2NtZF9yZWd3cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5hYnNfY21kX2V4ZWNwcm9nYnVmICAgICYgYWJzX2NtZF9jc3Jfcm8gICAgICYgaGFydF9zdGF0ZV9ydW47Ci1hc3NpZ24gYWJzX2NtZF9jc3JfcndfYWNjZXNzX3ZkID0gYWJzX2NtZF9jc3JfYWNjZXNzX3JlcSAgJiBhYnNfY21kX3JlZ3NpemVfdmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoYWJzX2NtZF9yZWd3ciB8IH5hYnNfY21kX2Nzcl9yb19hY2Nlc3NfdmQpOwotYXNzaWduIGFic19jbWRfbXByZl9hY2Nlc3NfdmQgICA9IGFic19jbWRfbXByZl9hY2Nlc3NfcmVxICYgYWJzX2NtZF9yZWdzaXplX3ZkOwotYXNzaWduIGFic19jbWRfbWVtX2FjY2Vzc192ZCAgICA9IGFic19jbWRfaGFydG1lbV92ZCAmIGFic19jbWRfbWVtc2l6ZV92ZDsKLQotLy8gQWJzdHJhY3QgY29tbWFuZCBjb250cm9sIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9hYnMgJiBhYnNfZnNtX2lkbGUpIGJlZ2luCi0gICAgICAgIGFic19jbWRfcG9zdGV4ZWNfZmYgPD0gYWJzX2NtZF9wb3N0ZXhlY19uZXh0OwotICAgICAgICBhYnNfY21kX3dyX2ZmICAgICAgIDw9IGFic19jbWRfd3JfbmV4dDsKLSAgICAgICAgYWJzX2NtZF9yZWdub19mZiAgICA8PSBhYnNfY21kX3JlZ25vOwotICAgICAgICBhYnNfY21kX3NpemVfZmYgICAgIDw9IGFic19jbWRfc2l6ZV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgYWJzX2NtZF93cl9uZXh0ICAgICAgID0gMSdiMDsKLSAgICBhYnNfY21kX3Bvc3RleGVjX25leHQgPSAxJ2IwOwotICAgIGFic19jbWRfc2l6ZV9uZXh0ICAgICA9IGFic19jbWRfc2l6ZV9mZjsKLSAgICBpZiAoKGNvbW1hbmRfd3JfcmVxIHwgZG1pX3JwdF9jb21tYW5kKSAmIGhhcnRfc3RhdGVfZGhhbHQgJiBhYnNfZnNtX2lkbGUpIGJlZ2luCi0gICAgICAgIGlmIChhYnNfY21kX2Nzcl9yd19hY2Nlc3NfdmQpIGJlZ2luCi0gICAgICAgICAgICBhYnNfY21kX3dyX25leHQgICAgICAgPSBhYnNfY21kX3JlZ3dyOwotICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19uZXh0ID0gYWJzX2NtZF9leGVjcHJvZ2J1ZjsKLSAgICAgICAgZW5kIGVsc2UgaWYgKGFic19jbWRfbXByZl9hY2Nlc3NfdmQpIGJlZ2luCi0gICAgICAgICAgICBhYnNfY21kX3dyX25leHQgICAgICAgPSBhYnNfY21kX3JlZ3dyOwotICAgICAgICAgICAgYWJzX2NtZF9zaXplX25leHQgICAgID0gYWJzX2NtZF9yZWdzaXplWzE6MF07Ci0gICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX25leHQgPSBhYnNfY21kX2V4ZWNwcm9nYnVmOwotICAgICAgICBlbmQgZWxzZSBpZiAoYWJzX2NtZF9tZW1fYWNjZXNzX3ZkKSBiZWdpbgotICAgICAgICAgICAgYWJzX2NtZF93cl9uZXh0ICAgICAgID0gYWJzX2NtZF9tZW13cjsKLSAgICAgICAgICAgIGFic19jbWRfc2l6ZV9uZXh0ICAgICA9IGFic19jbWRfbWVtc2l6ZVsxOjBdOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQWJzdHJhY3QgY29tbWFuZCBGU00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fZG0pIGJlZ2luCi0gICAgICAgIGlmICh+ZG1jb250cm9sX2RtYWN0aXZlX2ZmKSBiZWdpbgotICAgICAgICAgICAgYWJzX2ZzbV9mZiA8PSBBQlNfU1RBVEVfSURMRTsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGFic19mc21fZmYgPD0gYWJzX2ZzbV9uZXh0OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19mc21fbmV4dCA9IGFic19mc21fZmY7Ci0KLSAgICBjYXNlIChhYnNfZnNtX2ZmKQotICAgICAgICBBQlNfU1RBVEVfSURMRTogYmVnaW4KLSAgICAgICAgICAgIGlmIChjb21tYW5kX3dyX3JlcSB8IGRtaV9ycHRfY29tbWFuZCkgYmVnaW4KLSAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQotICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9yb19hY2Nlc3NfdmQ6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9DU1JfUk87Ci0gICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3J3X2FjY2Vzc192ZDogYWJzX2ZzbV9uZXh0ID0gaGFydF9zdGF0ZV9kaGFsdCA/IEFCU19TVEFURV9DU1JfU0FWRV9YUkVHIDogQUJTX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tcHJmX2FjY2Vzc192ZCAgOiBhYnNfZnNtX25leHQgPSBoYXJ0X3N0YXRlX2RoYWx0ID8gQUJTX1NUQVRFX1hSRUdfUlcgICAgICAgOiBBQlNfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2V4ZWNwcm9nYnVmX3JlcSA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FWEVDOwotICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21lbV9hY2Nlc3NfdmQgICA6IGFic19mc21fbmV4dCA9IGhhcnRfc3RhdGVfZGhhbHQgPyBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRyA6IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX0VYRUM6IGJlZ2luCi0gICAgICAgICAgICBpZiAoZGhpX3Jlc3ApIGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKGRoaV9yZXNwX2V4YyB8IGFic19lcnJfYWNjX2J1c3lfZmYpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0lETEU7Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX1hSRUdfUlc6IGJlZ2luCi0gICAgICAgICAgICBpZiAoZGhpX3Jlc3ApIGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV9mZjogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19mZjogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VYRUM7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9JRExFOwotICAgICAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JPICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gYWJzX2Vycl9hY2NfYnVzeV9mZiA/IEFCU19TVEFURV9FUlIgICAgICAgICAgICAgOiBBQlNfU1RBVEVfSURMRTsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUc6IGFic19mc21fbmV4dCA9IGRoaV9yZXNwICAgICAgICAgICAgPyBBQlNfU1RBVEVfQ1NSX1JXICAgICAgICAgIDogQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUc7Ci0gICAgICAgIEFCU19TVEFURV9DU1JfUlcgICAgICAgOiBhYnNfZnNtX25leHQgPSBkaGlfcmVzcCAgICAgICAgICAgID8gQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRyA6IEFCU19TVEFURV9DU1JfUlc7Ci0KLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRzogYmVnaW4KLSAgICAgICAgICAgIGlmIChkaGlfcmVzcCkgYmVnaW4KLSAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQotICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2V4Y19mZiAgICAgIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV9mZiA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfZmYgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVhFQzsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9JRExFOwotICAgICAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRyAgICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gZGhpX3Jlc3AgPyBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSICAgOiBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRzsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUiA6IGFic19mc21fbmV4dCA9IGRoaV9yZXNwID8gQUJTX1NUQVRFX01FTV9SVyAgICAgICAgICAgICAgICAgIDogQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUjsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SVyAgICAgICAgICAgICAgICA6IGFic19mc21fbmV4dCA9IGRoaV9yZXNwID8gQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRyAgICAgICAgIDogQUJTX1NUQVRFX01FTV9SVzsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRyAgICAgICA6IGFic19mc21fbmV4dCA9IGRoaV9yZXNwID8gQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSIDogQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRzsKLQotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFI6IGJlZ2luCi0gICAgICAgICAgICBpZiAoZGhpX3Jlc3ApIGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9leGNfZmY6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIGFic19lcnJfYWNjX2J1c3lfZmYgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX2ZmIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VYRUM7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfSURMRTsKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX0VSUjogYmVnaW4KLSAgICAgICAgICAgIGlmIChhYnN0cmFjdGNzX3dyX3JlcSAmIChhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID09IDMnYjApKSBiZWdpbgotICAgICAgICAgICAgICAgIGFic19mc21fbmV4dCA9IEFCU19TVEFURV9JRExFOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLQotICAgIGlmICh+YWJzX2ZzbV9pZGxlICYgaGFydF9zdGF0ZV9yZXNldCkgYmVnaW4KLSAgICAgICAgYWJzX2ZzbV9uZXh0ICAgID0gQUJTX1NUQVRFX0VSUjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gYWJzX2ZzbV9pZGxlICAgICA9IChhYnNfZnNtX2ZmID09IEFCU19TVEFURV9JRExFKTsKLWFzc2lnbiBhYnNfZnNtX2V4ZWMgICAgID0gKGFic19mc21fZmYgPT0gQUJTX1NUQVRFX0VYRUMpOwotYXNzaWduIGFic19mc21fY3NyX3JvICAgPSAoYWJzX2ZzbV9mZiA9PSBBQlNfU1RBVEVfQ1NSX1JPKTsKLWFzc2lnbiBhYnNfZnNtX2VyciAgICAgID0gKGFic19mc21fZmYgPT0gQUJTX1NUQVRFX0VSUik7Ci1hc3NpZ24gYWJzX2ZzbV91c2VfYWRkciA9IChhYnNfZnNtX2ZmID09IEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIpCi0gICAgICAgICAgICAgICAgICAgICAgICB8IChhYnNfZnNtX2ZmID09IEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUik7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBYnN0cmFjdCBjb21tYW5kIHN0YXR1cyBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQWJzdHJhY3QgY29tbWFuZCBhY2Nlc3MgYnVzeSBlcnJvciByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGFic19lcnJfYWNjX2J1c3lfdXBkID0gY2xrX2VuX2FicyAmIChhYnNfZnNtX2lkbGUgfCBkbWlfcmVxX2FueSk7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChhYnNfZXJyX2FjY19idXN5X3VwZCkgYWJzX2Vycl9hY2NfYnVzeV9mZiA8PSBhYnNfZXJyX2FjY19idXN5X25leHQ7Ci1lbmQKLQotYXNzaWduIGFic19lcnJfYWNjX2J1c3lfbmV4dCA9IH5hYnNfZnNtX2lkbGUgJiBkbWlfcmVxX2FueTsKLQotLy8gQWJzdHJhY3QgY29tbWFuZCBhY2Nlc3MgZXhjZXB0aW9uIGVycm9yIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gYWJzX2Vycl9leGNfdXBkID0gY2xrX2VuX2FicyAmIChhYnNfZnNtX2lkbGUgfCAoZGhpX3Jlc3AgJiBkaGlfcmVzcF9leGMpKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGFic19lcnJfZXhjX3VwZCkgYWJzX2Vycl9leGNfZmYgPD0gYWJzX2Vycl9leGNfbmV4dDsKLWVuZAotCi1hc3NpZ24gYWJzX2Vycl9leGNfbmV4dCA9IH5hYnNfZnNtX2lkbGUgJiBkaGlfcmVzcCAmIGRoaV9yZXNwX2V4YzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFic3RyYWN0IEluc3RydWN0aW9uIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLSAvLyBDb3Npc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIEluc3RydWN0aW9uIGV4ZWN1dGlvbiByZXF1ZXN0IHJlZ2lzdGVyCi0gLy8gLSBJbnN0cnVjdGlvbiBtZW1vcnkgRlVOQ1QzIGZpZWxkIG11bHRpcGxleGVyCi0gLy8gLSBJbnN0cnVjdGlvbiBSUzEgbXVsdGlwbGV4ZXIKLSAvLyAtIEluc3RydWN0aW9uIFJEIG11bHRpcGxleGVyCi0gLy8gLSBBYnN0cmFjdCBJbnN0cnVjdGlvbiByZWdpc3RlcgotCi0vLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBleGVjdXRpb24gcmVxdWVzdCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGFic19leGVjX3JlcV9uZXh0ID0gfihhYnNfZnNtX2lkbGUgfCBhYnNfZnNtX2Nzcl9ybyB8IGFic19mc21fZXJyKSAmIH5kaGlfcmVzcDsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9kbSkgYmVnaW4KLSAgICAgICAgaWYgKH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYpIGJlZ2luCi0gICAgICAgICAgICBhYnNfZXhlY19yZXFfZmYgPD0gMSdiMDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGFic19leGVjX3JlcV9mZiA8PSBhYnNfZXhlY19yZXFfbmV4dDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gbWVtb3J5IEZVTkNUMyBmaWVsZCBtdWx0aXBsZXhlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjYXNlIChhYnNfY21kX3NpemVfZmYpCi0gICAgICAgIDInYjAwICA6IGFic19pbnN0cl9tZW1fZnVuY3QzID0gYWJzX2NtZF93cl9mZiA/IFNDUjFfRlVOQ1QzX1NCIDogU0NSMV9GVU5DVDNfTEJVOwotICAgICAgICAyJ2IwMSAgOiBhYnNfaW5zdHJfbWVtX2Z1bmN0MyA9IGFic19jbWRfd3JfZmYgPyBTQ1IxX0ZVTkNUM19TSCA6IFNDUjFfRlVOQ1QzX0xIVTsKLSAgICAgICAgMidiMTAgIDogYWJzX2luc3RyX21lbV9mdW5jdDMgPSBhYnNfY21kX3dyX2ZmID8gU0NSMV9GVU5DVDNfU1cgOiBTQ1IxX0ZVTkNUM19MVzsKLSAgICAgICAgZGVmYXVsdDogYWJzX2luc3RyX21lbV9mdW5jdDMgPSBTQ1IxX0ZVTkNUM19TQjsKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gUlMxIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19pbnN0cl9yczEgPSA1J2gwOwotICAgIGNhc2UgKGFic19mc21fZmYpCi0gICAgICAgIEFCU19TVEFURV9YUkVHX1JXICAgICAgICAgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IGFic19jbWRfd3JfZmYgPyA1J2gwIDogYWJzX2NtZF9yZWdub19mZls0OjBdOwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRyAgICAgICAgICA6IGFic19pbnN0cl9yczEgPSA1J2g1OwotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRyAgICAgICAgICA6IGFic19pbnN0cl9yczEgPSA1J2g1OwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHICAgICAgICA6IGFic19pbnN0cl9yczEgPSA1J2g1OwotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHICAgICAgICA6IGFic19pbnN0cl9yczEgPSA1J2g1OwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JXICAgICAgICAgICAgICAgICA6IGFic19pbnN0cl9yczEgPSBhYnNfY21kX3dyX2ZmID8gNSdoNSA6IDUnaDA7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIgIDogYWJzX2luc3RyX3JzMSA9IDUnaDY7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUjogYWJzX2luc3RyX3JzMSA9IDUnaDY7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUlcgICAgICAgICAgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IDUnaDY7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgIDogYmVnaW4gZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiBhYnNfaW5zdHJfcnMyID0gNSdoNTsKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gUkQgbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgYWJzX2luc3RyX3JkICA9IDUnaDA7Ci0gICAgY2FzZSAoYWJzX2ZzbV9mZikKLSAgICAgICAgQUJTX1NUQVRFX1hSRUdfUlcgICAgICAgICAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSBhYnNfY21kX3dyX2ZmID8gYWJzX2NtZF9yZWdub19mZls0OjBdIDogNSdoMDsKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUcgICAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSBhYnNfY21kX3dyX2ZmID8gNSdoNSA6IDUnaDA7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHICAgICAgICAgIDogYWJzX2luc3RyX3JkID0gYWJzX2NtZF93cl9mZiA/IDUnaDUgOiA1J2gwOwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JXICAgICAgICAgICAgICAgICA6IGFic19pbnN0cl9yZCA9IGFic19jbWRfd3JfZmYgPyA1J2gwIDogNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SVyAgICAgICAgICAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSBhYnNfY21kX3dyX2ZmID8gNSdoMCA6IDUnaDU7Ci0gICAgICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUcgICAgICAgIDogYWJzX2luc3RyX3JkID0gNSdoNTsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRyAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSA1J2g1OwotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSICA6IGFic19pbnN0cl9yZCA9IDUnaDY7Ci0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUjogYWJzX2luc3RyX3JkID0gNSdoNjsKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8gQWJzdHJhY3QgaW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fYWJzKSBiZWdpbgotICAgICAgICBhYnNfZXhlY19pbnN0cl9mZiA8PSBhYnNfZXhlY19pbnN0cl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgYWJzX2V4ZWNfaW5zdHJfbmV4dCA9IGFic19leGVjX2luc3RyX2ZmOwotICAgIGNhc2UgKGFic19mc21fZmYpCi0gICAgICAgIEFCU19TVEFURV9YUkVHX1JXLAotICAgICAgICBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRywKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRywKLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUcsCi0gICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIsCi0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUcsCi0gICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUjogYmVnaW4KLSAgICAgICAgICAgIGFic19leGVjX2luc3RyX25leHQgPSB7U0NSMV9IRFVfREJHQ1NSX0FERFJfRFNDUkFUQ0gwLCBhYnNfaW5zdHJfcnMxLCBTQ1IxX0ZVTkNUM19DU1JSVywgYWJzX2luc3RyX3JkLCBTQ1IxX09QX1NZU1RFTX07Ci0gICAgICAgIGVuZAotCi0gICAgICAgIEFCU19TVEFURV9DU1JfUlc6IGJlZ2luCi0gICAgICAgICAgICBhYnNfZXhlY19pbnN0cl9uZXh0ID0gYWJzX2NtZF93cl9mZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHthYnNfY21kX3JlZ25vX2ZmWzExOjBdLCBhYnNfaW5zdHJfcnMxLCBTQ1IxX0ZVTkNUM19DU1JSVywgYWJzX2luc3RyX3JkLCBTQ1IxX09QX1NZU1RFTX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7YWJzX2NtZF9yZWdub19mZlsxMTowXSwgYWJzX2luc3RyX3JzMSwgU0NSMV9GVU5DVDNfQ1NSUlMsIGFic19pbnN0cl9yZCwgU0NSMV9PUF9TWVNURU19OwotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfTUVNX1JXOiBiZWdpbgotICAgICAgICAgICAgYWJzX2V4ZWNfaW5zdHJfbmV4dCA9IGFic19jbWRfd3JfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7NydoMCwgIGFic19pbnN0cl9yczIsIGFic19pbnN0cl9yczEsIGFic19pbnN0cl9tZW1fZnVuY3QzLCA1J2gwLCAgICAgICAgIFNDUjFfT1BfU1RPUkV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogezEyJ2gwLCAgICAgICAgICAgICAgICBhYnNfaW5zdHJfcnMxLCBhYnNfaW5zdHJfbWVtX2Z1bmN0MywgYWJzX2luc3RyX3JkLCBTQ1IxX09QX0xPQUR9OwotICAgICAgICBlbmQKLQotICAgICAgICBkZWZhdWx0OiBiZWdpbiBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFic3RyYWN0IHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gQUJTVFJBQ1RDUyByZWdpc3RlcgotIC8vIC0gQ09NTUFORCByZWdpc3RlcgotIC8vIC0gQUJTVFJBQ1RBVVRPIHJlZ2lzdGVyCi0gLy8gLSBQUk9HQlVGMC4uNSByZWdpc3RlcnMKLSAvLyAtIERBVEEwLi4xIHJlZ2lzdGVycwotCi0vLyBBQlNUUkFDVENTIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBpZiAofmRtY29udHJvbF9kbWFjdGl2ZV9mZikgYmVnaW4KLSAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX2ZmIDw9IEFCU19FUlJfTk9ORTsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX2ZmIDw9IGFic3RyYWN0Y3NfY21kZXJyX25leHQ7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IGFic3RyYWN0Y3NfY21kZXJyX2ZmOwotCi0gICAgY2FzZSAoYWJzX2ZzbV9mZikKLSAgICAgICAgQUJTX1NUQVRFX0lETEU6IGJlZ2luCi0gICAgICAgICAgICBpZiAoY29tbWFuZF93cl9yZXEgfCBkbWlfcnB0X2NvbW1hbmQpIGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKGFic19jbWRfaGFydHJlZ192ZCkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnX2FjY2Vzc19yZXEgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3J3X2FjY2Vzc192ZDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IGhhcnRfc3RhdGVfZGhhbHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWJzdHJhY3Rjc19jbWRlcnJfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQUJTX0VSUl9OT0hBTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbXByZl9hY2Nlc3NfdmQgIDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IGhhcnRfc3RhdGVfZGhhbHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWJzdHJhY3Rjc19jbWRlcnJfZmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQUJTX0VSUl9OT0hBTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3JvX2FjY2Vzc192ZDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IGFic3RyYWN0Y3NfY21kZXJyX2ZmOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0NNRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfZXhlY3Byb2didWZfcmVxICAgICAgICAgOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gYWJzdHJhY3Rjc19jbWRlcnJfZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgIDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfQ01EOwotICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKGFic19jbWRfaGFydG1lbV92ZCkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IH5hYnNfY21kX21lbXNpemVfdmQgPyBBQlNfRVJSX0NNRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogfmhhcnRfc3RhdGVfZGhhbHQgICA/IEFCU19FUlJfTk9IQUxUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWJzdHJhY3Rjc19jbWRlcnJfZmY7Ci0gICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfQ01EOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotCi0gICAgICAgIEFCU19TVEFURV9FWEVDOiBiZWdpbgotICAgICAgICAgICAgaWYgKGRoaV9yZXNwKSBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChkaGlfcmVzcF9leGMpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoYWJzX2Vycl9hY2NfYnVzeV9mZikgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfQlVTWTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfWFJFR19SVywKLSAgICAgICAgQUJTX1NUQVRFX0NTUl9STzogYmVnaW4KLSAgICAgICAgICAgIGlmIChhYnNfZXJyX2FjY19idXN5X2ZmKSBiZWdpbgotICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0JVU1k7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRywKLSAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSOiBiZWdpbgotICAgICAgICAgICAgaWYgKGRoaV9yZXNwKSBiZWdpbgotICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCi0gICAgICAgICAgICAgICAgICAgIGFic19lcnJfZXhjX2ZmICAgICA6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV9mZjogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfQlVTWTsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IGFic3RyYWN0Y3NfY21kZXJyX2ZmOwotICAgICAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgICAgICBBQlNfU1RBVEVfRVJSOiBiZWdpbgotICAgICAgICAgICAgaWYgKGRtaV9yZXFfYWJzdHJhY3RjcyAmIGRtaTJkbV93cl9pKSBiZWdpbgotICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBhYnN0cmFjdGNzX2NtZGVycl9mZiAgLy8gY3AuNwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAofmRtaTJkbV93ZGF0YV9pW1NDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0hJOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0xPXSk7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0KLSAgICAgICAgZGVmYXVsdDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotCi0gICAgaWYgKH5hYnNfZnNtX2lkbGUgJiBoYXJ0X3N0YXRlX3Jlc2V0KSBiZWdpbgotICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9FWENFUFRJT047Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGFic3RyYWN0Y3NfYnVzeSA9IH5hYnNfZnNtX2lkbGUgJiB+YWJzX2ZzbV9lcnI7Ci0KLS8vIEFic3RyYWN0IENPTU1BTkQgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fZG0pIGFic19jb21tYW5kX2ZmIDw9IGFic19jb21tYW5kX25leHQ7Ci1lbmQKLQotYXNzaWduIGFic19jb21tYW5kX25leHQgPSB+ZG1jb250cm9sX2RtYWN0aXZlX2ZmICAgICAgICAgID8gJzAKLSAgICAgICAgICAgICAgICAgICAgICAgIDogKGNvbW1hbmRfd3JfcmVxICYgYWJzX2ZzbV9pZGxlKSA/IGRtaTJkbV93ZGF0YV9pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhYnNfY29tbWFuZF9mZjsKLQotLy8gQWJzdHJhY3QgQUJTVFJBQ1RBVVRPIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2RtKSBhYnNfYXV0b2V4ZWNfZmYgPD0gYWJzX2F1dG9leGVjX25leHQ7Ci1lbmQKLQotYXNzaWduIGFic19hdXRvZXhlY19uZXh0ID0gfmRtY29udHJvbF9kbWFjdGl2ZV9mZiAgICAgICAgICAgPyAxJ2IwCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAoYXV0b2V4ZWNfd3JfcmVxICYgYWJzX2ZzbV9pZGxlKSA/IGRtaTJkbV93ZGF0YV9pWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFic19hdXRvZXhlY19mZjsKLQotLy8gUHJvZ3JhbSBCdWZmZXIgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2FicyAmIGFic19mc21faWRsZSkgYmVnaW4KLSAgICAgICAgaWYgKHByb2didWYwX3dyX3JlcSkgYWJzX3Byb2didWYwX2ZmIDw9IGRtaTJkbV93ZGF0YV9pOwotICAgICAgICBpZiAocHJvZ2J1ZjFfd3JfcmVxKSBhYnNfcHJvZ2J1ZjFfZmYgPD0gZG1pMmRtX3dkYXRhX2k7Ci0gICAgICAgIGlmIChwcm9nYnVmMl93cl9yZXEpIGFic19wcm9nYnVmMl9mZiA8PSBkbWkyZG1fd2RhdGFfaTsKLSAgICAgICAgaWYgKHByb2didWYzX3dyX3JlcSkgYWJzX3Byb2didWYzX2ZmIDw9IGRtaTJkbV93ZGF0YV9pOwotICAgICAgICBpZiAocHJvZ2J1ZjRfd3JfcmVxKSBhYnNfcHJvZ2J1ZjRfZmYgPD0gZG1pMmRtX3dkYXRhX2k7Ci0gICAgICAgIGlmIChwcm9nYnVmNV93cl9yZXEpIGFic19wcm9nYnVmNV9mZiA8PSBkbWkyZG1fd2RhdGFfaTsKLSAgICBlbmQKLWVuZAotCi0vLyBEYXRhIDAgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChjbGtfZW5fYWJzKSBiZWdpbgotICAgICAgICBhYnNfZGF0YTBfZmYgPD0gYWJzX2RhdGEwX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGRhdGEwX3hyZWdfc2F2ZSA9IGRyZWdfd3JfcmVxICYgfmFic19jbWRfd3JfZmY7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgYWJzX2RhdGEwX25leHQgPSBhYnNfZGF0YTBfZmY7Ci0KLSAgICBjYXNlIChhYnNfZnNtX2ZmKQotICAgICAgICBBQlNfU1RBVEVfSURMRSAgICAgICAgICAgOiBhYnNfZGF0YTBfbmV4dCA9IGRhdGEwX3dyX3JlcSAgICA/IGRtaTJkbV93ZGF0YV9pICAgICAgIDogYWJzX2RhdGEwX2ZmOwotICAgICAgICBBQlNfU1RBVEVfRVhFQyAgICAgICAgICAgOiBhYnNfZGF0YTBfbmV4dCA9IGRyZWdfd3JfcmVxICAgICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGEwX2ZmOwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRyAgOiBhYnNfZGF0YTBfbmV4dCA9IGRyZWdfd3JfcmVxICAgICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGEwX2ZmOwotICAgICAgICBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHOiBhYnNfZGF0YTBfbmV4dCA9IGRyZWdfd3JfcmVxICAgICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGEwX2ZmOwotICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRyAgOiBhYnNfZGF0YTBfbmV4dCA9IGRyZWdfd3JfcmVxICAgICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGEwX2ZmOwotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHOiBhYnNfZGF0YTBfbmV4dCA9IGRyZWdfd3JfcmVxICAgICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGEwX2ZmOwotICAgICAgICBBQlNfU1RBVEVfWFJFR19SVyAgICAgICAgOiBhYnNfZGF0YTBfbmV4dCA9IGRhdGEwX3hyZWdfc2F2ZSA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGEwX2ZmOwotCi0gICAgICAgIEFCU19TVEFURV9DU1JfUk86IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChhYnNfY21kX3JlZ25vX2ZmWzExOjBdKQotICAgICAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUlTQSAgICAgOiBhYnNfZGF0YTBfbmV4dCA9IFNDUjFfQ1NSX01JU0E7Ci0gICAgICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NVkVORE9SSUQ6IGFic19kYXRhMF9uZXh0ID0gU0NSMV9DU1JfTVZFTkRPUklEOwotICAgICAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUFSQ0hJRCAgOiBhYnNfZGF0YTBfbmV4dCA9IFNDUjFfQ1NSX01BUkNISUQ7Ci0gICAgICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NSU1QSUQgICA6IGFic19kYXRhMF9uZXh0ID0gU0NSMV9DU1JfTUlNUElEOwotICAgICAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUhBUlRJRCAgOiBhYnNfZGF0YTBfbmV4dCA9IHNvYzJkbV9mdXNlX21oYXJ0aWRfaTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgIDogYWJzX2RhdGEwX25leHQgPSBwaXBlMmRtX3BjX3NhbXBsZV9pOwotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLQotICAgICAgICBkZWZhdWx0IDogYmVnaW4gZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vIERhdGEgMSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNsa19lbl9hYnMpIGJlZ2luCi0gICAgICAgIGFic19kYXRhMV9mZiA8PSBhYnNfZGF0YTFfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGFic19kYXRhMV9uZXh0ID0gYWJzX2RhdGExX2ZmOwotICAgIGNhc2UgKGFic19mc21fZmYpCi0gICAgICAgIEFCU19TVEFURV9JRExFICAgICAgICAgICAgICAgICAgIDogYWJzX2RhdGExX25leHQgPSBkYXRhMV93cl9yZXEgPyBkbWkyZG1fd2RhdGFfaSAgICAgICA6IGFic19kYXRhMV9mZjsKLSAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUiAgOiBhYnNfZGF0YTFfbmV4dCA9IGRyZWdfd3JfcmVxICA/IHBpcGUyZG1fZHJlZ193ZGF0YV9pIDogYWJzX2RhdGExX2ZmOwotICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFI6IGFic19kYXRhMV9uZXh0ID0gZHJlZ193cl9yZXEgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTFfZmY7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgIDogYmVnaW4gZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZWJ1ZyBIYXJ0IEludGVyZmFjZSA6IGNvbnRyb2wKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBjbWRfcmVzcF9vayAgICA9IHBpcGUyZG1fY21kX3Jlc3BfaSAmIH5waXBlMmRtX2NtZF9yY29kZV9pOwotYXNzaWduIGhhcnRfcnN0X3VuZXhwID0gfmRoaV9mc21faWRsZSAgICAgICYgfmRoaV9mc21faGFsdF9yZXEgJiBoYXJ0X3N0YXRlX3Jlc2V0OwotCi1hc3NpZ24gaGFsdF9yZXFfdmQgICAgPSBkbWNvbnRyb2xfaGFsdHJlcV9mZiAgICYgfmhhcnRfc3RhdGVfZGhhbHQ7Ci1hc3NpZ24gcmVzdW1lX3JlcV92ZCAgPSBkbWNvbnRyb2xfcmVzdW1lcmVxX2ZmICYgfmRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmYKLSAgICAgICAgICAgICAgICAgICAgICAmIGhhcnRfc3RhdGVfZGhhbHQ7Ci0KLS8vIERISSBmc20KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGRoaV9mc21fZmYgICA8PSBESElfU1RBVEVfSURMRTsKLSAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBkaGlfZnNtX2ZmIDw9IGRoaV9mc21fbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRoaV9mc21fbmV4dCA9IGRoaV9mc21fZmY7Ci0gICAgaWYgKH5oYXJ0X3JzdF91bmV4cCAmIGRtY29udHJvbF9kbWFjdGl2ZV9mZikgYmVnaW4KLSAgICAgICAgLy8gTm9ybWFsIHdvcmsKLSAgICAgICAgY2FzZSAoZGhpX2ZzbV9mZikKLSAgICAgICAgICAgIERISV9TVEFURV9JRExFICAgICAgOiBkaGlfZnNtX25leHQgPSBkaGlfcmVxOwotICAgICAgICAgICAgREhJX1NUQVRFX0VYRUMgICAgICA6IGRoaV9mc21fbmV4dCA9IGNtZF9yZXNwX29rICAgICAgPyBESElfU1RBVEVfRVhFQ19SVU4gICA6IERISV9TVEFURV9FWEVDOwotICAgICAgICAgICAgREhJX1NUQVRFX0VYRUNfUlVOICA6IGRoaV9mc21fbmV4dCA9IGhhcnRfc3RhdGVfZHJ1biAgPyBESElfU1RBVEVfRVhFQ19IQUxUICA6IERISV9TVEFURV9FWEVDX1JVTjsKLSAgICAgICAgICAgIERISV9TVEFURV9IQUxUX1JFUSAgOiBkaGlfZnNtX25leHQgPSBjbWRfcmVzcF9vayAgICAgID8gREhJX1NUQVRFX0VYRUNfSEFMVCAgOiBESElfU1RBVEVfSEFMVF9SRVE7Ci0gICAgICAgICAgICBESElfU1RBVEVfRVhFQ19IQUxUIDogZGhpX2ZzbV9uZXh0ID0gaGFydF9zdGF0ZV9kaGFsdCA/IERISV9TVEFURV9JRExFICAgICAgIDogREhJX1NUQVRFX0VYRUNfSEFMVDsKLSAgICAgICAgICAgIERISV9TVEFURV9SRVNVTUVfUkVROiBkaGlfZnNtX25leHQgPSBjbWRfcmVzcF9vayAgICAgID8gREhJX1NUQVRFX1JFU1VNRV9SVU4gOiBESElfU1RBVEVfUkVTVU1FX1JFUTsKLSAgICAgICAgICAgIERISV9TVEFURV9SRVNVTUVfUlVOOiBkaGlfZnNtX25leHQgPSBoYXJ0X3N0YXRlX3J1biAgID8gREhJX1NUQVRFX0lETEUgICAgICAgOiBESElfU1RBVEVfUkVTVU1FX1JVTjsKLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBkaGlfZnNtX25leHQgPSBkaGlfZnNtX2ZmOwotICAgICAgICBlbmRjYXNlCi0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgLy8gSW4gY2FzZSBvZiBETSByZXNldCBvciBjb3JlIHVuZXhwZWN0ZWQgcmVzZXQKLSAgICAgICAgZGhpX2ZzbV9uZXh0ID0gREhJX1NUQVRFX0lETEU7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGRoaV9mc21faWRsZSAgICAgICA9IChkaGlfZnNtX2ZmID09IERISV9TVEFURV9JRExFKTsKLWFzc2lnbiBkaGlfZnNtX2hhbHRfcmVxICAgPSAoZGhpX2ZzbV9mZiA9PSBESElfU1RBVEVfSEFMVF9SRVEpOwotYXNzaWduIGRoaV9mc21fZXhlYyAgICAgICA9IChkaGlfZnNtX2ZmID09IERISV9TVEFURV9FWEVDKTsKLWFzc2lnbiBkaGlfZnNtX2V4ZWNfaGFsdCAgPSAoZGhpX2ZzbV9mZiA9PSBESElfU1RBVEVfRVhFQ19IQUxUKTsKLWFzc2lnbiBkaGlfZnNtX3Jlc3VtZV9yZXEgPSAoZGhpX2ZzbV9mZiA9PSBESElfU1RBVEVfUkVTVU1FX1JFUSk7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAoMSdiMSkKLSAgICAgICAgYWJzX2V4ZWNfcmVxX2ZmOiBkaGlfcmVxID0gREhJX1NUQVRFX0VYRUM7Ci0gICAgICAgIGhhbHRfcmVxX3ZkICAgIDogZGhpX3JlcSA9IERISV9TVEFURV9IQUxUX1JFUTsKLSAgICAgICAgcmVzdW1lX3JlcV92ZCAgOiBkaGlfcmVxID0gREhJX1NUQVRFX1JFU1VNRV9SRVE7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgIDogZGhpX3JlcSA9IERISV9TVEFURV9JRExFOwotICAgIGVuZGNhc2UKLWVuZAotCi1hc3NpZ24gZGhpX3Jlc3AgICAgID0gZGhpX2ZzbV9leGVjX2hhbHQgICAgJiBoYXJ0X3N0YXRlX2RoYWx0OwotYXNzaWduIGRoaV9yZXNwX2V4YyA9IHBpcGUyZG1faGFydF9ldmVudF9pICYgcGlwZTJkbV9oYXJ0X3N0YXR1c19pLmV4Y2VwdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfnBpcGUyZG1faGFydF9zdGF0dXNfaS5lYnJlYWs7Ci0KLS8vIEhBUlQgY29tbWFuZCByZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEhBUlQgY29tbWFuZCByZXF1ZXN0IHJlZ2lzdGVyCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBoYXJ0X2NtZF9yZXFfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgotICAgICAgICBoYXJ0X2NtZF9yZXFfZmYgPD0gaGFydF9jbWRfcmVxX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIGhhcnRfY21kX3JlcV9uZXh0ID0gKGRoaV9mc21fZXhlYyB8IGRoaV9mc21faGFsdF9yZXEgfCBkaGlfZnNtX3Jlc3VtZV9yZXEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiB+Y21kX3Jlc3Bfb2sgJiBkbWNvbnRyb2xfZG1hY3RpdmVfZmY7Ci0KLS8vIEhBUlQgY29tbWFuZCByZWdpc3RlcgotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgaGFydF9jbWRfZmYgPD0gU0NSMV9IRFVfREJHU1RBVEVfUlVOOwotICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCi0gICAgICAgIGhhcnRfY21kX2ZmIDw9IGhhcnRfY21kX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBoYXJ0X2NtZF9uZXh0ID0gU0NSMV9IRFVfREJHU1RBVEVfUlVOOwotICAgIGlmIChkbWNvbnRyb2xfZG1hY3RpdmVfZmYpIGJlZ2luCi0gICAgICAgIGNhc2UgKGRoaV9mc21fZmYpCi0gICAgICAgICAgICBESElfU1RBVEVfRVhFQyAgICAgIDogaGFydF9jbWRfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX0RSVU47Ci0gICAgICAgICAgICBESElfU1RBVEVfSEFMVF9SRVEgIDogaGFydF9jbWRfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQ7Ci0gICAgICAgICAgICBESElfU1RBVEVfUkVTVU1FX1JFUTogaGFydF9jbWRfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX1JVTjsKLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBoYXJ0X2NtZF9uZXh0ID0gZG0ycGlwZV9jbWRfbzsKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBkbTJwaXBlX2NtZF9yZXFfbyA9IGhhcnRfY21kX3JlcV9mZjsKLWFzc2lnbiBkbTJwaXBlX2NtZF9vICAgICA9IGhhcnRfY21kX2ZmOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVidWcgSGFydCBJbnRlcmZhY2UgOiBwcm9ncmFtIGJ1ZmZlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUHJvZ3JhbSBCdWZmZXIgZXhlY3V0aW9uIEVCUkVBSyBmbGFnCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAoY2xrX2VuX2RtKSBoYXJ0X3BidWZfZWJyZWFrX2ZmIDw9IGhhcnRfcGJ1Zl9lYnJlYWtfbmV4dDsKLWVuZAotCi1hc3NpZ24gaGFydF9wYnVmX2VicmVha19uZXh0ID0gYWJzX2ZzbV9leGVjICYgKGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID09IEFCU19FWEVDX0VCUkVBSyk7Ci0KLS8vIFByb2dyYW0gQnVmZmVyIGluc3RydWN0aW9uIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gQUJTX0VYRUNfRUJSRUFLOwotCi0gICAgaWYgKGFic19mc21fZXhlYyAmIH5oYXJ0X3BidWZfZWJyZWFrX2ZmKSBiZWdpbgotICAgICAgICBjYXNlIChwaXBlMmRtX3BidWZfYWRkcl9pKQotICAgICAgICAgICAgMydoMDogZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfcHJvZ2J1ZjBfZmY7Ci0gICAgICAgICAgICAzJ2gxOiBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19wcm9nYnVmMV9mZjsKLSAgICAgICAgICAgIDMnaDI6IGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX3Byb2didWYyX2ZmOwotICAgICAgICAgICAgMydoMzogZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfcHJvZ2J1ZjNfZmY7Ci0gICAgICAgICAgICAzJ2g0OiBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19wcm9nYnVmNF9mZjsKLSAgICAgICAgICAgIDMnaDU6IGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX3Byb2didWY1X2ZmOwotICAgICAgICAgICAgZGVmYXVsdDogOwotICAgICAgICBlbmRjYXNlCi0gICAgZW5kIGVsc2UgaWYgKHBpcGUyZG1fcGJ1Zl9hZGRyX2kgPT0gMydiMCkgYmVnaW4KLSAgICAgICAgZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfZXhlY19pbnN0cl9mZjsKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVidWcgSGFydCBJbnRlcmZhY2UgOiBhYnN0cmFjdCBjb21tYW5kIGRhdGEKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBkbTJwaXBlX2RyZWdfcmVzcF9vICA9IDEnYjE7Ci1hc3NpZ24gZG0ycGlwZV9kcmVnX2ZhaWxfbyAgPSAxJ2IwOwotYXNzaWduIGRtMnBpcGVfZHJlZ19yZGF0YV9vID0gYWJzX2ZzbV91c2VfYWRkciA/IGFic19kYXRhMV9mZiA6IGFic19kYXRhMF9mZjsKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU1ZBX0RNX1hfQ09OVFJPTCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bih7ZG1pMmRtX3JlcV9pLCBwaXBlMmRtX2RyZWdfcmVxX2ksIHBpcGUyZG1fY21kX3Jlc3BfaSwKLSAgICAgICAgICAgICAgICAgcGlwZTJkbV9oYXJ0X2V2ZW50X2l9KQotKSBlbHNlICRlcnJvcigiRE0gZXJyb3I6IGNvbnRyb2wgc2lnbmFscyBpcyBYIC0gJTBiIiwge2RtaTJkbV9yZXFfaSwKLSAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3JlcV9pLCBwaXBlMmRtX2NtZF9yZXNwX2ksIHBpcGUyZG1faGFydF9ldmVudF9pfSk7Ci0KLVNWQV9ETV9YX0RNSSA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBkbWkyZG1fcmVxX2kgfC0+ICEkaXN1bmtub3duKHtkbWkyZG1fd3JfaSwgZG1pMmRtX2FkZHJfaSwgZG1pMmRtX3dkYXRhX2l9KQotKSBlbHNlICRlcnJvcigiRE0gZXJyb3I6IGRhdGEgc2lnbmFscyBpcyBYIG9uIGRtaSIpOwotCi1TVkFfRE1fWF9IQVJUX1BCVUYgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24gKHBpcGUyZG1fcGJ1Zl9hZGRyX2kpCi0pIGVsc2UgJGVycm9yKCJETSBlcnJvcjogZGF0YSBzaWduYWxzIGlzIFggb24gaGFydF9wYnVmIik7Ci0KLVNWQV9ETV9YX0hBUlRfRFJFRyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBwaXBlMmRtX2RyZWdfcmVxX2kgfC0+ICEkaXN1bmtub3duKHtwaXBlMmRtX2RyZWdfd3JfaSwgcGlwZTJkbV9kcmVnX3dkYXRhX2l9KQotKSBlbHNlICRlcnJvcigiRE0gZXJyb3I6IGRhdGEgc2lnbmFscyBpcyBYIG9uIGhhcnRfZHJlZyIpOwotCi1TVkFfRE1fWF9IQVJUX0NNRCA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBwaXBlMmRtX2NtZF9yZXNwX2kgfC0+ICEkaXN1bmtub3duKHtwaXBlMmRtX2NtZF9yY29kZV9pfSkKLSkgZWxzZSAkZXJyb3IoIkRNIGVycm9yOiBkYXRhIHNpZ25hbHMgaXMgWCBvbiBkbTJwaXBlX2NtZF9vIik7Ci0KLVNWQV9ETV9YX0hBUlRfRVZFTlQgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgcGlwZTJkbV9oYXJ0X2V2ZW50X2kgfC0+ICEkaXN1bmtub3duKHBpcGUyZG1faGFydF9zdGF0dXNfaSkKLSkgZWxzZSAkZXJyb3IoIkRNIGVycm9yOiBkYXRhIHNpZ25hbHMgaXMgWCBvbiBwaXBlMmRtX2hhcnRfZXZlbnRfaSIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9kbQotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfZG1pLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjJjMmEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9kbWkuc3Y+Ci0vLy8gQGJyaWVmICAgICAgRGVidWcgTW9kdWxlIEludGVyZmFjZSAoRE1JKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gUHJvdmlkZXMgVEFQQyB3aXRoIGFjY2VzcyB0byBEZWJ1ZyBNb2R1bGUgKERNKSBhbmQgRFRNQ1MKLSAvLwotIC8vIFN0cnVjdHVyZToKLSAvLyAtIERNSSA8LT4gVEFQIGludGVyZmFjZQotIC8vIC0gRE1JIDwtPiBETSBpbnRlcmZhY2UKLSAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotYGluY2x1ZGUgInNjcjFfZG0uc3ZoIgotCi1tb2R1bGUgc2NyMV9kbWkgKAotICAgIC8vIFN5c3RlbQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBETUkgdW5pdCByZXNldAotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBETUkgdW5pdCBjbG9jawotCi0gICAgLy8gVEFQIGludGVyZmFjZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF9zZWxfaSwgICAgICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIFNlbGVjdAotICAgIGlucHV0ICBsb2dpYyBbU0NSMV9EQkdfRE1JX0NIX0lEX1dJRFRILTE6MF0gICAgIHRhcGNzeW5jMmRtaV9jaF9pZF9pLCAgICAgICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIElECi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX2NhcHR1cmVfaSwgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gQ2FwdHVyZQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF9zaGlmdF9pLCAgICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIFNoaWZ0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX3VwZGF0ZV9pLCAgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gVXBkYXRlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX3RkaV9pLCAgICAgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gVERJCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pMnRhcGNzeW5jX2NoX3Rkb19vLCAgICAgIC8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgQ2hhaW4gVERPCi0KLSAgICAvLyBETSBpbnRlcmZhY2UKLSAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJkbWlfcmVzcF9pLCAgICAgICAgICAgICAgLy8gRE1JIHJlc3BvbnNlCi0gICAgaW5wdXQgbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICAgZG0yZG1pX3JkYXRhX2ksICAgICAgICAgICAgIC8vIERNSSByZWFkIGRhdGEKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWkyZG1fcmVxX28sICAgICAgICAgICAgICAgLy8gRE1JIHJlcXVlc3QKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWkyZG1fd3JfbywgICAgICAgICAgICAgICAgLy8gRE1JIHdyaXRlCi0gICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfQUREUl9XSURUSC0xOjBdICAgICAgZG1pMmRtX2FkZHJfbywgICAgICAgICAgICAgIC8vIERNSSBhZGRyZXNzCi0gICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgZG1pMmRtX3dkYXRhX28gICAgICAgICAgICAgIC8vIERNSSB3cml0ZSBkYXRhCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBTdGF0dXMgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9jYWxwYXJhbSAgICBEVE1DU19SRVNFUlZFREJfSEkgPSA1J2QzMTsKLWxvY2FscGFyYW0gICAgRFRNQ1NfUkVTRVJWRURCX0xPID0gNSdkMTg7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0RNSUhBUkRSRVNFVCA9IDUnZDE3OwotbG9jYWxwYXJhbSAgICBEVE1DU19ETUlSRVNFVCAgICAgPSA1J2QxNjsKLWxvY2FscGFyYW0gICAgRFRNQ1NfUkVTRVJWRURBICAgID0gNSdkMTU7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0lETEVfSEkgICAgICA9IDUnZDE0OwotbG9jYWxwYXJhbSAgICBEVE1DU19JRExFX0xPICAgICAgPSA1J2QxMjsKLWxvY2FscGFyYW0gICAgRFRNQ1NfRE1JU1RBVF9ISSAgID0gNSdkMTE7Ci1sb2NhbHBhcmFtICAgIERUTUNTX0RNSVNUQVRfTE8gICA9IDUnZDEwOwotbG9jYWxwYXJhbSAgICBEVE1DU19BQklUU19ISSAgICAgPSA1J2Q5OwotbG9jYWxwYXJhbSAgICBEVE1DU19BQklUU19MTyAgICAgPSA1J2Q0OwotbG9jYWxwYXJhbSAgICBEVE1DU19WRVJTSU9OX0hJICAgPSA1J2QzOwotbG9jYWxwYXJhbSAgICBEVE1DU19WRVJTSU9OX0xPICAgPSA1J2QwOwotCi0vLyBEZWJ1ZyBNb2R1bGUgSW50ZXJmYWNlIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWxvY2FscGFyYW0gICAgRE1JX09QX0xPICAgPSA1J2QwOwotbG9jYWxwYXJhbSAgICBETUlfT1BfSEkgICA9IERNSV9PUF9MTyAgICsgU0NSMV9EQkdfRE1JX09QX1dJRFRIICAgLSAxOwotbG9jYWxwYXJhbSAgICBETUlfREFUQV9MTyA9IERNSV9PUF9ISSAgICsgMTsKLWxvY2FscGFyYW0gICAgRE1JX0RBVEFfSEkgPSBETUlfREFUQV9MTyArIFNDUjFfREJHX0RNSV9EQVRBX1dJRFRIIC0gMTsKLWxvY2FscGFyYW0gICAgRE1JX0FERFJfTE8gPSBETUlfREFUQV9ISSArIDE7Ci1sb2NhbHBhcmFtICAgIERNSV9BRERSX0hJID0gRE1JX0FERFJfTE8gKyBTQ1IxX0RCR19ETUlfQUREUl9XSURUSCAtIDE7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUQVAgZGF0YSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9kcl91cGQ7Ci1sb2dpYyBbU0NSMV9EQkdfRE1JX0RSX0RNSV9BQ0NFU1NfV0lEVEgtMTowXSAgICAgICAgdGFwX2RyX2ZmOwotbG9naWMgW1NDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRILTE6MF0gICAgICAgIHRhcF9kcl9zaGlmdDsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfRFJfRE1JX0FDQ0VTU19XSURUSC0xOjBdICAgICAgICB0YXBfZHJfcmRhdGE7Ci1sb2dpYyBbU0NSMV9EQkdfRE1JX0RSX0RNSV9BQ0NFU1NfV0lEVEgtMTowXSAgICAgICAgdGFwX2RyX25leHQ7Ci0KLS8vIERNIHJlYWQgZGF0YSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JkYXRhX3VwZDsKLWxvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgICAgICAgICAgICBkbV9yZGF0YV9mZjsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2FjY2Vzc19yZXE7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kdG1jc19zZWw7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBETUkgPC0+IFRBUCBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRBUEMgcmVhZCBkYXRhIG11bHRpcGxleGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gdGFwY19kdG1jc19zZWwgPSAodGFwY3N5bmMyZG1pX2NoX2lkX2kgPT0gMSdkMSk7Ci0KLS8vIERNSSBvcGVyYXRpb24gaXMgYWx3YXlzIHN1Y2Nlc3NmdWwgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgdGFwX2RyX3JkYXRhID0gJzA7Ci0KLSAgICBpZih0YXBjX2R0bWNzX3NlbCkgYmVnaW4KLSAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX1JFU0VSVkVEQl9ISTpEVE1DU19SRVNFUlZFREJfTE9dID0gJ2IwOwotICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfRE1JSEFSRFJFU0VUXSAgICAgICAgICAgICAgICAgICAgPSAnYjA7Ci0gICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19ETUlSRVNFVF0gICAgICAgICAgICAgICAgICAgICAgICA9ICdiMDsKLSAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX1JFU0VSVkVEQV0gICAgICAgICAgICAgICAgICAgICAgID0gJ2IwOwotICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfSURMRV9ISTpEVE1DU19JRExFX0xPXSAgICAgICAgICAgPSAnYjA7Ci0gICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19ETUlTVEFUX0hJOkRUTUNTX0RNSVNUQVRfTE9dICAgICA9ICdiMDsKLSAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX0FCSVRTX0hJICA6RFRNQ1NfQUJJVFNfTE9dICAgICAgID0gU0NSMV9EQkdfRE1JX0FERFJfV0lEVEg7Ci0gICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19WRVJTSU9OX0xPXSAgICAgICAgICAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGFwX2RyX3JkYXRhW0RNSV9BRERSX0hJOkRNSV9BRERSX0xPXSAgICAgICAgICAgICAgID0gJ2IwOwotICAgICAgICB0YXBfZHJfcmRhdGFbRE1JX0RBVEFfSEk6RE1JX0RBVEFfTE9dICAgICAgICAgICAgICAgPSBkbV9yZGF0YV9mZjsKLSAgICAgICAgdGFwX2RyX3JkYXRhW0RNSV9PUF9ISSAgOkRNSV9PUF9MT10gICAgICAgICAgICAgICAgID0gJ2IwOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBfZHJfc2hpZnQgPSB0YXBjX2R0bWNzX3NlbAotICAgICAgICAgICAgICAgICAgICA/IHs5J2IwLCB0YXBjc3luYzJkbWlfY2hfdGRpX2ksIHRhcF9kcl9mZltTQ1IxX0RCR19ETUlfRFJfRFRNQ1NfV0lEVEgtMToxXX0KLSAgICAgICAgICAgICAgICAgICAgOiB7dGFwY3N5bmMyZG1pX2NoX3RkaV9pLCB0YXBfZHJfZmZbU0NSMV9EQkdfRE1JX0RSX0RNSV9BQ0NFU1NfV0lEVEgtMToxXX07Ci0KLS8vIFRBUCBkYXRhIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gdGFwX2RyX3VwZCA9IHRhcGNzeW5jMmRtaV9jaF9jYXB0dXJlX2kgfCB0YXBjc3luYzJkbWlfY2hfc2hpZnRfaTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2RyX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmKHRhcF9kcl91cGQpIGJlZ2luCi0gICAgICAgIHRhcF9kcl9mZiA8PSB0YXBfZHJfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwX2RyX25leHQgPSB0YXBjc3luYzJkbWlfY2hfY2FwdHVyZV9pID8gdGFwX2RyX3JkYXRhCi0gICAgICAgICAgICAgICAgICAgOiB0YXBjc3luYzJkbWlfY2hfc2hpZnRfaSAgID8gdGFwX2RyX3NoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFwX2RyX2ZmOwotCi1hc3NpZ24gZG1pMnRhcGNzeW5jX2NoX3Rkb19vID0gdGFwX2RyX2ZmWzBdOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRE1JIDwtPiBETSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiB0YXBjX2RtaV9hY2Nlc3NfcmVxID0gdGFwY3N5bmMyZG1pX2NoX3VwZGF0ZV9pICYgdGFwY3N5bmMyZG1pX2NoX3NlbF9pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmICh0YXBjc3luYzJkbWlfY2hfaWRfaSA9PSAyJ2QyKTsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkbWkyZG1fcmVxX28gICAgICAgICAgID0gMSdiMDsKLSAgICBkbWkyZG1fd3JfbyAgICAgICAgICAgID0gMSdiMDsKLSAgICBkbWkyZG1fYWRkcl9vICAgICAgICAgID0gMSdiMDsKLSAgICBkbWkyZG1fd2RhdGFfbyAgICAgICAgID0gMSdiMDsKLQotICAgIGlmKHRhcGNfZG1pX2FjY2Vzc19yZXEpIGJlZ2luCi0gICAgICAgIGRtaTJkbV9yZXFfbyAgID0gdGFwX2RyX2ZmW0RNSV9PUF9ISSAgOkRNSV9PUF9MT10gIT0gMidiMDA7Ci0gICAgICAgIGRtaTJkbV93cl9vICAgID0gdGFwX2RyX2ZmW0RNSV9PUF9ISSAgOkRNSV9PUF9MT10gPT0gMidiMTA7Ci0gICAgICAgIGRtaTJkbV9hZGRyX28gID0gdGFwX2RyX2ZmW0RNSV9BRERSX0hJOkRNSV9BRERSX0xPXTsKLSAgICAgICAgZG1pMmRtX3dkYXRhX28gPSB0YXBfZHJfZmZbRE1JX0RBVEFfSEk6RE1JX0RBVEFfTE9dOwotICAgIGVuZAotZW5kCi0KLS8vIERNIHJlYWQgZGF0YSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIGRtX3JkYXRhX3VwZCA9IGRtaTJkbV9yZXFfbyAmIGRtMmRtaV9yZXNwX2kgJiB+ZG1pMmRtX3dyX287Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGRtX3JkYXRhX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChkbV9yZGF0YV91cGQpIGJlZ2luCi0gICAgICAgIGRtX3JkYXRhX2ZmIDw9IGRtMmRtaV9yZGF0YV9pOwotICAgIGVuZAotZW5kCi0KLWVuZG1vZHVsZSA6IHNjcjFfZG1pCi0KLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9zY3Uuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3NjdS5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3MGY0MC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3NjdS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlIDxzY3IxX3NjdS5zdj4KLS8vLyBAYnJpZWYgU3lzdGVtIENvbnRyb2wgVW5pdCAoU0NVKQotLy8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSAvLyBGdW5jdGlvbmFsaXR5OgotIC8vIC0gR2VuZXJhdGVzIFN5c3RlbSwgQ29yZSwgSERVIGFuZCBETSByZXNldHMgYW5kIHRoZWlyIHF1YWxpZmllciBzaWduYWxzCi0gLy8gLSBQcm92aWRlcyBkZWJ1Z2dlciB3aXRoIHNvZnR3YXJlIFN5c3RlbSBhbmQgQ29yZSByZXNldHMgZ2VuZXJhdGlvbiBmdW5jdGlvbmFsaXR5Ci0gLy8gLSBBbGxvd3MgdG8gc2V0IHRoZSBiZWhhdmlvciBvZiBETSBhbmQgSERVIHJlc2V0cwotIC8vIC0gU2hvd3MgcmVzZXRzIFN0YXR1c2VzIGFuZCBTdGlja3kgU3RhdHVzZXMKLQotIC8vIFN0cnVjdHVyZToKLSAvLyAtIFRBUEMgc2Nhbi1jaGFpbiBpbnRlcmZhY2UKLSAvLyAtIFNDVSBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlCi0gLy8gLSBTQ1UgQ1NSUzoKLSAvLyAgIC0gQ09OVFJPTCByZWdpc3RlcgotIC8vICAgLSBNT0RFIHJlZ2lzdGVyCi0gLy8gICAtIFNUQVRVUyByZWdpc3RlcgotIC8vICAgLSBTVElDS1lfU1RBVFVTIHJlZ2lzdGVyCi0gLy8gLSBSZXNldCBsb2dpYwotIC8vICAgLSBTeXN0ZW0gUmVzZXQKLSAvLyAgIC0gQ29yZSBSZXNldAotIC8vICAgLSBETSBSZXNldAotIC8vICAgLSBIRFUgUmVzZXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfc2N1LnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0KLW1vZHVsZSBzY3IxX3NjdSAoCi0gICAgLy8gR2xvYmFsIHNpZ25hbHMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICBjcHVfcnN0X24sICAgICAgICAgICAgICAgICAgICAvLyBDUFUgUmVzZXQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IE1vZGUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRlc3RfcnN0X24sICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTQ1UgY2xvY2sKLQotICAgIC8vIFRBUEMgc2Nhbi1jaGFpbnMKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfaSwgICAgICAgIC8vIFRBUEMgQ2hhaW4gU2VsZWN0Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfaWRfaSwgICAgICAgICAvLyBUQVBDIENoYWluIElECi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pLCAgICAvLyBUQVBDIENoYWluIENhcHR1cmUKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pLCAgICAgIC8vIFRBUEMgQ2hhaW4gU2hpZnQKLSAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF91cGRhdGVfaSwgICAgIC8vIFRBUEMgQ2hhaW4gVXBkYXRlCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfdGRpX2ksICAgICAgICAvLyBUQVBDIENoYWluIFRESQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgc2N1MnRhcGNzeW5jX2NoX3Rkb19vLCAgICAgICAgLy8gVEFQQyBDaGFpbiBURE8KLQotICAgIC8vIElucHV0IHN5bmMgcmVzZXRzOgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgbmRtX3JzdF9uX2ksICAgICAgICAgICAgICAgICAgLy8gTm9uLURNIFJlc2V0IGlucHV0IGZyb20gRE0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgIGhhcnRfcnN0X25faSwgICAgICAgICAgICAgICAgIC8vIEhBUlQgUmVzZXQgZnJvbSBETQotCi0gICAgLy8gR2VuZXJhdGVkIHJlc2V0cwotICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3lzX3JzdF9uX28sICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtL0NsdXN0ZXIgUmVzZXQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGNvcmVfcnN0X25fbywgICAgICAgICAgICAgICAgIC8vIENvcmUgUmVzZXQKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGRtX3JzdF9uX28sICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIE1vZHVsZSBSZXNldAotICAgIG91dHB1dCBsb2dpYyAgICAgICAgaGR1X3JzdF9uX28sICAgICAgICAgICAgICAgICAgLy8gSEFSVCBEZWJ1ZyBVbml0IFJlc2V0Ci0KLSAgICAvLyBSZXNldHMgc3RhdHVzZXMKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIHN5c19yc3Rfc3RhdHVzX28sICAgICAgICAgICAgIC8vIFN5c3RlbSBSZXNldCBTdGF0dXMgKHN5bmMnZWQgdG8gUE9SIHJlc2V0IGRvbWFpbikKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGNvcmVfcnN0X3N0YXR1c19vLCAgICAgICAgICAgIC8vIENvcmUgUmVzZXQgU3RhdHVzIChzeW5jJ2VkIHRvIFBPUiByZXNldCBkb21haW4pCi0KLSAgICAvLyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgKFJEQykgcXVhbGlmaWVycwotICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3lzX3JkY19xbGZ5X28sICAgICAgICAgICAgICAgLy8gU3lzdGVtL0NsdXN0ZXItdG8tRXh0ZXJuYWxTT0MgUmVzZXQgRG9tYWluIENyb3NzaW5nIFF1YWxpZmllcgotICAgIG91dHB1dCBsb2dpYyAgICAgICAgY29yZV9yZGNfcWxmeV9vLCAgICAgICAgICAgICAgLy8gQ29yZS10by1FeHRlcm5hbFNPQyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICBjb3JlMmhkdV9yZGNfcWxmeV9vLCAgICAgICAgICAvLyBDb3JlLXRvLUhEVSBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICBjb3JlMmRtX3JkY19xbGZ5X28sICAgICAgICAgICAvLyBDb3JlLXRvLURNIFJlc2V0IERvbWFpbiBDcm9zc2luZyBRdWFsaWZpZXIKLSAgICBvdXRwdXQgbG9naWMgICAgICAgIGhkdTJkbV9yZGNfcWxmeV9vICAgICAgICAgICAgIC8vIEhEVS10by1ETSBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgUGFyYW1ldGVycwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICA9IDI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBTaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBTQ1UgQ1NSIHdyaXRlL3JlYWQgaS9mCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUQVBDIHNjYW4tY2hhaW4gY29udHJvbCBsb2dpYwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3VfY3NyX3JlcTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kcl9jYXBfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RyX3NoZnRfcmVxOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RyX3VwZF9yZXE7Ci0KLS8vIFRBUEMgc2hpZnQgcmVnaXN0ZXIgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3NoaWZ0X3VwZDsKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zICAgICAgICAgICAgICAgICAgdGFwY19zaGlmdF9mZjsKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zICAgICAgICAgICAgICAgICAgdGFwY19zaGlmdF9uZXh0OwotCi0vLyBUQVBDIHNoYWRvdyByZWdpc3RlciBzaWduYWxzCi10eXBlX3NjcjFfc2N1X3N5c2N0cmxfZHJfcyAgICAgICAgICAgICAgICAgIHRhcGNfc2hhZG93X2ZmOwotCi0vLyBTQ1UgQ1NSIHdyaXRlL3JlYWQgaS9mCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIHNjdV9jc3Jfd2RhdGE7Ci1sb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIHNjdV9jc3JfcmRhdGE7Ci0KLS8vIFNDVSBDU1JzIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENvbnRyb2wgcmVnaXN0ZXIKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9jb250cm9sX3JlZ19zICAgICAgICAgc2N1X2NvbnRyb2xfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdV9jb250cm9sX3dyX3JlcTsKLQotLy8gTW9kZSByZWdpc3RlcgotdHlwZV9zY3IxX3NjdV9zeXNjdHJsX21vZGVfcmVnX3MgICAgICAgICAgICBzY3VfbW9kZV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N1X21vZGVfd3JfcmVxOwotCi0vLyBTdGF0dXMgcmVnaXN0ZXIKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MgICAgICAgICAgc2N1X3N0YXR1c19mZjsKLXR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MgICAgICAgICAgc2N1X3N0YXR1c19mZl9kbHk7Ci10eXBlX3NjcjFfc2N1X3N5c2N0cmxfc3RhdHVzX3JlZ19zICAgICAgICAgIHNjdV9zdGF0dXNfZmZfcG9zZWRnZTsKLQotLy8gU3RpY2t5IFN0YXR1cyByZWdpc3RlcgotdHlwZV9zY3IxX3NjdV9zeXNjdHJsX3N0YXR1c19yZWdfcyAgICAgICAgICBzY3Vfc3RpY2t5X3N0c19mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfd3JfcmVxOwotCi0vLyBSZXNldCBsb2dpYyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbnB1dCByZXNldHMgc3luY2hyb25pemF0aW9uIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uX3N5bmM7Ci0KLS8vIFN5c3RlbSBSZXNldCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9pbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX3N0YXR1czsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX3N0YXR1c19zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X25fcWxmeTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3Jlc2V0X247Ci0KLS8vIENvcmUgUmVzZXQgc2lnbmFscwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX2luX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X25fc3RhdHVzOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3N0YXR1c19zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3FsZnk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVzZXRfbjsKLQotLy8gSERVIFJlc2V0IHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9uX2luX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3Rfbl9zdGF0dXM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3Rfbl9zdGF0dXNfc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9uX3FsZnk7Ci0KLS8vIERNIFJlc2V0IHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnN0X25faW47Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uX3N0YXR1czsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRBUEMgc2Nhbi1jaGFpbiBpL2YKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIFRBUEMgc2Nhbi1jaGFpbiBjb250cm9sIGxvZ2ljCi0gLy8gLSBUQVBDIHNoaWZ0IHJlZ2lzdGVyCi0gLy8gLSBUQVBDIHNoYWRvdyByZWdpc3RlcgotLy8KLQotLy8gVEFQQyBzY2FuLWNoYWluIGNvbnRyb2wgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFzc2lnbiBzY3VfY3NyX3JlcSAgICAgID0gdGFwY3N5bmMyc2N1X2NoX3NlbF9pICYgKHRhcGNzeW5jMnNjdV9jaF9pZF9pID09ICcwKTsKLWFzc2lnbiB0YXBjX2RyX2NhcF9yZXEgID0gc2N1X2Nzcl9yZXEgJiB0YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pOwotYXNzaWduIHRhcGNfZHJfc2hmdF9yZXEgPSBzY3VfY3NyX3JlcSAmIHRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pOwotYXNzaWduIHRhcGNfZHJfdXBkX3JlcSAgPSBzY3VfY3NyX3JlcSAmIHRhcGNzeW5jMnNjdV9jaF91cGRhdGVfaTsKLQotLy8gVEFQQyBzaGlmdCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYXNzaWduIHRhcGNfc2hpZnRfdXBkID0gdGFwY19kcl9jYXBfcmVxIHwgdGFwY19kcl9zaGZ0X3JlcTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgICAgIHRhcGNfc2hpZnRfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKHRhcGNfc2hpZnRfdXBkKSBiZWdpbgotICAgICAgICB0YXBjX3NoaWZ0X2ZmIDw9IHRhcGNfc2hpZnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwY19zaGlmdF9uZXh0ID0gdGFwY19kcl9jYXBfcmVxICA/IHRhcGNfc2hhZG93X2ZmCi0gICAgICAgICAgICAgICAgICAgICAgIDogdGFwY19kcl9zaGZ0X3JlcSA/IHt0YXBjc3luYzJzY3VfY2hfdGRpX2ksIHRhcGNfc2hpZnRfZmZbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9XSURUSC0xOjFdfS8vIGNwLjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFwY19zaGlmdF9mZjsKLQotLy8gVEFQQyBzaGFkb3cgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgaWYgKH5wd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgICAgICB0YXBjX3NoYWRvd19mZiAgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmICh0YXBjX2RyX3VwZF9yZXEpIGJlZ2luCi0gICAgICAgIHRhcGNfc2hhZG93X2ZmLm9wICAgPD0gdGFwY19zaGlmdF9mZi5vcDsKLSAgICAgICAgdGFwY19zaGFkb3dfZmYuYWRkciA8PSB0YXBjX3NoaWZ0X2ZmLmFkZHI7Ci0gICAgICAgIHRhcGNfc2hhZG93X2ZmLmRhdGEgPD0gc2N1X2Nzcl93ZGF0YTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gc2N1MnRhcGNzeW5jX2NoX3Rkb19vID0gdGFwY19zaGlmdF9mZlswXTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNDVSBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBXcml0ZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJlZ2lzdGVyIHNlbGVjdGlvbiBsb2dpYwotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBzY3VfY29udHJvbF93cl9yZXEgICAgPSAxJ2IwOwotICAgIHNjdV9tb2RlX3dyX3JlcSAgICAgICA9IDEnYjA7Ci0gICAgc2N1X3N0aWNreV9zdHNfd3JfcmVxID0gMSdiMDsKLQotICAgIGlmICh0YXBjX2RyX3VwZF9yZXEgJiYgKHRhcGNfc2hpZnRfZmYub3AgIT0gU0NSMV9TQ1VfU1lTQ1RSTF9PUF9SRUFEKSkgYmVnaW4KLSAgICAgICAgY2FzZSAodGFwY19zaGlmdF9mZi5hZGRyKQotICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX0NPTlRST0w6IHNjdV9jb250cm9sX3dyX3JlcSAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfTU9ERSAgIDogc2N1X21vZGVfd3JfcmVxICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9TVElDS1kgOiBzY3Vfc3RpY2t5X3N0c193cl9yZXEgPSAodGFwY19zaGlmdF9mZi5vcCA9PSBTQ1IxX1NDVV9TWVNDVFJMX09QX0NMUkJJVFMpOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICA6IGJlZ2luIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8gV3JpdGUgZGF0YSBjb25zdHJ1Y3Rpb24KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgc2N1X2Nzcl93ZGF0YSA9ICcwOwotCi0gICAgaWYgKHRhcGNfZHJfdXBkX3JlcSkgYmVnaW4KLSAgICAgICAgY2FzZSAodGFwY19zaGlmdF9mZi5vcCkKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfV1JJVEUgIDogc2N1X2Nzcl93ZGF0YSA9IHRhcGNfc2hpZnRfZmYuZGF0YTsKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfUkVBRCAgIDogc2N1X2Nzcl93ZGF0YSA9IHNjdV9jc3JfcmRhdGE7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1NFVEJJVFM6IHNjdV9jc3Jfd2RhdGEgPSBzY3VfY3NyX3JkYXRhIHwgICB0YXBjX3NoaWZ0X2ZmLmRhdGE7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX0NMUkJJVFM6IHNjdV9jc3Jfd2RhdGEgPSBzY3VfY3NyX3JkYXRhICYgKH50YXBjX3NoaWZ0X2ZmLmRhdGEpOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vIFJlYWQgaW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgc2N1X2Nzcl9yZGF0YSA9ICcwOwotCi0gICAgaWYgKHRhcGNfZHJfdXBkX3JlcSkgYmVnaW4KLSAgICAgICAgY2FzZSAodGFwY19zaGlmdF9mZi5hZGRyKQotICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX0NPTlRST0w6IHNjdV9jc3JfcmRhdGEgPSBzY3VfY29udHJvbF9mZjsKLSAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9NT0RFICAgOiBzY3VfY3NyX3JkYXRhID0gc2N1X21vZGVfZmY7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RBVFVTIDogc2N1X2Nzcl9yZGF0YSA9IHNjdV9zdGF0dXNfZmY7Ci0gICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RJQ0tZIDogc2N1X2Nzcl9yZGF0YSA9IHNjdV9zdGlja3lfc3RzX2ZmOwotICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICA6IHNjdV9jc3JfcmRhdGEgPSAneDsKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTQ1UgQ1NScwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0gLy8gUmVnaXN0ZXJzOgotIC8vIC0gQ09OVFJPTCByZWdpc3RlcgotIC8vIC0gTU9ERSByZWdpc3RlcgotIC8vIC0gU1RBVFVTIHJlZ2lzdGVyCi0gLy8gLSBTVElDS1lfU1RBVFVTIHJlZ2lzdGVyCi0vLwotCi0vLyBDT05UUk9MIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQWxsb3dzIGRlYnVnZ2VyIHRvIGdlbmVyYXRlIFN5c3RlbSBhbmQgQ29yZSByZXNldHMKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgICAgIHNjdV9jb250cm9sX2ZmIDw9ICcwOwotICAgIGVuZCBlbHNlIGlmIChzY3VfY29udHJvbF93cl9yZXEpIGJlZ2luCi0gICAgICAgIHNjdV9jb250cm9sX2ZmIDw9IHNjdV9jc3Jfd2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotLy8gTU9ERSByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNldHMgcmVzZXQgYmVoYXZpb3IgZm9yIERNIFJlc2V0IGFuZCBIRFUgUmVzZXQgc2lnbmFscwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICAgICAgc2N1X21vZGVfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKHNjdV9tb2RlX3dyX3JlcSkgYmVnaW4KLSAgICAgICAgc2N1X21vZGVfZmYgPD0gc2N1X2Nzcl93ZGF0YTsKLSAgICBlbmQKLWVuZAotCi0vLyBTVEFUVVMgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0aGUgc3RhdHVzIG9mIGV2ZXJ5IG91dHB1dCByZXNldCBzaWduYWwgKFN5c3RlbSwgQ29yZSwgRE0gYW5kIEhEVSkKLQotYXNzaWduIHNjdV9zdGF0dXNfZmYuc3lzX3Jlc2V0ICA9IHN5c19yc3Rfc3RhdHVzX28gOwotYXNzaWduIHNjdV9zdGF0dXNfZmYuY29yZV9yZXNldCA9IGNvcmVfcnN0X3N0YXR1c19vOwotYXNzaWduIHNjdV9zdGF0dXNfZmYuZG1fcmVzZXQgICA9IH5kbV9yc3Rfbl9zdGF0dXM7Ci1hc3NpZ24gc2N1X3N0YXR1c19mZi5oZHVfcmVzZXQgID0gfmhkdV9yc3Rfbl9zdGF0dXNfc3luYzsKLQotLy8gU3RhdHVzIFJlZ2lzdGVyIHBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uIGxvZ2ljCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X25fc3luYykgYmVnaW4KLSAgICAgICAgc2N1X3N0YXR1c19mZl9kbHkgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgc2N1X3N0YXR1c19mZl9kbHkgPD0gc2N1X3N0YXR1c19mZjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gc2N1X3N0YXR1c19mZl9wb3NlZGdlID0gc2N1X3N0YXR1c19mZiAmIH5zY3Vfc3RhdHVzX2ZmX2RseTsKLQotLy8gU1RJQ0tZX1NUQVRVUyByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZvciBldmVyeSBvdXRwdXQgcmVzZXQgc2lnbmFsIHNob3dzIGlmIGl0IHdhcyBhc3NlcnRlZCBzaW5jZSB0aGUgbGFzdCBiaXQgY2xlYXJpbmcKLWludGVnZXIgaTsKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCi0gICAgaWYgKH5wd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgotICAgICAgICBzY3Vfc3RpY2t5X3N0c19mZiA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0NSMV9TQ1VfU1lTQ1RSTF9TVEFUVVNfUkVHX1dJRFRIIDsgaT1pKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgICAgIGlmIChzY3Vfc3RhdHVzX2ZmX3Bvc2VkZ2VbaV0pIGJlZ2luCi0gICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfZmZbaV0gPD0gMSdiMTsKLSAgICAgICAgICAgIGVuZCBlbHNlIGlmIChzY3Vfc3RpY2t5X3N0c193cl9yZXEpIGJlZ2luCi0gICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfZmZbaV0gPD0gc2N1X2Nzcl93ZGF0YVtpXTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIFN5c3RlbSBSZXNldCBsb2dpYwotIC8vIC0gQ29yZSBSZXNldCBsb2dpYwotIC8vIC0gSGFydCBEZWJ1ZyBVbml0IFJlc2V0IGxvZ2ljCi0gLy8gLSBEZWJ1ZyBNb2R1bGUgUmVzZXQgbG9naWMKLS8vCi0KLS8vIFJlc2V0IGlucHV0cyBhcmUgYXNzdW1lZCBzeW5jaHJvbm91cwotYXNzaWduIHB3cnVwX3JzdF9uX3N5bmMgPSBwd3J1cF9yc3RfbjsKLWFzc2lnbiByc3Rfbl9zeW5jICAgICAgID0gcnN0X247Ci1hc3NpZ24gY3B1X3JzdF9uX3N5bmMgICA9IGNwdV9yc3RfbjsKLQotLy8gSW50ZXJtZWRpYXRlIHJlc2V0czoKLWFzc2lnbiBzeXNfcmVzZXRfbiAgPSB+c2N1X2NvbnRyb2xfZmYuc3lzX3Jlc2V0OwotYXNzaWduIGNvcmVfcmVzZXRfbiA9IH5zY3VfY29udHJvbF9mZi5jb3JlX3Jlc2V0OwotCi0vLyBTeXN0ZW0vQ2x1c3RlciBSZXNldDogc3lzX3JzdF9uX28KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAgIGlfc3lzX3JzdG5fcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJlc2V0X25faW5fc3luYyAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX2luICAgICksCi0gICAgLnJlc2V0X25fb3V0X3FsZnkgICAgICAgICAgICAgICAoc3lzX3JzdF9uX3FsZnkgICksCi0gICAgLnJlc2V0X25fb3V0ICAgICAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX28gICAgICksCi0gICAgLnJlc2V0X25fc3RhdHVzICAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX3N0YXR1cykKLSk7Ci0KLWFzc2lnbiBzeXNfcnN0X25faW4gPSBzeXNfcmVzZXRfbiAmIG5kbV9yc3Rfbl9pICYgcnN0X25fc3luYzsKLQotc2NyMV9kYXRhX3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3N5c19yc3RuX3N0YXR1c19zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgKSwKLSAgICAuZGF0YV9pbiAgICAgICAgICAgICAoc3lzX3JzdF9uX3N0YXR1cyAgICAgKSwKLSAgICAuZGF0YV9vdXQgICAgICAgICAgICAoc3lzX3JzdF9uX3N0YXR1c19zeW5jKQotKTsKLQotYXNzaWduIHN5c19yc3Rfc3RhdHVzX28gPSB+c3lzX3JzdF9uX3N0YXR1c19zeW5jOwotCi0vLyBTeXN0ZW0vQ2x1c3Rlci10by1FeHRlcm5hbFNPQyBSREMgcXVhbGlmaWVyCi1hc3NpZ24gc3lzX3JkY19xbGZ5X28gPSBzeXNfcnN0X25fcWxmeTsKLQotLy8gQ29yZSBSZXNldDogY29yZV9yc3Rfbl9vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zY3IxX3Jlc2V0X3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgICBpX2NvcmVfcnN0bl9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICApLAotICAgIC5yZXNldF9uX2luX3N5bmMgICAgICAgICAgICAgICAgKGNvcmVfcnN0X25faW5fc3luYyksCi0gICAgLnJlc2V0X25fb3V0X3FsZnkgICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9xbGZ5ICAgKSwKLSAgICAucmVzZXRfbl9vdXQgICAgICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX28gICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgICAgICAgICAgICAgKGNvcmVfcnN0X25fc3RhdHVzICkKLSk7Ci0KLWFzc2lnbiBjb3JlX3JzdF9uX2luX3N5bmMgICA9IHN5c19yc3Rfbl9pbiAmIGhhcnRfcnN0X25faSAmIGNvcmVfcmVzZXRfbiAmIGNwdV9yc3Rfbl9zeW5jOwotCi1zY3IxX2RhdGFfc3luY19jZWxsICMoCi0gICAgLlNUQUdFU19BTU9VTlQgICAgICAgIChTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX2NvcmVfcnN0bl9zdGF0dXNfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAotICAgIC5kYXRhX2luICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9zdGF0dXMgICAgICksCi0gICAgLmRhdGFfb3V0ICAgICAgICAgICAgIChjb3JlX3JzdF9uX3N0YXR1c19zeW5jKQotKTsKLQotYXNzaWduIGNvcmVfcnN0X3N0YXR1c19vID0gfmNvcmVfcnN0X25fc3RhdHVzX3N5bmM7Ci0KLS8vIENvcmUgUmVzZXQgUkRDIFF1YWxpZmllcnM6Ci0vLyAgLSBDb3JlLXRvLUV4dGVybmFsU09DIFJEQyBRbGZ5Ci1hc3NpZ24gY29yZV9yZGNfcWxmeV9vID0gY29yZV9yc3Rfbl9xbGZ5OwotLy8gIC0gQ29yZS10by1IRFUgUkRDIFFsZnkKLWFzc2lnbiBjb3JlMmhkdV9yZGNfcWxmeV9vID0gY29yZV9yc3Rfbl9xbGZ5OwotLy8gIC0gQ29yZS10by1EZWJ1Z01vZHVsZSBSREMgUWxmeQotYXNzaWduIGNvcmUyZG1fcmRjX3FsZnlfbyAgPSBjb3JlX3JzdF9uX3FsZnk7Ci0KLS8vIEhhcnQgRGVidWcgVW5pdCBSZXNldDogaGR1X3JzdF9uX28KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAgIGlfaGR1X3JzdG5fcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICApLAotICAgIC5yZXNldF9uX2luX3N5bmMgICAgICAgICAgICAgICAgKGhkdV9yc3Rfbl9pbl9zeW5jKSwKLSAgICAucmVzZXRfbl9vdXRfcWxmeSAgICAgICAgICAgICAgIChoZHVfcnN0X25fcWxmeSAgICksCi0gICAgLnJlc2V0X25fb3V0ICAgICAgICAgICAgICAgICAgICAoaGR1X3JzdF9uX28gICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgICAgICAgICAgICAgKGhkdV9yc3Rfbl9zdGF0dXMgKQotKTsKLQotYXNzaWduIGhkdV9yc3Rfbl9pbl9zeW5jID0gc2N1X21vZGVfZmYuaGR1X3JzdF9iaHYgfCBjb3JlX3JzdF9uX2luX3N5bmM7Ci0KLXNjcjFfZGF0YV9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9TQ1VfUlNUX1NZTkNfU1RBR0VTX05VTSkKLSkgaV9oZHVfcnN0bl9zdGF0dXNfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICksCi0gICAgLmRhdGFfaW4gICAgICAgICAgICAgKGhkdV9yc3Rfbl9zdGF0dXMgICAgICksCi0gICAgLmRhdGFfb3V0ICAgICAgICAgICAgKGhkdV9yc3Rfbl9zdGF0dXNfc3luYykKLSk7Ci0KLS8vIEhhcnQgRGVidWcgVW5pdCBSZXNldCBSREMgUXVhbGlmaWVyczoKLS8vICAtIEhEVS10by1EZWJ1Z01vZHVsZSBSREMgUWxmeQotYXNzaWduIGhkdTJkbV9yZGNfcWxmeV9vID0gaGR1X3JzdF9uX3FsZnk7Ci0KLS8vIERlYnVnIE1vZHVsZSBSZXNldDogZG1fcnN0X25fbwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc2NyMV9yZXNldF9idWZfY2VsbCBpX2RtX3JzdG5fYnVmX2NlbGwgKAotICAgIC5yc3RfbiAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMpLAotICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC5yZXNldF9uX2luICAgICAgICAgKGRtX3JzdF9uX2luICAgICApLAotICAgIC5yZXNldF9uX291dCAgICAgICAgKGRtX3JzdF9uX28gICAgICApLAotICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKGRtX3JzdF9uX3N0YXR1cyApCi0pOwotCi1hc3NpZ24gZG1fcnN0X25faW4gID0gfnNjdV9tb2RlX2ZmLmRtX3JzdF9iaHYgfCBzeXNfcmVzZXRfbjsKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZm5kZWYgVkVSSUxBVE9SCi0vLyBQcmV2ZW50aW5nIHNvbWUgYXNzZXJ0aW9ucyB0byBiZSByYWlzZWQgYXQgMCBzaW0gdGltZSBvciBpbiB0aGUgZmlyc3QgY3ljbGUKLWluaXRpYWwgYmVnaW4KLSRhc3NlcnRvZmYoMCwgc2NyMV9zY3UpOwotcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xrKTsKLSRhc3NlcnRvbigwLCBzY3IxX3NjdSk7Ci1lbmQKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLQotLy8gWCBjaGVja3MKLVNDUjFfU1ZBX1NDVV9SRVNFVFNfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKQotICAgICEkaXN1bmtub3duKHtwd3J1cF9yc3RfbiwgcnN0X24sIGNwdV9yc3RfbiwgbmRtX3JzdF9uX2ksIGhhcnRfcnN0X25faX0pCi0pIGVsc2UgJGVycm9yKCJTQ1UgcmVzZXRzIGVycm9yOiB1bmtub3duIHZhbHVlcyBvZiBpbnB1dCByZXNldHMiKTsKLQotYGlmbmRlZiBWRVJJTEFUT1IKLS8vIFF1YWxpZmllcnMgY2hlY2tzCi1TQ1IxX1NWQV9TQ1VfU1lTMlNPQ19RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKHN5c19yc3Rfbl9vKSB8LT4gJGZlbGwoJHBhc3Qoc3lzX3JkY19xbGZ5X28pKQotKSBlbHNlICRlcnJvcigiU0NVIHN5czJzb2MgcWxmeSBlcnJvcjogcWxmeSB3YXNuJ3QgcmFpc2VkIHByaW9yIHRvIHJlc2V0Iik7Ci0KLVNDUjFfU1ZBX1NDVV9DT1JFMlNPQ19RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmVfcmRjX3FsZnlfbykpCi0pIGVsc2UgJGVycm9yKCJTQ1UgY29yZTJzb2MgcWxmeSBlcnJvcjogcWxmeSB3YXNuJ3QgcmFpc2VkIHByaW9yIHRvIHJlc2V0Iik7Ci0KLVNDUjFfU1ZBX1NDVV9DT1JFMkhEVV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmUyaGR1X3JkY19xbGZ5X28pKQotKSBlbHNlICRlcnJvcigiU0NVIGNvcmUyaGR1IHFsZnkgZXJyb3I6IHFsZnkgd2Fzbid0IHJhaXNlZCBwcmlvciB0byByZXNldCIpOwotCi1TQ1IxX1NWQV9TQ1VfQ09SRTJETV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmUyZG1fcmRjX3FsZnlfbykpCi0pIGVsc2UgJGVycm9yKCJTQ1UgY29yZTJkbSBxbGZ5IGVycm9yOiBxbGZ5IHdhc24ndCByYWlzZWQgcHJpb3IgdG8gcmVzZXQiKTsKLQotU0NSMV9TVkFfU0NVX0hEVTJETV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQotICAgICRmZWxsKGhkdV9yc3Rfbl9vKSB8LT4gJGZlbGwoJHBhc3QoaGR1MmRtX3JkY19xbGZ5X28pKQotKSBlbHNlICRlcnJvcigiU0NVIGhkdTJkbSBxbGZ5IGVycm9yOiBxbGZ5IHdhc24ndCByYWlzZWQgcHJpb3IgdG8gcmVzZXQiKTsKLWBlbmRpZiAvLyBWRVJJTEFUT1IKLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3NjdQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwYy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwYy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU2ODdmNC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGMuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3RhcGMuc3Y+Ci0vLy8gQGJyaWVmICAgICAgVEFQIENvbnRyb2xsZXIgKFRBUEMpCi0vLy8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAvLwotIC8vIEZ1bmN0aW9uYWxpdHk6Ci0gLy8gLSBDb250cm9scyBUQVAgb3BlcmF0aW9uCi0gLy8gLSBBbGxvd3MgZGVidWdnZXIgdG8gYWNjZXNzIFRBUCBEYXRhIHJlZ2lzdGVycyBhbmQgRE1JL1NDVSBzY2FuLWNoYWlucyB2aWEKLSAvLyAgIGNvbW1hbmQgd3JpdHRlbiBpbiBJbnN0cnVjdGlvbiByZWdpc3RlcgotIC8vCi0gLy8gU3RydWN0dXJlOgotIC8vIC0gU3luY2hyb25vdXMgcmVzZXQgZ2VuZXJhdGlvbgotIC8vIC0gVEFQQyBGU00KLSAvLyAtIFRBUEMgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXJzCi0gLy8gLSBUQVBDIERScy9ETUkvU0NVIHNjYW4tY2hhaW5zCi0gLy8gLSBUQVBDIFRETyBlbmFibGUgYW5kIG91dHB1dCBSZWdpc3RlcnMKLSAvLyAtIFRBUEMgRGF0YSBSZWdpc3RlcnMKLSAvLyAgIC0gQllQQVNTCi0gLy8gICAtIElEQ09ERQotIC8vICAgLSBCVUlMRCBJRAotIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV90YXBjLnN2aCIKLWBpbmNsdWRlICJzY3IxX2RtLnN2aCIKLQotbW9kdWxlIHNjcjFfdGFwYyAoCi0gICAgLy8gSlRBRyBzaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X24sICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IFJlc2V0IChUUlNUbikKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RjaywgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgQ2xvY2sgKFRDSykKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RtcywgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgTW9kZSBTZWxlY3QgKFRNUykKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RkaSwgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgRGF0YSBJbnB1dCAoVERJKQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGRvLCAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBEYXRhIE91dHB1dCAoVERPKQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGRvX2VuLCAgICAgICAgICAgICAgICAgICAgLy8gVERPIEVuYWJsZSwgc2lnbmFsIGZvciBURE8gYnVmZmVyIGNvbnRyb2wKLQotICAgIC8vIEZ1c2VzOgotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJ0YXBjX2Z1c2VfaWRjb2RlX2ksICAgICAgICAgLy8gSURDT0RFIHZhbHVlIGZyb20gZnVzZXMKLQotICAgIC8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfbywgICAgIC8vIFNDVSBDaGFpbiBTZWxlY3QKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfbywgICAgIC8vIERNSSBDaGFpbiBTZWxlY3QKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICB0YXBjMnRhcGNzeW5jX2NoX2lkX28sICAgICAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gSWRlbnRpZmllcgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfY2FwdHVyZV9vLCAgICAgLy8gRE1JL1NDVSBDaGFpbiBDYXB0dXJlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9vLCAgICAgICAvLyBETUkvU0NVIENoYWluIFNoaWZ0Ci0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19jaF91cGRhdGVfbywgICAgICAvLyBETUkvU0NVIENoYWluIFVwZGF0ZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfdGRpX28sICAgICAgICAgLy8gRE1JL1NDVSBDaGFpbiBUREkKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pICAgICAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERPCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgU2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnN0X25faW50OyAgICAgICAvLyBTeW5jIHJlc2V0IHNpZ25hbAotCi0vLyBUQVBDIEZTTSBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlX3NjcjFfdGFwX3N0YXRlX2UgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZmY7ICAgICAgIC8vIFRBUCdzIGN1cnJlbnQgc3RhdGUKLXR5cGVfc2NyMV90YXBfc3RhdGVfZSAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9uZXh0OyAgICAgLy8gVEFQJ3MgbmV4dCBzdGF0ZQotCi0vLyBDb250cm9sIHNpZ25hbHMKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9yZXNldDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9pcl91cGQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfY2FwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX3NoZnQ7Ci0KLS8vIFJlZ2lzdGVyZWQgY29udHJvbCBzaWduYWxzCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfc2hpZnRfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX2ZmOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2RyX2NhcHR1cmVfbmV4dDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9zaGlmdF9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9zaGlmdF9uZXh0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2RyX3VwZGF0ZV9mZjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfbmV4dDsKLQotLy8gVEFQQyBJbnN0cnVjdGlvbiBSZWdpc3RlcnMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbG9naWMgW1NDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRILTE6MF0gICAgICB0YXBfaXJfc2hpZnRfZmY7ICAgLy8gSW5zdHJ1Y3Rpb24gU2hpZnQgUmVnaXN0ZXIKLWxvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSC0xOjBdICAgICAgdGFwX2lyX3NoaWZ0X25leHQ7IC8vIEluc3RydWN0aW9uIFNoaWZ0IFJlZ2lzdGVyIG5leHQgdmFsdWUKLWxvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSC0xOjBdICAgICAgdGFwX2lyX2ZmOyAgICAgICAgIC8vIEluc3RydWN0aW9uIFJlZ2lzdGVyCi1sb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9uZXh0OyAgICAgICAvLyBJbnN0cnVjdGlvbiBSZWdpc3RlciBuZXh0IHZhbHVlCi0KLS8vIFRBUEMgRGF0YSBSZWdpc3RlcnMgc2lnbmFscwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQllQQVNTIHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyX2J5cGFzc19zZWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyX2J5cGFzc190ZG87Ci0KLS8vIElEQ09ERSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9pZGNvZGVfc2VsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9pZGNvZGVfdGRvOwotCi0vLyBCVUlMRCBJRCByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ibGRfaWRfc2VsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ibGRfaWRfdGRvOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyX291dDsKLQotLy8gVERPIHJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVERPIGVuYWJsZSByZWdpc3RlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW5fZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkb19lbl9uZXh0OwotCi0vLyBURE8gb3V0cHV0IHJlZ2lzdGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkb19vdXRfZmY7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkb19vdXRfbmV4dDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRBUEMgU3luY2hyb25vdXMgUmVzZXQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdHJzdF9uX2ludCA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRyc3Rfbl9pbnQgPD0gfnRhcF9mc21fcmVzZXQ7Ci0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRBUCdzIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0YXBfZnNtX2ZmIDw9IFNDUjFfVEFQX1NUQVRFX1JFU0VUOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZmYgPD0gdGFwX2ZzbV9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAodGFwX2ZzbV9mZikKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfUkVTRVQgICAgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfUkVTRVQgICAgICAgIDogU0NSMV9UQVBfU1RBVEVfSURMRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfSURMRSAgICAgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU4gIDogU0NSMV9UQVBfU1RBVEVfSURMRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU46IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfU0VMX1NDQU4gIDogU0NSMV9UQVBfU1RBVEVfRFJfQ0FQVFVSRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfQ0FQVFVSRSA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEgICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQ7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMSAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUgICAgOiBTQ1IxX1RBUF9TVEFURV9EUl9QQVVTRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0UgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDIgICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0U7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQyICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX1VQREFURSAgICA6IFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9TRUxfU0NBTiAgOiBTQ1IxX1RBUF9TVEFURV9JRExFOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9TRUxfU0NBTjogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9SRVNFVCAgICAgICAgOiBTQ1IxX1RBUF9TVEFURV9JUl9DQVBUVVJFOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9DQVBUVVJFIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMSAgICAgOiBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVDsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDEgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQ7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1BBVVNFOwotICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9QQVVTRSAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMiAgICAgOiBTQ1IxX1RBUF9TVEFURV9JUl9QQVVTRTsKLSAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDIgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfVVBEQVRFICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQ7Ci0gICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0lETEU7Ci1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgIDogdGFwX2ZzbV9uZXh0ID0gU0NSMV9UQVBfU1RBVEVfWFhYOwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwX2ZzbV9mZjsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiB0YXBfZnNtX3Jlc2V0ICAgPSAodGFwX2ZzbV9mZiA9PSBTQ1IxX1RBUF9TVEFURV9SRVNFVCk7Ci1hc3NpZ24gdGFwX2ZzbV9pcl91cGQgID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfSVJfVVBEQVRFKTsKLWFzc2lnbiB0YXBfZnNtX2lyX2NhcCAgPSAodGFwX2ZzbV9mZiA9PSBTQ1IxX1RBUF9TVEFURV9JUl9DQVBUVVJFKTsKLWFzc2lnbiB0YXBfZnNtX2lyX3NoZnQgPSAodGFwX2ZzbV9mZiA9PSBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVCk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVBDIEluc3RydWN0aW9uIFJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVEFQQyBJbnN0cnVjdGlvbiBTaGlmdCByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0YXBfaXJfc2hpZnRfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgotICAgICAgICB0YXBfaXJfc2hpZnRfZmYgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9IHRhcF9pcl9zaGlmdF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBfaXJfc2hpZnRfbmV4dCA9IHRhcF9mc21faXJfY2FwICA/IHt7KCRiaXRzKHRhcF9pcl9zaGlmdF9mZiktMSl7MSdiMH19LCAxJ2IxfQotICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFwX2ZzbV9pcl9zaGZ0ID8ge3RhcGNfdGRpLCB0YXBfaXJfc2hpZnRfZmZbJGxlZnQodGFwX2lyX3NoaWZ0X2ZmKToxXX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcF9pcl9zaGlmdF9mZjsKLQotLy8gVEFQQyBJbnN0cnVjdGlvbiByZWdpc3RlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0YXBfaXJfZmYgPD0gU0NSMV9UQVBfSU5TVFJfSURDT0RFOwotICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KLSAgICAgICAgdGFwX2lyX2ZmIDw9IFNDUjFfVEFQX0lOU1RSX0lEQ09ERTsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0YXBfaXJfZmYgPD0gdGFwX2lyX25leHQ7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHRhcF9pcl9uZXh0ID0gdGFwX2ZzbV9pcl91cGQgPyB0YXBfaXJfc2hpZnRfZmYgOiB0YXBfaXJfZmY7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb250cm9sIHNpZ25hbHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9pcl9zaGlmdF9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9pcl9zaGlmdF9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gdGFwX2ZzbV9pcl9zaGlmdF9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBfZnNtX2lyX3NoaWZ0X25leHQgPSAodGFwX2ZzbV9uZXh0ID09IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX2NhcHR1cmVfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfY2FwdHVyZV9mZiA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfY2FwdHVyZV9mZiA8PSB0YXBfZnNtX2RyX2NhcHR1cmVfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwX2ZzbV9kcl9jYXB0dXJlX25leHQgPSAodGFwX2ZzbV9uZXh0ID09IFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkUpOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgotICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfc2hpZnRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfc2hpZnRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IHRhcF9mc21fZHJfc2hpZnRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwX2ZzbV9kcl9zaGlmdF9uZXh0ID0gKHRhcF9mc21fbmV4dCA9PSBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVCk7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCi0gICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfZmYgPD0gdGFwX2ZzbV9kcl91cGRhdGVfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGFwX2ZzbV9kcl91cGRhdGVfbmV4dCA9ICh0YXBfZnNtX25leHQgPT0gU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRBUEMgRFJzL0RNSS9TQ1Ugc2Nhbi1jaGFpbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKLSAvLyAtIERhdGEgc291cmNlL2Rlc3RpbmF0aW9uIGRlY29kZXIKLSAvLyAtIERNSSBjaGFubmVsIElEIGRlY29kZXIKLQotLy8gLSBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLS8vIERhdGEgc291cmNlL2Rlc3RpbmF0aW9uIGRlY29kZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgZHJfYnlwYXNzX3NlbCAgICAgICAgICAgICAgID0gMSdiMDsKLSAgICBkcl9pZGNvZGVfc2VsICAgICAgICAgICAgICAgPSAxJ2IwOwotICAgIGRyX2JsZF9pZF9zZWwgICAgICAgICAgICAgICA9IDEnYjA7Ci0gICAgdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX28gID0gMSdiMDsKLSAgICB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfbyAgPSAxJ2IwOwotICAgIGNhc2UgKHRhcF9pcl9mZikKLSAgICAgICAgU0NSMV9UQVBfSU5TVFJfRFRNQ1MgICAgIDogdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gPSAxJ2IxOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9ETUlfQUNDRVNTOiB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfbyA9IDEnYjE7Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0lEQ09ERSAgICA6IGRyX2lkY29kZV9zZWwgICAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgU0NSMV9UQVBfSU5TVFJfQllQQVNTICAgIDogZHJfYnlwYXNzX3NlbCAgICAgICAgICAgICAgPSAxJ2IxOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CTERfSUQgICAgOiBkcl9ibGRfaWRfc2VsICAgICAgICAgICAgICA9IDEnYjE7Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX1NDVV9BQ0NFU1M6IHRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9vID0gMSdiMTsKLSAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgIDogZHJfYnlwYXNzX3NlbCAgICAgICAgICAgICAgPSAxJ2IxOwotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBETUkgY2hhbm5lbCBJRCBkZWNvZGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHRhcGMydGFwY3N5bmNfY2hfaWRfbyA9ICcwOwotICAgIGNhc2UgKHRhcF9pcl9mZikKLSAgICAgICAgU0NSMV9UQVBfSU5TVFJfRFRNQ1MgICAgIDogdGFwYzJ0YXBjc3luY19jaF9pZF9vID0gJ2QxOwotICAgICAgICBTQ1IxX1RBUF9JTlNUUl9ETUlfQUNDRVNTOiB0YXBjMnRhcGNzeW5jX2NoX2lkX28gPSAnZDI7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICA6IHRhcGMydGFwY3N5bmNfY2hfaWRfbyA9ICcwOwotICAgIGVuZGNhc2UKLWVuZAotCi0vLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgZHJfb3V0ID0gMSdiMDsKLSAgICBjYXNlICh0YXBfaXJfZmYpCi0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICA6IGRyX291dCA9IHRhcGNzeW5jMnRhcGNfY2hfdGRvX2k7Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0RNSV9BQ0NFU1M6IGRyX291dCA9IHRhcGNzeW5jMnRhcGNfY2hfdGRvX2k7Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0lEQ09ERSAgICA6IGRyX291dCA9IGRyX2lkY29kZV90ZG87Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0JZUEFTUyAgICA6IGRyX291dCA9IGRyX2J5cGFzc190ZG87Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX0JMRF9JRCAgICA6IGRyX291dCA9IGRyX2JsZF9pZF90ZG87Ci0gICAgICAgIFNDUjFfVEFQX0lOU1RSX1NDVV9BQ0NFU1M6IGRyX291dCA9IHRhcGNzeW5jMnRhcGNfY2hfdGRvX2k7Ci0gICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICA6IGRyX291dCA9IGRyX2J5cGFzc190ZG87Ci0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBURE8gZW5hYmxlIGFuZCBvdXRwdXQgcmVnaXN0ZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBURE8gZW5hYmxlIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgotICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCi0gICAgICAgIHRkb19lbl9mZiAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRkb19lbl9mZiAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0ZG9fZW5fZmYgIDw9IHRkb19lbl9uZXh0OwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0ZG9fZW5fbmV4dCA9IHRhcF9mc21fZHJfc2hpZnRfZmYgfCB0YXBfZnNtX2lyX3NoaWZ0X2ZmOwotCi0vLyBURE8gb3V0cHV0IHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgotICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCi0gICAgICAgIHRkb19vdXRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCi0gICAgICAgIHRkb19vdXRfZmYgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0ZG9fb3V0X2ZmIDw9IHRkb19vdXRfbmV4dDsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGRvX291dF9uZXh0ID0gdGFwX2ZzbV9kcl9zaGlmdF9mZiA/IGRyX291dAotICAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21faXJfc2hpZnRfZmYgPyB0YXBfaXJfc2hpZnRfZmZbMF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSdiMDsKLQotLy8gVEFQQyBURE8gc2lnbmFscwotYXNzaWduIHRhcGNfdGRvX2VuID0gdGRvX2VuX2ZmOwotYXNzaWduIHRhcGNfdGRvICAgID0gdGRvX291dF9mZjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRBUEMgRGF0YSBSZWdpc3RlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotIC8vIFJlZ2lzdGVyczoKLSAvLyAtIEJZUEFTUyByZWdpc3RlcgotIC8vIC0gSURDT0RFIHJlZ2lzdGVyCi0gLy8gLSBCVUlMRCBJRCByZWdpc3RlcgotCi0vLyBCWVBBU1MgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAxLWJpdCBtYW5kYXRvcnkgSUVFRSAxMTQ5LjEgY29tcGxpYW50IHJlZ2lzdGVyCi0KLXNjcjFfdGFwY19zaGlmdF9yZWcgICMoCi0gICAgLlNDUjFfV0lEVEggICAgICAgKFNDUjFfVEFQX0RSX0JZUEFTU19XSURUSCksCi0gICAgLlNDUjFfUkVTRVRfVkFMVUUgKFNDUjFfVEFQX0RSX0JZUEFTU19XSURUSCcoMCkpCi0pIGlfYnlwYXNzX3JlZyAgICAgICAgKAotICAgIC5jbGsgICAgICAgICAgICAgICh0YXBjX3RjayAgICAgICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICAgICApLAotICAgIC5yc3Rfbl9zeW5jICAgICAgICh0cnN0X25faW50ICAgICAgICAgICApLAotICAgIC5mc21fZHJfc2VsZWN0ICAgIChkcl9ieXBhc3Nfc2VsICAgICAgICApLAotICAgIC5mc21fZHJfY2FwdHVyZSAgICh0YXBfZnNtX2RyX2NhcHR1cmVfZmYpLAotICAgIC5mc21fZHJfc2hpZnQgICAgICh0YXBfZnNtX2RyX3NoaWZ0X2ZmICApLAotICAgIC5kaW5fc2VyaWFsICAgICAgICh0YXBjX3RkaSAgICAgICAgICAgICApLAotICAgIC5kaW5fcGFyYWxsZWwgICAgICgxJ2IwICAgICAgICAgICAgICAgICApLAotICAgIC5kb3V0X3NlcmlhbCAgICAgIChkcl9ieXBhc3NfdGRvICAgICAgICApLAotICAgIC5kb3V0X3BhcmFsbGVsICAgICggICAgICAgICAgICAgICAgICAgICApCi0pOwotCi0vLyBJRENPREUgcmVnaXN0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIb2xkcyB0aGUgRGV2aWNlIElEIHZhbHVlIChtYW5kYXRvcnkgSUVFRSAxMTQ5LjEgY29tcGxpYW50IHJlZ2lzdGVyKQotCi1zY3IxX3RhcGNfc2hpZnRfcmVnICAjKAotICAgIC5TQ1IxX1dJRFRIICAgICAgIChTQ1IxX1RBUF9EUl9JRENPREVfV0lEVEgpLAotICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9JRENPREVfV0lEVEgnKDApKQotKSBpX3RhcF9pZGNvZGVfcmVnICAgICgKLSAgICAuY2xrICAgICAgICAgICAgICAodGFwY190Y2sgICAgICAgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgICAgICApLAotICAgIC5yc3Rfbl9zeW5jICAgICAgICh0cnN0X25faW50ICAgICAgICAgICAgKSwKLSAgICAuZnNtX2RyX3NlbGVjdCAgICAoZHJfaWRjb2RlX3NlbCAgICAgICAgICksCi0gICAgLmZzbV9kcl9jYXB0dXJlICAgKHRhcF9mc21fZHJfY2FwdHVyZV9mZiApLAotICAgIC5mc21fZHJfc2hpZnQgICAgICh0YXBfZnNtX2RyX3NoaWZ0X2ZmICAgKSwKLSAgICAuZGluX3NlcmlhbCAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgICksCi0gICAgLmRpbl9wYXJhbGxlbCAgICAgKHNvYzJ0YXBjX2Z1c2VfaWRjb2RlX2kpLAotICAgIC5kb3V0X3NlcmlhbCAgICAgIChkcl9pZGNvZGVfdGRvICAgICAgICAgKSwKLSAgICAuZG91dF9wYXJhbGxlbCAgICAoICAgICAgICAgICAgICAgICAgICAgICkKLSk7Ci0KLS8vIEJVSUxEIElEIHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSG9sZHMgdGhlIEJVSUxEIElEIHZhbHVlCi0KLXNjcjFfdGFwY19zaGlmdF9yZWcgICMoCi0gICAgLlNDUjFfV0lEVEggICAgICAgKFNDUjFfVEFQX0RSX0JMRF9JRF9XSURUSCksCi0gICAgLlNDUjFfUkVTRVRfVkFMVUUgKFNDUjFfVEFQX0RSX0JMRF9JRF9XSURUSCcoMCkpCi0pIGlfdGFwX2RyX2JsZF9pZF9yZWcgKAotICAgIC5jbGsgICAgICAgICAgICAgICh0YXBjX3RjayAgICAgICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICAgICApLAotICAgIC5yc3Rfbl9zeW5jICAgICAgICh0cnN0X25faW50ICAgICAgICAgICApLAotICAgIC5mc21fZHJfc2VsZWN0ICAgIChkcl9ibGRfaWRfc2VsICAgICAgICApLAotICAgIC5mc21fZHJfY2FwdHVyZSAgICh0YXBfZnNtX2RyX2NhcHR1cmVfZmYpLAotICAgIC5mc21fZHJfc2hpZnQgICAgICh0YXBfZnNtX2RyX3NoaWZ0X2ZmICApLAotICAgIC5kaW5fc2VyaWFsICAgICAgICh0YXBjX3RkaSAgICAgICAgICAgICApLAotICAgIC5kaW5fcGFyYWxsZWwgICAgIChTQ1IxX1RBUF9CTERfSURfVkFMVUUpLAotICAgIC5kb3V0X3NlcmlhbCAgICAgIChkcl9ibGRfaWRfdGRvICAgICAgICApLAotICAgIC5kb3V0X3BhcmFsbGVsICAgICggICAgICAgICAgICAgICAgICAgICApCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRE1JL1NDVSBzY2FuLWNoYWlucyBzaWduYWxzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gdGFwYzJ0YXBjc3luY19jaF90ZGlfbyAgICAgPSB0YXBjX3RkaTsKLWFzc2lnbiB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfbyA9IHRhcF9mc21fZHJfY2FwdHVyZV9mZjsKLWFzc2lnbiB0YXBjMnRhcGNzeW5jX2NoX3NoaWZ0X28gICA9IHRhcF9mc21fZHJfc2hpZnRfZmY7Ci1hc3NpZ24gdGFwYzJ0YXBjc3luY19jaF91cGRhdGVfbyAgPSB0YXBfZnNtX2RyX3VwZGF0ZV9mZjsKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi1TQ1IxX1NWQV9UQVBDX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChwb3NlZGdlIHRhcGNfdGNrKSBkaXNhYmxlIGlmZiAofnRhcGNfdHJzdF9uKQotICAgICEkaXN1bmtub3duKHt0YXBjX3RtcywgdGFwY190ZGl9KQotKSBlbHNlICRlcnJvcigiVEFQQyBlcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9TVkFfVEFQQ19YQ0hFQ0tfTkVHQ0xLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgdGFwY190Y2spIGRpc2FibGUgaWZmICh0YXBfZnNtX2ZmICE9IFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUKQotICAgICEkaXN1bmtub3duKHt0YXBjc3luYzJ0YXBjX2NoX3Rkb19pfSkKLSkgZWxzZSAkZXJyb3IoIlRBUEMgQG5lZ2VkZ2UgZXJyb3I6IHVua25vd24gdmFsdWVzIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX3RhcGMKLQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc2hpZnRfcmVnLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU3N2JjYy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc2hpZnRfcmVnLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdGFwY19zaGlmdF9yZWcuc3Y+Ci0vLy8gQGJyaWVmICAgICAgVEFQQyBzaGlmdCByZWdpc3Rlci4gUGFyYW1ldGVyaXplZCBpbXBsZW1lbnRhdGlvbiBvZiBKVEFHIFRBUEMncyBTaGlmdCBSZWdpc3Rlci4KLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1tb2R1bGUgc2NyMV90YXBjX3NoaWZ0X3JlZyAjKAotICAgIHBhcmFtZXRlciAgIGludCB1bnNpZ25lZCAgICAgICAgICAgIFNDUjFfV0lEVEggICAgICAgPSA4LCAgIC8vIFJlZ2lzdGVyIHdpZHRoLCBiaXRzCi0gICAgcGFyYW1ldGVyICAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgU0NSMV9SRVNFVF9WQUxVRSA9ICcwICAgLy8gUmVnaXN0ZXIncyB2YWx1ZSBhZnRlciByZXNldAotKSAoCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgLy8gQ2xvY2sKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAvLyBBc3luYyByZXNldAotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYywgICAgIC8vIFN5bmMgcmVzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUQVAgRlNNJ3MgY29udHJvbCBzaWduYWxzOgotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgZnNtX2RyX3NlbGVjdCwgIC8vICAgLSBmb3IgdGhpcyBEUiBzZWxlY3Rpb24gKG9wZXJhdGlvbiBlbmFibGluZyk7Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBmc21fZHJfY2FwdHVyZSwgLy8gICAtIHRvIGNhcHR1cmUgcGFyYWxsZWwgaW5wdXQncyBkYXRhIGludG8gc2hpZnQgcmVnaXN0ZXI7Ci0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBmc21fZHJfc2hpZnQsICAgLy8gICAtIHRvIGVuYWJsZSBkYXRhIHNoaWZ0aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0czoKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGRpbl9zZXJpYWwsICAgICAvLyAgIC0gc2VyaWFsIChzaGlmdF9yZWdbbXNiL1NDUjFfV0lEVEhdKTsKLSAgICBpbnB1dCAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgIGRpbl9wYXJhbGxlbCwgICAvLyAgIC0gcGFyYWxsZWwgKHNoaWZ0IHJlZ2lzdGVyJ3MgaW5wdXQpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dHM6Ci0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICBkb3V0X3NlcmlhbCwgICAgLy8gICAtIHNlcmlhbCAoc2hpZnRfcmVnWzBdKTsKLSAgICBvdXRwdXQgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgIGRvdXRfcGFyYWxsZWwgICAvLyAgIC0gcGFyYWxsZWwgKHNoaWZ0IHJlZ2lzdGVyJ3Mgb3V0cHV0KS4KLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyBbU0NSMV9XSURUSC0xOjBdICAgc2hpZnRfcmVnOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNoaWZ0IHJlZ2lzdGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWdlbmVyYXRlCi0gICAgaWYgKFNDUjFfV0lEVEggPiAxKQotICAgIGJlZ2luIDogZHJfc2hpZnRfcmVnCi0KLSAgICAgICAgYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pCi0gICAgICAgIGJlZ2luCi0gICAgICAgICAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBTQ1IxX1JFU0VUX1ZBTFVFOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbHNlIGlmICh+cnN0X25fc3luYykgYmVnaW4KLSAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0gU0NSMV9SRVNFVF9WQUxVRTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZSBpZiAoZnNtX2RyX3NlbGVjdCAmIGZzbV9kcl9jYXB0dXJlKSBiZWdpbgotICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBkaW5fcGFyYWxsZWw7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgaWYgKGZzbV9kcl9zZWxlY3QgJiBmc21fZHJfc2hpZnQpIGJlZ2luCi0gICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IHtkaW5fc2VyaWFsLCBzaGlmdF9yZWdbU0NSMV9XSURUSC0xOjFdfTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgIGVuZAotICAgIGVsc2UgYmVnaW4gOiBkcl9zaGlmdF9yZWcKLQotICAgICAgICBhbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikKLSAgICAgICAgYmVnaW4KLSAgICAgICAgICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IFNDUjFfUkVTRVRfVkFMVUU7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgaWYgKH5yc3Rfbl9zeW5jKSBiZWdpbgotICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBTQ1IxX1JFU0VUX1ZBTFVFOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbHNlIGlmIChmc21fZHJfc2VsZWN0ICYgZnNtX2RyX2NhcHR1cmUpIGJlZ2luCi0gICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IGRpbl9wYXJhbGxlbDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZSBpZiAoZnNtX2RyX3NlbGVjdCAmIGZzbV9kcl9zaGlmdCkgYmVnaW4KLSAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0gZGluX3NlcmlhbDsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLQotICAgIGVuZAotZW5kZ2VuZXJhdGUKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQYXJhbGxlbCBvdXRwdXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIGRvdXRfcGFyYWxsZWwgPSBzaGlmdF9yZWc7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2VyaWFsIG91dHB1dAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gZG91dF9zZXJpYWwgPSBzaGlmdF9yZWdbMF07Ci0KLWBpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBYIGNoZWNrcwotU0NSMV9TVkFfVEFQQ19TSElGVFJFR19YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oewotICAgICAgICByc3Rfbl9zeW5jLAotICAgICAgICBmc21fZHJfc2VsZWN0LAotICAgICAgICBmc21fZHJfY2FwdHVyZSwKLSAgICAgICAgZnNtX2RyX3NoaWZ0LAotICAgICAgICBkaW5fc2VyaWFsLAotICAgICAgICBkaW5fcGFyYWxsZWwKLSAgICB9KQotKSBlbHNlIGJlZ2luCi0gICAgJGVycm9yKCJUQVBDIFNoaWZ0IFJlZyBlcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKLWVuZAotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV90YXBjX3NoaWZ0X3JlZwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zeW5jaHJvbml6ZXIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc3luY2hyb25pemVyLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk0NzA1Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zeW5jaHJvbml6ZXIuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV90YXBjX3N5bmNocm9uaXplci5zdj4KLS8vLyBAYnJpZWYgICAgICBUQVBDIGNsb2NrIGRvbWFpbiBjcm9zc2luZyBzeW5jaHJvbml6ZXIKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi1gaW5jbHVkZSAic2NyMV90YXBjLnN2aCIKLWBpbmNsdWRlICJzY3IxX2RtLnN2aCIKLQotbW9kdWxlIHNjcjFfdGFwY19zeW5jaHJvbml6ZXIgKAotICAgIC8vIFN5c3RlbSBjb21tb24gc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAvLyBQb3dlci1VcCBSZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uLCAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgUmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIENsb2NrIChTeXNDTEspCi0KLSAgICAvLyBKVEFHIGNvbW1vbiBzaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X24sICAgICAgICAgICAgICAgIC8vIEpUQUcgVGVzdCBSZXNldCAoVFJTVG4pCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190Y2ssICAgICAgICAgICAgICAgICAgIC8vIEpUQUcgVGVzdCBDbG9jayAoVENLKQotCi0KLSAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCi0gICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX2ksIC8vIFNDVSBDaGFpbiBTZWxlY3QgaW5wdXQgIChUQ0sgZG9tYWluKQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfbywgICAgICAvLyBTQ1UgQ2hhaW4gU2VsZWN0IG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfaSwgLy8gRE1JIENoYWluIFNlbGVjdCBpbnB1dCAgKFRDSyBkb21haW4pCi0gICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyZG1pX2NoX3NlbF9vLCAgICAgIC8vIERNSSBDaGFpbiBTZWxlY3Qgb3V0cHV0IChTeXNDTEsgZG9tYWluKQotCi0gICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgdGFwYzJ0YXBjc3luY19jaF9pZF9pLCAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gSWRlbnRpZmllciBpbnB1dCAgKFRDSyBkb21haW4pCi0gICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgdGFwY3N5bmMyY29yZV9jaF9pZF9vLCAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gSWRlbnRpZmllciBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfaSwgLy8gRE1JL1NDVSBDaGFpbiBDYXB0dXJlIGlucHV0ICAoVENLIGRvbWFpbikKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbywgLy8gRE1JL1NDVSBDaGFpbiBDYXB0dXJlIG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKLQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfc2hpZnRfaSwgICAvLyBETUkvU0NVIENoYWluIFNoaWZ0IGlucHV0ICAoVENLIGRvbWFpbikKLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3NoaWZ0X28sICAgLy8gRE1JL1NDVSBDaGFpbiBTaGlmdCBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3VwZGF0ZV9pLCAgLy8gRE1JL1NDVSBDaGFpbiBVcGRhdGUgaW5wdXQgIChUQ0sgZG9tYWluKQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdXBkYXRlX28sICAvLyBETUkvU0NVIENoYWluIFVwZGF0ZSBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3RkaV9pLCAgICAgLy8gRE1JL1NDVSBDaGFpbiBUREkgaW5wdXQgIChUQ0sgZG9tYWluKQotICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdGRpX28sICAgICAvLyBETUkvU0NVIENoYWluIFRESSBvdXRwdXQgKFN5c0NMSyBkb21haW4pCi0KLSAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3Rkb19pLCAgICAgLy8gRE1JL1NDVSBDaGFpbiBURE8gb3V0cHV0IChUQ0sgZG9tYWluKQotICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdGRvX28gICAgICAvLyBETUkvU0NVIENoYWluIFRETyBpbnB1dCAgKFN5c0NMSyBkb21haW4pCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1sb2dpYyAgICAgICAgICAgdGNrX2RpdnBvczsKLWxvZ2ljICAgICAgICAgICB0Y2tfZGl2bmVnOwotbG9naWMgICAgICAgICAgIHRja19yaXNlX2xvYWQ7Ci1sb2dpYyAgICAgICAgICAgdGNrX3Jpc2VfcmVzZXQ7Ci1sb2dpYyAgICAgICAgICAgdGNrX2ZhbGxfbG9hZDsKLWxvZ2ljICAgICAgICAgICB0Y2tfZmFsbF9yZXNldDsKLWxvZ2ljIFszOjBdICAgICB0Y2tfZGl2cG9zX3N5bmM7Ci1sb2dpYyBbMzowXSAgICAgdGNrX2Rpdm5lZ19zeW5jOwotbG9naWMgWzI6MF0gICAgIGRtaV9jaF9jYXB0dXJlX3N5bmM7Ci1sb2dpYyBbMjowXSAgICAgZG1pX2NoX3NoaWZ0X3N5bmM7Ci1sb2dpYyBbMjowXSAgICAgZG1pX2NoX3RkaV9zeW5jOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0Y2tfZGl2cG9zICAgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0Y2tfZGl2cG9zICAgICAgPD0gfnRja19kaXZwb3M7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICB0Y2tfZGl2bmVnICAgICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICB0Y2tfZGl2bmVnICAgICAgPD0gfnRja19kaXZuZWc7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X24pIGJlZ2luCi0gICAgaWYgKH5wd3J1cF9yc3RfbikgYmVnaW4KLSAgICAgICAgdGNrX2RpdnBvc19zeW5jIDw9IDQnZDA7Ci0gICAgICAgIHRja19kaXZuZWdfc3luYyA8PSA0J2QwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHRja19kaXZwb3Nfc3luYyA8PSB7dGNrX2RpdnBvc19zeW5jWzI6MF0sIHRja19kaXZwb3N9OwotICAgICAgICB0Y2tfZGl2bmVnX3N5bmMgPD0ge3Rja19kaXZuZWdfc3luY1syOjBdLCB0Y2tfZGl2bmVnfTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gdGNrX3Jpc2VfbG9hZCAgPSB0Y2tfZGl2cG9zX3N5bmNbMl0gXiB0Y2tfZGl2cG9zX3N5bmNbMV07Ci1hc3NpZ24gdGNrX3Jpc2VfcmVzZXQgPSB0Y2tfZGl2cG9zX3N5bmNbM10gXiB0Y2tfZGl2cG9zX3N5bmNbMl07Ci1hc3NpZ24gdGNrX2ZhbGxfbG9hZCAgPSB0Y2tfZGl2bmVnX3N5bmNbMl0gXiB0Y2tfZGl2bmVnX3N5bmNbMV07Ci1hc3NpZ24gdGNrX2ZhbGxfcmVzZXQgPSB0Y2tfZGl2bmVnX3N5bmNbM10gXiB0Y2tfZGl2bmVnX3N5bmNbMl07Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3VwZGF0ZV9vICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgICh0Y2tfZmFsbF9sb2FkKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF91cGRhdGVfbyAgIDw9IHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX2k7Ci0gICAgICAgIGVuZCBlbHNlIGlmICh0Y2tfZmFsbF9yZXNldCkgYmVnaW4KLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdXBkYXRlX28gICA8PSAnMDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KLSAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgotICAgICAgICBkbWlfY2hfY2FwdHVyZV9zeW5jWzBdIDw9ICcwOwotICAgICAgICBkbWlfY2hfc2hpZnRfc3luY1swXSAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMF0gPD0gdGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX2k7Ci0gICAgICAgIGRtaV9jaF9zaGlmdF9zeW5jWzBdICAgPD0gdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9pOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgotICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCi0gICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMjoxXSA8PSAnMDsKLSAgICAgICAgZG1pX2NoX3NoaWZ0X3N5bmNbMjoxXSAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMjoxXSA8PSB7ZG1pX2NoX2NhcHR1cmVfc3luY1sxXSwgZG1pX2NoX2NhcHR1cmVfc3luY1swXX07Ci0gICAgICAgIGRtaV9jaF9zaGlmdF9zeW5jWzI6MV0gICA8PSB7ZG1pX2NoX3NoaWZ0X3N5bmNbMV0sIGRtaV9jaF9zaGlmdF9zeW5jWzBdfTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgotICAgICAgICBkbWlfY2hfdGRpX3N5bmMgICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGRtaV9jaF90ZGlfc3luYyAgICAgPD0ge2RtaV9jaF90ZGlfc3luY1sxOjBdLCB0YXBjMnRhcGNzeW5jX2NoX3RkaV9pfTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9jYXB0dXJlX28gPD0gJzA7Ci0gICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3NoaWZ0X28gICA8PSAnMDsKLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdGRpX28gICAgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmICh0Y2tfcmlzZV9sb2FkKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9jYXB0dXJlX28gPD0gZG1pX2NoX2NhcHR1cmVfc3luY1syXTsKLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbyAgIDw9IGRtaV9jaF9zaGlmdF9zeW5jWzJdOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZGlfbyAgICAgPD0gZG1pX2NoX3RkaV9zeW5jWzJdOwotICAgICAgICBlbmQgZWxzZSBpZiAodGNrX3Jpc2VfcmVzZXQpIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbyA8PSAnMDsKLSAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbyAgIDw9ICcwOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZGlfbyAgICAgPD0gJzA7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIGRtX3JzdF9uKSBiZWdpbgotICAgIGlmICh+ZG1fcnN0X24pIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2VsX28gICAgIDw9ICcwOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9pZF9vICAgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHRja19yaXNlX2xvYWQpIGJlZ2luCi0gICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2VsX28gICAgIDw9IHRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9pOwotICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9pZF9vICAgICAgPD0gdGFwYzJ0YXBjc3luY19jaF9pZF9pOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KLSAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgotICAgICAgICAgICAgdGFwY3N5bmMyc2N1X2NoX3NlbF9vICAgICA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAodGNrX3Jpc2VfbG9hZCkgYmVnaW4KLSAgICAgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfbyAgICAgPD0gdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX2k7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFzc2lnbiB0YXBjMnRhcGNzeW5jX2NoX3Rkb19pID0gdGFwY3N5bmMyY29yZV9jaF90ZG9fbzsKLQotZW5kbW9kdWxlIDogc2NyMV90YXBjX3N5bmNocm9uaXplcgotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FoYi5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9haGIuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGNkNGUxLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FoYi5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfYWhiLnN2aD4KLS8vLyBAYnJpZWYgICAgICBBSEIgaGVhZGVyIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfQUhCX1NWSAotYGRlZmluZSBTQ1IxX0FIQl9TVkgKLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLXBhcmFtZXRlciBTQ1IxX0FIQl9XSURUSCAgPSAzMjsKLQotLy8gRW5jb2RpbmcgZm9yIEhUUkFOUyBzaWduYWwKLXBhcmFtZXRlciBsb2dpYyBbMTowXSBTQ1IxX0hUUkFOU19JRExFICAgPSAyJ2IwMDsKLXBhcmFtZXRlciBsb2dpYyBbMTowXSBTQ1IxX0hUUkFOU19OT05TRVEgPSAyJ2IxMDsKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IVFJBTlNfRVJSICAgID0gJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IVFJBTlNfRVJSICAgID0gJzA7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi0vLyBFbmNvZGluZyBmb3IgSEJVUlNUIHNpZ25hbAotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSEJVUlNUX1NJTkdMRSA9IDMnYjAwMDsKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgWzI6MF0gU0NSMV9IQlVSU1RfRVJSICAgID0gJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1wYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IQlVSU1RfRVJSICAgID0gJzA7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi0vLyBFbmNvZGluZyBmb3IgSFNJWkUgc2lnbmFsCi1wYXJhbWV0ZXIgbG9naWMgWzI6MF0gU0NSMV9IU0laRV84QiAgICA9IDMnYjAwMDsKLXBhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hTSVpFXzE2QiAgID0gMydiMDAxOwotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSFNJWkVfMzJCICAgPSAzJ2IwMTA7Ci1gaWZkZWYgU0NSMV9YUFJPUF9FTgotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSFNJWkVfRVJSICAgPSAneDsKLWBlbHNlIC8vIFNDUjFfWFBST1BfRU4KLXBhcmFtZXRlciBsb2dpYyBbMTowXSBTQ1IxX0hTSVpFX0VSUiAgID0gJzA7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi0vLyBFbmNvZGluZyBIUFJPVCBzaWduYWwKLS8vIEhQUk9UWzBdIDogMCAtIGluc3RyOyAgICAgIDEgLSBkYXRhCi0vLyBIUFJPVFsxXSA6IDAgLSB1c2VyOyAgICAgICAxIC0gcHJpdmlsZWdlCi0vLyBIUFJPVFsyXSA6IDAgLSBub3QgYnVmZmVyOyAxIC0gYnVmZmVyCi0vLyBIUFJPVFszXSA6IDAgLSBjYWNoZWFibGU7ICAxIC0gY2FjaGVhYmxlCi1wYXJhbWV0ZXIgU0NSMV9IUFJPVF9EQVRBICA9IDA7Ci1wYXJhbWV0ZXIgU0NSMV9IUFJPVF9QUlYgICA9IDE7Ci1wYXJhbWV0ZXIgU0NSMV9IUFJPVF9CVUYgICA9IDI7Ci1wYXJhbWV0ZXIgU0NSMV9IUFJPVF9DQUNIRSA9IDM7Ci0KLS8vIEVuY29kaW5nIEhSRVNQIHNpZ25hbAotcGFyYW1ldGVyIGxvZ2ljIFNDUjFfSFJFU1BfT0tBWSAgPSAxJ2IwOwotcGFyYW1ldGVyIGxvZ2ljIFNDUjFfSFJFU1BfRVJST1IgPSAxJ2IxOwotYGlmZGVmIFNDUjFfWFBST1BfRU4KLXBhcmFtZXRlciBsb2dpYyBTQ1IxX0hSRVNQX0VSUiAgID0gMSdieDsKLWBlbHNlIC8vIFNDUjFfWFBST1BfRU4KLXBhcmFtZXRlciBsb2dpYyBTQ1IxX0hSRVNQX0VSUiAgID0gMSdiMDsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0KLWBlbmRpZiAvLyBTQ1IxX0FIQl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiODlkYzYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoPgotLy8vIEBicmllZiAgICAgIEFyY2hpdGVjdHVyZSBkZXNjcmlwdGlvbiBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX0FSQ0hfREVTQ1JJUFRJT05fU1ZICi1gZGVmaW5lIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ09SRSBGVU5EQU1FTlRBTCBQQVJBTUVURVJTCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBTQ1IxIGNvcmUgaWRlbnRpZmllcnMKLWBkZWZpbmUgU0NSMV9NSU1QSUQgICAgICAgICAgICAgMzInaDIxMDUxNDAwCi1gZGVmaW5lIFNDUjFfTVZFTkRPUklEICAgICAgICAgIDMyJ2gwMDAwMDAwMAotCi0vLyBXaWR0aCBvZiBtYWluIHJlZ2lzdGVycyBhbmQgYnVzZXMKLWBkZWZpbmUgU0NSMV9YTEVOICAgICAgICAgICAgICAgMzIKLWBkZWZpbmUgU0NSMV9JTUVNX0FXSURUSCAgICAgICAgYFNDUjFfWExFTgotYGRlZmluZSBTQ1IxX0lNRU1fRFdJRFRIICAgICAgICBgU0NSMV9YTEVOCi1gZGVmaW5lIFNDUjFfRE1FTV9BV0lEVEggICAgICAgIGBTQ1IxX1hMRU4KLWBkZWZpbmUgU0NSMV9ETUVNX0RXSURUSCAgICAgICAgYFNDUjFfWExFTgotCi0vLyBUQVAgSURDT0RFCi1gZGVmaW5lIFNDUjFfVEFQX0lEQ09ERSAgICAgICAgICdoREVCMTEwMDEKLQotCi1gaWZkZWYgU0NSMV9BUkNIX0NVU1RPTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElOQ0xVREUgU0NSMV9BUkNIX0NVU1RPTS5TVkgKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRoZSBleHRlcm5hbCBmaWxlIHNjcjFfYXJjaF9jdXN0b20uc3ZoIGlzIHVzZWQgZm9yIHRoZSBvcGVuIFNDUjEtU0RLIHByb2plY3QsCi0vLyBhbmQgY2FuIGFsc28gYmUgdXNlZCBmb3IgYW55IGN1c3RvbSBwcm9qZWN0cy4KLQotLy8gVGhlIGZpbGUgc2V0czoKLS8vIC0gdGFyZ2V0IHBsYXRmb3JtIChGUEdBL0FTSUMpLCB3aGljaCBhZmZlY3RzIHRoZSBjaG9pY2Ugb2YgbG9naWNhbCBjb25zdHJ1Y3RzOwotLy8gLSBkZXZpY2UgYnVpbGQgSUQ7Ci0vLyAtIGFkZHJlc3MgY29uc3RhbnRzOwotLy8gLSBjb3VsZCBlbmFibGVzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLQotLy8gUG9zc2libGUgdGFyZ2V0czoKLS8vIGBkZWZpbmUgU0NSMV9UUkdUX0ZQR0FfSU5URUwgICAgICAgICAvLyB0YXJnZXQgcGxhdGZvcm0gaXMgSW50ZWwgRlBHQXMKLS8vIGBkZWZpbmUgU0NSMV9UUkdUX0ZQR0FfSU5URUxfTUFYMTAgICAvLyB0YXJnZXQgcGxhdGZvcm0gaXMgSW50ZWwgTUFYIDEwIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQotLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBBcnJpYSBWIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQotLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9YSUxJTlggICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBYaWxpbnggRlBHQXMgKHVzZWQgaW4gdGhlIFNDUjEtU0RLIHByb2plY3QpCi0vLyBgZGVmaW5lIFNDUjFfVFJHVF9BU0lDICAgICAgICAgICAgICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIEFTSUMKLS8vIGBkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAvLyB0YXJnZXQgaXMgc2ltdWxhdGlvbiAoZW5hYmxlIHNpbXVsYXRpb24gY29kZSkKLQotIGBpbmNsdWRlICJzY3IxX2FyY2hfY3VzdG9tLnN2aCIKLQotYGVuZGlmIC8vIFNDUjFfQVJDSF9DVVNUT00KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUkVDT01NRU5ERUQgQ09SRSBBUkNISVRFQ1RVUkUgQ09ORklHVVJBVElPTlMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFVuY29tbWVudCBvbmUgb2YgdGhlc2UgZGVmaW5lcyB0byBzZXQgdGhlIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb246Ci0KLWBkZWZpbmUgU0NSMV9DRkdfUlYzMklNQ19NQVgKLS8vYGRlZmluZSBTQ1IxX0NGR19SVjMySUNfQkFTRQotLy9gZGVmaW5lIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KLQotLy8gSWYgYWxsIGRlZmluZXMgYXJlIGNvbW1lbnRlZCwgY3VzdG9tIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkIChzZWUgYmVsb3cpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSRUFELU9OTFk6IHNldHRpbmdzIGZvciByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9ucwotYGlmZGVmICBTQ1IxX0NGR19SVjMySU1DX01BWAotICBgZGVmaW5lIFNDUjFfUlZJX0VYVAotICBgZGVmaW5lIFNDUjFfUlZNX0VYVAotICBgZGVmaW5lIFNDUjFfUlZDX0VYVAotICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID0gMjY7Ci0gIGBkZWZpbmUgU0NSMV9NVFZFQ19NT0RFX0VOCi0gIGBkZWZpbmUgU0NSMV9GQVNUX01VTAotLy9gZGVmaW5lIFNDUjFfTVBSRl9SU1RfRU4gLSB5b3N5cyBmaXgsIHR3byBkaW1lbnNpb25hbCBhcnJheSBpbml0IG5vdCBhbGxvd2VkCi0gIGBkZWZpbmUgU0NSMV9NQ09VTlRFTl9FTgotLy8gIGBkZWZpbmUgU0NSMV9EQkdfRU4KLSAgYGRlZmluZSBTQ1IxX1REVV9FTgotICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfVERVX1RSSUdfTlVNID0gNDsKLSAgYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4KLSAgYGRlZmluZSBTQ1IxX0lQSUNfRU4KLSAgYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTgotLy8gIGBkZWZpbmUgU0NSMV9UQ01fRU4KLWBlbHNpZiAgU0NSMV9DRkdfUlYzMklDX0JBU0UKLSAgYGRlZmluZSBTQ1IxX1JWSV9FWFQKLSAgYGRlZmluZSBTQ1IxX1JWQ19FWFQKLSAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDE2OwotICBgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTgotICBgZGVmaW5lIFNDUjFfTk9fREVDX1NUQUdFCi0gIGBkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTgotICBgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4KLSAgYGRlZmluZSBTQ1IxX0RCR19FTgotICBgZGVmaW5lIFNDUjFfVERVX0VOCi0gIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSAyOwotICBgZGVmaW5lIFNDUjFfVERVX0lDT1VOVF9FTgotICBgZGVmaW5lIFNDUjFfSVBJQ19FTgotICBgZGVmaW5lIFNDUjFfSVBJQ19TWU5DX0VOCi0gIGBkZWZpbmUgU0NSMV9UQ01fRU4KLWBlbHNpZiAgU0NSMV9DRkdfUlYzMkVDX01JTgotICBgZGVmaW5lIFNDUjFfUlZFX0VYVAotICBgZGVmaW5lIFNDUjFfUlZDX0VYVAotICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID0gMDsKLSAgYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRQotICBgZGVmaW5lIFNDUjFfTk9fRVhFX1NUQUdFCi0gIGBkZWZpbmUgU0NSMV9UQ01fRU4KLQotYGVsc2UgLy8gYmVnaW4gY3VzdG9tIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDVVNUT00gQ09SRSBBUkNISVRFQ1RVUkUgQ09ORklHVVJBVElPTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVG8gZmluZS10dW5lIGN1c3RvbSBjb25maWd1cmF0aW9uLCB5b3UgY2FuIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoaXMgc2VjdGlvbi4KLS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZpbmVzIG9mIHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9ucyBhcmUgY29tbWVudGVkLAotLy8gb3RoZXJ3aXNlIHRoaXMgc2VjdGlvbiB3aWxsIGJlIGluYWN0aXZlLgotCi0vLyBSSVNDLVYgSVNBIG9wdGlvbnMKLS8vYGRlZmluZSBTQ1IxX1JWRV9FWFQgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFJWMzJFIGJhc2UgaW50ZWdlciBpbnN0cnVjdGlvbiBzZXQsIG90aGVyd2lzZSBSVjMySSB3aWxsIGJlIHVzZWQKLWBkZWZpbmUgU0NSMV9SVk1fRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFuZGFyZCBleHRlbnNpb24gIk0iIGZvciBpbnRlZ2VyIGhhcmR3YXJlIG11bHRpcGxpZXIgYW5kIGRpdmlkZXIKLWBkZWZpbmUgU0NSMV9SVkNfRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFuZGFyZCBleHRlbnNpb24gIkMiIGZvciBjb21wcmVzc2VkIGluc3RydWN0aW9ucwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDI2OyAgICAvLyBudW1iZXIgb2Ygd3JpdGFibGUgaGlnaC1vcmRlciBiaXRzIGluIE1UVkVDLmJhc2UgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlZ2FsIHZhbHVlcyBhcmUgMCB0byAyNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZC1vbmx5IGJpdHMgYXJlIGhhcmR3aXJlZCB0byByZXNldCB2YWx1ZQotYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4gICAgICAgICAgLy8gZW5hYmxlIHdyaXRhYmxlIE1UVkVDLm1vZGUgZmllbGQgdG8gYWxsb3cgdmVjdG9yZWQgaXJxIG1vZGUsIG90aGVyd2lzZSBvbmx5IGRpcmVjdCBtb2RlIGlzIHBvc3NpYmxlCi0KLWBpZm5kZWYgU0NSMV9SVkVfRVhUCi0gIGBkZWZpbmUgU0NSMV9SVklfRVhUIC8vIFJWMzJFIGJhc2UgaW50ZWdlciBpbnN0cnVjdGlvbiBzZXQgaWYgU0NSMV9SVkVfRVhUIGlzIG5vdCBlbmFibGVkCi1gZW5kaWYgLy8gflNDUjFfUlZFX0VYVAotCi0vLyBDb3JlIHBpcGVsaW5lIG9wdGlvbnMgKHBvd2VyLXBlcmZvcm1hbmNlLWFyZWEgb3B0aW1pemF0aW9uKQotYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRSAgICAgICAgICAgLy8gZGlzYWJsZSByZWdpc3RlciBiZXR3ZWVuIElGVSBhbmQgSURVCi1gZGVmaW5lIFNDUjFfTk9fRVhFX1NUQUdFICAgICAgICAgICAvLyBkaXNhYmxlIHJlZ2lzdGVyIGJldHdlZW4gSURVIGFuZCBFWFUKLWBkZWZpbmUgU0NSMV9ORVdfUENfUkVHICAgICAgICAgICAgIC8vIGVuYWJsZSByZWdpc3RlciBpbiBJRlUgZm9yIE5ld19QQyB2YWx1ZQotYGRlZmluZSBTQ1IxX0ZBU1RfTVVMICAgICAgICAgICAgICAgLy8gZW5hYmxlIGZhc3Qgb25lLWN5Y2xlIG11bHRpcGxpY2F0aW9uLCBvdGhlcndpc2UgbXVsdGlwbGljYXRpb24gdGFrZXMgMzIgY3ljbGVzCi1gZGVmaW5lIFNDUjFfQ0xLQ1RSTF9FTiAgICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGNsb2NrIGdhdGluZwotYGRlZmluZSBTQ1IxX01QUkZfUlNUX0VOICAgICAgICAgICAgLy8gZW5hYmxlIHJlc2V0IGZvciBNUFJGCi1gZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4gICAgICAgICAgICAvLyBlbmFibGUgY3VzdG9tIE1DT1VOVEVOIENTUiBmb3IgY291bnRlciBjb250cm9sCi0KLS8vIFVuY29yZSBvcHRpb25zCi1gZGVmaW5lIFNDUjFfREJHX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgRGVidWcgU3Vic3lzdGVtIChUQVBDLCBETSwgU0NVLCBIRFUpCi1gZGVmaW5lIFNDUjFfVERVX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgVHJpZ2dlciBEZWJ1ZyBVbml0IChoYXJkd2FyZSBicmVha3BvaW50cykKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSAyOyAgIC8vIG51bWJlciBvZiBoYXJkd2FyZSB0cmlnZ2VycwotYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4gICAgICAgICAgLy8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXJzIG9uIGluc3RydWN0aW9uIGNvdW50ZXIKLWBkZWZpbmUgU0NSMV9JUElDX0VOICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBJbnRlZ3JhdGVkIFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcgotYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTiAgICAgICAgICAgLy8gZW5hYmxlIElQSUMgc3luY2hyb25pemVyCi1gZGVmaW5lIFNDUjFfVENNX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgVGlnaHRseS1Db3VwbGVkIE1lbW9yeQotCi1gZW5kaWYgLy8gZW5kIGN1c3RvbSBjb25maWd1cmF0aW9uIHNlY3Rpb24KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ09SRSBJTlRFR1JBVElPTiBPUFRJT05TCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBCeXBhc3NlcyBvbiBBWEkvQUhCIGJyaWRnZSBJL08KLWBkZWZpbmUgU0NSMV9JTUVNX0FIQl9JTl9CUCAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZSBpbnB1dCByZWdpc3RlcgotYGRlZmluZSBTQ1IxX0lNRU1fQUhCX09VVF9CUCAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBSEIgYnJpZGdlIG91dHB1dCByZWdpc3RlcgotYGRlZmluZSBTQ1IxX0RNRU1fQUhCX0lOX0JQICAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFIQiBicmlkZ2UgaW5wdXQgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9ETUVNX0FIQl9PVVRfQlAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBSEIgYnJpZGdlIG91dHB1dCByZWdpc3RlcgotYGRlZmluZSBTQ1IxX0lNRU1fQVhJX1JFUV9CUCAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBWEkgYnJpZGdlIHJlcXVlc3QgcmVnaXN0ZXIKLWBkZWZpbmUgU0NSMV9JTUVNX0FYSV9SRVNQX0JQICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQVhJIGJyaWRnZSByZXNwb25zZSByZWdpc3RlcgotYGRlZmluZSBTQ1IxX0RNRU1fQVhJX1JFUV9CUCAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFYSSBicmlkZ2UgcmVxdWVzdCByZWdpc3RlcgotYGRlZmluZSBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFYSSBicmlkZ2UgcmVzcG9uc2UgcmVnaXN0ZXIKLQotYGlmbmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCi0vLyBEZWZhdWx0IGFkZHJlc3MgY29uc3RhbnRzIChpZiBzY3IxX2FyY2hfY3VzdG9tLnN2aCBpcyBub3QgdXNlZCkKLXBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBTQ1IxX0FSQ0hfUlNUX1ZFQ1RPUiAgICAgICAgPSAnaDIwMDsgICAgICAgICAgICAvLyBSZXNldCB2ZWN0b3IgdmFsdWUgKHN0YXJ0IGFkZHJlc3MgYWZ0ZXIgcmVzZXQpCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgU0NSMV9BUkNIX01UVkVDX0JBU0UgICAgICAgID0gJ2gxQzA7ICAgICAgICAgICAgLy8gTVRWRUMuYmFzZSBmaWVsZCByZXNldCB2YWx1ZSwgb3IgY29uc3RhbnQgdmFsdWUgZm9yIE1UVkVDLmJhc2UgYml0cyB0aGF0IGFyZSBoYXJkd2lyZWQKLQotcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVENNX0FERFJfTUFTSyAgICAgICAgICA9ICdoRkZGRjAwMDA7ICAgICAgIC8vIFRDTSBtYXNrIGFuZCBzaXplOyBzaXplIGluIGJ5dGVzIGlzIHR3bydzIGNvbXBsZW1lbnQgb2YgdGhlIG1hc2sgdmFsdWUKLXBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RDTV9BRERSX1BBVFRFUk4gICAgICAgPSAnaDAwNDgwMDAwOyAgICAgICAvLyBUQ00gYWRkcmVzcyBtYXRjaCBwYXR0ZXJuCi0KLXBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RJTUVSX0FERFJfTUFTSyAgICAgICAgPSAnaEZGRkZGRkUwOyAgICAgICAvLyBUaW1lciBtYXNrCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9USU1FUl9BRERSX1BBVFRFUk4gICAgID0gJ2gwMDQ5MDAwMDsgICAgICAgLy8gVGltZXIgYWRkcmVzcyBtYXRjaCBwYXR0ZXJuCi0KLS8vIERldmljZSBidWlsZCBJRAotIGBkZWZpbmUgU0NSMV9BUkNIX0JVSUxEX0lEICAgICAgICAgICAgIGBTQ1IxX01JTVBJRAotCi1gZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQVJHRVQtU1BFQ0lGSUMgT1BUSU9OUwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUkFNLWJhc2VkIE1QUkYgY2FuIGJlIHVzZWQgZm9yIEludGVsIEZQR0FzIG9ubHkKLWBpZmRlZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTAotICBgZGVmaW5lIFNDUjFfTVBSRl9SQU0gICAgICAgICAgIC8vIGltcGxlbWVudHMgTVBSRiB3aXRoIGRlZGljYXRlZCBSQU0gYmxvY2tzCi1gZW5kaWYKLQotLy8gRVhVX1NUQUdFX0JZUEFTUyBhbmQgTVBSRl9SU1RfRU4gbXVzdCBiZSBkaXNhYmxlZCBmb3IgUkFNLWJhc2VkIE1QUkYKLWBpZmRlZiBTQ1IxX01QUkZfUkFNCi0gIGB1bmRlZiAgU0NSMV9OT19FWEVfU1RBR0UKLSAgYHVuZGVmICBTQ1IxX01QUkZfUlNUX0VOCi1gZW5kaWYKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0lNVUxBVElPTiBPUFRJT05TCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vL2BkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAgICAvLyBlbmFibGUgc2ltdWxhdGlvbiBjb2RlIChhdXRvbWF0aWNhbGx5IGRlZmluZWQgYnkgcm9vdCBtYWtlZmlsZSkKLS8vYGRlZmluZSBTQ1IxX1RSQUNFX0xPR19FTiAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0cmFjZWxvZwotLy9gZGVmaW5lIFNDUjFfWFBST1BfRU4gICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFgtcHJvcGFnYXRpb24KLQotLy8gQWRkcmVzc2VzIHVzZWQgaW4gdGVzdGJlbmNoCi1sb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9FWElUX0FERFIgICAgICA9IDMyJ2gwMDAwXzAwRjg7Ci1sb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9QUklOVF9BRERSICAgICA9IDMyJ2hGMDAwXzAwMDA7Ci1sb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9FWFRfSVJRX0FERFIgICA9IDMyJ2hGMDAwXzAxMDA7Ci1sb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9TT0ZUX0lSUV9BRERSICA9IDMyJ2hGMDAwXzAyMDA7Ci0KLWBlbmRpZiAvLyBTQ1IxX0FSQ0hfREVTQ1JJUFRJT05fU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9hcmNoX3R5cGVzLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfdHlwZXMuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmYxMDM3Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfdHlwZXMuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2FyY2hfdHlwZXMuc3ZoPgotLy8vIEBicmllZiAgICAgIFBpcGVsaW5lIHR5cGVzIGRlc2NyaXB0aW9uIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfQVJDSF9UWVBFU19TVkgKLWBkZWZpbmUgU0NSMV9BUkNIX1RZUEVTX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNUFJGIGFuZCBDU1IgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWBpZmRlZiBTQ1IxX1JWRV9FWFQKLSAgYGRlZmluZSBTQ1IxX01QUkZfQVdJRFRIICAgIDQKLSAgYGRlZmluZSBTQ1IxX01QUkZfU0laRSAgICAgIDE2Ci1gZWxzZSAvLyBTQ1IxX1JWRV9FWFQKLSAgYGRlZmluZSBTQ1IxX01QUkZfQVdJRFRIICAgIDUKLSAgYGRlZmluZSBTQ1IxX01QUkZfU0laRSAgICAgIDMyCi1gZW5kaWYgLy8gU0NSMV9SVkVfRVhUCi0KLXR5cGVkZWYgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgdHlwZV9zY3IxX21wcmZfdjsKLXR5cGVkZWYgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgdHlwZV9zY3IxX3BjX3Y7Ci0KLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfQ1NSX0FERFJfV0lEVEggICAgICAgICAgICAgPSAxMjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTICAgPSA2OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9DU1JfTVRWRUNfQkFTRV9WQUxfQklUUyAgICA9IGBTQ1IxX1hMRU4tU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFM7Ci1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6U0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFNdICBTQ1IxX0NTUl9NVFZFQ19CQVNFX1dSX1JTVF9WQUwgICAgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0NTUl9NVFZFQ19CQVNFX1ZBTF9CSVRTJyhTQ1IxX0FSQ0hfTVRWRUNfQkFTRSA+PiBTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUyk7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JPX0JJVFMgPSAoYFNDUjFfWExFTi0oU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMrU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMpKTsKLQotYGRlZmluZSBTQ1IxX01UVkFMX0lMTEVHQUxfSU5TVFJfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFeGNlcHRpb24gYW5kIElSUSBjb2RlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfRVhDX0NPREVfV0lEVEhfRSAgICA9IDQ7Ci0KLS8vIEV4Y2VwdGlvbnMKLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gewotICAgIFNDUjFfRVhDX0NPREVfSU5TVFJfTUlTQUxJR04gICAgICAgID0gNCdkMCwgICAgIC8vIGZyb20gRVhVCi0gICAgU0NSMV9FWENfQ09ERV9JTlNUUl9BQ0NFU1NfRkFVTFQgICAgPSA0J2QxLCAgICAgLy8gZnJvbSBJRlUKLSAgICBTQ1IxX0VYQ19DT0RFX0lMTEVHQUxfSU5TVFIgICAgICAgICA9IDQnZDIsICAgICAvLyBmcm9tIElEVSBvciBDU1IKLSAgICBTQ1IxX0VYQ19DT0RFX0JSRUFLUE9JTlQgICAgICAgICAgICA9IDQnZDMsICAgICAvLyBmcm9tIElEVSBvciBCUktNCi0gICAgU0NSMV9FWENfQ09ERV9MRF9BRERSX01JU0FMSUdOICAgICAgPSA0J2Q0LCAgICAgLy8gZnJvbSBMU1UKLSAgICBTQ1IxX0VYQ19DT0RFX0xEX0FDQ0VTU19GQVVMVCAgICAgICA9IDQnZDUsICAgICAvLyBmcm9tIExTVQotICAgIFNDUjFfRVhDX0NPREVfU1RfQUREUl9NSVNBTElHTiAgICAgID0gNCdkNiwgICAgIC8vIGZyb20gTFNVCi0gICAgU0NSMV9FWENfQ09ERV9TVF9BQ0NFU1NfRkFVTFQgICAgICAgPSA0J2Q3LCAgICAgLy8gZnJvbSBMU1UKLSAgICBTQ1IxX0VYQ19DT0RFX0VDQUxMX00gICAgICAgICAgICAgICA9IDQnZDExICAgICAvLyBmcm9tIElEVQotfSB0eXBlX3NjcjFfZXhjX2NvZGVfZTsKLQotLy8gSVJRcywgcmVzZXQKLXBhcmFtZXRlciBiaXQgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdIFNDUjFfRVhDX0NPREVfSVJRX01fU09GVFdBUkUgICAgICA9IDQnZDM7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSBTQ1IxX0VYQ19DT0RFX0lSUV9NX1RJTUVSICAgICAgICAgPSA0J2Q3OwotcGFyYW1ldGVyIGJpdCBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gU0NSMV9FWENfQ09ERV9JUlFfTV9FWFRFUk5BTCAgICAgID0gNCdkMTE7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSBTQ1IxX0VYQ19DT0RFX1JFU0VUICAgICAgICAgICAgICAgPSA0J2QwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE9wZXJhbmQgd2lkdGggZm9yIEJSS00KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKLSAgICBTQ1IxX09QX1dJRFRIX0JZVEUgID0gMidiMDAsCi0gICAgU0NSMV9PUF9XSURUSF9IQUxGICA9IDInYjAxLAotICAgIFNDUjFfT1BfV0lEVEhfV09SRCAgPSAyJ2IxMAotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9PUF9XSURUSF9FUlJPUiA9ICd4Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfb3Bfd2lkdGhfZTsKLQotYGVuZGlmIC8vU0NSMV9BUkNIX1RZUEVTX1NWSApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfY3NyLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2Nzci5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZGNhZmIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfY3NyLnN2aAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfY3NyLnN2aD4KLS8vLyBAYnJpZWYgICAgICBDU1IgbWFwcGluZy9kZXNjcmlwdGlvbiBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX0NTUl9TVkgKLWBkZWZpbmUgU0NSMV9DU1JfU1ZICi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi1gaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKLQotYGlmZGVmIFNDUjFfUlZFX0VYVAotYGRlZmluZSBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotYGVuZGlmIC8vIFNDUjFfUlZFX0VYVAotCi1gaWZkZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKLWB1bmRlZiBTQ1IxX01DT1VOVEVOX0VOCi1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgYWRkcmVzc2VzIChzdGFuZGFyZCkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNYWNoaW5lIEluZm9ybWF0aW9uIFJlZ2lzdGVycyAocmVhZC1vbmx5KQotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTVZFTkRPUklEICAgICA9ICdoRjExOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUFSQ0hJRCAgICAgICA9ICdoRjEyOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlNUElEICAgICAgICA9ICdoRjEzOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUhBUlRJRCAgICAgICA9ICdoRjE0OwotCi0vLyBNYWNoaW5lIFRyYXAgU2V0dXAgKHJlYWQtd3JpdGUpCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NU1RBVFVTICAgICAgID0gJ2gzMDA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NSVNBICAgICAgICAgID0gJ2gzMDE7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NSUUgICAgICAgICAgID0gJ2gzMDQ7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NVFZFQyAgICAgICAgID0gJ2gzMDU7Ci0KLS8vIE1hY2hpbmUgVHJhcCBIYW5kbGluZyAocmVhZC13cml0ZSkKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01TQ1JBVENIICAgICAgPSAnaDM0MDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01FUEMgICAgICAgICAgPSAnaDM0MTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01DQVVTRSAgICAgICAgPSAnaDM0MjsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01UVkFMICAgICAgICAgPSAnaDM0MzsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01JUCAgICAgICAgICAgPSAnaDM0NDsKLQotLy8gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgKHJlYWQtd3JpdGUpCi1gaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NQ1lDTEUgICAgICAgID0gJ2hCMDA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NSU5TVFJFVCAgICAgID0gJ2hCMDI7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NQ1lDTEVIICAgICAgID0gJ2hCODA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NSU5TVFJFVEggICAgID0gJ2hCODI7Ci1gZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKLQotLy8gU2hhZG93IENvdW50ZXJzL1RpbWVycyAocmVhZC1vbmx5KQotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVElNRSAgICAgICAgICA9ICdoQzAxOwotYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfQ1lDTEUgICAgICAgICA9ICdoQzAwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSU5TVFJFVCAgICAgICA9ICdoQzAyOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVElNRUggICAgICAgICA9ICdoQzgxOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfQ1lDTEVIICAgICAgICA9ICdoQzgwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSU5TVFJFVEggICAgICA9ICdoQzgyOwotYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotLy9wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9EQkdDX1NDUkFUQ0ggID0gJ2g3Qzg7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9IRFVfTUJBU0UgICAgPSAnaDdCMDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0hEVV9NU1BBTiAgICA9ICdoMDA0OyAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiBhZGRyZXNzZXMgKG5vbi1zdGFuZGFyZCkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01DT1VOVEVOICAgICAgPSAnaDdFMDsKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0KLWBpZmRlZiBTQ1IxX1REVV9FTgotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX01CQVNFICAgID0gJ2g3QTA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9URFVfTVNQQU4gICAgPSAnaDAwODsgICAgLy8gbXVzdCBiZSBwb3dlciBvZiAyCi1gZW5kaWYgLy8gU0NSMV9URFVfRU4KLQotYGlmZGVmIFNDUjFfSVBJQ19FTgotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICAgICA9ICdoQkYwOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19DSVNWICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19DSVNWICk7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX0NJQ1NSICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX0NJQ1NSKTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfSVBSICAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfSVBSICApOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19JU1ZSICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19JU1ZSICk7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX0VPSSAgICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX0VPSSAgKTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfU09JICAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfU09JICApOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19JRFggICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19JRFggICk7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX0lDU1IgICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX0lDU1IgKTsKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENTUiBkZWZpbml0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEdlbmVyYWwKLXBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSBTQ1IxX1JTVF9WRUNUT1IgICAgICA9IFNDUjFfQVJDSF9SU1RfVkVDVE9SOwotCi0vLyBSZXNldCB2YWx1ZXMgVEJECi1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01JRV9NU0lFX1JTVF9WQUwgICAgICAgICAgICAgPSAxJ2IwOwotcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NSUVfTVRJRV9SU1RfVkFMICAgICAgICAgICAgID0gMSdiMDsKLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTUlFX01FSUVfUlNUX1ZBTCAgICAgICAgICAgICA9IDEnYjA7Ci0KLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTUlQX01TSVBfUlNUX1ZBTCAgICAgICAgICAgICA9IDEnYjA7Ci1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01JUF9NVElQX1JTVF9WQUwgICAgICAgICAgICAgPSAxJ2IwOwotcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NSVBfTUVJUF9SU1RfVkFMICAgICAgICAgICAgID0gMSdiMDsKLQotcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NU1RBVFVTX01JRV9SU1RfVkFMICAgICAgICAgID0gMSdiMDsKLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTVNUQVRVU19NUElFX1JTVF9WQUwgICAgICAgICA9IDEnYjE7Ci0KLS8vIE1JU0EKLWBkZWZpbmUgU0NSMV9SVkNfRU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU0NSMV9YTEVOJ2gwMDA0Ci1gZGVmaW5lIFNDUjFfUlZFX0VOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNDUjFfWExFTidoMDAxMAotYGRlZmluZSBTQ1IxX1JWSV9FTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTQ1IxX1hMRU4naDAxMDAKLWBkZWZpbmUgU0NSMV9SVk1fRU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU0NSMV9YTEVOJ2gxMDAwCi1wYXJhbWV0ZXIgYml0IFsxOjBdICAgICAgICAgICAgIFNDUjFfTUlTQV9NWExfMzIgICAgPSAyJ2QxOwotcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdICBTQ1IxX0NTUl9NSVNBICAgICAgID0gKFNDUjFfTUlTQV9NWExfMzIgPDwgKGBTQ1IxX1hMRU4tMikpCi1gaWZuZGVmIFNDUjFfUlZFX0VYVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZJX0VOQwotYGVsc2UgLy8gU0NSMV9SVkVfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgU0NSMV9SVkVfRU5DCi1gZW5kaWYgLy8gU0NSMV9SVkVfRVhUCi1gaWZkZWYgU0NSMV9SVkNfRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgU0NSMV9SVkNfRU5DCi1gZW5kaWYgLy8gU0NSMV9SVkNfRVhUCi1gaWZkZWYgU0NSMV9SVk1fRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgU0NSMV9SVk1fRU5DCi1gZW5kaWYgLy8gU0NSMV9SVk1fRVhUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotCi0vLyBNVkVORE9SSUQKLXBhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSBTQ1IxX0NTUl9NVkVORE9SSUQgICA9IGBTQ1IxX01WRU5ET1JJRDsKLQotLy8gTUFSQ0hJRAotcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdIFNDUjFfQ1NSX01BUkNISUQgICAgID0gYFNDUjFfWExFTidkODsKLQotLy8gTUlNUElECi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gU0NSMV9DU1JfTUlNUElEICAgICAgPSBgU0NSMV9NSU1QSUQ7Ci0KLS8vIE1TVEFUVVMKLXBhcmFtZXRlciBiaXQgWzE6MF0gU0NSMV9DU1JfTVNUQVRVU19NUFAgICAgICAgICAgICA9IDInYjExOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NU1RBVFVTX01JRV9PRkZTRVQgID0gMzsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTVNUQVRVU19NUElFX09GRlNFVCA9IDc7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01TVEFUVVNfTVBQX09GRlNFVCAgPSAxMTsKLQotLy8gTVRWRUMKLS8vIGJpdHMgWzU6MF0gYXJlIGFsd2F5cyB6ZXJvCi1wYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6U0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFNdIFNDUjFfQ1NSX01UVkVDX0JBU0VfUlNUX1ZBTCAgPSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1dSX1JTVF9WQUw7Ci0KLXBhcmFtZXRlciBiaXQgU0NSMV9DU1JfTVRWRUNfTU9ERV9ESVJFQ1QgICAgICAgICAgICA9IDEnYjA7Ci1gaWZkZWYgU0NSMV9NVFZFQ19NT0RFX0VOCi1wYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01UVkVDX01PREVfVkVDVE9SRUQgICAgICAgICAgPSAxJ2IxOwotYGVuZGlmIC8vIFNDUjFfTVRWRUNfTU9ERV9FTgotCi0vLyBNSUUsIE1JUAotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NSUVfTVNJRV9PRkZTRVQgICAgID0gMzsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUICAgICA9IDc7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01JRV9NRUlFX09GRlNFVCAgICAgPSAxMTsKLQotYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KLS8vIE1DT1VOVEVOCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01DT1VOVEVOX0NZX09GRlNFVCAgPSAwOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NQ09VTlRFTl9JUl9PRkZTRVQgID0gMjsKLWBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCi0KLS8vIE1DQVVTRQotdHlwZWRlZiBsb2dpYyBbYFNDUjFfWExFTi0yOjBdICAgICAgdHlwZV9zY3IxX2Nzcl9tY2F1c2VfZWNfdjsKLQotLy8gTUNZQ0xFLCBNSU5TVFJFVAotYGlmZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX0NPVU5URVJTX1dJRFRIICAgICAgPSAzMjsKLWBlbHNlIC8vIH5TQ1IxX0NTUl9SRURVQ0VEX0NOVAotcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9DT1VOVEVSU19XSURUSCAgICAgID0gNjQ7Ci1gZW5kaWYgLy8gflNDUjFfQ1NSX1JFRFVDRURfQ05UCi0KLS8vIEhQTQotcGFyYW1ldGVyIGJpdCBbNjowXSBTQ1IxX0NTUl9BRERSX0hQTUNPVU5URVJfTUFTSyAgID0gNydiMTEwMDAwMDsKLXBhcmFtZXRlciBiaXQgWzY6MF0gU0NSMV9DU1JfQUREUl9IUE1DT1VOVEVSSF9NQVNLICA9IDcnYjExMDAxMDA7Ci1wYXJhbWV0ZXIgYml0IFs2OjBdIFNDUjFfQ1NSX0FERFJfTUhQTUNPVU5URVJfTUFTSyAgPSA3J2IxMDExMDAwOwotcGFyYW1ldGVyIGJpdCBbNjowXSBTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSSF9NQVNLID0gNydiMTAxMTEwMDsKLXBhcmFtZXRlciBiaXQgWzY6MF0gU0NSMV9DU1JfQUREUl9NSFBNRVZFTlRfTUFTSyAgICA9IDcnYjAwMTEwMDE7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0NTUl9SRVNQX09LLAotICAgIFNDUjFfQ1NSX1JFU1BfRVIKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfQ1NSX1JFU1BfRVJST1IgPSAneAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX2Nzcl9yZXNwX2U7Ci0KLWBlbmRpZiAvLyBTQ1IxX0NTUl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2RtLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2RtLnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0YjBkOS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9kbS5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9kbS5zdmg+Ci0vLy8gQGJyaWVmICAgICAgRGVidWcgTW9kdWxlIGhlYWRlciBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX0lOQ0xVREVfRE1fREVGUwotYGRlZmluZSBTQ1IxX0lOQ0xVREVfRE1fREVGUwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX2hkdS5zdmgiCi1gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgotCi1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0FERFJfV0lEVEggICAgICAgICAgICAgICAgICA9IDYnZDc7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEggICAgICAgICAgICAgICAgICA9IDYnZDMyOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNSV9PUF9XSURUSCAgICAgICAgICAgICAgICAgICAgPSAyJ2QyOwotCi1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0NIX0lEX1dJRFRIICAgICAgICAgICAgICAgICA9IDInZDI7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0RSX0RUTUNTX1dJRFRIICAgICAgICAgICAgICA9IDYnZDMyOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRIICAgICAgICAgPSBTQ1IxX0RCR19ETUlfT1BfV0lEVEggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETUlfREFUQV9XSURUSCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNSV9BRERSX1dJRFRIOwotCi0vLyBEZWJ1ZyBNb2R1bGUgYWRkcmVzc2VzCi1wYXJhbWV0ZXIgU0NSMV9EQkdfREFUQTAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDQ7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDU7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDEwOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gxMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GTyAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMTI7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDUyAgICAgICAgICAgICAgICAgICAgICA9IDcnaDE2OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gxNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVEFVVE8gICAgICAgICAgICAgICAgICAgID0gNydoMTg7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfUFJPR0JVRjAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDIwOwotcGFyYW1ldGVyIFNDUjFfREJHX1BST0dCVUYxICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gyMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19QUk9HQlVGMiAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMjI7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfUFJPR0JVRjMgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDIzOwotcGFyYW1ldGVyIFNDUjFfREJHX1BST0dCVUY0ICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gyNDsKLXBhcmFtZXRlciBTQ1IxX0RCR19QUk9HQlVGNSAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMjU7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFMVFNVTTAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDQwOwotCi0vLyBETUNPTlRST0wKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFMVFJFUSAgICAgICAgICAgICAgID0gNSdkMzE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX1JFU1VNRVJFUSAgICAgICAgICAgICA9IDUnZDMwOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUUkVTRVQgICAgICAgICAgICAgPSA1J2QyOTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfQUNLSEFWRVJFU0VUICAgICAgICAgID0gNSdkMjg7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX1JFU0VSVkVEQiAgICAgICAgICAgICA9IDUnZDI3OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVNFTCAgICAgICAgICAgICAgICAgPSA1J2QyNjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTExPX0hJICAgICAgICAgID0gNSdkMjU7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxMT19MTyAgICAgICAgICA9IDUnZDE2OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMSElfSEkgICAgICAgICAgPSA1J2QxNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTEhJX0xPICAgICAgICAgID0gNSdkNjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURBX0hJICAgICAgICAgID0gNSdkNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURBX0xPICAgICAgICAgID0gNSdkMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfTkRNUkVTRVQgICAgICAgICAgICAgID0gNSdkMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfRE1BQ1RJVkUgICAgICAgICAgICAgID0gNSdkMDsKLQotLy8gRE1TVEFUVVMKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFRENfSEkgICAgICAgICAgID0gNSdkMzE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURDX0xPICAgICAgICAgICA9IDUnZDIzOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0lNUEVCUkVBSyAgICAgICAgICAgICAgPSA1J2QyMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREJfSEkgICAgICAgICAgID0gNSdkMjE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURCX0xPICAgICAgICAgICA9IDUnZDIwOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FMTEhBVkVSRVNFVCAgICAgICAgICAgPSA1J2QxOTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllIQVZFUkVTRVQgICAgICAgICAgID0gNSdkMTg7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQUxMUkVTVU1FQUNLICAgICAgICAgICA9IDUnZDE3OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWVJFU1VNRUFDSyAgICAgICAgICAgPSA1J2QxNjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTExOT05FWElTVEVOVCAgICAgICAgID0gNSdkMTU7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQU5ZTk9ORVhJU1RFTlQgICAgICAgICA9IDUnZDE0OwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FMTFVOQVZBSUwgICAgICAgICAgICAgPSA1J2QxMzsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllVTkFWQUlMICAgICAgICAgICAgID0gNSdkMTI7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQUxMUlVOTklORyAgICAgICAgICAgICA9IDUnZDExOwotcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWVJVTk5JTkcgICAgICAgICAgICAgPSA1J2QxMDsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTExIQUxURUQgICAgICAgICAgICAgID0gNSdkOTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllIQUxURUQgICAgICAgICAgICAgID0gNSdkODsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BVVRIRU5USUNBVEVEICAgICAgICAgID0gNSdkNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BVVRIQlVTWSAgICAgICAgICAgICAgID0gNSdkNjsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREEgICAgICAgICAgICAgID0gNSdkNTsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19ERVZUUkVFVkFMSUQgICAgICAgICAgID0gNSdkNDsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19WRVJTSU9OX0hJICAgICAgICAgICAgID0gNSdkMzsKLXBhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19WRVJTSU9OX0xPICAgICAgICAgICAgID0gNSdkMDsKLQotLy8gQ09NTUFORFMKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX1RZUEVfSEkgICAgICAgICAgICAgICAgID0gNSdkMzE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9UWVBFX0xPICAgICAgICAgICAgICAgICA9IDUnZDI0OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfVFlQRV9XRFRIICAgICAgICAgICAgICAgPSBTQ1IxX0RCR19DT01NQU5EX1RZUEVfSEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0NSMV9EQkdfQ09NTUFORF9UWVBFX0xPOwotCi1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVTRVJWRURCICAgICA9IDUnZDIzOwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfSEkgICAgICAgPSA1J2QyMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX0xPICAgICAgID0gNSdkMjA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9XRFRIICAgICA9IFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfSEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9MTzsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRVNFUlZFREEgICAgID0gNSdkMTk7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUE9TVEVYRUMgICAgICA9IDUnZDE4OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1RSQU5TRkVSICAgICAgPSA1J2QxNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19XUklURSAgICAgICAgID0gNSdkMTY7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVHTk9fSEkgICAgICA9IDUnZDE1OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFR05PX0xPICAgICAgPSA1J2QwOwotCi1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNVklSVFVBTCAgICA9IDUnZDIzOwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVNJWkVfSEkgICAgPSA1J2QyMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1TSVpFX0xPICAgID0gNSdkMjA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNUE9TVElOQyAgICA9IDUnZDE5OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQl9ISSAgPSA1J2QxODsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREJfTE8gID0gNSdkMTc7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fV1JJVEUgICAgICAgICA9IDUnZDE2OwotcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQV9ISSAgPSA1J2QxMzsKLXBhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREFfTE8gID0gNSdkMDsKLQotLy8gQUJTVFJBQ1RDUwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRUREX0hJICAgICAgICAgPSA1J2QzMTsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVERF9MTyAgICAgICAgID0gNSdkMjk7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19QUk9HQlVGU0laRV9ISSAgICAgICA9IDUnZDI4OwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUFJPR0JVRlNJWkVfTE8gICAgICAgPSA1J2QyNDsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQ19ISSAgICAgICAgID0gNSdkMjM7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRENfTE8gICAgICAgICA9IDUnZDEzOwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfQlVTWSAgICAgICAgICAgICAgICAgPSA1J2QxMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQiAgICAgICAgICAgID0gNSdkMTE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfSEkgICAgICAgICAgICA9IDUnZDEwOwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0xPICAgICAgICAgICAgPSA1J2Q4OwotcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEggICAgICAgICAgPSBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9ISQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9MTzsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQV9ISSAgICAgICAgID0gNSdkNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQV9MTyAgICAgICAgID0gNSdkNDsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX0RBVEFDT1VOVF9ISSAgICAgICAgID0gNSdkMzsKLXBhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX0RBVEFDT1VOVF9MTyAgICAgICAgID0gNSdkMDsKLQotLy8gSEFSVElORk8KLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREJfSEkgICAgICAgICAgID0gNSdkMzE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURCX0xPICAgICAgICAgICA9IDUnZDI0OwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX05TQ1JBVENIX0hJICAgICAgICAgICAgPSA1J2QyMzsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19OU0NSQVRDSF9MTyAgICAgICAgICAgID0gNSdkMjA7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURBX0hJICAgICAgICAgICA9IDUnZDE5OwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQV9MTyAgICAgICAgICAgPSA1J2QxNzsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUNDRVNTICAgICAgICAgICAgID0gNSdkMTY7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fREFUQVNJWkVfSEkgICAgICAgICAgICA9IDUnZDE1OwotcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX0RBVEFTSVpFX0xPICAgICAgICAgICAgPSA1J2QxMjsKLXBhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUREUl9ISSAgICAgICAgICAgID0gNSdkMTE7Ci1wYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fREFUQUFERFJfTE8gICAgICAgICAgICA9IDUnZDA7Ci0KLQotYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9ETV9ERUZTCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9oZHUuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaGR1LnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ3M2ZlNC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9oZHUuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyCpIDIwMTYtMjAyMS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9waXBlX2hkdS5zdmg+Ci0vLy8gQGJyaWVmICAgICAgSEFSVCBEZWJ1ZyBVbml0IGRlZmluaXRpb25zIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfSU5DTFVERV9IRFVfREVGUwotYGRlZmluZSBTQ1IxX0lOQ0xVREVfSERVX0RFRlMKLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi1gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgotCi1gaWZkZWYgU0NSMV9NTVVfRU4KLSBgZGVmaW5lIFNDUjFfSERVX0ZFQVRVUkVfTVBSVkVOCi1gZW5kaWYgLy8gU0NSMV9NTVVfRU4KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFBhcmFtZXRlcnMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vL2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0JBU0VfQUREUiAgICAgID0gMTInaDdCMDsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0FERFJfU1BBTiAgICAgID0gNDsgLy8gWU9TWVMgRklYCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIICAgICA9ICRjbG9nMihTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1NQQU4pOwotbG9jYWxwYXJhbSBiaXQgWzM6MF0gICAgU0NSMV9IRFVfREVCVUdDU1JfRENTUl9YREVCVUdWRVIgPSA0J2g0OwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfUEJVRl9BRERSX1NQQU4gICAgICAgICAgPSA4OwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRIICAgICAgICAgPSAkY2xvZzIoU0NSMV9IRFVfUEJVRl9BRERSX1NQQU4pOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfREFUQV9SRUdfV0lEVEggICAgICAgICAgPSAzMjsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEggICAgICAgID0gMzI7Ci0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFR5cGVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBIQVJUIERlYnVnIFN0YXRlczoKLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQgICAgICAgICA9IDInYjAwLAotICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTiAgICAgICAgICAgPSAyJ2IwMSwKLSAgICBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEICAgICAgID0gMidiMTAsCi0gICAgU0NSMV9IRFVfREJHU1RBVEVfRFJVTiAgICAgICAgICA9IDInYjExCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX0hEVV9EQkdTVEFURV9YWFggICAgICAgICAgID0gJ1gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9IRFVfUEJVRlNUQVRFX0lETEUgICAgICAgICAgPSAyJ2IwMCwKLSAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfRkVUQ0ggICAgICAgICA9IDInYjAxLAotICAgIFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1QgICAgID0gMidiMTAsCi0gICAgU0NSMV9IRFVfUEJVRlNUQVRFX1dBSVQ0RU5EICAgICAgPSAyJ2IxMQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9IRFVfUEJVRlNUQVRFX1hYWCAgICAgICAgICAgPSAnWAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX2hkdV9wYnVmc3RhdGVzX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyB7Ci0gICAgU0NSMV9IRFVfSEFSVENNRF9SRVNVTUUgICAgICAgICA9IDEnYjAsCi0gICAgU0NSMV9IRFVfSEFSVENNRF9IQUxUICAgICAgICAgICA9IDEnYjEKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfSERVX0hBUlRDTURfWFhYICAgICAgICAgICAgPSAxJ2JYCi1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfaGR1X2hhcnRfY29tbWFuZF9lOwotCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfSERVX0ZFVENIX1NSQ19OT1JNQUwgICAgICAgPSAxJ2IwLAotICAgIFNDUjFfSERVX0ZFVENIX1NSQ19QQlVGICAgICAgICAgPSAxJ2IxCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX0hEVV9GRVRDSF9TUkNfWFhYICAgICAgICAgID0gMSdiWAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX2hkdV9mZXRjaF9zcmNfZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICAvL2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X247Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVicmVhazsKLSAgICB0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICBkYmdfc3RhdGU7Ci19IHR5cGVfc2NyMV9oZHVfaGFydHN0YXR1c19zOwotCi0vLyBEZWJ1ZyBNb2RlIFJlZGlyZWN0aW9uIGNvbnRyb2w6Ci10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzdGVwOyAgICAgICAgICAvLyBTaW5nbGUgU3RlcAotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVicmVhazsgICAgICAgICAvLyBSZWRpcmVjdGlvbiBhZnRlciBFQlJFQUsgZXhlY3V0aW9uCi19IHR5cGVfc2NyMV9oZHVfcmVkaXJlY3RfczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZHNibDsKLSAgICB0eXBlX3NjcjFfaGR1X2ZldGNoX3NyY19lICAgICAgICAgICBmZXRjaF9zcmM7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNfYWR2bXRfZHNibDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2Jya3B0X2RzYmw7Ci0gICAgdHlwZV9zY3IxX2hkdV9yZWRpcmVjdF9zICAgICAgICAgICAgcmVkaXJlY3Q7Ci19IHR5cGVfc2NyMV9oZHVfcnVuY3RybF9zOwotCi0vLyBIQVJUIEhhbHQgU3RhdHVzOgotdHlwZWRlZiBlbnVtIGxvZ2ljIFsyOjBdIHsKLSAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfTk9ORSAgICAgICAgID0gMydiMDAwLAotICAgIFNDUjFfSERVX0hBTFRDQVVTRV9FQlJFQUsgICAgICAgPSAzJ2IwMDEsCi0gICAgU0NSMV9IRFVfSEFMVENBVVNFX1RNUkVRICAgICAgICA9IDMnYjAxMCwKLSAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfRE1SRVEgICAgICAgID0gMydiMDExLAotICAgIFNDUjFfSERVX0hBTFRDQVVTRV9TU1RFUCAgICAgICAgPSAzJ2IxMDAsCi0gICAgU0NSMV9IRFVfSEFMVENBVVNFX1JTVEVYSVQgICAgICA9IDMnYjEwMQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9IRFVfSEFMVENBVVNFX1hYWCAgICAgICAgICA9ICdYCi1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDsKLSAgICB0eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lICAgICAgICAgICBjYXVzZTsKLX0gdHlwZV9zY3IxX2hkdV9oYWx0c3RhdHVzX3M7Ci0KLQotLy8gRGVidWcgQ1NSIG1hcAotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EQ1NSICAgICAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMCApOwotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EUEMgICAgICAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMSApOwotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMiApOwotbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDEgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMyApOwotCi1sb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RDU1IgICAgICA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRENTUjsKLWxvY2FscGFyYW0gYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9IRFVfREJHQ1NSX0FERFJfRFBDICAgICAgID0gU0NSMV9DU1JfQUREUl9IRFVfTUJBU0UgKyBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EUEM7Ci1sb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMCA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gwOwotbG9jYWxwYXJhbSBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDEgPSBTQ1IxX0NTUl9BRERSX0hEVV9NQkFTRSArIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RTQ1JBVENIMTsKLQotLy8gRGVidWcgQ1NScyA6OiBEQ1NSCi10eXBlZGVmIGVudW0gaW50IHsKLSAgICBTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfUiAgICAgICAgID0gMCwKLSAgICBTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfTCAgICAgICAgID0gMSwKLSAgICBTQ1IxX0hEVV9EQ1NSX1NURVBfQklUICAgICAgICAgID0gMiwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9SICAgICAgID0gMywKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9MICAgICAgID0gNSwKLSAgICBTQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9SICAgICAgID0gNiwKLSAgICBTQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9MICAgICAgID0gOCwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9SICAgICAgID0gOSwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9MICAgICAgID0gMTAsCi0gICAgU0NSMV9IRFVfRENTUl9TVEVQSUVfQklUICAgICAgICA9IDExLAotICAgIFNDUjFfSERVX0RDU1JfUlNSVjJfQklUX1IgICAgICAgPSAxMiwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYyX0JJVF9MICAgICAgID0gMTQsCi0gICAgU0NSMV9IRFVfRENTUl9FQlJFQUtNX0JJVCAgICAgICA9IDE1LAotICAgIFNDUjFfSERVX0RDU1JfUlNSVjNfQklUX1IgICAgICAgPSAxNiwKLSAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYzX0JJVF9MICAgICAgID0gMjcsCi0gICAgU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX1IgICA9IDI4LAotICAgIFNDUjFfSERVX0RDU1JfWERFQlVHVkVSX0JJVF9MICAgPSAzMQotfSB0eXBlX3NjcjFfaGR1X2Rjc3JfYml0c19lOwotCi0vL2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0RDU1JfUFJWX1dJRFRIID0gU0NSMV9IRFVfRENTUl9QUlZfQklUX0wtU0NSMV9IRFVfRENTUl9QUlZfQklUX1IrMTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX0wtU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX1I6MF0gICB4ZGVidWd2ZXI7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfUlNSVjNfQklUX0wtU0NSMV9IRFVfRENTUl9SU1JWM19CSVRfUjowXSAgICAgICAgICAgcnNydjM7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWJyZWFrbTsKLSAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWMl9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYyX0JJVF9SOjBdICAgICAgICAgICByc3J2MjsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwaWU7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfUlNSVjFfQklUX0wtU0NSMV9IRFVfRENTUl9SU1JWMV9CSVRfUjowXSAgICAgICAgICAgcnNydjE7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfQ0FVU0VfQklUX0wtU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfUjowXSAgICAgICAgICAgY2F1c2U7Ci0gICAgbG9naWMgW1NDUjFfSERVX0RDU1JfUlNSVjBfQklUX0wtU0NSMV9IRFVfRENTUl9SU1JWMF9CSVRfUjowXSAgICAgICAgICAgcnNydjA7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDsKLSAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9QUlZfQklUX0wtU0NSMV9IRFVfRENTUl9QUlZfQklUX1I6MF0gICAgICAgICAgICAgICBwcnY7Ci19IHR5cGVfc2NyMV9oZHVfZGNzcl9zOwotCi0KLWBlbmRpZiAvLyBTQ1IxX0lOQ0xVREVfSERVX0RFRlMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2lwaWMuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaXBpYy5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDJkYzMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaXBpYy5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfaXBpYy5zdmg+Ci0vLy8gQGJyaWVmICAgICAgSVBJQyBoZWFkZXIgZmlsZQotLy8vCi0KLWBpZm5kZWYgU0NSMV9JUElDX1NWSAotYGRlZmluZSBTQ1IxX0lQSUNfU1ZICi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lSUV9WRUNUX05VTSAgICAgICA9IDE2OyAgIC8vIG11c3QgYmUgcG93ZXIgb2YgMiBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lSUV9WRUNUX1dJRFRIICAgICA9ICRjbG9nMihTQ1IxX0lSUV9WRUNUX05VTSsxKTsKLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfTElORVNfTlVNICAgICAgPSBTQ1IxX0lSUV9WRUNUX05VTTsKLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfTElORVNfV0lEVEggICAgPSAkY2xvZzIoU0NSMV9JUlFfTElORVNfTlVNKTsKLXBhcmFtZXRlciAgIGxvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gU0NSMV9JUlFfVk9JRF9WRUNUX05VTSAgPSBTQ1IxX0lSUV9WRUNUX1dJRFRIJyhTQ1IxX0lSUV9WRUNUX05VTSk7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX0lEWF9XSURUSCAgICAgID0gJGNsb2cyKFNDUjFfSVJRX1ZFQ1RfTlVNKTsKLQotLy8gQWRkcmVzcyBkZWNvZGluZyBwYXJhbWV0ZXJzCi1wYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19DSVNWICAgICAgICAgID0gMydoMDsgICAgLy8gUk8KLXBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0NJQ1NSICAgICAgICAgPSAzJ2gxOyAgICAvLyB7SVAsIElFfQotcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSVBSICAgICAgICAgICA9IDMnaDI7ICAgIC8vIFJXMUMKLXBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lTVlIgICAgICAgICAgPSAzJ2gzOyAgICAvLyBSTwotcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfRU9JICAgICAgICAgICA9IDMnaDQ7ICAgIC8vIFJaVwotcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfU09JICAgICAgICAgICA9IDMnaDU7ICAgIC8vIFJaVwotcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSURYICAgICAgICAgICA9IDMnaDY7ICAgIC8vIFJXCi1wYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSICAgICAgICAgID0gMydoNzsgICAgLy8gUlcKLQotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JUCAgICAgICA9IDA7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0lFICAgICAgID0gMTsKLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSU0gICAgICAgPSAyOwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JTlYgICAgICA9IDM7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0lTICAgICAgID0gNDsKLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfUFJWX0xTQiAgPSA4OwotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9QUlZfTVNCICA9IDk7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0xOX0xTQiAgID0gMTI7Ci1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0xOX01TQiAgID0gU0NSMV9JUElDX0lDU1JfTE5fTFNCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU0NSMV9JUlFfTElORVNfV0lEVEg7Ci0KLXBhcmFtZXRlciAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX1BSVl9NICAgICAgICAgPSAyJ2IxMTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUeXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfQ1NSMklQSUNfUkQsCi0gICAgU0NSMV9DU1IySVBJQ19XUgotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9DU1IySVBJQ19FUlJPUiA9ICd4Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfY3NyMmlwaWNfd3JfZTsKLQotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotYGVuZGlmIC8vIFNDUjFfSVBJQ19TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX21lbWlmLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX21lbWlmLnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIzNWQxZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9tZW1pZi5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfbWVtaWYuc3ZoPgotLy8vIEBicmllZiAgICAgIE1lbW9yeSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgZmlsZQotLy8vCi0KLWBpZm5kZWYgU0NSMV9NRU1JRl9TVkgKLWBkZWZpbmUgU0NSMV9NRU1JRl9TVkgKLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGNvbW1hbmQgZW51bQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfTUVNX0NNRF9SRCAgICAgPSAxJ2IwLAotICAgIFNDUjFfTUVNX0NNRF9XUiAgICAgPSAxJ2IxCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX01FTV9DTURfRVJST1IgID0gJ3gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9tZW1fY21kX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGRhdGEgd2lkdGggZW51bQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWNbMTowXSB7Ci0gICAgU0NSMV9NRU1fV0lEVEhfQllURSAgICAgPSAyJ2IwMCwKLSAgICBTQ1IxX01FTV9XSURUSF9IV09SRCAgICA9IDInYjAxLAotICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgICAgID0gMidiMTAKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfTUVNX1dJRFRIX0VSUk9SICAgID0gJ3gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9tZW1fd2lkdGhfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZW1vcnkgcmVzcG9uc2UgZW51bQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWNbMTowXSB7Ci0gICAgU0NSMV9NRU1fUkVTUF9OT1RSRFkgICAgPSAyJ2IwMCwKLSAgICBTQ1IxX01FTV9SRVNQX1JEWV9PSyAgICA9IDInYjAxLAotICAgIFNDUjFfTUVNX1JFU1BfUkRZX0VSICAgID0gMidiMTAKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfTUVNX1JFU1BfRVJST1IgICAgID0gJ3gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9tZW1fcmVzcF9lOwotCi1gZW5kaWYgLy8gU0NSMV9NRU1JRl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTQzZDg5Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmg+Ci0vLy8gQGJyaWVmICAgICAgUklTQy1WIElTQSBkZWZpbml0aW9ucyBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX1JJU0NWX0lTQV9ERUNPRElOR19TVkgKLWBkZWZpbmUgU0NSMV9SSVNDVl9JU0FfREVDT0RJTkdfU1ZICi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKLSAgICBTQ1IxX0lOU1RSX1JWQzAgICAgID0gMidiMDAsCi0gICAgU0NSMV9JTlNUUl9SVkMxICAgICA9IDInYjAxLAotICAgIFNDUjFfSU5TVFJfUlZDMiAgICAgPSAyJ2IxMCwKLSAgICBTQ1IxX0lOU1RSX1JWSSAgICAgID0gMidiMTEKLX0gdHlwZV9zY3IxX2luc3RyX3R5cGVfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSVjMySSBvcGNvZGVzIChiaXRzIDY6MikKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFs2OjJdIHsKLSAgICBTQ1IxX09QQ09ERV9MT0FEICAgICAgICA9IDUnYjAwMDAwLAotICAgIFNDUjFfT1BDT0RFX01JU0NfTUVNICAgID0gNSdiMDAwMTEsCi0gICAgU0NSMV9PUENPREVfT1BfSU1NICAgICAgPSA1J2IwMDEwMCwKLSAgICBTQ1IxX09QQ09ERV9BVUlQQyAgICAgICA9IDUnYjAwMTAxLAotICAgIFNDUjFfT1BDT0RFX1NUT1JFICAgICAgID0gNSdiMDEwMDAsCi0gICAgU0NSMV9PUENPREVfT1AgICAgICAgICAgPSA1J2IwMTEwMCwKLSAgICBTQ1IxX09QQ09ERV9MVUkgICAgICAgICA9IDUnYjAxMTAxLAotICAgIFNDUjFfT1BDT0RFX0JSQU5DSCAgICAgID0gNSdiMTEwMDAsCi0gICAgU0NSMV9PUENPREVfSkFMUiAgICAgICAgPSA1J2IxMTAwMSwKLSAgICBTQ1IxX09QQ09ERV9KQUwgICAgICAgICA9IDUnYjExMDExLAotICAgIFNDUjFfT1BDT0RFX1NZU1RFTSAgICAgID0gNSdiMTExMDAKLX0gdHlwZV9zY3IxX3J2aV9vcGNvZGVfZTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElBTFUgbWFpbiBvcGVyYW5kcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIFNDUjFfSUFMVV9PUF9BTExfTlVNX0UgPSAyOwotbG9jYWxwYXJhbSBTQ1IxX0lBTFVfT1BfV0lEVEhfRSAgID0gJGNsb2cyKFNDUjFfSUFMVV9PUF9BTExfTlVNX0UpOwotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0lBTFVfT1BfV0lEVEhfRS0xOjBdIHsKLSAgICBTQ1IxX0lBTFVfT1BfUkVHX0lNTSwgICAgICAgICAgLy8gb3AxID0gcnMxOyBvcDIgPSBpbW0KLSAgICBTQ1IxX0lBTFVfT1BfUkVHX1JFRyAgICAgICAgICAgLy8gb3AxID0gcnMxOyBvcDIgPSByczIKLX0gdHlwZV9zY3IxX2lhbHVfb3Bfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSUFMVSBtYWluIGNvbW1hbmRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX1JWTV9FWFQKLWxvY2FscGFyYW0gU0NSMV9JQUxVX0NNRF9BTExfTlVNX0UgICAgPSAyMzsKLWBlbHNlIC8vIH5TQ1IxX1JWTV9FWFQKLWxvY2FscGFyYW0gU0NSMV9JQUxVX0NNRF9BTExfTlVNX0UgICAgPSAxNTsKLWBlbmRpZiAvLyB+U0NSMV9SVk1fRVhUCi1sb2NhbHBhcmFtIFNDUjFfSUFMVV9DTURfV0lEVEhfRSAgICAgID0gJGNsb2cyKFNDUjFfSUFMVV9DTURfQUxMX05VTV9FKTsKLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9JQUxVX0NNRF9XSURUSF9FLTE6MF0gewotICAgIFNDUjFfSUFMVV9DTURfTk9ORSAgPSAnMCwgICAvLyBJQUxVIGRpc2FibGUKLSAgICBTQ1IxX0lBTFVfQ01EX0FORCwgICAgICAgICAgLy8gb3AxICYgb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9PUiwgICAgICAgICAgIC8vIG9wMSB8IG9wMgotICAgIFNDUjFfSUFMVV9DTURfWE9SLCAgICAgICAgICAvLyBvcDEgXiBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX0FERCwgICAgICAgICAgLy8gb3AxICsgb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TVUIsICAgICAgICAgIC8vIG9wMSAtIG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1VCX0xULCAgICAgICAvLyBvcDEgPCBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1NVQl9MVFUsICAgICAgLy8gb3AxIHU8IG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1VCX0VRLCAgICAgICAvLyBvcDEgPSBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1NVQl9ORSwgICAgICAgLy8gb3AxICE9IG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1VCX0dFLCAgICAgICAvLyBvcDEgPj0gb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TVUJfR0VVLCAgICAgIC8vIG9wMSB1Pj0gb3AyCi0gICAgU0NSMV9JQUxVX0NNRF9TTEwsICAgICAgICAgIC8vIG9wMSA8PCBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1NSTCwgICAgICAgICAgLy8gb3AxID4+IG9wMgotICAgIFNDUjFfSUFMVV9DTURfU1JBICAgICAgICAgICAvLyBvcDEgPj4+IG9wMgotYGlmZGVmIFNDUjFfUlZNX0VYVAotICAgICwKLSAgICBTQ1IxX0lBTFVfQ01EX01VTCwgICAgICAgICAgLy8gbG93KHVuc2lnKG9wMSkgKiB1bnNpZyhvcDIpKQotICAgIFNDUjFfSUFMVV9DTURfTVVMSFUsICAgICAgICAvLyBoaWdoKHVuc2lnKG9wMSkgKiB1bnNpZyhvcDIpKQotICAgIFNDUjFfSUFMVV9DTURfTVVMSFNVLCAgICAgICAvLyBoaWdoKG9wMSAqIHVuc2lnKG9wMikpCi0gICAgU0NSMV9JQUxVX0NNRF9NVUxILCAgICAgICAgIC8vIGhpZ2gob3AxICogb3AyKQotICAgIFNDUjFfSUFMVV9DTURfRElWLCAgICAgICAgICAvLyBvcDEgLyBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX0RJVlUsICAgICAgICAgLy8gb3AxIHUvIG9wMgotICAgIFNDUjFfSUFMVV9DTURfUkVNLCAgICAgICAgICAvLyBvcDEgJSBvcDIKLSAgICBTQ1IxX0lBTFVfQ01EX1JFTVUgICAgICAgICAgLy8gb3AxIHUlIG9wMgotYGVuZGlmICAvLyBTQ1IxX1JWTV9FWFQKLX0gdHlwZV9zY3IxX2lhbHVfY21kX3NlbF9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElBTFUgU1VNMiBvcGVyYW5kcyAocmVzdWx0IGlzIEpVTVAvQlJBTkNIIHRhcmdldCwgTE9BRC9TVE9SRSBhZGRyZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIFNDUjFfU1VNMl9PUF9BTExfTlVNX0UgICAgPSAyOwotbG9jYWxwYXJhbSBTQ1IxX1NVTTJfT1BfV0lEVEhfRSAgICAgID0gJGNsb2cyKFNDUjFfU1VNMl9PUF9BTExfTlVNX0UpOwotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX1NVTTJfT1BfV0lEVEhfRS0xOjBdIHsKLSAgICBTQ1IxX1NVTTJfT1BfUENfSU1NLCAgICAgICAgLy8gb3AxID0gY3Vycl9wYzsgb3AyID0gaW1tIChBVUlQQywgdGFyZ2V0IG5ld19wYyBmb3IgSkFMIGFuZCBicmFuY2hlcykKLSAgICBTQ1IxX1NVTTJfT1BfUkVHX0lNTSAgICAgICAgLy8gb3AxID0gcnMxOyBvcDIgPSBpbW0gKHRhcmdldCBuZXdfcGMgZm9yIEpBTFIsIExPQUQvU1RPUkUgYWRkcmVzcykKLWBpZmRlZiBTQ1IxX1hQUk9QX0VOCi0gICAgLAotICAgIFNDUjFfU1VNMl9PUF9FUlJPUiA9ICd4Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfaWFsdV9zdW0yX29wX3NlbF9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExTVSBjb21tYW5kcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIFNDUjFfTFNVX0NNRF9BTExfTlVNX0UgICA9IDk7Ci1sb2NhbHBhcmFtIFNDUjFfTFNVX0NNRF9XSURUSF9FICAgICA9ICRjbG9nMihTQ1IxX0xTVV9DTURfQUxMX05VTV9FKTsKLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9MU1VfQ01EX1dJRFRIX0UtMTowXSB7Ci0gICAgU0NSMV9MU1VfQ01EX05PTkUgPSAnMCwKLSAgICBTQ1IxX0xTVV9DTURfTEIsCi0gICAgU0NSMV9MU1VfQ01EX0xILAotICAgIFNDUjFfTFNVX0NNRF9MVywKLSAgICBTQ1IxX0xTVV9DTURfTEJVLAotICAgIFNDUjFfTFNVX0NNRF9MSFUsCi0gICAgU0NSMV9MU1VfQ01EX1NCLAotICAgIFNDUjFfTFNVX0NNRF9TSCwKLSAgICBTQ1IxX0xTVV9DTURfU1cKLX0gdHlwZV9zY3IxX2xzdV9jbWRfc2VsX2U7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ1NSIG9wZXJhbmRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWxvY2FscGFyYW0gU0NSMV9DU1JfT1BfQUxMX05VTV9FICAgPSAyOwotbG9jYWxwYXJhbSBTQ1IxX0NTUl9PUF9XSURUSF9FICAgICA9ICRjbG9nMihTQ1IxX0NTUl9PUF9BTExfTlVNX0UpOwotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0NTUl9PUF9XSURUSF9FLTE6MF0gewotICAgIFNDUjFfQ1NSX09QX0lNTSwKLSAgICBTQ1IxX0NTUl9PUF9SRUcKLX0gdHlwZV9zY3IxX2Nzcl9vcF9zZWxfZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDU1IgY29tbWFuZHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBTQ1IxX0NTUl9DTURfQUxMX05VTV9FICAgPSA0OwotbG9jYWxwYXJhbSBTQ1IxX0NTUl9DTURfV0lEVEhfRSAgICAgPSAkY2xvZzIoU0NSMV9DU1JfQ01EX0FMTF9OVU1fRSk7Ci10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfQ1NSX0NNRF9XSURUSF9FLTE6MF0gewotICAgIFNDUjFfQ1NSX0NNRF9OT05FID0gJzAsCi0gICAgU0NSMV9DU1JfQ01EX1dSSVRFLAotICAgIFNDUjFfQ1NSX0NNRF9TRVQsCi0gICAgU0NSMV9DU1JfQ01EX0NMRUFSCi19IHR5cGVfc2NyMV9jc3JfY21kX3NlbF9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1QUkYgcmQgd3JpdGViYWNrIHNvdXJjZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIFNDUjFfUkRfV0JfQUxMX05VTV9FID0gNzsKLWxvY2FscGFyYW0gU0NSMV9SRF9XQl9XSURUSF9FICAgPSAkY2xvZzIoU0NSMV9SRF9XQl9BTExfTlVNX0UpOwotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX1JEX1dCX1dJRFRIX0UtMTowXSB7Ci0gICAgU0NSMV9SRF9XQl9OT05FID0gJzAsCi0gICAgU0NSMV9SRF9XQl9JQUxVLCAgICAgICAgICAgIC8vIElBTFUgbWFpbiByZXN1bHQKLSAgICBTQ1IxX1JEX1dCX1NVTTIsICAgICAgICAgICAgLy8gSUFMVSBTVU0yIHJlc3VsdCAoQVVJUEMpCi0gICAgU0NSMV9SRF9XQl9JTU0sICAgICAgICAgICAgIC8vIExVSQotICAgIFNDUjFfUkRfV0JfSU5DX1BDLCAgICAgICAgICAvLyBKQUwoUikKLSAgICBTQ1IxX1JEX1dCX0xTVSwgICAgICAgICAgICAgLy8gTG9hZCBmcm9tIERNRU0KLSAgICBTQ1IxX1JEX1dCX0NTUiAgICAgICAgICAgICAgLy8gUmVhZCBDU1IKLX0gdHlwZV9zY3IxX3JkX3diX3NlbF9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElEVSB0byBFWFUgZnVsbCBjb21tYW5kIHN0cnVjdHVyZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIFNDUjFfR1BSX0ZJRUxEX1dJRFRIID0gNTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9ydmM7ICAgICAgLy8gdXNlZCB3aXRoIGEgZGlmZmVyZW50IG1lYW5pbmcgZm9yIElGVSBhY2Nlc3MgZmF1bHQgZXhjZXB0aW9uCi0gICAgdHlwZV9zY3IxX2lhbHVfb3Bfc2VsX2UgICAgICAgICAgICAgaWFsdV9vcDsKLSAgICB0eXBlX3NjcjFfaWFsdV9jbWRfc2VsX2UgICAgICAgICAgICBpYWx1X2NtZDsKLSAgICB0eXBlX3NjcjFfaWFsdV9zdW0yX29wX3NlbF9lICAgICAgICBzdW0yX29wOwotICAgIHR5cGVfc2NyMV9sc3VfY21kX3NlbF9lICAgICAgICAgICAgIGxzdV9jbWQ7Ci0gICAgdHlwZV9zY3IxX2Nzcl9vcF9zZWxfZSAgICAgICAgICAgICAgY3NyX29wOwotICAgIHR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgIGNzcl9jbWQ7Ci0gICAgdHlwZV9zY3IxX3JkX3diX3NlbF9lICAgICAgICAgICAgICAgcmRfd2Jfc2VsOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBfcmVxOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9yZXE7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJldF9yZXE7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuY2VpX3JlcTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfcmVxOwotICAgIGxvZ2ljIFtTQ1IxX0dQUl9GSUVMRF9XSURUSC0xOjBdICAgIHJzMV9hZGRyOyAgICAgICAvLyBhbHNvIHVzZWQgYXMgemltbSBmb3IgQ1NSUnhJIGluc3RydWN0aW9ucwotICAgIGxvZ2ljIFtTQ1IxX0dQUl9GSUVMRF9XSURUSC0xOjBdICAgIHJzMl9hZGRyOwotICAgIGxvZ2ljIFtTQ1IxX0dQUl9GSUVMRF9XSURUSC0xOjBdICAgIHJkX2FkZHI7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaW1tOyAgICAgICAgICAgIC8vIHVzZWQgYXMge2Z1bmN0MywgQ1NSIGFkZHJlc3N9IGZvciBDU1IgaW5zdHJ1Y3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZWQgYXMgaW5zdHJ1Y3Rpb24gZmllbGQgZm9yIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uCi0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3JlcTsKLSAgICB0eXBlX3NjcjFfZXhjX2NvZGVfZSAgICAgICAgICAgICAgICBleGNfY29kZTsKLX0gdHlwZV9zY3IxX2V4dV9jbWRfczsKLQotYGVuZGlmIC8vIFNDUjFfUklTQ1ZfSVNBX0RFQ09ESU5HX1NWSAotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zY3Uuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfc2N1LnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxOTM4Ni4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zY3Uuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3NjdS5zdmg+Ci0vLy8gQGJyaWVmICAgICAgU0NVIGhlYWRlciBmaWxlCi0vLy8KLQotYGlmbmRlZiBTQ1IxX0lOQ0xVREVfU0NVX0RFRlMKLWBkZWZpbmUgU0NSMV9JTkNMVURFX1NDVV9ERUZTCi0KLS8vYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gUGFyYW1ldGVycwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSCAgICAgICAgPSAyOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfV0lEVEggICAgICA9IDI7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfREFUQV9XSURUSCAgICAgID0gNDsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFR5cGVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRILTE6MF0gewotICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfV1JJVEUgICAgICAgPSAyJ2gwLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfUkVBRCAgICAgICAgPSAyJ2gxLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfU0VUQklUUyAgICAgPSAyJ2gyLAotICAgIFNDUjFfU0NVX1NZU0NUUkxfT1BfQ0xSQklUUyAgICAgPSAyJ2gzCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotICAgICwKLSAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1hYWCAgICAgICAgID0gJ1gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9vcF9lOwotCi10eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9XSURUSC0xOjBdIHsKLSAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfQ09OVFJPTCAgID0gMidoMCwKLSAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfTU9ERSAgICAgID0gMidoMSwKLSAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RBVFVTICAgID0gMidoMiwKLSAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RJQ0tZICAgID0gMidoMwotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX1hYWCAgICAgICA9ICdYCi1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotfSB0eXBlX3NjcjFfc2N1X3N5c2N0cmxfYWRkcl9lOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljIFtTQ1IxX1NDVV9EUl9TWVNDVFJMX0RBVEFfV0lEVEgtMTowXSAgZGF0YTsKLSAgICBsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRILTE6MF0gIGFkZHI7Ci0gICAgbG9naWMgW1NDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEgtMTowXSAgICBvcDsKLX0gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX2RyX3M7Ci0KLXR5cGVkZWYgZW51bSBpbnQgdW5zaWduZWQgewotICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfQklUX1IgICAgICAgICAgICAgICAgICA9ICdoMCwKLSAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX0JJVF9MICAgICAgICAgICAgICAgICAgPSBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRILTEsCi0gICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX0JJVF9SICAgICAgICAgICAgICAgID0gU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSCwKLSAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfQklUX0wgICAgICAgICAgICAgICAgPSBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRIICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfV0lEVEggLSAxLAotICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfREFUQV9CSVRfUiAgICAgICAgICAgICAgICA9IFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9XSURUSCwKLSAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0RBVEFfQklUX0wgICAgICAgICAgICAgICAgPSBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRIICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfV0lEVEggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfREFUQV9XSURUSCAtIDEKLX0gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX2RyX2JpdHNfZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3J2OwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVzZXQ7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3Jlc2V0OwotfSB0eXBlX3NjcjFfc2N1X3N5c2N0cmxfY29udHJvbF9yZWdfczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3J2OwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3RfYmh2OwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9iaHY7Ci19IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9tb2RlX3JlZ19zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yZXNldDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9yZXNldDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3Jlc2V0OwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yZXNldDsKLX0gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX3N0YXR1c19yZWdfczsKLQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi1gZW5kaWYgLy8gU0NSMV9JTkNMVURFX1NDVV9ERUZTCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zZWFyY2hfbXMxLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3NlYXJjaF9tczEuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmQ4YWM1Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3NlYXJjaF9tczEuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9zZWFyY2hfbXMxLnN2aD4KLS8vLyBAYnJpZWYgICAgICBNb3N0IHNpZ25pZmljYW50IG9uZSBzZWFyY2ggZnVuY3Rpb24KLS8vLwotCi1gaWZuZGVmIFNDUjFfU0VBUkNIX01TMV9TVkgKLWBkZWZpbmUgU0NSMV9TRUFSQ0hfTVMxX1NWSAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgdmQ7Ci0gICAgbG9naWMgICAgICAgaWR4OwotfSB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgIHZkOwotICAgIGxvZ2ljIFs0OjBdICAgICBpZHg7Ci19IHR5cGVfc2NyMV9zZWFyY2hfb25lXzMyX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTGVhZGluZyBaZXJvcyBDb3VudCBGdW5jdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1mdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHNjcjFfbGVhZF96ZXJvc19jbnRfMigKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICBkaW4KLSk7Ci0gICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLWJlZ2luCi0gICAgdG1wLnZkICA9IHxkaW47Ci0gICAgdG1wLmlkeCA9IH5kaW5bMV07Ci0gICAgc2NyMV9sZWFkX3plcm9zX2NudF8yID0gIHRtcDsKLWVuZAotZW5kZnVuY3Rpb24KLQotZnVuY3Rpb24gYXV0b21hdGljIGxvZ2ljIFs0OjBdIHNjcjFfbGVhZF96ZXJvc19jbnRfMzIoCi0gICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgZGluCi0pOwotYmVnaW4KLSAgICBsb2dpYyBbMTU6MF0gICAgc3RhZ2UxX3ZkOwotICAgIGxvZ2ljIFs3OjBdICAgICBzdGFnZTJfdmQ7Ci0gICAgbG9naWMgWzM6MF0gICAgIHN0YWdlM192ZDsKLSAgICBsb2dpYyBbMTowXSAgICAgc3RhZ2U0X3ZkOwotCi0gICAgbG9naWMgICAgICAgICAgIHN0YWdlMV9pZHggWzE1OjBdOwotICAgIGxvZ2ljIFsxOjBdICAgICBzdGFnZTJfaWR4IFs3OjBdOwotICAgIGxvZ2ljIFsyOjBdICAgICBzdGFnZTNfaWR4IFszOjBdOwotICAgIGxvZ2ljIFszOjBdICAgICBzdGFnZTRfaWR4IFsxOjBdOwotICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzMyX3MgdG1wOwotICAgIGxvZ2ljIFs0OjBdICAgICByZXM7Ci0gICAgaW50ZWdlciAgICAgICAgIGk7Ci0KLSAgICAvLyBTdGFnZSAxCi0gICAgZm9yIChpPTA7IGk8MTY7IGk9aSsxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7Ci0gICAgICAgIHRtcCA9IHNjcjFfbGVhZF96ZXJvc19jbnRfMihkaW5bKGkrMSkqMi0xLToyXSk7Ci0gICAgICAgIHN0YWdlMV92ZFtpXSAgPSB0bXAudmQ7Ci0gICAgICAgIHN0YWdlMV9pZHhbaV0gPSB0bXAuaWR4OwotICAgIGVuZAotCi0gICAgLy8gU3RhZ2UgMgotICAgIGZvciAoaT0wOyBpPDg7aT1pKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKLSAgICAgICAgdG1wID0gc2NyMV9sZWFkX3plcm9zX2NudF8yKHN0YWdlMV92ZFsoaSsxKSoyLTEtOjJdKTsKLSAgICAgICAgc3RhZ2UyX3ZkW2ldICA9IHRtcC52ZDsKLSAgICAgICAgc3RhZ2UyX2lkeFtpXSA9ICh0bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTFfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMV9pZHhbMippKzFdfTsKLSAgICBlbmQKLQotICAgIC8vIFN0YWdlIDMKLSAgICBmb3IgKGk9MDsgaTw0OyBpPWkrMSkgYmVnaW4gLy8gY3AuNAotICAgICAgICB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3MgdG1wOwotICAgICAgICB0bXAgPSBzY3IxX2xlYWRfemVyb3NfY250XzIoc3RhZ2UyX3ZkWyhpKzEpKjItMS06Ml0pOwotICAgICAgICBzdGFnZTNfdmRbaV0gID0gdG1wLnZkOwotICAgICAgICBzdGFnZTNfaWR4W2ldID0gKHRtcC5pZHgpID8ge3RtcC5pZHgsIHN0YWdlMl9pZHhbMippXX0gOiB7dG1wLmlkeCwgc3RhZ2UyX2lkeFsyKmkrMV19OwotICAgIGVuZAotCi0gICAgLy8gU3RhZ2UgNAotICAgIGZvciAoaT0wOyBpPDI7IGk9aSsxKSBiZWdpbiAvLyBjcC40Ci0gICAgICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7Ci0gICAgICAgIHRtcCA9IHNjcjFfbGVhZF96ZXJvc19jbnRfMihzdGFnZTNfdmRbKGkrMSkqMi0xLToyXSk7Ci0gICAgICAgIHN0YWdlNF92ZFtpXSAgPSB0bXAudmQ7Ci0gICAgICAgIHN0YWdlNF9pZHhbaV0gPSAodG1wLmlkeCkgPyB7dG1wLmlkeCwgc3RhZ2UzX2lkeFsyKmldfSA6IHt0bXAuaWR4LCBzdGFnZTNfaWR4WzIqaSsxXX07Ci0gICAgZW5kCi0KLSAgICAvLyBTdGFnZSA1Ci0gICAgdG1wLnZkID0gfHN0YWdlNF92ZDsKLSAgICB0bXAuaWR4ID0gKHN0YWdlNF92ZFsxXSkgPyB7MSdiMCwgc3RhZ2U0X2lkeFsxXX0gOiB7MSdiMSwgc3RhZ2U0X2lkeFswXX07Ci0KLSAgICByZXMgPSB0bXAuaWR4OwotCi0gICAgc2NyMV9sZWFkX3plcm9zX2NudF8zMiA9IHJlczsKLWVuZAotZW5kZnVuY3Rpb24gCi0KLWBlbmRpZiAvLyBTQ1IxX1NFQVJDSF9NUzFfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90YXBjLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RhcGMuc3ZoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTZlYTQ0Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RhcGMuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3RhcGMuc3ZoPgotLy8vIEBicmllZiAgICAgIFRBUEMgaGVhZGVyIGZpbGUKLS8vLwotCi1gaWZuZGVmIFNDUjFfSU5DTFVERV9UQVBDX0RFRlMKLWBkZWZpbmUgU0NSMV9JTkNMVURFX1RBUENfREVGUwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBQYXJhbWV0ZXJzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfU1RBVEVfV0lEVEggICAgICAgICAgICA9IDQ7Ci1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSCAgICAgID0gNTsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX0RSX0lEQ09ERV9XSURUSCAgICAgICAgPSAzMjsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX0RSX0JMRF9JRF9XSURUSCAgICAgICAgPSAzMjsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX0RSX0JZUEFTU19XSURUSCAgICAgICAgPSAxOwotLy9sb2NhbHBhcmFtIGJpdCBbU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRILTE6MF0gICBTQ1IxX1RBUF9JRENPREVfUklTQ1ZfU0MgICAgICAgID0gYFNDUjFfVEFQX0lEQ09ERTsKLWxvY2FscGFyYW0gYml0IFtTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgtMTowXSAgIFNDUjFfVEFQX0JMRF9JRF9WQUxVRSAgICAgICAgICAgPSBgU0NSMV9NSU1QSUQ7Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBUeXBlcwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXR5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9UQVBfU1RBVEVfV0lEVEgtMTowXSB7Ci0gICAgU0NSMV9UQVBfU1RBVEVfUkVTRVQsCi0gICAgU0NSMV9UQVBfU1RBVEVfSURMRSwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9TRUxfU0NBTiwKLSAgICBTQ1IxX1RBUF9TVEFURV9EUl9DQVBUVVJFLAotICAgIFNDUjFfVEFQX1NUQVRFX0RSX1NISUZULAotICAgIFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQxLAotICAgIFNDUjFfVEFQX1NUQVRFX0RSX1BBVVNFLAotICAgIFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQyLAotICAgIFNDUjFfVEFQX1NUQVRFX0RSX1VQREFURSwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9TRUxfU0NBTiwKLSAgICBTQ1IxX1RBUF9TVEFURV9JUl9DQVBUVVJFLAotICAgIFNDUjFfVEFQX1NUQVRFX0lSX1NISUZULAotICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxLAotICAgIFNDUjFfVEFQX1NUQVRFX0lSX1BBVVNFLAotICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQyLAotICAgIFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9UQVBfU1RBVEVfWFhYICAgICAgID0gJ1gKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi19IHR5cGVfc2NyMV90YXBfc3RhdGVfZTsKLQotdHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSCAtIDE6MF0gewotICAgIFNDUjFfVEFQX0lOU1RSX0lEQ09ERSAgICAgICAgICAgID0gNSdoMDEsCi0gICAgU0NSMV9UQVBfSU5TVFJfQkxEX0lEICAgICAgICAgICAgPSA1J2gwNCwKLSAgICBTQ1IxX1RBUF9JTlNUUl9TQ1VfQUNDRVNTICAgICAgICA9IDUnaDA5LAotCi0gICAgU0NSMV9UQVBfSU5TVFJfRFRNQ1MgICAgICAgICAgICAgPSA1J2gxMCwKLSAgICBTQ1IxX1RBUF9JTlNUUl9ETUlfQUNDRVNTICAgICAgICA9IDUnaDExLAotCi0gICAgU0NSMV9UQVBfSU5TVFJfQllQQVNTICAgICAgICAgICAgPSA1J2gxRgotYGlmZGVmIFNDUjFfWFBST1BfRU4KLSAgICAsCi0gICAgU0NSMV9UQVBfSU5TVFJfWFhYICAgICAgICAgICAgICAgPSAnWAotYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KLX0gdHlwZV9zY3IxX3RhcF9pbnN0cl9lOwotCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLWBlbmRpZiAvLyBTQ1IxX0lOQ0xVREVfVEFQQ19ERUZTCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90ZHUuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfdGR1LnN2aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzODJjZi4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90ZHUuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdGR1LnN2aD4KLS8vLyBAYnJpZWYgICAgICBUcmlnZ2VyIERlYnVnIE1vZHVsZSBoZWFkZXIKLS8vLwotCi1gaWZuZGVmIFNDUjFfSU5DTFVERV9URFVfREVGUwotYGRlZmluZSBTQ1IxX0lOQ0xVREVfVERVX0RFRlMKLQotLy9gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotYGlmZGVmIFNDUjFfVERVX0VOCi0vL2BpbmNsdWRlICJzY3IxX2Nzci5zdmgiCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotLy9gaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKLWBpbmNsdWRlICJzY3IxX2Nzci5zdmgiCi0KLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01UUklHX05VTSAgICAgICAgICAgICA9IFNDUjFfVERVX1RSSUdfTlVNOwotYGlmZGVmIFNDUjFfVERVX0lDT1VOVF9FTgotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfQUxMVFJJR19OVU0gICAgICAgICAgID0gU0NSMV9URFVfTVRSSUdfTlVNICsgMSdiMTsKLWBlbHNlCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9BTExUUklHX05VTSAgICAgICAgICAgPSBTQ1IxX1REVV9NVFJJR19OVU07Ci1gZW5kaWYKLQotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfQUREUl9XICAgICAgICAgICAgICAgID0gYFNDUjFfWExFTjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0RBVEFfVyAgICAgICAgICAgICAgICA9IGBTQ1IxX1hMRU47Ci0KLS8vIFJlZ2lzdGVyIG1hcAotcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVyAgICAgICAgPSAzOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF0gIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVFNFTEVDVCAgPSAnaDA7Ci1wYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTEgICA9ICdoMTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMiAgID0gJ2gyOwotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF0gIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVElORk8gICAgPSAnaDQ7Ci0KLQotcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX1RTRUxFQ1QgICAgICAgPSBTQ1IxX0NTUl9BRERSX1REVV9NQkFTRSArIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVFNFTEVDVDsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1REVV9UREFUQTEgICAgICAgID0gU0NSMV9DU1JfQUREUl9URFVfTUJBU0UgKyBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMTsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1REVV9UREFUQTIgICAgICAgID0gU0NSMV9DU1JfQUREUl9URFVfTUJBU0UgKyBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMjsKLXBhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1REVV9USU5GTyAgICAgICAgID0gU0NSMV9DU1JfQUREUl9URFVfTUJBU0UgKyBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1RJTkZPOwotCi0vLyBUREFUQTEKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX1REQVRBMV9UWVBFX0hJICAgICAgICA9IGBTQ1IxX1hMRU4tMTsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX1REQVRBMV9UWVBFX0xPICAgICAgICA9IGBTQ1IxX1hMRU4tNDsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX1REQVRBMV9ETU9ERSAgICAgICAgICA9IGBTQ1IxX1hMRU4tNTsKLQotLy8gVERBVEExOiBjb25zdGFudCBiaXRzIHZhbHVlcwotcGFyYW1ldGVyIGJpdCAgICAgICAgICAgU0NSMV9URFVfVERBVEExX0RNT0RFX1ZBTCAgICAgID0gMSdiMDsKLQotLy8gTUNPTlRST0w6IGJpdHMgbnVtYmVyCi1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9NQVNLTUFYX0hJICAgPSBgU0NSMV9YTEVOLTY7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9NQVNLTUFYX0xPICAgPSBgU0NSMV9YTEVOLTExOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfUkVTRVJWRURCX0hJID0gYFNDUjFfWExFTi0xMjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1JFU0VSVkVEQl9MTyA9IDIxOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfSElUICAgICAgICAgID0gMjA7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9TRUxFQ1QgICAgICAgPSAxOTsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1RJTUlORyAgICAgICA9IDE4OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfQUNUSU9OX0hJICAgID0gMTc7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9BQ1RJT05fTE8gICAgPSAxMjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX0NIQUlOICAgICAgICA9IDExOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfTUFUQ0hfSEkgICAgID0gMTA7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9NQVRDSF9MTyAgICAgPSA3OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfTSAgICAgICAgICAgID0gNjsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1JFU0VSVkVEQSAgICA9IDU7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9TICAgICAgICAgICAgPSA0OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfVSAgICAgICAgICAgID0gMzsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX0VYRUNVVEUgICAgICA9IDI7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9TVE9SRSAgICAgICAgPSAxOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfTE9BRCAgICAgICAgID0gMDsKLQotLy8gTUNPTlRST0w6IGNvbnN0YW50IGJpdHMgdmFsdWVzCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX1REVV9UREFUQTFfVFlQRV9ISS1TQ1IxX1REVV9UREFUQTFfVFlQRV9MTzowXQotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfVFlQRV9WQUwgICAgICAgICAgID0gMidkMjsKLQotcGFyYW1ldGVyIGJpdCAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfU0VMRUNUX1ZBTCAgICAgICAgID0gMSdiMDsKLXBhcmFtZXRlciBiaXQgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX1RJTUlOR19WQUwgICAgICAgICA9IDEnYjA7Ci0KLXBhcmFtZXRlciBiaXQgW1NDUjFfVERVX01DT05UUk9MX01BU0tNQVhfSEktU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9MTzowXQotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9WQUwgICAgICAgID0gMSdiMDsKLQotcGFyYW1ldGVyIGJpdCAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfUkVTRVJWRURBX1ZBTCAgICAgID0gMSdiMDsKLQotLy8gSUNPVU5UOiBiaXRzIG51bWJlcgotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX0RNT0RFICAgICAgICAgID0gYFNDUjFfWExFTi01OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQl9ISSAgID0gYFNDUjFfWExFTi02OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQl9MTyAgID0gMjU7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfSElUICAgICAgICAgICAgPSAyNDsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9DT1VOVF9ISSAgICAgICA9IDIzOwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX0NPVU5UX0xPICAgICAgID0gMTA7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfTSAgICAgICAgICAgICAgPSA5OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQSAgICAgID0gODsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9TICAgICAgICAgICAgICA9IDc7Ci1wYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfVSAgICAgICAgICAgICAgPSA2OwotcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX0FDVElPTl9ISSAgICAgID0gNTsKLXBhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9BQ1RJT05fTE8gICAgICA9IDA7Ci0KLS8vIElDT1VOVDogY29uc3RhbnQgYml0cyB2YWx1ZXMKLXBhcmFtZXRlciBiaXQgW1NDUjFfVERVX1REQVRBMV9UWVBFX0hJLVNDUjFfVERVX1REQVRBMV9UWVBFX0xPOjBdCi0gICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9JQ09VTlRfVFlQRV9WQUwgICAgICAgICAgICAgPSAyJ2QzOwotCi1wYXJhbWV0ZXIgYml0IFtTQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURCX0hJLVNDUjFfVERVX0lDT1VOVF9SRVNFUlZFREJfTE86MF0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX0lDT1VOVF9SRVNFUlZFREJfVkFMICAgICAgICA9IDEnYjA7Ci0KLXBhcmFtZXRlciBiaXQgICAgICAgICAgIFNDUjFfVERVX0lDT1VOVF9SRVNFUlZFREFfVkFMICAgICAgICA9IDEnYjA7Ci0KLS8vIENQVSBwaXBlbGluZSBtb25pdG9ycwotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXE7Ci0gICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcjsKLX0gdHlwZV9zY3IxX2Jya21faW5zdHJfbW9uX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmQ7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTsKLSAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyOwotfSB0eXBlX3NjcjFfYnJrbV9sc3VfbW9uX3M7Ci0KLWBlbmRpZiAvLyBTQ1IxX1REVV9FTgotCi1gZW5kaWYgLy8gU0NSMV9JTkNMVURFX1REVV9ERUZTCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV93Yi5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV93Yi5zdmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Zjk5ZDYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfd2Iuc3ZoCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgeWlmaXZlIFdpc2hib25lIGRlZmluZSBmb3Igc3ludGFjb3JlICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHlpZml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgaW50ZWdyYXRlZCB3aXNoYm9uZSBpL2YgdG8gU3ludGFjb3JlLHNjcjEgY29yZSAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICB2MDogICAgSnVuZSA3LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgIHdpc2hib25lIGRlZmluZSBhZGRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCi0vLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCi0vLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi0vLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi0vLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCi0vLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi0vLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi0vLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCi0vLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCi0vLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi0vLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCi0vLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgT3JnaW5hbCBvd25lciBEZXRhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfYWhiLnN2aD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8gQGJyaWVmICAgICAgV0IgaGVhZGVyIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotYGlmbmRlZiBTQ1IxX1dCX1NWSAotYGRlZmluZSBTQ1IxX1dCX1NWSAotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotcGFyYW1ldGVyIFNDUjFfV0JfV0lEVEggID0gMzI7Ci0KLS8vIEVuY29kaW5nIGZvciBEQVRBIFNJWkUKLXBhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0RTSVpFXzhCICAgID0gMydiMDAwOwotcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfRFNJWkVfMTZCICAgPSAzJ2IwMDE7Ci1wYXJhbWV0ZXIgbG9naWMgWzI6MF0gU0NSMV9EU0laRV8zMkIgICA9IDMnYjAxMDsKLQotYGVuZGlmIC8vIFNDUjFfV0JfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9haGIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9haGIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMDY2NjAuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fYWhiLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNDY2ICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfZG1lbV9haGIuc3Y+Ci0vLy8gQGJyaWVmICAgICAgRGF0YSBtZW1vcnkgQUhCIGJyaWRnZQotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FoYi5zdmgiCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi0KLW1vZHVsZSBzY3IxX2RtZW1fYWhiICgKLSAgICAvLyBDb250cm9sIFNpZ25hbHMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKLQotICAgIC8vIENvcmUgSW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX2FjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXEsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIGRtZW1fY21kLAotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICBkbWVtX3dpZHRoLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBkbWVtX2FkZHIsCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGRtZW1fd2RhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGRtZW1fcmRhdGEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGRtZW1fcmVzcCwKLQotICAgIC8vIEFIQiBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgaHByb3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGhidXJzdCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzI6MF0gICAgICAgICAgICAgICAgICAgaHNpemUsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGh0cmFucywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaG1hc3Rsb2NrLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBoYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdyaXRlLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBod2RhdGEsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHJkYXRhLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVzcAotCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIFBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmbmRlZiBTQ1IxX0RNRU1fQUhCX09VVF9CUAotbG9jYWxwYXJhbSAgU0NSMV9GSUZPX1dJRFRIID0gMjsKLWxvY2FscGFyYW0gIFNDUjFfRklGT19DTlRfV0lEVEggPSAkY2xvZzIoU0NSMV9GSUZPX1dJRFRIKzEpOwotYGVuZGlmIC8vIFNDUjFfRE1FTV9BSEJfT1VUX0JQCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZSBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfRlNNX0FERFIgPSAxJ2IwLAotICAgIFNDUjFfRlNNX0RBVEEgPSAxJ2IxLAotICAgIFNDUjFfRlNNX0VSUiAgPSAxJ2J4Ci19IHR5cGVfc2NyMV9mc21fZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3cml0ZTsKLSAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhhZGRyOwotICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHdkYXRhOwotfSB0eXBlX3NjcjFfcmVxX2ZpZm9fczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3cml0ZTsKLSAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKLSAgICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGhhZGRyOwotICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHdkYXRhOwotfSB0eXBlX3NjcjFfZGF0YV9maWZvX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVzcDsKLSAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKLSAgICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGhhZGRyOwotICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHJkYXRhOwotfSB0eXBlX3NjcjFfcmVzcF9maWZvX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgZnVuY3Rpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWZ1bmN0aW9uIGF1dG9tYXRpYyBsb2dpYyAgIFsyOjBdIHNjcjFfY29udl9tZW0yYWhiX3dpZHRoICgKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICBkbWVtX3dpZHRoCi0pOwotICAgIGxvZ2ljICAgWzI6MF0gICB0bXA7Ci1iZWdpbgotICAgIGNhc2UgKGRtZW1fd2lkdGgpCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gU0NSMV9IU0laRV84QjsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IFNDUjFfSFNJWkVfMTZCOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfV09SRCA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBTQ1IxX0hTSVpFXzMyQjsKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gU0NSMV9IU0laRV9FUlI7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLSAgICBzY3IxX2NvbnZfbWVtMmFoYl93aWR0aCA9ICB0bXA7IC8vIGNwLjExCi1lbmQKLWVuZGZ1bmN0aW9uCi0KLWZ1bmN0aW9uIGF1dG9tYXRpYyBsb2dpY1tTQ1IxX0FIQl9XSURUSC0xOjBdIHNjcjFfY29udl9tZW0yYWhiX3dkYXRhICgKLSAgICBpbnB1dCAgIGxvZ2ljICAgWzE6MF0gICAgICAgICAgICAgICAgICAgZG1lbV9hZGRyLAotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICBkbWVtX3dpZHRoLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBkbWVtX3dkYXRhCi0pOwotICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gIHRtcDsKLWJlZ2luCi0gICAgdG1wID0gJ3g7Ci0gICAgY2FzZSAoZG1lbV93aWR0aCkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChkbWVtX2FkZHIpCi0gICAgICAgICAgICAgICAgMidiMDAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbNzowXSAgID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIDInYjAxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzE1OjhdICA9IGRtZW1fd2RhdGFbNzowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAyJ2IxMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRtcFsyMzoxNl0gPSBkbWVtX3dkYXRhWzc6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgMidiMTEgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMzE6MjRdID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoZG1lbV9hZGRyWzFdKQotICAgICAgICAgICAgICAgIDEnYjAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMTU6MF0gID0gZG1lbV93ZGF0YVsxNTowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAxJ2IxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzMxOjE2XSA9IGRtZW1fd2RhdGFbMTU6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IGRtZW1fd2RhdGE7Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotICAgIHNjcjFfY29udl9tZW0yYWhiX3dkYXRhID0gdG1wOwotZW5kCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiBhdXRvbWF0aWMgbG9naWNbU0NSMV9BSEJfV0lEVEgtMTowXSBzY3IxX2NvbnZfYWhiMm1lbV9yZGF0YSAoCi0gICAgaW5wdXQgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgaHdpZHRoLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgIGhhZGRyLAotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfQUhCX1dJRFRILTE6MF0gIGhyZGF0YQotKTsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICB0bXA7Ci1iZWdpbgotICAgIHRtcCA9ICd4OwotICAgIGNhc2UgKGh3aWR0aCkKLSAgICAgICAgU0NSMV9IU0laRV84QiA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChoYWRkcikKLSAgICAgICAgICAgICAgICAyJ2IwMCA6IHRtcFs3OjBdID0gaHJkYXRhWzc6MF07Ci0gICAgICAgICAgICAgICAgMidiMDEgOiB0bXBbNzowXSA9IGhyZGF0YVsxNTo4XTsKLSAgICAgICAgICAgICAgICAyJ2IxMCA6IHRtcFs3OjBdID0gaHJkYXRhWzIzOjE2XTsKLSAgICAgICAgICAgICAgICAyJ2IxMSA6IHRtcFs3OjBdID0gaHJkYXRhWzMxOjI0XTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfSFNJWkVfMTZCIDogYmVnaW4KLSAgICAgICAgICAgIGNhc2UgKGhhZGRyWzFdKQotICAgICAgICAgICAgICAgIDEnYjAgOiB0bXBbMTU6MF0gPSBocmRhdGFbMTU6MF07Ci0gICAgICAgICAgICAgICAgMSdiMSA6IHRtcFsxNTowXSA9IGhyZGF0YVszMToxNl07Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0hTSVpFXzMyQiA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBocmRhdGE7Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotICAgIHNjcjFfY29udl9haGIybWVtX3JkYXRhID0gdG1wOwotZW5kCi1lbmRmdW5jdGlvbgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlX3NjcjFfZnNtX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fcmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3dyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb191cDsKLWBpZmRlZiBTQ1IxX0RNRU1fQUhCX09VVF9CUAotdHlwZV9zY3IxX3JlcV9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19uZXc7Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3I7Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyBbMDowXSAgICAgICAgICAgICAgICAgIHJlcV9maWZvOwotYGVsc2UgLy8gU0NSMV9ETUVNX0FIQl9PVVRfQlAKLXR5cGVfc2NyMV9yZXFfZmlmb19zIFswOlNDUjFfRklGT19XSURUSC0xXSAgcmVxX2ZpZm87Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyBbMDpTQ1IxX0ZJRk9fV0lEVEgtMV0gIHJlcV9maWZvX25ldzsKLWxvZ2ljICAgICAgIFtTQ1IxX0ZJRk9fQ05UX1dJRFRILTE6MF0gICAgICAgcmVxX2ZpZm9fY250OwotbG9naWMgICAgICAgW1NDUjFfRklGT19DTlRfV0lEVEgtMTowXSAgICAgICByZXFfZmlmb19jbnRfbmV3OwotYGVuZGlmIC8vIFNDUjFfRE1FTV9BSEJfT1VUX0JQCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2VtcHR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19mdWxsOwotCi10eXBlX3NjcjFfZGF0YV9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZmlmbzsKLXR5cGVfc2NyMV9yZXNwX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm9faHJlYWR5OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBDb3JlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBkbWVtX3JlcV9hY2sgPSB+cmVxX2ZpZm9fZnVsbDsKLWFzc2lnbiByZXFfZmlmb193ciAgPSB+cmVxX2ZpZm9fZnVsbCAmIGRtZW1fcmVxOwotCi1hc3NpZ24gZG1lbV9yZGF0YSA9IHNjcjFfY29udl9haGIybWVtX3JkYXRhKHJlc3BfZmlmby5od2lkdGgsIHJlc3BfZmlmby5oYWRkciwgcmVzcF9maWZvLmhyZGF0YSk7Ci0KLWFzc2lnbiBkbWVtX3Jlc3AgPSAocmVzcF9maWZvX2hyZWFkeSkKLSAgICAgICAgICAgICAgICAgICAgPyAocmVzcF9maWZvLmhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9NRU1fUkVTUF9SRFlfT0sKLSAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9SRFlfRVIKLSAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9SRVNQX05PVFJEWSA7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUkVRX0ZJRk8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfRE1FTV9BSEJfT1VUX0JQCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfZmlmb19mdWxsIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKH5yZXFfZmlmb19mdWxsKSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSBkbWVtX3JlcSAmIH5yZXFfZmlmb19yZDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gfnJlcV9maWZvX3JkOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYXNzaWduIHJlcV9maWZvX2VtcHR5ID0gfihyZXFfZmlmb19mdWxsIHwgZG1lbV9yZXEpOwotCi1hc3NpZ24gcmVxX2ZpZm9fdXAgPSB+cmVxX2ZpZm9fcmQgJiByZXFfZmlmb193cjsKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChyZXFfZmlmb191cCkgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fciA8PSByZXFfZmlmb19uZXc7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHJlcV9maWZvX25ldy5od3JpdGUgPSBkbWVtX3JlcSA/IChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpICAgICAgIDogMSdiMDsKLWFzc2lnbiByZXFfZmlmb19uZXcuaHdpZHRoID0gZG1lbV9yZXEgPyBzY3IxX2NvbnZfbWVtMmFoYl93aWR0aChkbWVtX3dpZHRoKSA6ICcwOwotYXNzaWduIHJlcV9maWZvX25ldy5oYWRkciAgPSBkbWVtX3JlcSA/IGRtZW1fYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzA7Ci1hc3NpZ24gcmVxX2ZpZm9fbmV3Lmh3ZGF0YSA9IChkbWVtX3JlcSAmIChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNjcjFfY29udl9tZW0yYWhiX3dkYXRhKGRtZW1fYWRkclsxOjBdLCBkbWVtX3dpZHRoLCBkbWVtX3dkYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwOwotYXNzaWduIHJlcV9maWZvWzBdID0gKHJlcV9maWZvX2Z1bGwpID8gcmVxX2ZpZm9fcjogcmVxX2ZpZm9fbmV3OwotCi1gZWxzZSAvLyBTQ1IxX0RNRU1fQUhCX09VVF9CUAotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICByZXFfZmlmb191cCAgICAgID0gMSdiMDsKLSAgICByZXFfZmlmb19jbnRfbmV3ID0gcmVxX2ZpZm9fY250OwotICAgIHJlcV9maWZvX25ldyAgICAgPSByZXFfZmlmbzsKLSAgICBjYXNlICh7cmVxX2ZpZm9fcmQsIHJlcV9maWZvX3dyfSkKLSAgICAgICAgMidiMDAgOiBiZWdpbgotICAgICAgICAgICAgLy8gbm90aGluZyB0b2RvCi0gICAgICAgIGVuZAotICAgICAgICAyJ2IwMTogYmVnaW4KLSAgICAgICAgICAgIC8vIEZJRk8gd3JpdGUKLSAgICAgICAgICAgIHJlcV9maWZvX3VwID0gMSdiMTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1tyZXFfZmlmb19jbnRdLmh3cml0ZSA9IChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3W3JlcV9maWZvX2NudF0uaHdpZHRoID0gc2NyMV9jb252X21lbTJhaGJfd2lkdGgoZG1lbV93aWR0aCk7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbcmVxX2ZpZm9fY250XS5oYWRkciAgPSBkbWVtX2FkZHI7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbcmVxX2ZpZm9fY250XS5od2RhdGEgPSBzY3IxX2NvbnZfbWVtMmFoYl93ZGF0YShkbWVtX2FkZHJbMTowXSwgZG1lbV93aWR0aCwgZG1lbV93ZGF0YSk7Ci0gICAgICAgICAgICByZXFfZmlmb19jbnRfbmV3ID0gcmVxX2ZpZm9fY250ICsgMSdiMTsKLSAgICAgICAgZW5kCi0gICAgICAgIDInYjEwIDogYmVnaW4KLSAgICAgICAgICAgIC8vIEZJRk8gcmVhZAotICAgICAgICAgICAgcmVxX2ZpZm9fdXAgPSAxJ2IxOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdID0gcmVxX2ZpZm9fbmV3WzFdOwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzFdLmh3cml0ZSA9IDEnYjA7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMV0uaHdpZHRoID0gU0NSMV9IU0laRV8zMkI7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMV0uaGFkZHIgID0gJ3g7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMV0uaHdkYXRhID0gJ3g7Ci0gICAgICAgICAgICByZXFfZmlmb19jbnRfbmV3ID0gcmVxX2ZpZm9fY250IC0gMSdiMTsKLSAgICAgICAgZW5kCi0gICAgICAgIDInYjExIDogYmVnaW4KLSAgICAgICAgICAgIC8vIFJlYWQgYW5kIFdyaXRlIEZJRk8uIEl0IGlzIHBvc3NpYmxlIG9ubHkgd2hlbiBmaWZvX2NudCA9IDEKLSAgICAgICAgICAgIHJlcV9maWZvX3VwID0gMSdiMTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1swXS5od3JpdGUgPSAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSKTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1swXS5od2lkdGggPSBzY3IxX2NvbnZfbWVtMmFoYl93aWR0aChkbWVtX3dpZHRoKTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1swXS5oYWRkciAgPSBkbWVtX2FkZHI7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbMF0uaHdkYXRhID0gc2NyMV9jb252X21lbTJhaGJfd2RhdGEoZG1lbV9hZGRyWzE6MF0sIGRtZW1fd2lkdGgsIGRtZW1fd2RhdGEpOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICByZXFfZmlmb191cCAgICAgID0gJ3g7Ci0gICAgICAgICAgICByZXFfZmlmb19jbnRfbmV3ID0gJ3g7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXcgICAgID0gJ3g7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfZmlmb19jbnQgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fY250IDw9IHJlcV9maWZvX2NudF9uZXc7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi1hc3NpZ24gcmVxX2ZpZm9fZnVsbCAgPSAocmVxX2ZpZm9fY250ID09IFNDUjFfRklGT19XSURUSCk7Ci1hc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHxyZXFfZmlmb19jbnQpOwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAocmVxX2ZpZm9fdXApIGJlZ2luCi0gICAgICAgIHJlcV9maWZvIDw9IHJlcV9maWZvX25ldzsKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfRE1FTV9BSEJfT1VUX0JQCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChmc20pCi0gICAgICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBmc20gPD0gKHJlcV9maWZvX2VtcHR5KSA/IFNDUjFfRlNNX0FERFIgOiBTQ1IxX0ZTTV9EQVRBOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBpZiAoaHJlc3AgPT0gU0NSMV9IUkVTUF9PS0FZKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IChyZXFfZmlmb19lbXB0eSkgPyBTQ1IxX0ZTTV9BRERSIDogU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0VSUjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICByZXFfZmlmb19yZCA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgcmVxX2ZpZm9fcmQgPSB+cmVxX2ZpZm9fZW1wdHk7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eSAmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX3JkID0gMSdieDsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRklGTyBkYXRhCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGNhc2UgKGZzbSkKLSAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCi0gICAgICAgICAgICBpZiAofnJlcV9maWZvX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgICAgIGRhdGFfZmlmby5od3JpdGUgPD0gcmVxX2ZpZm9bMF0uaHdyaXRlOwotICAgICAgICAgICAgICAgIGRhdGFfZmlmby5od2lkdGggPD0gcmVxX2ZpZm9bMF0uaHdpZHRoOwotICAgICAgICAgICAgICAgIGRhdGFfZmlmby5oYWRkciAgPD0gcmVxX2ZpZm9bMF0uaGFkZHJbMTowXTsKLSAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdkYXRhIDw9IHJlcV9maWZvWzBdLmh3ZGF0YTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdyaXRlIDw9IHJlcV9maWZvWzBdLmh3cml0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZmlmby5od2lkdGggPD0gcmVxX2ZpZm9bMF0uaHdpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9maWZvLmhhZGRyICA8PSByZXFfZmlmb1swXS5oYWRkclsxOjBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9maWZvLmh3ZGF0YSA8PSByZXFfZmlmb1swXS5od2RhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRklGTyByZXNwb25zZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZkZWYgU0NSMV9ETUVNX0FIQl9JTl9CUAotYXNzaWduIHJlc3BfZmlmb19ocmVhZHkgPSAoZnNtID09IFNDUjFfRlNNX0RBVEEpID8gaHJlYWR5IDogMSdiMDsKLWFzc2lnbiByZXNwX2ZpZm8uaHJlc3AgID0gaHJlc3A7Ci1hc3NpZ24gcmVzcF9maWZvLmh3aWR0aCA9IGRhdGFfZmlmby5od2lkdGg7Ci1hc3NpZ24gcmVzcF9maWZvLmhhZGRyICA9IGRhdGFfZmlmby5oYWRkcjsKLWFzc2lnbiByZXNwX2ZpZm8uaHJkYXRhID0gaHJkYXRhOwotYGVsc2UgLy8gU0NSMV9ETUVNX0FIQl9JTl9CUAotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVzcF9maWZvX2hyZWFkeSA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmb19ocmVhZHkgPD0gKGZzbSA9PSBTQ1IxX0ZTTV9EQVRBKSA/IGhyZWFkeSA6IDEnYjA7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGhyZWFkeSAmIChmc20gPT0gU0NSMV9GU01fREFUQSkpIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmby5ocmVzcCAgPD0gaHJlc3A7Ci0gICAgICAgIHJlc3BfZmlmby5od2lkdGggPD0gZGF0YV9maWZvLmh3aWR0aDsKLSAgICAgICAgcmVzcF9maWZvLmhhZGRyICA8PSBkYXRhX2ZpZm8uaGFkZHI7Ci0gICAgICAgIHJlc3BfZmlmby5ocmRhdGEgPD0gaHJkYXRhOwotICAgIGVuZAotZW5kCi1gZW5kaWYgLy8gU0NSMV9ETUVNX0FIQl9JTl9CUAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBBSEIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIGhwcm90W1NDUjFfSFBST1RfREFUQV0gID0gMSdiMTsKLWFzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX1BSVl0gICA9IDEnYjA7Ci1hc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9CVUZdICAgPSAxJ2IwOwotYXNzaWduIGhwcm90W1NDUjFfSFBST1RfQ0FDSEVdID0gMSdiMDsKLQotYXNzaWduIGhidXJzdCAgICAgICA9IFNDUjFfSEJVUlNUX1NJTkdMRTsKLWFzc2lnbiBoc2l6ZSAgICAgICAgPSByZXFfZmlmb1swXS5od2lkdGg7Ci1hc3NpZ24gaG1hc3Rsb2NrICAgID0gMSdiMDsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBodHJhbnMgPSBTQ1IxX0hUUkFOU19JRExFOwotICAgIGNhc2UgKGZzbSkKLSAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCi0gICAgICAgICAgICBpZiAofnJlcV9maWZvX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX05PTlNFUTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBodHJhbnMgPSBTQ1IxX0hUUkFOU19OT05TRVE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX0VSUjsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiBoYWRkciAgPSByZXFfZmlmb1swXS5oYWRkcjsKLWFzc2lnbiBod3JpdGUgPSByZXFfZmlmb1swXS5od3JpdGU7Ci1hc3NpZ24gaHdkYXRhID0gZGF0YV9maWZvLmh3ZGF0YTsKLQotZW5kbW9kdWxlIDogc2NyMV9kbWVtX2FoYgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fcm91dGVyLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fcm91dGVyLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmVmNzI5Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3JvdXRlci5zdgorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2RtZW1fcm91dGVyLnN2PgotLy8vIEBicmllZiAgICAgIERhdGEgbWVtb3J5IHJvdXRlcgotLy8vCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotbW9kdWxlIHNjcjFfZG1lbV9yb3V0ZXIKLSMoCi0gICAgcGFyYW1ldGVyIFNDUjFfUE9SVDFfQUREUl9NQVNLICAgICAgPSBgU0NSMV9ETUVNX0FXSURUSCdoRkZGRjAwMDAsCi0gICAgcGFyYW1ldGVyIFNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgPSBgU0NSMV9ETUVNX0FXSURUSCdoMDAwMTAwMDAsCi0gICAgcGFyYW1ldGVyIFNDUjFfUE9SVDJfQUREUl9NQVNLICAgICAgPSBgU0NSMV9ETUVNX0FXSURUSCdoRkZGRjAwMDAsCi0gICAgcGFyYW1ldGVyIFNDUjFfUE9SVDJfQUREUl9QQVRURVJOICAgPSBgU0NSMV9ETUVNX0FXSURUSCdoMDAwMjAwMDAKLSkKLSgKLSAgICAvLyBDb250cm9sIHNpZ25hbHMKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKLQotICAgIC8vIENvcmUgaW50ZXJmYWNlCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX2FjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXEsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIGRtZW1fY21kLAotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICBkbWVtX3dpZHRoLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBkbWVtX2FkZHIsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIGRtZW1fd2RhdGEsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIGRtZW1fcmRhdGEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGRtZW1fcmVzcCwKLQotICAgIC8vIFBPUlQwIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MF9yZXFfYWNrLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MF9yZXEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIHBvcnQwX2NtZCwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgcG9ydDBfd2lkdGgsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIHBvcnQwX2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHBvcnQwX3dkYXRhLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBwb3J0MF9yZGF0YSwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgcG9ydDBfcmVzcCwKLQotICAgIC8vIFBPUlQxIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXFfYWNrLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIHBvcnQxX2NtZCwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgcG9ydDFfd2lkdGgsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIHBvcnQxX2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHBvcnQxX3dkYXRhLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBwb3J0MV9yZGF0YSwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgcG9ydDFfcmVzcCwKLQotICAgIC8vIFBPUlQyIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ml9yZXFfYWNrLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ml9yZXEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIHBvcnQyX2NtZCwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgcG9ydDJfd2lkdGgsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIHBvcnQyX2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHBvcnQyX3dkYXRhLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBwb3J0Ml9yZGF0YSwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgcG9ydDJfcmVzcAotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfRlNNX0FERFIsCi0gICAgU0NSMV9GU01fREFUQQotfSB0eXBlX3NjcjFfZnNtX2U7Ci0KLXR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7Ci0gICAgU0NSMV9TRUxfUE9SVDAsCi0gICAgU0NSMV9TRUxfUE9SVDEsCi0gICAgU0NSMV9TRUxfUE9SVDIKLX0gdHlwZV9zY3IxX3NlbF9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlX3NjcjFfZnNtX2UgICAgICAgICAgICAgICAgIGZzbTsKLXR5cGVfc2NyMV9zZWxfZSAgICAgICAgICAgICAgICAgcG9ydF9zZWw7Ci10eXBlX3NjcjFfc2VsX2UgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3I7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgIHNlbF9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgc2VsX3Jlc3A7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbF9yZXFfYWNrOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHBvcnRfc2VsICAgID0gU0NSMV9TRUxfUE9SVDA7Ci0gICAgaWYgKChkbWVtX2FkZHIgJiBTQ1IxX1BPUlQxX0FERFJfTUFTSykgPT0gU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4pIGJlZ2luCi0gICAgICAgIHBvcnRfc2VsICAgID0gU0NSMV9TRUxfUE9SVDE7Ci0gICAgZW5kIGVsc2UgaWYgKChkbWVtX2FkZHIgJiBTQ1IxX1BPUlQyX0FERFJfTUFTSykgPT0gU0NSMV9QT1JUMl9BRERSX1BBVFRFUk4pIGJlZ2luCi0gICAgICAgIHBvcnRfc2VsICAgID0gU0NSMV9TRUxfUE9SVDI7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZnNtICAgICAgICAgPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgcG9ydF9zZWxfciAgPD0gU0NSMV9TRUxfUE9SVDA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgY2FzZSAoZnNtKQotICAgICAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgaWYgKGRtZW1fcmVxICYgc2VsX3JlcV9hY2spIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGZzbSAgICAgICAgIDw9IFNDUjFfRlNNX0RBVEE7Ci0gICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3IgIDw9IHBvcnRfc2VsOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KLSAgICAgICAgICAgICAgICBjYXNlIChzZWxfcmVzcCkKLSAgICAgICAgICAgICAgICAgICAgU0NSMV9NRU1fUkVTUF9SRFlfT0sgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtZW1fcmVxICYgc2VsX3JlcV9hY2spIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNtICAgICAgICAgPD0gU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X3NlbF9yICA8PSBwb3J0X3NlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX0VSIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZGNhc2UKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kY2FzZQotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaWYgKChmc20gPT0gU0NSMV9GU01fQUREUikgfCAoKGZzbSA9PSBTQ1IxX0ZTTV9EQVRBKSAmIChzZWxfcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykpKSBiZWdpbgotICAgICAgICBjYXNlIChwb3J0X3NlbCkKLSAgICAgICAgICAgIFNDUjFfU0VMX1BPUlQwICA6IHNlbF9yZXFfYWNrICAgPSBwb3J0MF9yZXFfYWNrOwotICAgICAgICAgICAgU0NSMV9TRUxfUE9SVDEgIDogc2VsX3JlcV9hY2sgICA9IHBvcnQxX3JlcV9hY2s7Ci0gICAgICAgICAgICBTQ1IxX1NFTF9QT1JUMiAgOiBzZWxfcmVxX2FjayAgID0gcG9ydDJfcmVxX2FjazsKLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICA6IHNlbF9yZXFfYWNrICAgPSAxJ2IwOwotICAgICAgICBlbmRjYXNlCi0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgc2VsX3JlcV9hY2sgPSAxJ2IwOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgY2FzZSAocG9ydF9zZWxfcikKLSAgICAgICAgU0NSMV9TRUxfUE9SVDAgIDogYmVnaW4KLSAgICAgICAgICAgIHNlbF9yZGF0YSAgID0gcG9ydDBfcmRhdGE7Ci0gICAgICAgICAgICBzZWxfcmVzcCAgICA9IHBvcnQwX3Jlc3A7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX1NFTF9QT1JUMSAgOiBiZWdpbgotICAgICAgICAgICAgc2VsX3JkYXRhICAgPSBwb3J0MV9yZGF0YTsKLSAgICAgICAgICAgIHNlbF9yZXNwICAgID0gcG9ydDFfcmVzcDsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfU0VMX1BPUlQyICA6IGJlZ2luCi0gICAgICAgICAgICBzZWxfcmRhdGEgICA9IHBvcnQyX3JkYXRhOwotICAgICAgICAgICAgc2VsX3Jlc3AgICAgPSBwb3J0Ml9yZXNwOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCAgICAgICAgIDogYmVnaW4KLSAgICAgICAgICAgIHNlbF9yZGF0YSAgID0gJzA7Ci0gICAgICAgICAgICBzZWxfcmVzcCAgICA9IFNDUjFfTUVNX1JFU1BfUkRZX0VSOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gY29yZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gZG1lbV9yZXFfYWNrID0gc2VsX3JlcV9hY2s7Ci1hc3NpZ24gZG1lbV9yZGF0YSAgID0gc2VsX3JkYXRhOwotYXNzaWduIGRtZW1fcmVzcCAgICA9IHNlbF9yZXNwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBQT1JUMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHBvcnQwX3JlcSA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIHBvcnQwX3JlcSA9IGRtZW1fcmVxICYgKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQwKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBiZWdpbgotICAgICAgICAgICAgICAgIHBvcnQwX3JlcSA9IGRtZW1fcmVxICYgKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQwKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotYXNzaWduIHBvcnQwX2NtZCAgICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMCkgPyBkbWVtX2NtZCAgIDogU0NSMV9NRU1fQ01EX0VSUk9SOwotYXNzaWduIHBvcnQwX3dpZHRoICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMCkgPyBkbWVtX3dpZHRoIDogU0NSMV9NRU1fV0lEVEhfRVJST1I7Ci1hc3NpZ24gcG9ydDBfYWRkciAgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQwKSA/IGRtZW1fYWRkciAgOiAneDsKLWFzc2lnbiBwb3J0MF93ZGF0YSAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDApID8gZG1lbV93ZGF0YSA6ICd4OwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotYXNzaWduIHBvcnQwX2NtZCAgICA9IGRtZW1fY21kICA7Ci1hc3NpZ24gcG9ydDBfd2lkdGggID0gZG1lbV93aWR0aDsKLWFzc2lnbiBwb3J0MF9hZGRyICAgPSBkbWVtX2FkZHIgOwotYXNzaWduIHBvcnQwX3dkYXRhICA9IGRtZW1fd2RhdGE7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBQT1JUMQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHBvcnQxX3JlcSA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIHBvcnQxX3JlcSA9IGRtZW1fcmVxICYgKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQxKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBiZWdpbgotICAgICAgICAgICAgICAgIHBvcnQxX3JlcSA9IGRtZW1fcmVxICYgKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQxKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotYXNzaWduIHBvcnQxX2NtZCAgICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMSkgPyBkbWVtX2NtZCAgIDogU0NSMV9NRU1fQ01EX0VSUk9SOwotYXNzaWduIHBvcnQxX3dpZHRoICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMSkgPyBkbWVtX3dpZHRoIDogU0NSMV9NRU1fV0lEVEhfRVJST1I7Ci1hc3NpZ24gcG9ydDFfYWRkciAgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQxKSA/IGRtZW1fYWRkciAgOiAneDsKLWFzc2lnbiBwb3J0MV93ZGF0YSAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDEpID8gZG1lbV93ZGF0YSA6ICd4OwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotYXNzaWduIHBvcnQxX2NtZCAgICA9IGRtZW1fY21kICA7Ci1hc3NpZ24gcG9ydDFfd2lkdGggID0gZG1lbV93aWR0aDsKLWFzc2lnbiBwb3J0MV9hZGRyICAgPSBkbWVtX2FkZHIgOwotYXNzaWduIHBvcnQxX3dkYXRhICA9IGRtZW1fd2RhdGE7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBQT1JUMgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHBvcnQyX3JlcSA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIHBvcnQyX3JlcSA9IGRtZW1fcmVxICYgKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQyKTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBiZWdpbgotICAgICAgICAgICAgICAgIHBvcnQyX3JlcSA9IGRtZW1fcmVxICYgKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQyKTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotCi1gaWZkZWYgU0NSMV9YUFJPUF9FTgotYXNzaWduIHBvcnQyX2NtZCAgICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMikgPyBkbWVtX2NtZCAgIDogU0NSMV9NRU1fQ01EX0VSUk9SOwotYXNzaWduIHBvcnQyX3dpZHRoICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMikgPyBkbWVtX3dpZHRoIDogU0NSMV9NRU1fV0lEVEhfRVJST1I7Ci1hc3NpZ24gcG9ydDJfYWRkciAgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQyKSA/IGRtZW1fYWRkciAgOiAneDsKLWFzc2lnbiBwb3J0Ml93ZGF0YSAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDIpID8gZG1lbV93ZGF0YSA6ICd4OwotYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgotYXNzaWduIHBvcnQyX2NtZCAgICA9IGRtZW1fY21kICA7Ci1hc3NpZ24gcG9ydDJfd2lkdGggID0gZG1lbV93aWR0aDsKLWFzc2lnbiBwb3J0Ml9hZGRyICAgPSBkbWVtX2FkZHIgOwotYXNzaWduIHBvcnQyX3dkYXRhICA9IGRtZW1fd2RhdGE7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU0NSMV9TVkFfRE1FTV9SVF9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgZG1lbV9yZXEgfC0+ICEkaXN1bmtub3duKHtwb3J0X3NlbCwgZG1lbV9jbWQsIGRtZW1fd2lkdGh9KQotICAgICkgZWxzZSAkZXJyb3IoIkRNRU0gcm91dGVyIEVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9kbWVtX3JvdXRlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fd2Iuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhMGI0ZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICB5aWZpdmUgV2lzaGJvbmUgaW50ZXJmYWNlIGZvciBEYXRhIG1lbW9yeSAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICBpbnRlZ3JhdGVkIHdpc2hib25lIGkvZiB0byBkYXRhICBtZW1vcnkgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICB2MDogICAgSnVuZSA3LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgIHdpc2hib25lIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCi0vLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCi0vLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi0vLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi0vLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCi0vLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi0vLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi0vLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCi0vLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCi0vLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi0vLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCi0vLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgT3JnaW5hbCBvd25lciBEZXRhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy8vLwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2RtZW1fd2Iuc3Y+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwotLy8vIEBicmllZiAgICAgIERhdGEgbWVtb3J5IFdCIGJyaWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWBpbmNsdWRlICJzY3IxX3diLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLQotbW9kdWxlIHNjcjFfZG1lbV93YiAoCi0gICAgLy8gQ29udHJvbCBTaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0KLSAgICAvLyBDb3JlIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBkbWVtX2NtZCwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgZG1lbV93aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgZG1lbV9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBkbWVtX3dkYXRhLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBkbWVtX3JkYXRhLAotICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICBkbWVtX3Jlc3AsCi0KLSAgICAvLyBXQiBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3N0Yl9vLCAvLyBzdHJvYmUvcmVxdWVzdAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfYWRyX28sIC8vIGFkZHJlc3MKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZGF0X28sIC8vIGRhdGEgb3V0cHV0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFszOjBdICAgICAgICAgICAgICAgICAgIHdiZF9zZWxfbywgLy8gYnl0ZSBlbmFibGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICAgd2JkX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9hY2tfaSwgLy8gYWNrbm93bGVnZW1lbnQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Vycl9pICAvLyBlcnJvcgotCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIFBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmbmRlZiBTQ1IxX0RNRU1fV0JfT1VUX0JQCi1sb2NhbHBhcmFtICBTQ1IxX0ZJRk9fV0lEVEggPSAyOwotbG9jYWxwYXJhbSAgU0NSMV9GSUZPX0NOVF9XSURUSCA9IDI7Ci1gZW5kaWYgLy8gU0NSMV9ETUVNX1dCX09VVF9CUAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHR5cGUgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0ZTTV9BRERSID0gMSdiMCwKLSAgICBTQ1IxX0ZTTV9EQVRBID0gMSdiMSwKLSAgICBTQ1IxX0ZTTV9FUlIgID0gMSdieAotfSB0eXBlX3NjcjFfZnNtX2U7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBod3JpdGU7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBoYWRkcjsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIGh3ZGF0YTsKLX0gdHlwZV9zY3IxX3JlcV9maWZvX3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBod3JpdGU7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBoYWRkcjsKLX0gdHlwZV9zY3IxX2RhdGFfZmlmb19zOwotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3A7Ci0gICAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBod2lkdGg7Ci0gICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBoYWRkcjsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgaHJkYXRhOwotfSB0eXBlX3NjcjFfcmVzcF9maWZvX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgZnVuY3Rpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWZ1bmN0aW9uIGF1dG9tYXRpYyBsb2dpYyAgIFsyOjBdIHNjcjFfY29udl9tZW0yd2Jfd2lkdGggKAotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgIGRtZW1fd2lkdGgKLSk7Ci0gICAgbG9naWMgICBbMjowXSAgIHRtcDsKLWJlZ2luCi0gICAgY2FzZSAoZG1lbV93aWR0aCkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBTQ1IxX0RTSVpFXzhCOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gU0NSMV9EU0laRV8xNkI7Ci0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IFNDUjFfRFNJWkVfMzJCOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICB0bXAgPSBTQ1IxX0RTSVpFXzMyQjsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotICAgIHNjcjFfY29udl9tZW0yd2Jfd2lkdGggPSAgdG1wOyAvLyBjcC4xMQotZW5kCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiBhdXRvbWF0aWMgbG9naWNbU0NSMV9XQl9XSURUSC0xOjBdIHNjcjFfY29udl9tZW0yd2Jfd2RhdGEgKAotICAgIGlucHV0ICAgbG9naWMgICBbMTowXSAgICAgICAgICAgICAgICAgICBkbWVtX2FkZHIsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgIGRtZW1fd2lkdGgsCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgZG1lbV93ZGF0YQotKTsKLSAgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gIHRtcDsKLWJlZ2luCi0gICAgdG1wID0gJ3g7Ci0gICAgY2FzZSAoZG1lbV93aWR0aCkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChkbWVtX2FkZHIpCi0gICAgICAgICAgICAgICAgMidiMDAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbNzowXSAgID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIDInYjAxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzE1OjhdICA9IGRtZW1fd2RhdGFbNzowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAyJ2IxMCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIHRtcFsyMzoxNl0gPSBkbWVtX3dkYXRhWzc6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgMidiMTEgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMzE6MjRdID0gZG1lbV93ZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoZG1lbV9hZGRyWzFdKQotICAgICAgICAgICAgICAgIDEnYjAgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICB0bXBbMTU6MF0gID0gZG1lbV93ZGF0YVsxNTowXTsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAxJ2IxIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgdG1wWzMxOjE2XSA9IGRtZW1fd2RhdGFbMTU6MF07Ci0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogYmVnaW4KLSAgICAgICAgICAgIHRtcCA9IGRtZW1fd2RhdGE7Ci0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotICAgIHNjcjFfY29udl9tZW0yd2Jfd2RhdGEgPSB0bXA7Ci1lbmQKLWVuZGZ1bmN0aW9uCi0KLWZ1bmN0aW9uIGF1dG9tYXRpYyBsb2dpY1tTQ1IxX1dCX1dJRFRILTE6MF0gc2NyMV9jb252X3diMm1lbV9yZGF0YSAoCi0gICAgaW5wdXQgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgaHdpZHRoLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgIGhhZGRyLAotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfV0JfV0lEVEgtMTowXSAgaHJkYXRhCi0pOwotICAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgdG1wOwotYmVnaW4KLSAgICB0bXAgPSAneDsKLSAgICBjYXNlIChod2lkdGgpCi0gICAgICAgIFNDUjFfRFNJWkVfOEIgOiBiZWdpbgotICAgICAgICAgICAgY2FzZSAoaGFkZHIpCi0gICAgICAgICAgICAgICAgMidiMDAgOiB0bXBbNzowXSA9IGhyZGF0YVs3OjBdOwotICAgICAgICAgICAgICAgIDInYjAxIDogdG1wWzc6MF0gPSBocmRhdGFbMTU6OF07Ci0gICAgICAgICAgICAgICAgMidiMTAgOiB0bXBbNzowXSA9IGhyZGF0YVsyMzoxNl07Ci0gICAgICAgICAgICAgICAgMidiMTEgOiB0bXBbNzowXSA9IGhyZGF0YVszMToyNF07Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgIGVuZAotICAgICAgICBTQ1IxX0RTSVpFXzE2QiA6IGJlZ2luCi0gICAgICAgICAgICBjYXNlIChoYWRkclsxXSkKLSAgICAgICAgICAgICAgICAxJ2IwIDogdG1wWzE1OjBdID0gaHJkYXRhWzE1OjBdOwotICAgICAgICAgICAgICAgIDEnYjEgOiB0bXBbMTU6MF0gPSBocmRhdGFbMzE6MTZdOwotICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9EU0laRV8zMkIgOiBiZWdpbgotICAgICAgICAgICAgdG1wID0gaHJkYXRhOwotICAgICAgICBlbmQKLSAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLSAgICBzY3IxX2NvbnZfd2IybWVtX3JkYXRhID0gdG1wOwotZW5kCi1lbmRmdW5jdGlvbgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb193cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fdXA7Ci1gaWZkZWYgU0NSMV9ETUVNX1dCX09VVF9CUAotdHlwZV9zY3IxX3JlcV9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19uZXc7Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3I7Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyBbMDowXSAgICAgICAgICAgICAgICAgIHJlcV9maWZvOwotYGVsc2UgLy8gU0NSMV9ETUVNX1dCX09VVF9CUAotdHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6U0NSMV9GSUZPX1dJRFRILTFdICByZXFfZmlmbzsKLXR5cGVfc2NyMV9yZXFfZmlmb19zIFswOlNDUjFfRklGT19XSURUSC0xXSAgcmVxX2ZpZm9fbmV3OwotbG9naWMgICAgICAgW1NDUjFfRklGT19DTlRfV0lEVEgtMTowXSAgICAgICByZXFfZmlmb19jbnQ7Ci1sb2dpYyAgICAgICBbU0NSMV9GSUZPX0NOVF9XSURUSC0xOjBdICAgICAgIHJlcV9maWZvX2NudF9uZXc7Ci1gZW5kaWYgLy8gU0NSMV9ETUVNX1dCX09VVF9CUAotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19lbXB0eTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbDsKLQotdHlwZV9zY3IxX2RhdGFfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2ZpZm87Ci10eXBlX3NjcjFfcmVzcF9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmbzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX2hyZWFkeTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gQ29yZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gZG1lbV9yZXFfYWNrID0gfnJlcV9maWZvX2Z1bGw7Ci1hc3NpZ24gcmVxX2ZpZm9fd3IgID0gfnJlcV9maWZvX2Z1bGwgJiBkbWVtX3JlcTsKLQotYXNzaWduIGRtZW1fcmRhdGEgPSBzY3IxX2NvbnZfd2IybWVtX3JkYXRhKHJlc3BfZmlmby5od2lkdGgsIHJlc3BfZmlmby5oYWRkciwgcmVzcF9maWZvLmhyZGF0YSk7Ci0KLWFzc2lnbiBkbWVtX3Jlc3AgPSAocmVzcF9maWZvX2hyZWFkeSkKLSAgICAgICAgICAgICAgICAgICAgPyAocmVzcF9maWZvLmhyZXNwID09IDEnYjEpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfTUVNX1JFU1BfUkRZX09LCi0gICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1JFU1BfUkRZX0VSCi0gICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9OT1RSRFkgOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJFUV9GSUZPCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX0RNRU1fV0JfT1VUX0JQCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfZmlmb19mdWxsIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKH5yZXFfZmlmb19mdWxsKSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSBkbWVtX3JlcSAmIH5yZXFfZmlmb19yZDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gfnJlcV9maWZvX3JkOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYXNzaWduIHJlcV9maWZvX2VtcHR5ID0gfihyZXFfZmlmb19mdWxsIHwgZG1lbV9yZXEpOwotCi1hc3NpZ24gcmVxX2ZpZm9fdXAgPSB+cmVxX2ZpZm9fcmQgJiByZXFfZmlmb193cjsKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChyZXFfZmlmb191cCkgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fciA8PSByZXFfZmlmb19uZXc7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHJlcV9maWZvX25ldy5od3JpdGUgPSBkbWVtX3JlcSA/IChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpICAgICAgIDogMSdiMDsKLWFzc2lnbiByZXFfZmlmb19uZXcuaHdpZHRoID0gZG1lbV9yZXEgPyBzY3IxX2NvbnZfbWVtMndiX3dpZHRoKGRtZW1fd2lkdGgpIDogJzA7Ci1hc3NpZ24gcmVxX2ZpZm9fbmV3LmhhZGRyICA9IGRtZW1fcmVxID8gZG1lbV9hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMDsKLWFzc2lnbiByZXFfZmlmb19uZXcuaHdkYXRhID0gKGRtZW1fcmVxICYgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2NyMV9jb252X21lbTJ3Yl93ZGF0YShkbWVtX2FkZHJbMTowXSwgZG1lbV93aWR0aCwgZG1lbV93ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMDsKLWFzc2lnbiByZXFfZmlmb1swXSA9IChyZXFfZmlmb19mdWxsKSA/IHJlcV9maWZvX3I6IHJlcV9maWZvX25ldzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZWdpc3RlciBEYXRhIGZyb20gcmVzcG9uc2UgcGF0aCAtIFVzZWQgYnkgUmVhZCBwYXRoIGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh3YmRfYWNrX2kpIGJlZ2luCi0gICAgICAgICBpZiAofnJlcV9maWZvX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgIGRhdGFfZmlmby5od2lkdGggPD0gcmVxX2ZpZm9bMF0uaHdpZHRoOwotICAgICAgICAgICAgIGRhdGFfZmlmby5oYWRkciAgPD0gcmVxX2ZpZm9bMF0uaGFkZHJbMTowXTsKLSAgICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWBlbHNlIC8vIFNDUjFfRE1FTV9XQl9PVVRfQlAKLQotCi13aXJlCSAgICAgICAgICAgICAgICAgaHdyaXRlX2luID0gKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUik7Ci13aXJlIFsyOjBdICAgICAgICAgICAgICAgaHdpZHRoX2luID0gc2NyMV9jb252X21lbTJ3Yl93aWR0aChkbWVtX3dpZHRoKTsKLXdpcmUgW1NDUjFfV0JfV0lEVEgtMTowXSBoYWRkcl9pbiAgPSBkbWVtX2FkZHI7Ci13aXJlIFtTQ1IxX1dCX1dJRFRILTE6MF0gaHdkYXRhX2luID0gc2NyMV9jb252X21lbTJ3Yl93ZGF0YShkbWVtX2FkZHJbMTowXSwgZG1lbV93aWR0aCwgZG1lbV93ZGF0YSk7Ci0KLXJlZyAgWzM6MF0gICAgICAgICAgICAgIGhiZWxfaW47IC8vIGJ5dGUgc2VsZWN0Ci1hbHdheXNfY29tYiBiZWdpbgotCWhiZWxfaW4gPSAwOwotICAgIGNhc2UgKGh3aWR0aF9pbikKLSAgICAgICAgU0NSMV9EU0laRV84QiA6IGJlZ2luCi0gICAgICAgICAgICBoYmVsX2luID0gNCdiMDAwMSA8PCBoYWRkcl9pblsxOjBdOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9EU0laRV8xNkIgOiBiZWdpbgotICAgICAgICAgICAgaGJlbF9pbiA9IDQnYjAwMTEgPDwgaGFkZHJfaW5bMTowXTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRFNJWkVfMzJCIDogYmVnaW4KLSAgICAgICAgICAgIGhiZWxfaW4gPSA0J2IxMTExOwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotCi13aXJlIFtTQ1IxX1dCX1dJRFRIK1NDUjFfV0JfV0lEVEgrMys0OjBdIHJlcV9maWZvX2RpbiA9IHtoYmVsX2luLGh3cml0ZV9pbixod2lkdGhfaW4saGFkZHJfaW4saHdkYXRhX2lufTsKLQotIHN5bmNfZmlmbyAjKAotICAgICAgLkRBVEFfV0lEVEgoU0NSMV9XQl9XSURUSCtTQ1IxX1dCX1dJRFRIKzMrMSs0KSwgLy8gRGF0YSBXaWR0aAotICAgICAgLkFERFJfV0lEVEgoMSksICAgLy8gQWRkcmVzcyBXaWR0aAotICAgICAgLkZJRk9fREVQVEgoMikgICAgLy8gRklGTyBERVBUSAotICAgICApICAgdV9yZXFfZmlmbygKLQotICAgICAgIC5kb3V0ICAgICAgKHJlcV9maWZvX2RvdXQgICksCi0KLSAgICAgICAucnN0biAgICAgIChyc3RfbiAgICAgICAgICApLAotICAgICAgIC5jbGsgICAgICAgKGNsayAgICAgICAgICAgICksCi0gICAgICAgLndyX2VuICAgICAocmVxX2ZpZm9fd3IgICAgKSwgLy8gV3JpdGUKLSAgICAgICAucmRfZW4gICAgIChyZXFfZmlmb19yZCAgICApLCAvLyBSZWFkCi0gICAgICAgLmRpbiAgICAgICAocmVxX2ZpZm9fZGluICAgKSwKLSAgICAgICAuZnVsbCAgICAgIChyZXFfZmlmb19mdWxsICApLAotICAgICAgIC5lbXB0eSAgICAgKHJlcV9maWZvX2VtcHR5ICkKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVnaXN0ZXIgRGF0YSBmcm9tIHJlc3BvbnNlIHBhdGggLSBVc2VkIGJ5IFJlYWQgcGF0aCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi13aXJlCSAgICAgICAgICAgICAgICAgaHdyaXRlX291dDsKLXdpcmUgWzI6MF0gICAgICAgICAgICAgICBod2lkdGhfb3V0Owotd2lyZSBbU0NSMV9XQl9XSURUSC0xOjBdIGhhZGRyX291dDsKLXdpcmUgW1NDUjFfV0JfV0lEVEgtMTowXSBod2RhdGFfb3V0Owotd2lyZSBbMzowXSAgICAgICAgICAgICAgIGhiZWxfb3V0OwotCi1hc3NpZ24ge2hiZWxfb3V0LGh3cml0ZV9vdXQsaHdpZHRoX291dCxoYWRkcl9vdXQsaHdkYXRhX291dH0gPSByZXFfZmlmb19kb3V0OwotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAod2JkX2Fja19pKSBiZWdpbgotICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KLSAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdpZHRoIDw9IGh3aWR0aF9vdXQ7Ci0gICAgICAgICAgICAgZGF0YV9maWZvLmhhZGRyICA8PSBoYWRkcl9vdXRbMTowXTsKLSAgICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWBlbmRpZiAvLyBTQ1IxX0RNRU1fV0JfT1VUX0JQCi0KLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICByZXFfZmlmb19yZCA9IDEnYjA7Ci0gICAgaWYgKHdiZF9hY2tfaSkgYmVnaW4KLSAgICAgICAgIHJlcV9maWZvX3JkID0gfnJlcV9maWZvX2VtcHR5OwotICAgIGVuZAotZW5kCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGSUZPIHJlc3BvbnNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWBpZmRlZiBTQ1IxX0RNRU1fV0JfSU5fQlAKLQotYXNzaWduIHJlc3BfZmlmb19ocmVhZHkgPSB3YmRfYWNrX2k7Ci1hc3NpZ24gcmVzcF9maWZvLmhyZXNwICA9ICh3YmRfZXJyX2kpID8gMSdiMCA6IDEnYjE7Ci1hc3NpZ24gcmVzcF9maWZvLmh3aWR0aCA9IGRhdGFfZmlmby5od2lkdGg7Ci1hc3NpZ24gcmVzcF9maWZvLmhhZGRyICA9IGRhdGFfZmlmby5oYWRkcjsKLWFzc2lnbiByZXNwX2ZpZm8uaHJkYXRhID0gd2JkX2RhdF9pOwotCi1hc3NpZ24gd2JkX3N0Yl9vICAgICA9IH5yZXFfZmlmb19lbXB0eTsKLWFzc2lnbiB3YmRfYWRyX28gICAgPSByZXFfZmlmb1swXS5oYWRkcjsKLWFzc2lnbiB3YmRfd2VfbyAgICAgPSByZXFfZmlmb1swXS5od3JpdGU7Ci1hc3NpZ24gd2JkX2RhdF9vICAgID0gcmVxX2ZpZm9bMF0uaHdkYXRhOwotCi1hbHdheXNfY29tYiBiZWdpbgotCXdiZF9zZWxfbyA9IDA7Ci0gICAgY2FzZSAocmVxX2ZpZm9bMF0uaHdpZHRoKQotICAgICAgICBTQ1IxX0RTSVpFXzhCIDogYmVnaW4KLSAgICAgICAgICAgIHdiZF9zZWxfbyA9IDQnYjAwMDEgPDwgcmVxX2ZpZm9bMF0uaGFkZHJbMTowXTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRFNJWkVfMTZCIDogYmVnaW4KLSAgICAgICAgICAgIHdiZF9zZWxfbyA9IDQnYjAwMTEgPDwgcmVxX2ZpZm9bMF0uaGFkZHJbMTowXTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRFNJWkVfMzJCIDogYmVnaW4KLSAgICAgICAgICAgIHdiZF9zZWxfbyA9IDQnYjExMTE7Ci0gICAgICAgIGVuZAotICAgIGVuZGNhc2UKLWVuZAotYGVsc2UgLy8gU0NSMV9ETUVNX1dCX0lOX0JQCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXNwX2ZpZm9faHJlYWR5IDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgcmVzcF9maWZvX2hyZWFkeSA8PSB3YmRfYWNrX2kgOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh3YmRfYWNrX2kpIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmby5ocmVzcCAgPD0gKHdiZF9lcnJfaSkgPyAxJ2IwIDogMSdiMTsKLSAgICAgICAgcmVzcF9maWZvLmh3aWR0aCA8PSBkYXRhX2ZpZm8uaHdpZHRoOwotICAgICAgICByZXNwX2ZpZm8uaGFkZHIgIDw9IGRhdGFfZmlmby5oYWRkcjsKLSAgICAgICAgcmVzcF9maWZvLmhyZGF0YSA8PSB3YmRfZGF0X2k7Ci0gICAgZW5kCi1lbmQKLQotCi1hc3NpZ24gd2JkX3N0Yl9vICAgID0gfnJlcV9maWZvX2VtcHR5OwotYXNzaWduIHdiZF9hZHJfbyAgICA9IGhhZGRyX291dDsKLWFzc2lnbiB3YmRfd2VfbyAgICAgPSBod3JpdGVfb3V0OwotYXNzaWduIHdiZF9kYXRfbyAgICA9IGh3ZGF0YV9vdXQ7Ci1hc3NpZ24gd2JkX3NlbF9vICAgID0gaGJlbF9vdXQ7Ci0KLWBlbmRpZiAvLyBTQ1IxX0RNRU1fV0JfSU5fQlAKLQotCi0KLWVuZG1vZHVsZSA6IHNjcjFfZG1lbV93YgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9kcF9tZW1vcnkuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MTU5MWQuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX2RwX21lbW9yeS5zdj4KLS8vLyBAYnJpZWYgICAgICBEdWFsLXBvcnQgc3luY2hyb25vdXMgbWVtb3J5IHdpdGggYnl0ZSBlbmFibGUgaW5wdXRzCi0vLy8KLQotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotbW9kdWxlIHNjcjFfZHBfbWVtb3J5Ci0jKAotICAgIHBhcmFtZXRlciBTQ1IxX1dJRFRIICAgID0gMzIsCi0gICAgcGFyYW1ldGVyIFNDUjFfU0laRSAgICAgPSBgU0NSMV9JTUVNX0FXSURUSCdoMDAwMTAwMDAsCi0gICAgcGFyYW1ldGVyIFNDUjFfTkJZVEVTICAgPSBTQ1IxX1dJRFRIIC8gOAotKQotKAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0gICAgLy8gUG9ydCBBCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmEsCi0gICAgaW5wdXQgICBsb2dpYyBbJGNsb2cyKFNDUjFfU0laRSktMToyXSAgIGFkZHJhLAotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgICAgICAgICBxYSwKLSAgICAvLyBQb3J0IEIKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VuYiwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX05CWVRFUy0xOjBdICAgICAgICAgd2ViYiwKLSAgICBpbnB1dCAgIGxvZ2ljIFskY2xvZzIoU0NSMV9TSVpFKS0xOjJdICAgYWRkcmIsCi0gICAgaW5wdXQgICBsb2dpYyBbU0NSMV9XSURUSC0xOjBdICAgICAgICAgIGRhdGFiLAotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgICAgICAgICBxYgotKTsKLQotYGlmZGVmIFNDUjFfVFJHVF9GUEdBX0lOVEVMCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gYGlmZGVmIFNDUjFfVFJHVF9GUEdBX0lOVEVMX01BWDEwCi0oKiByYW1zdHlsZSA9ICJNOUsiICopICAgIGxvZ2ljIFtTQ1IxX05CWVRFUy0xOjBdWzc6MF0gIG1lbW9yeV9hcnJheSAgWzA6KFNDUjFfU0laRS9TQ1IxX05CWVRFUyktMV07Ci0gYGVsc2lmIFNDUjFfVFJHVF9GUEdBX0lOVEVMX0FSUklBVgotKCogcmFtc3R5bGUgPSAiTTEwSyIgKikgICBsb2dpYyBbU0NSMV9OQllURVMtMTowXVs3OjBdICBtZW1vcnlfYXJyYXkgIFswOihTQ1IxX1NJWkUvU0NSMV9OQllURVMpLTFdOwotIGBlbmRpZgotbG9naWMgWzM6MF0gd2VuYmI7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvcnQgQiBtZW1vcnkgYmVoYXZpb3JhbCBkZXNjcmlwdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gd2VuYmIgPSB7NHt3ZW5ifX0gJiB3ZWJiOwotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHdlbmIpIGJlZ2luCi0gICAgICAgIGlmICh3ZW5iYlswXSkgYmVnaW4KLSAgICAgICAgICAgIG1lbW9yeV9hcnJheVthZGRyYl1bMF0gPD0gZGF0YWJbMCs6OF07Ci0gICAgICAgIGVuZAotICAgICAgICBpZiAod2VuYmJbMV0pIGJlZ2luCi0gICAgICAgICAgICBtZW1vcnlfYXJyYXlbYWRkcmJdWzFdIDw9IGRhdGFiWzgrOjhdOwotICAgICAgICBlbmQKLSAgICAgICAgaWYgKHdlbmJiWzJdKSBiZWdpbgotICAgICAgICAgICAgbWVtb3J5X2FycmF5W2FkZHJiXVsyXSA8PSBkYXRhYlsxNis6OF07Ci0gICAgICAgIGVuZAotICAgICAgICBpZiAod2VuYmJbM10pIGJlZ2luCi0gICAgICAgICAgICBtZW1vcnlfYXJyYXlbYWRkcmJdWzNdIDw9IGRhdGFiWzI0Kzo4XTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgcWIgPD0gbWVtb3J5X2FycmF5W2FkZHJiXTsKLWVuZAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQb3J0IEEgbWVtb3J5IGJlaGF2aW9yYWwgZGVzY3JpcHRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgcWEgPD0gbWVtb3J5X2FycmF5W2FkZHJhXTsKLWVuZAotCi1gZWxzZSAvLyBTQ1IxX1RSR1RfRlBHQV9JTlRFTAotCi0vLyBDQVNFOiBPVEhFUlMgLSBTQ1IxX1RSR1RfRlBHQV9YSUxJTlgsIFNJTVVMQVRJT04sIEFTSUMgZXRjCi0KLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFJBTV9TSVpFX1dPUkRTID0gU0NSMV9TSVpFL1NDUjFfTkJZVEVTOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gYGlmZGVmIFNDUjFfVFJHVF9GUEdBX1hJTElOWAotKCogcmFtX3N0eWxlID0gImJsb2NrIiAqKSAgbG9naWMgIFtTQ1IxX1dJRFRILTE6MF0gIHJhbV9ibG9jayAgW1JBTV9TSVpFX1dPUkRTLTE6MF07Ci0gYGVsc2UgIC8vIEFTSUMgb3IgU0lNVUxBVElPTgotbG9naWMgIFtTQ1IxX1dJRFRILTE6MF0gIHJhbV9ibG9jayAgW1JBTV9TSVpFX1dPUkRTLTE6MF07Ci0gYGVuZGlmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvcnQgQSBtZW1vcnkgYmVoYXZpb3JhbCBkZXNjcmlwdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAocmVuYSkgYmVnaW4KLSAgICAgICAgcWEgPD0gcmFtX2Jsb2NrW2FkZHJhXTsKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvcnQgQiBtZW1vcnkgYmVoYXZpb3JhbCBkZXNjcmlwdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAod2VuYikgYmVnaW4KLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPFNDUjFfTkJZVEVTOyBpKyspIGJlZ2luCi0gICAgICAgICAgICBpZiAod2ViYltpXSkgYmVnaW4KLSAgICAgICAgICAgICAgICByYW1fYmxvY2tbYWRkcmJdW2kqOCArOiA4XSA8PSBkYXRhYltpKjggKzogOF07Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgaWYgKHJlbmIpIGJlZ2luCi0gICAgICAgIHFiIDw9IHJhbV9ibG9ja1thZGRyYl07Ci0gICAgZW5kCi1lbmQKLQotYGVuZGlmIC8vIFNDUjFfVFJHVF9GUEdBX0lOVEVMCi0KLWVuZG1vZHVsZSA6IHNjcjFfZHBfbWVtb3J5Ci0KLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fYWhiLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fYWhiLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzQ5ZjlkLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX2FoYi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfaW1lbV9haGIuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gbWVtb3J5IEFIQiBicmlkZ2UKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9haGIuc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotCi1tb2R1bGUgc2NyMV9pbWVtX2FoYiAoCi0gICAgLy8gQ29udHJvbCBTaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0KLSAgICAvLyBDb3JlIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBpbWVtX2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGltZW1fcmRhdGEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGltZW1fcmVzcCwKLQotICAgIC8vIEFIQiBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgaHByb3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGhidXJzdCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzI6MF0gICAgICAgICAgICAgICAgICAgaHNpemUsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGh0cmFucywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaG1hc3Rsb2NrLAotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBoYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlYWR5LAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBocmRhdGEsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZXNwCi0KLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZuZGVmIFNDUjFfSU1FTV9BSEJfT1VUX0JQCi1sb2NhbHBhcmFtICBTQ1IxX0ZJRk9fV0lEVEggPSAyOwotbG9jYWxwYXJhbSAgU0NSMV9GSUZPX0NOVF9XSURUSCA9ICRjbG9nMihTQ1IxX0ZJRk9fV0lEVEgrMSk7Ci1gZW5kaWYgLy8gU0NSMV9JTUVNX0FIQl9PVVRfQlAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIGVudW0gbG9naWMgewotICAgIFNDUjFfRlNNX0FERFIgPSAxJ2IwLAotICAgIFNDUjFfRlNNX0RBVEEgPSAxJ2IxLAotICAgIFNDUjFfRlNNX0VSUiAgPSAxJ2J4Ci19IHR5cGVfc2NyMV9mc21fZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhhZGRyOwotfSB0eXBlX3NjcjFfcmVxX2ZpZm9fczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZXNwOwotICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHJkYXRhOwotfSB0eXBlX3NjcjFfcmVzcF9maWZvX3M7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVfc2NyMV9mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNtOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19yZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fd3I7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3VwOwotYGlmZGVmIFNDUjFfSU1FTV9BSEJfT1VUX0JQCi10eXBlX3NjcjFfcmVxX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3I7Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyBbMDowXSAgICAgICAgICAgICAgICAgIHJlcV9maWZvOwotYGVsc2UgLy8gU0NSMV9JTUVNX0FIQl9PVVRfQlAKLXR5cGVfc2NyMV9yZXFfZmlmb19zIFswOlNDUjFfRklGT19XSURUSC0xXSAgcmVxX2ZpZm87Ci10eXBlX3NjcjFfcmVxX2ZpZm9fcyBbMDpTQ1IxX0ZJRk9fV0lEVEgtMV0gIHJlcV9maWZvX25ldzsKLWxvZ2ljICAgICAgIFtTQ1IxX0ZJRk9fQ05UX1dJRFRILTE6MF0gICAgICAgcmVxX2ZpZm9fY250OwotbG9naWMgICAgICAgW1NDUjFfRklGT19DTlRfV0lEVEgtMTowXSAgICAgICByZXFfZmlmb19jbnRfbmV3OwotYGVuZGlmIC8vIFNDUjFfSU1FTV9BSEJfT1VUX0JQCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2VtcHR5OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19mdWxsOwotCi10eXBlX3NjcjFfcmVzcF9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmbzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvX2hyZWFkeTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gQ29yZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gaW1lbV9yZXFfYWNrID0gfnJlcV9maWZvX2Z1bGw7Ci1hc3NpZ24gcmVxX2ZpZm9fd3IgID0gfnJlcV9maWZvX2Z1bGwgJiBpbWVtX3JlcTsKLQotYXNzaWduIGltZW1fcmRhdGEgPSByZXNwX2ZpZm8uaHJkYXRhOwotCi1hc3NpZ24gaW1lbV9yZXNwID0gKHJlc3BfZmlmb19ocmVhZHkpCi0gICAgICAgICAgICAgICAgICAgID8gKHJlc3BfZmlmby5ocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfTUVNX1JFU1BfUkRZX09LCi0gICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1JFU1BfUkRZX0VSCi0gICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUkVRX0ZJRk8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfSU1FTV9BSEJfT1VUX0JQCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfZmlmb19mdWxsIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKH5yZXFfZmlmb19mdWxsKSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSBpbWVtX3JlcSAmIH5yZXFfZmlmb19yZDsKLSAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gfnJlcV9maWZvX3JkOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYXNzaWduIHJlcV9maWZvX2VtcHR5ID0gfihyZXFfZmlmb19mdWxsIHwgaW1lbV9yZXEpOwotCi1hc3NpZ24gcmVxX2ZpZm9fdXAgICAgPSB+cmVxX2ZpZm9fcmQgJiByZXFfZmlmb193cjsKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChyZXFfZmlmb191cCkgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fci5oYWRkciA8PSBpbWVtX2FkZHI7Ci0gICAgZW5kCi1lbmQKLQotYXNzaWduIHJlcV9maWZvWzBdID0gKHJlcV9maWZvX2Z1bGwpID8gcmVxX2ZpZm9fciA6IGltZW1fYWRkcjsKLQotYGVsc2UgLy8gU0NSMV9JTUVNX0FIQl9PVVRfQlAKLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcmVxX2ZpZm9fdXAgICAgICA9IDEnYjA7Ci0gICAgcmVxX2ZpZm9fY250X25ldyA9IHJlcV9maWZvX2NudDsKLSAgICByZXFfZmlmb19uZXcgICAgID0gcmVxX2ZpZm87Ci0gICAgY2FzZSAoe3JlcV9maWZvX3JkLCByZXFfZmlmb193cn0pCi0gICAgICAgIDInYjAwIDogYmVnaW4KLSAgICAgICAgICAgIC8vIG5vdGhpbmcgdG9kbwotICAgICAgICBlbmQKLSAgICAgICAgMidiMDE6IGJlZ2luCi0gICAgICAgICAgICAvLyBGSUZPIHdyaXRlCi0gICAgICAgICAgICByZXFfZmlmb191cCA9IDEnYjE7Ci0gICAgICAgICAgICByZXFfZmlmb19uZXdbcmVxX2ZpZm9fY250XS5oYWRkciAgPSBpbWVtX2FkZHI7Ci0gICAgICAgICAgICByZXFfZmlmb19jbnRfbmV3ID0gcmVxX2ZpZm9fY250ICsgMSdiMTsKLSAgICAgICAgZW5kCi0gICAgICAgIDInYjEwIDogYmVnaW4KLSAgICAgICAgICAgIC8vIEZJRk8gcmVhZAotICAgICAgICAgICAgcmVxX2ZpZm9fdXAgICAgID0gMSdiMTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1swXSA9IHJlcV9maWZvX25ld1sxXTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1sxXS5oYWRkciAgPSAneDsKLSAgICAgICAgICAgIHJlcV9maWZvX2NudF9uZXcgPSByZXFfZmlmb19jbnQgLSAxJ2IxOwotICAgICAgICBlbmQKLSAgICAgICAgMidiMTEgOiBiZWdpbgotICAgICAgICAgICAgLy8gUmVhZCBhbmQgV3JpdGUgRklGTy4gSXQgaXMgcG9zc2libGUgb25seSB3aGVuIGZpZm9fY250ID0gMQotICAgICAgICAgICAgcmVxX2ZpZm9fdXAgICAgICAgICAgID0gMSdiMTsKLSAgICAgICAgICAgIHJlcV9maWZvX25ld1swXS5oYWRkciA9IGltZW1fYWRkcjsKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fdXAgICAgICA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fY250X25ldyA9ICd4OwotICAgICAgICAgICAgcmVxX2ZpZm9fbmV3ICAgICA9ICd4OwotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgcmVxX2ZpZm9fY250IDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChyZXFfZmlmb191cCkgYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX2NudCA8PSByZXFfZmlmb19jbnRfbmV3OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotYXNzaWduIHJlcV9maWZvX2Z1bGwgID0gKHJlcV9maWZvX2NudCA9PSBTQ1IxX0ZJRk9fV0lEVEgpOwotYXNzaWduIHJlcV9maWZvX2VtcHR5ID0gfih8cmVxX2ZpZm9fY250KTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgotICAgICAgICByZXFfZmlmbyA8PSByZXFfZmlmb19uZXc7Ci0gICAgZW5kCi1lbmQKLWBlbmRpZiAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlIChmc20pCi0gICAgICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBmc20gPD0gKHJlcV9maWZvX2VtcHR5KSA/IFNDUjFfRlNNX0FERFIgOiBTQ1IxX0ZTTV9EQVRBOwotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KLSAgICAgICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBpZiAoaHJlc3AgPT0gU0NSMV9IUkVTUF9PS0FZKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IChyZXFfZmlmb19lbXB0eSkgPyBTQ1IxX0ZTTV9BRERSIDogU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOwotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCi0gICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0VSUjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICByZXFfZmlmb19yZCA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgcmVxX2ZpZm9fcmQgPSB+cmVxX2ZpZm9fZW1wdHk7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KLSAgICAgICAgICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eSAmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIHJlcV9maWZvX3JkID0gMSdieDsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRklGTyByZXNwb25zZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZkZWYgU0NSMV9JTUVNX0FIQl9JTl9CUAotYXNzaWduIHJlc3BfZmlmb19ocmVhZHkgPSAoZnNtID09IFNDUjFfRlNNX0RBVEEpID8gaHJlYWR5IDogMSdiMDsKLWFzc2lnbiByZXNwX2ZpZm8uaHJlc3AgID0gaHJlc3A7Ci1hc3NpZ24gcmVzcF9maWZvLmhyZGF0YSA9IGhyZGF0YTsKLWBlbHNlIC8vIFNDUjFfSU1FTV9BSEJfSU5fQlAKLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmb19ocmVhZHkgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICByZXNwX2ZpZm9faHJlYWR5IDw9IChmc20gPT0gU0NSMV9GU01fREFUQSkgPyBocmVhZHkgOiAxJ2IwOwotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChocmVhZHkgJiAoZnNtID09IFNDUjFfRlNNX0RBVEEpKSBiZWdpbgotICAgICAgICByZXNwX2ZpZm8uaHJlc3AgIDw9IGhyZXNwOwotICAgICAgICByZXNwX2ZpZm8uaHJkYXRhIDw9IGhyZGF0YTsKLSAgICBlbmQKLWVuZAotYGVuZGlmIC8vIFNDUjFfSU1FTV9BSEJfSU5fQlAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gQUhCCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX0RBVEFdICA9IDEnYjA7Ci1hc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9QUlZdICAgPSAxJ2IwOwotYXNzaWduIGhwcm90W1NDUjFfSFBST1RfQlVGXSAgID0gMSdiMDsKLWFzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX0NBQ0hFXSA9IDEnYjA7Ci0KLWFzc2lnbiBoYnVyc3QgICAgICAgPSBTQ1IxX0hCVVJTVF9TSU5HTEU7Ci1hc3NpZ24gaHNpemUgICAgICAgID0gU0NSMV9IU0laRV8zMkI7Ci1hc3NpZ24gaG1hc3Rsb2NrICAgID0gMSdiMDsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBodHJhbnMgPSBTQ1IxX0hUUkFOU19JRExFOwotICAgIGNhc2UgKGZzbSkKLSAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCi0gICAgICAgICAgICBpZiAofnJlcV9maWZvX2VtcHR5KSBiZWdpbgotICAgICAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX05PTlNFUTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBodHJhbnMgPSBTQ1IxX0hUUkFOU19OT05TRVE7Ci0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBkZWZhdWx0IDogYmVnaW4KLSAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX0VSUjsKLSAgICAgICAgZW5kCi0gICAgZW5kY2FzZQotZW5kCi0KLWFzc2lnbiBoYWRkciAgPSByZXFfZmlmb1swXS5oYWRkcjsKLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENoZWNrIENvcmUgaW50ZXJmYWNlCi1TQ1IxX1NWQV9JTUVNX0FIQl9CUklER0VfUkVRX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bihpbWVtX3JlcSkKLSAgICApIGVsc2UgJGVycm9yKCJJTUVNIEFIQiBicmlkZ2UgRXJyb3I6IGltZW1fcmVxIGhhcyB1bmtub3duIHZhbHVlcyIpOwotCi1TQ1IxX0lNRU1fQUhCX0JSSURHRV9BRERSX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBpbWVtX3JlcSB8LT4gISRpc3Vua25vd24oaW1lbV9hZGRyKQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaW1lbV9hZGRyIGhhcyB1bmtub3duIHZhbHVlcyIpOwotCi1TQ1IxX0lNRU1fQUhCX0JSSURHRV9BRERSX0FMTElHTiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBpbWVtX3JlcSB8LT4gKGltZW1fYWRkclsxOjBdID09ICcwKQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaW1lbV9hZGRyIGhhcyB1bmFsaWduIHZhbHVlcyIpOwotCi0vLyBDaGVjayBBSEIgaW50ZXJmYWNlCi1TQ1IxX0lNRU1fQUhCX0JSSURHRV9IUkVBRFlfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGhyZWFkeSkKLSAgICApIGVsc2UgJGVycm9yKCJJTUVNIEFIQiBicmlkZ2UgRXJyb3I6IGhyZWFkeSBoYXMgdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9JTUVNX0FIQl9CUklER0VfSFJFU1BfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGhyZXNwKQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaHJlc3AgaGFzIHVua25vd24gdmFsdWVzIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX2ltZW1fYWhiCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV9yb3V0ZXIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV9yb3V0ZXIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNzZmMjUuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fcm91dGVyLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfaW1lbV9yb3V0ZXIuc3Y+Ci0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gbWVtb3J5IHJvdXRlcgotLy8vCi1gaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLQotbW9kdWxlIHNjcjFfaW1lbV9yb3V0ZXIKLSMoCi0gICAgcGFyYW1ldGVyIFNDUjFfQUREUl9NQVNLICAgID0gYFNDUjFfSU1FTV9BV0lEVEgnaEZGRkYwMDAwLAotICAgIHBhcmFtZXRlciBTQ1IxX0FERFJfUEFUVEVSTiA9IGBTQ1IxX0lNRU1fQVdJRFRIJ2gwMDAxMDAwMAotKQotKAotICAgIC8vIENvbnRyb2wgc2lnbmFscwotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAotCi0gICAgLy8gQ29yZSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcSwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgaW1lbV9jbWQsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgIGltZW1fYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgaW1lbV9yZGF0YSwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgaW1lbV9yZXNwLAotCi0gICAgLy8gUE9SVDAgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQwX3JlcV9hY2ssCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQwX3JlcSwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgcG9ydDBfY21kLAotICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICBwb3J0MF9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICBwb3J0MF9yZGF0YSwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgcG9ydDBfcmVzcCwKLQotICAgIC8vIFBPUlQxIGludGVyZmFjZQotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXFfYWNrLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MV9yZXEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIHBvcnQxX2NtZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgcG9ydDFfYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgcG9ydDFfcmRhdGEsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHBvcnQxX3Jlc3AKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0ZTTV9BRERSLAotICAgIFNDUjFfRlNNX0RBVEEKLX0gdHlwZV9zY3IxX2ZzbV9lOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlX3NjcjFfZnNtX2UgICAgICAgICAgICAgICAgIGZzbTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9zZWw7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3I7Ci1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgIHNlbF9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgc2VsX3Jlc3A7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbF9yZXFfYWNrOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZTTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gcG9ydF9zZWwgPSAoKGltZW1fYWRkciAmIFNDUjFfQUREUl9NQVNLKSA9PSBTQ1IxX0FERFJfUEFUVEVSTik7Ci0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGZzbSAgICAgICAgPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgcG9ydF9zZWxfciA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGNhc2UgKGZzbSkKLSAgICAgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgICAgIGlmIChpbWVtX3JlcSAmIHNlbF9yZXFfYWNrKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fREFUQTsKLSAgICAgICAgICAgICAgICAgICAgcG9ydF9zZWxfciA8PSBwb3J0X3NlbDsKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICAgICAgY2FzZSAoc2VsX3Jlc3ApCi0gICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX09LIDogYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWVtX3JlcSAmIHNlbF9yZXFfYWNrKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9EQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3IgPD0gcG9ydF9zZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAgICBTQ1IxX01FTV9SRVNQX1JEWV9FUiA6IGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKLSAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICBlbmRjYXNlCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZGNhc2UKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfY29tYiBiZWdpbgotICAgIGlmICgoZnNtID09IFNDUjFfRlNNX0FERFIpIHwgKChmc20gPT0gU0NSMV9GU01fREFUQSkgJiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spKSkgYmVnaW4KLSAgICAgICAgc2VsX3JlcV9hY2sgPSAocG9ydF9zZWwpID8gcG9ydDFfcmVxX2FjayA6IHBvcnQwX3JlcV9hY2s7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgc2VsX3JlcV9hY2sgPSAxJ2IwOwotICAgIGVuZAotZW5kCi0KLWFzc2lnbiBzZWxfcmRhdGEgPSAocG9ydF9zZWxfcikgPyBwb3J0MV9yZGF0YSA6IHBvcnQwX3JkYXRhOwotYXNzaWduIHNlbF9yZXNwICA9IChwb3J0X3NlbF9yKSA/IHBvcnQxX3Jlc3AgIDogcG9ydDBfcmVzcDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcmZhY2UgdG8gY29yZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gaW1lbV9yZXFfYWNrID0gc2VsX3JlcV9hY2s7Ci1hc3NpZ24gaW1lbV9yZGF0YSAgID0gc2VsX3JkYXRhOwotYXNzaWduIGltZW1fcmVzcCAgICA9IHNlbF9yZXNwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBQT1JUMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hbHdheXNfY29tYiBiZWdpbgotICAgIHBvcnQwX3JlcSA9IDEnYjA7Ci0gICAgY2FzZSAoZnNtKQotICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KLSAgICAgICAgICAgIHBvcnQwX3JlcSA9IGltZW1fcmVxICYgfnBvcnRfc2VsOwotICAgICAgICBlbmQKLSAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCi0gICAgICAgICAgICBpZiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIGJlZ2luCi0gICAgICAgICAgICAgICAgcG9ydDBfcmVxID0gaW1lbV9yZXEgJiB+cG9ydF9zZWw7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLWFzc2lnbiBwb3J0MF9jbWQgICA9ICh+cG9ydF9zZWwpID8gaW1lbV9jbWQgIDogU0NSMV9NRU1fQ01EX0VSUk9SOwotYXNzaWduIHBvcnQwX2FkZHIgID0gKH5wb3J0X3NlbCkgPyBpbWVtX2FkZHIgOiAneDsKLWBlbHNlIC8vIFNDUjFfWFBST1BfRU4KLWFzc2lnbiBwb3J0MF9jbWQgICA9IGltZW1fY21kIDsKLWFzc2lnbiBwb3J0MF9hZGRyICA9IGltZW1fYWRkcjsKLWBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZXJmYWNlIHRvIFBPUlQxCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcG9ydDFfcmVxID0gMSdiMDsKLSAgICBjYXNlIChmc20pCi0gICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgotICAgICAgICAgICAgcG9ydDFfcmVxID0gaW1lbV9yZXEgJiBwb3J0X3NlbDsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgotICAgICAgICAgICAgaWYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBiZWdpbgotICAgICAgICAgICAgICAgIHBvcnQxX3JlcSA9IGltZW1fcmVxICYgcG9ydF9zZWw7Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLQotYGlmZGVmIFNDUjFfWFBST1BfRU4KLWFzc2lnbiBwb3J0MV9jbWQgICA9IChwb3J0X3NlbCkgPyBpbWVtX2NtZCAgOiBTQ1IxX01FTV9DTURfRVJST1I7Ci1hc3NpZ24gcG9ydDFfYWRkciAgPSAocG9ydF9zZWwpID8gaW1lbV9hZGRyIDogJ3g7Ci1gZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCi1hc3NpZ24gcG9ydDFfY21kICAgPSBpbWVtX2NtZCA7Ci1hc3NpZ24gcG9ydDFfYWRkciAgPSBpbWVtX2FkZHI7Ci1gZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU0NSMV9TVkFfSU1FTV9SVF9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgaW1lbV9yZXEgfC0+ICEkaXN1bmtub3duKHtwb3J0X3NlbCwgaW1lbV9jbWR9KQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gcm91dGVyIEVycm9yOiB1bmtub3duIHZhbHVlcyIpOwotCi1gZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KLQotZW5kbW9kdWxlIDogc2NyMV9pbWVtX3JvdXRlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fd2Iuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM0NmI1OS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdgorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICB5aWZpdmUgV2lzaGJvbmUgaW50ZXJmYWNlIGZvciBJbnN0cnVjdGlvbiBtZW1vcnkgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICBpbnRlZ3JhdGVkIHdpc2hib25lIGkvZiB0byBpbnN0cnVjdGlvbiBtZW1vcnkgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICB2MDogICAgSnVuZSA3LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgIHdpc2hib25lIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCi0vLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCi0vLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi0vLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi0vLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCi0vLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi0vLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi0vLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCi0vLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCi0vLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi0vLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi0vLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCi0vLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgT3JnaW5hbCBvd25lciBEZXRhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfaW1lbV93Yi5zdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gbWVtb3J5IEFIQiBicmlkZ2UgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWBpbmNsdWRlICJzY3IxX3diLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLQotbW9kdWxlIHNjcjFfaW1lbV93YiAoCi0gICAgLy8gQ29udHJvbCBTaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCi0KLSAgICAvLyBDb3JlIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxLAotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICBpbWVtX2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIGltZW1fcmRhdGEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGltZW1fcmVzcCwKLQotICAgIC8vIFdCIEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9hZHJfbywgLy8gYWRkcmVzcwotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfd2VfbywgIC8vIHdyaXRlCi0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3NlbF9vLCAvLyBieXRlIGVuYWJsZQotICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZGF0X2ksIC8vIGRhdGEgaW5wdXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZXJyX2kgIC8vIGVycm9yCi0KLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycyBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1gaWZuZGVmIFNDUjFfSU1FTV9XQl9PVVRfQlAKLWxvY2FscGFyYW0gIFNDUjFfRklGT19XSURUSCA9IDI7Ci1sb2NhbHBhcmFtICBTQ1IxX0ZJRk9fQ05UX1dJRFRIID0gJGNsb2cyKFNDUjFfRklGT19XSURUSCsxKTsKLWBlbmRpZiAvLyBTQ1IxX0lNRU1fV0JfT1VUX0JQCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBlbnVtIGxvZ2ljIHsKLSAgICBTQ1IxX0ZTTV9BRERSID0gMSdiMCwKLSAgICBTQ1IxX0ZTTV9EQVRBID0gMSdiMSwKLSAgICBTQ1IxX0ZTTV9FUlIgID0gMSdieAotfSB0eXBlX3NjcjFfZnNtX2U7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgIGhhZGRyOwotfSB0eXBlX3NjcjFfcmVxX2ZpZm9fczsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZXNwOwotICAgIGxvZ2ljICAgW1NDUjFfV0JfV0lEVEgtMTowXSAgICBocmRhdGE7Ci19IHR5cGVfc2NyMV9yZXNwX2ZpZm9fczsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZV9zY3IxX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc207Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb193cjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fdXA7Ci1gaWZkZWYgU0NSMV9JTUVNX1dCX09VVF9CUAotdHlwZV9zY3IxX3JlcV9maWZvX3MgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19yOwotdHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6MF0gICAgICAgICAgICAgICAgICByZXFfZmlmbzsKLWBlbHNlIC8vIFNDUjFfSU1FTV9XQl9PVVRfQlAKLWxvZ2ljIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZG91dDsKLWBlbmRpZiAvLyBTQ1IxX0lNRU1fV0JfT1VUX0JQCi0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZW1wdHk7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2Z1bGw7Ci0KLXR5cGVfc2NyMV9yZXNwX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm9faHJlYWR5OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBDb3JlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBpbWVtX3JlcV9hY2sgPSB+cmVxX2ZpZm9fZnVsbDsKLWFzc2lnbiByZXFfZmlmb193ciAgPSB+cmVxX2ZpZm9fZnVsbCAmIGltZW1fcmVxOwotCi1hc3NpZ24gaW1lbV9yZGF0YSA9IHJlc3BfZmlmby5ocmRhdGE7Ci0KLWFzc2lnbiBpbWVtX3Jlc3AgPSAocmVzcF9maWZvX2hyZWFkeSkKLSAgICAgICAgICAgICAgICAgICAgPyAocmVzcF9maWZvLmhyZXNwID09IDEnYjEpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfTUVNX1JFU1BfUkRZX09LCi0gICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1JFU1BfUkRZX0VSCi0gICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUkVRX0ZJRk8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfSU1FTV9XQl9PVVRfQlAKLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAofnJlcV9maWZvX2Z1bGwpIGJlZ2luCi0gICAgICAgICAgICByZXFfZmlmb19mdWxsIDw9IGltZW1fcmVxICYgfnJlcV9maWZvX3JkOwotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSB+cmVxX2ZpZm9fcmQ7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi1hc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHJlcV9maWZvX2Z1bGwgfCBpbWVtX3JlcSk7Ci0KLWFzc2lnbiByZXFfZmlmb191cCAgICA9IH5yZXFfZmlmb19yZCAmIHJlcV9maWZvX3dyOwotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgotICAgICAgICByZXFfZmlmb19yLmhhZGRyIDw9IGltZW1fYWRkcjsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gcmVxX2ZpZm9bMF0gPSAocmVxX2ZpZm9fZnVsbCkgPyByZXFfZmlmb19yIDogaW1lbV9hZGRyOwotCi1gZWxzZSAvLyBTQ1IxX0lNRU1fV0JfT1VUX0JQCi0KLQotIHN5bmNfZmlmbyAjKAotICAgICAgLkRBVEFfV0lEVEgoU0NSMV9XQl9XSURUSCksIC8vIERhdGEgV2lkdGgKLSAgICAgIC5BRERSX1dJRFRIKDEpLCAgIC8vIEFkZHJlc3MgV2lkdGgKLSAgICAgIC5GSUZPX0RFUFRIKDIpICAgIC8vIEZJRk8gREVQVEgKLSAgICAgKSAgIHVfcmVxX2ZpZm8oCi0KLSAgICAgICAuZG91dCAgICAgIChyZXFfZmlmb19kb3V0ICApLAotCi0gICAgICAgLnJzdG4gICAgICAocnN0X24gICAgICAgICAgKSwKLSAgICAgICAuY2xrICAgICAgIChjbGsgICAgICAgICAgICApLAotICAgICAgIC53cl9lbiAgICAgKHJlcV9maWZvX3dyICAgICksIC8vIFdyaXRlCi0gICAgICAgLnJkX2VuICAgICAocmVxX2ZpZm9fcmQgICAgKSwgLy8gUmVhZAotICAgICAgIC5kaW4gICAgICAgKGltZW1fYWRkciAgICAgICksCi0gICAgICAgLmZ1bGwgICAgICAocmVxX2ZpZm9fZnVsbCAgKSwKLSAgICAgICAuZW1wdHkgICAgIChyZXFfZmlmb19lbXB0eSApCi0pOwotCi0KLQotCi1gZW5kaWYgLy8gU0NSMV9JTUVNX1dCX09VVF9CUAotCi0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgcmVxX2ZpZm9fcmQgPSAxJ2IwOwotICAgIGlmICh3YmRfYWNrX2kpIGJlZ2luCi0gICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eTsKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZJRk8gcmVzcG9uc2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYGlmZGVmIFNDUjFfSU1FTV9XQl9JTl9CUAotYXNzaWduIHJlc3BfZmlmb19ocmVhZHkgPSB3YmRfYWNrX2k7Ci1hc3NpZ24gcmVzcF9maWZvLmhyZXNwICA9ICh3YmRfZXJyX2kpID8gMSdiMCA6IDEnYjE7Ci1hc3NpZ24gcmVzcF9maWZvLmhyZGF0YSA9IHdiZF9kYXRfaTsKLWFzc2lnbiB3YmRfc3RiX28gICAgICAgID0gfnJlcV9maWZvX2VtcHR5OwotYXNzaWduIHdiZF9hZHJfbyAgICAgICAgPSByZXFfZmlmb1swXTsKLWFzc2lnbiB3YmRfd2VfbyAgICAgICAgID0gMDsgLy8gT25seSBSZWFkIHN1cHBvcnRlZAotYXNzaWduIHdiZF9kYXRfbyAgICAgICAgPSAzMidoMDsgLy8gTm8gV3JpdGUKLWFzc2lnbiB3YmRfc2VsX28gICAgICAgID0gNCdiMTExMTsgLy8gT25seSBSZWFkIGFsbG93ZWQgaW4gaW1lbSBpL2YKLQotCi1gZWxzZSAvLyBTQ1IxX0lNRU1fV0JfSU5fQlAKLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJlc3BfZmlmb19ocmVhZHkgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICByZXNwX2ZpZm9faHJlYWR5IDw9IHdiZF9hY2tfaSA7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKHdiZF9hY2tfaSkgYmVnaW4KLSAgICAgICAgcmVzcF9maWZvLmhyZXNwICA8PSAod2JkX2Vycl9pKSA/IDEnYjAgOiAxJ2IxOwotICAgICAgICByZXNwX2ZpZm8uaHJkYXRhIDw9IHdiZF9kYXRfaTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gd2JkX3N0Yl9vICAgID0gfnJlcV9maWZvX2VtcHR5OwotYXNzaWduIHdiZF9hZHJfbyAgICA9IHJlcV9maWZvX2RvdXQ7Ci1hc3NpZ24gd2JkX3dlX28gICAgID0gMDsgLy8gT25seSBSZWFkIHN1cHBvcnRlZAotYXNzaWduIHdiZF9kYXRfbyAgICA9IDMyJ2gwOyAvLyBObyBXcml0ZQotYXNzaWduIHdiZF9zZWxfbyAgICA9IDQnYjExMTE7IC8vIE9ubHkgUmVhZCBhbGxvd2VkIGluIGltZW0gaS9mCi1gZW5kaWYgLy8gU0NSMV9JTUVNX1dCX0lOX0JQCi0KLQotCi1gaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ2hlY2sgQ29yZSBpbnRlcmZhY2UKLVNDUjFfU1ZBX0lNRU1fV0JfQlJJREdFX1JFUV9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAotICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCi0gICAgISRpc3Vua25vd24oaW1lbV9yZXEpCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBXQiBicmlkZ2UgRXJyb3I6IGltZW1fcmVxIGhhcyB1bmtub3duIHZhbHVlcyIpOwotCi1TQ1IxX0lNRU1fV0JfQlJJREdFX0FERFJfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgIGltZW1fcmVxIHwtPiAhJGlzdW5rbm93bihpbWVtX2FkZHIpCi0gICAgKSBlbHNlICRlcnJvcigiSU1FTSBXQiBicmlkZ2UgRXJyb3I6IGltZW1fYWRkciBoYXMgdW5rbm93biB2YWx1ZXMiKTsKLQotU0NSMV9JTUVNX1dCX0JSSURHRV9BRERSX0FMTElHTiA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICBpbWVtX3JlcSB8LT4gKGltZW1fYWRkclsxOjBdID09ICcwKQotICAgICkgZWxzZSAkZXJyb3IoIklNRU0gV0IgYnJpZGdlIEVycm9yOiBpbWVtX2FkZHIgaGFzIHVuYWxpZ24gdmFsdWVzIik7Ci0KLS8vIENoZWNrIFdCIGludGVyZmFjZQotU0NSMV9JTUVNX1dCX0JSSURHRV9IUkVBRFlfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKLSAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQotICAgICEkaXN1bmtub3duKGhyZWFkeSkKLSAgICApIGVsc2UgJGVycm9yKCJJTUVNIFdCIGJyaWRnZSBFcnJvcjogaHJlYWR5IGhhcyB1bmtub3duIHZhbHVlcyIpOwotCi1TQ1IxX0lNRU1fV0JfQlJJREdFX0hSRVNQX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCi0gICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKLSAgICAhJGlzdW5rbm93bihocmVzcCkKLSAgICApIGVsc2UgJGVycm9yKCJJTUVNIFdCIGJyaWRnZSBFcnJvcjogaHJlc3AgaGFzIHVua25vd24gdmFsdWVzIik7Ci0KLWBlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgotCi1lbmRtb2R1bGUgOiBzY3IxX2ltZW1fd2IKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9tZW1fYXhpLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX21lbV9heGkuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YmI3ZWEuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX21lbV9heGkuc3YKKysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV9tZW1fYXhpLnN2PgotLy8vIEBicmllZiAgICAgIE1lbW9yeSBBWEkgYnJpZGdlCi0vLy8KLQotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLW1vZHVsZSBzY3IxX21lbV9heGkKLSMoCi0gICAgcGFyYW1ldGVyIFNDUjFfUkVRX0JVRl9TSVpFICAgICA9IDIsICAgICAgICAgICAgICAgICAgICAvLyBQb3dlciBvZiAyIHZhbHVlCi0gICAgcGFyYW1ldGVyIFNDUjFfQVhJX0lEV0lEVEggICAgICA9IDQsCi0gICAgcGFyYW1ldGVyIFNDUjFfQUREUl9XSURUSCAgICAgICA9IDMyLAotICAgIHBhcmFtZXRlciBTQ1IxX0FYSV9SRVFfQlAgICAgICAgPSAxLAotICAgIHBhcmFtZXRlciBTQ1IxX0FYSV9SRVNQX0JQICAgICAgPSAxCi0pCi0oCi0gICAgLy8gQ2xvY2sgYW5kIFJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9yZWluaXQsCi0gICAgLy8gQ29yZSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pZGxlLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVxLAotICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBjb3JlX2NtZCwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgY29yZV93aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FERFJfV0lEVEgtMTowXSAgICAgY29yZV9hZGRyLAotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICBjb3JlX3dkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICBjb3JlX3JkYXRhLAotICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICBjb3JlX3Jlc3AsCi0KLSAgICAvLyBBWEkKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FYSV9JRFdJRFRILTE6MF0gICAgYXdpZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FERFJfV0lEVEgtMTowXSAgICAgYXdhZGRyLAotICAgIG91dHB1dCAgbG9naWMgWyA3OjBdICAgICAgICAgICAgICAgICAgICBhd2xlbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMjowXSAgICAgICAgICAgICAgICAgICAgYXdzaXplLAotICAgIG91dHB1dCAgbG9naWMgWyAxOjBdICAgICAgICAgICAgICAgICAgICBhd2J1cnN0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2xvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGF3Y2FjaGUsCi0gICAgb3V0cHV0ICBsb2dpYyBbIDI6MF0gICAgICAgICAgICAgICAgICAgIGF3cHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXdyZWdpb24sCi0gICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGF3dXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXdxb3MsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3dmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3cmVhZHksCi0gICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgIHdkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICB3c3RyYiwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2xhc3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgIHd1c2VyLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3dmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FYSV9JRFdJRFRILTE6MF0gICAgYmlkLAotICAgIGlucHV0ICAgbG9naWMgWyAxOjBdICAgICAgICAgICAgICAgICAgICBicmVzcCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBidXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWR5LAotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfQVhJX0lEV0lEVEgtMTowXSAgICBhcmlkLAotICAgIG91dHB1dCAgbG9naWMgW1NDUjFfQUREUl9XSURUSC0xOjBdICAgICBhcmFkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbIDc6MF0gICAgICAgICAgICAgICAgICAgIGFybGVuLAotICAgIG91dHB1dCAgbG9naWMgWyAyOjBdICAgICAgICAgICAgICAgICAgICBhcnNpemUsCi0gICAgb3V0cHV0ICBsb2dpYyBbIDE6MF0gICAgICAgICAgICAgICAgICAgIGFyYnVyc3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFybG9jaywKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXJjYWNoZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMjowXSAgICAgICAgICAgICAgICAgICAgYXJwcm90LAotICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhcnJlZ2lvbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXJ1c2VyLAotICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhcnFvcywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJ2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FYSV9JRFdJRFRILTE6MF0gICAgcmlkLAotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICByZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljIFsgMTowXSAgICAgICAgICAgICAgICAgICAgcnJlc3AsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJsYXN0LAotICAgIGlucHV0ICAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBydXNlciwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZhbGlkLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBycmVhZHkKLSk7Ci0KLQotLy8gTG9jYWwgZnVuY3Rpb25zCi1mdW5jdGlvbiBhdXRvbWF0aWMgbG9naWMgWzI6MF0gd2lkdGgyYXhzaXplICgKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICB3aWR0aCApOwotICAgIGxvZ2ljIFsyOjBdIGF4c2l6ZTsKLWJlZ2luCi0gICAgY2FzZSAod2lkdGgpCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiAgYXhzaXplID0gMydiMDAwOwotICAgICAgICBTQ1IxX01FTV9XSURUSF9IV09SRDogIGF4c2l6ZSA9IDMnYjAwMTsKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfV09SRCA6ICBheHNpemUgPSAzJ2IwMTA7Ci0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgYXhzaXplID0gJ3g7Ci0gICAgZW5kY2FzZQotCi0gICAgd2lkdGgyYXhzaXplID0gYXhzaXplOyAvLyBjcC4xMQotZW5kCi1lbmRmdW5jdGlvbgotCi10eXBlZGVmIHN0cnVjdCBwYWNrZWQgewotICAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfd2lkdGg7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgIFtTQ1IxX0FERFJfV0lEVEgtMTowXSAgICAgIGF4aV9hZGRyOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMzE6MF0gICAgICBheGlfd2RhdGE7Ci19IHR5cGVfc2NyMV9yZXF1ZXN0X3M7Ci0KLXR5cGVkZWYgc3RydWN0IHBhY2tlZCB7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV93cml0ZTsKLSAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2FkZHI7Ci0gICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9kYXRhOwotICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfcmVzcDsKLX0gdHlwZV9zY3IxX3JlcV9zdGF0dXNfczsKLQotCi0vL3R5cGVfc2NyMV9yZXF1ZXN0X3MgICAgICAgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgIHJlcV9maWZvOwotbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19heGlfd2lkdGhbU0NSMV9SRVFfQlVGX1NJWkUtMTowXTsKLWxvZ2ljIFtTQ1IxX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fYXhpX2FkZHIgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF07Ci1sb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2F4aV93ZGF0YSBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXTsKLS8vdHlwZV9zY3IxX3JlcV9zdGF0dXNfcyAgICAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgcmVxX3N0YXR1czsKLWxvZ2ljICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0YXR1c19yZXFfd3JpdGUgOwotbG9naWMgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgICAgICAgICAgICAgICAgICAgICAgICByZXFfc3RhdHVzX3JlcV9hZGRyIDsKLWxvZ2ljICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0YXR1c19yZXFfZGF0YSA7Ci1sb2dpYyAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX3Jlc3AgOwotLy90eXBlX3NjcjFfcmVxX3N0YXR1c19zICAgICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICByZXFfc3RhdHVzX25ldzsKLWxvZ2ljICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX3dyaXRlIDsKLWxvZ2ljICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX2FkZHIgOwotbG9naWMgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgICAgICAgICAgICAgICAgICAgICAgICByZXFfc3RhdHVzX25ld19yZXFfZGF0YSA7Ci1sb2dpYyAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9yZXNwIDsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICByZXFfc3RhdHVzX2VuOwotbG9naWMgICAgICAgICAgICAgICBbJGNsb2cyKFNDUjFfUkVRX0JVRl9TSVpFKS0xOjBdICAgICByZXFfYXZhbF9wdHI7Ci1sb2dpYyAgICAgICAgICAgICAgIFskY2xvZzIoU0NSMV9SRVFfQlVGX1NJWkUpLTE6MF0gICAgIHJlcV9wcm9jX3B0cjsKLWxvZ2ljICAgICAgICAgICAgICAgWyRjbG9nMihTQ1IxX1JFUV9CVUZfU0laRSktMTowXSAgICAgcmVxX2RvbmVfcHRyOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycmVzcF9lcnI7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFszMTowXSAgICAgIHJjdmRfcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdmRfcmVzcDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfcmVhZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfd3JpdGU7Ci0KLQotCi1hc3NpZ24gY29yZV9yZXFfYWNrID0gICB+YXhpX3JlaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICYKLSAgICAgICAgICAgICAgICAgICAgICAgIH5yZXFfc3RhdHVzX3JlcV9yZXNwW3JlcV9hdmFsX3B0cl0gJgotICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVzcCE9U0NSMV9NRU1fUkVTUF9SRFlfRVI7Ci0KLQotYXNzaWduIHJyZWFkeSAgICAgID0gfnJlcV9zdGF0dXNfcmVxX3dyaXRlW3JlcV9kb25lX3B0cl07Ci1hc3NpZ24gYnJlYWR5ICAgICAgPSAgcmVxX3N0YXR1c19yZXFfd3JpdGVbcmVxX2RvbmVfcHRyXTsKLQotCi1hc3NpZ24gZm9yY2VfcmVhZCAgPSBTQ1IxX0FYSV9SRVFfQlAgJiBjb3JlX3JlcSAmIGNvcmVfcmVxX2FjayAmIHJlcV9hdmFsX3B0cj09cmVxX3Byb2NfcHRyICYgY29yZV9jbWQ9PVNDUjFfTUVNX0NNRF9SRDsKLWFzc2lnbiBmb3JjZV93cml0ZSA9IFNDUjFfQVhJX1JFUV9CUCAmIGNvcmVfcmVxICYgY29yZV9yZXFfYWNrICYgcmVxX2F2YWxfcHRyPT1yZXFfcHJvY19wdHIgJiBjb3JlX2NtZD09U0NSMV9NRU1fQ01EX1dSOwotCi1pbnRlZ2VyIGk7Ci1hbHdheXNfY29tYiBiZWdpbjogaWRsZV9zdGF0dXMKLSAgICBjb3JlX2lkbGUgPSAxJ2IxOwotICAgIGZvciAoaT0wOyBpPFNDUjFfUkVRX0JVRl9TSVpFOyBpPWkrMSkgYmVnaW4KLSAgICAgICAgY29yZV9pZGxlICY9IHJlcV9zdGF0dXNfcmVxX3Jlc3BbaV09PTEnYjA7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKGNvcmVfcmVxICYgY29yZV9yZXFfYWNrKSBiZWdpbgotICAgICAgICByZXFfZmlmb19heGlfd2lkdGhbcmVxX2F2YWxfcHRyXSA8PSBjb3JlX3dpZHRoOwotICAgICAgICByZXFfZmlmb19heGlfYWRkcltyZXFfYXZhbF9wdHJdICA8PSBjb3JlX2FkZHI7Ci0gICAgICAgIHJlcV9maWZvX2F4aV93ZGF0YVtyZXFfYXZhbF9wdHJdIDw9IGNvcmVfd2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotLy8gUmVxdWVzdCBTdGF0dXMgUXVldWUKLS8vIEl0IGlzIHVzZWQgZm9yIGhvbGRpbmcgY29udHJvbCBpbmZvIG9mIHByb2Nlc3NpbmcgcmVxdWVzdHMKLQotLy8gQ29tYmluYXRpb25hbCBsb2dpYyBvZiBSZXF1ZXN0IFN0YXR1cyBRdWV1ZQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICAvLyBEZWZhdWx0Ci0gICAgcmVxX3N0YXR1c19lbiAgPSAnMDsgLy8gTm8gdXBkYXRlCi0gICAgcmVxX3N0YXR1c19uZXdfcmVxX3dyaXRlID0gcmVxX3N0YXR1c19yZXFfd3JpdGU7IC8vIEhvbGQgcmVxdWVzdCBpbmZvCi0gICAgcmVxX3N0YXR1c19uZXdfcmVxX2FkZHIgID0gcmVxX3N0YXR1c19yZXFfYWRkcjsgLy8gSG9sZCByZXF1ZXN0IGluZm8KLSAgICByZXFfc3RhdHVzX25ld19yZXFfZGF0YSAgPSByZXFfc3RhdHVzX3JlcV9kYXRhOyAvLyBIb2xkIHJlcXVlc3QgaW5mbwotICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9yZXNwICA9IHJlcV9zdGF0dXNfcmVxX3Jlc3A7IC8vIEhvbGQgcmVxdWVzdCBpbmZvCi0KLSAgICAvLyBVcGRhdGUgc3RhdHVzIG9uIG5ldyBjb3JlIHJlcXVlc3QKLSAgICBpZiggY29yZV9yZXEgJiBjb3JlX3JlcV9hY2sgKSBiZWdpbgotICAgICAgICByZXFfc3RhdHVzX2VuW3JlcV9hdmFsX3B0cl0gICAgICAgICAgICA9IDEnZDE7Ci0KLSAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX3Jlc3BbcmVxX2F2YWxfcHRyXSAgPSAxJ2QxOwotICAgICAgICByZXFfc3RhdHVzX25ld19yZXFfd3JpdGVbcmVxX2F2YWxfcHRyXSA9IGNvcmVfY21kID09IFNDUjFfTUVNX0NNRF9XUjsKLQotICAgICAgICByZXFfc3RhdHVzX25ld19yZXFfYWRkcltyZXFfYXZhbF9wdHJdICA9IH4oIChmb3JjZV9yZWFkICYgYXJyZWFkeSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JjZV93cml0ZSAmIGF3cmVhZHkpICk7Ci0KLSAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX2RhdGFbcmVxX2F2YWxfcHRyXSAgPSB+KCAoZm9yY2Vfd3JpdGUgJiB3cmVhZHkgJiBhd2xlbiA9PSA4J2QwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5mb3JjZV93cml0ZSAmIGNvcmVfY21kID09IFNDUjFfTUVNX0NNRF9SRCkgKTsKLSAgICBlbmQKLQotICAgIC8vIFVwZGF0ZSBzdGF0dXMgb24gQVhJIGFkZHJlc3MgcGhhc2UKLSAgICBpZiAoIChhd3ZhbGlkICYgYXdyZWFkeSkgfCAoYXJ2YWxpZCAmIGFycmVhZHkpICkgYmVnaW4KLSAgICAgICAgcmVxX3N0YXR1c19lbltyZXFfcHJvY19wdHJdICAgICAgICAgICA9IDEnZDE7Ci0gICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9hZGRyW3JlcV9wcm9jX3B0cl0gPSAxJ2QwOwotICAgIGVuZAotCi0gICAgLy8gVXBkYXRlIHN0YXR1cyBvbiBBWEkgZGF0YSBwaGFzZQotICAgIGlmICggd3ZhbGlkICYgd3JlYWR5ICYgd2xhc3QgKSBiZWdpbgotICAgICAgICByZXFfc3RhdHVzX2VuW3JlcV9wcm9jX3B0cl0gICAgICAgICAgID0gMSdkMTsKLSAgICAgICAgcmVxX3N0YXR1c19uZXdfcmVxX2RhdGFbcmVxX3Byb2NfcHRyXSA9IDEnZDA7Ci0gICAgZW5kCi0KLSAgICAvLyBVcGRhdGUgc3RhdHVzIHdoZW4gQVhJIGZpbmlzaCB0cmFuc2FjdGlvbgotICAgIGlmICggKGJ2YWxpZCAmIGJyZWFkeSkgfCAocnZhbGlkICYgcnJlYWR5ICYgcmxhc3QpICkgYmVnaW4KLSAgICAgICAgcmVxX3N0YXR1c19lbltyZXFfZG9uZV9wdHJdICAgICAgICAgICA9IDEnZDE7Ci0gICAgICAgIHJlcV9zdGF0dXNfbmV3X3JlcV9yZXNwW3JlcV9kb25lX3B0cl0gPSAxJ2QwOwotICAgIGVuZAotZW5kCi0KLS8vIFJlcXVlc3QgU3RhdHVzIFF1ZXVlIHJlZ2lzdGVyCi1pbnRlZ2VyIGo7Ci1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfc3RhdHVzX3JlcV93cml0ZSA8PSAnMDsKLSAgICAgICAgcmVxX3N0YXR1c19yZXFfYWRkciA8PSAnMDsKLSAgICAgICAgcmVxX3N0YXR1c19yZXFfZGF0YSA8PSAnMDsKLSAgICAgICAgcmVxX3N0YXR1c19yZXFfcmVzcCA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBmb3IgKGogPSAwOyBqIDwgU0NSMV9SRVFfQlVGX1NJWkU7IGogPSBqKzEpIGJlZ2luIC8vIGNwLjQKLSAgICAgICAgICAgIGlmICggcmVxX3N0YXR1c19lbltqXSApIGJlZ2luCi0gICAgICAgICAgICAgICAgcmVxX3N0YXR1c19yZXFfd3JpdGVbal0gPD0gcmVxX3N0YXR1c19uZXdfcmVxX3dyaXRlW2pdOwotICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX2FkZHJbal0gIDw9IHJlcV9zdGF0dXNfbmV3X3JlcV9hZGRyW2pdOwotICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX2RhdGFbal0gIDw9IHJlcV9zdGF0dXNfbmV3X3JlcV9kYXRhW2pdOwotICAgICAgICAgICAgICAgIHJlcV9zdGF0dXNfcmVxX3Jlc3Bbal0gIDw9IHJlcV9zdGF0dXNfbmV3X3JlcV9yZXNwW2pdOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9hdmFsX3B0ciA8PSAnMDsKLSAgICBlbHNlIGlmIChjb3JlX3JlcSAmIGNvcmVfcmVxX2FjaykgICByZXFfYXZhbF9wdHIgPD0gcmVxX2F2YWxfcHRyICsgMSdiMTsKLWVuZAotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICByZXFfcHJvY19wdHIgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXd2YWxpZCAmIGF3cmVhZHkgJiB3dmFsaWQgJiB3cmVhZHkgJiB3bGFzdCkgfAotICAgICAgICAgICAgKH5mb3JjZV93cml0ZSAmIH5yZXFfc3RhdHVzX3JlcV9kYXRhW3JlcV9wcm9jX3B0cl0gJiBhd3ZhbGlkICYgYXdyZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8Ci0gICAgICAgICAgICAofmZvcmNlX3dyaXRlICYgfnJlcV9zdGF0dXNfcmVxX2FkZHJbcmVxX3Byb2NfcHRyXSAmICAgICAgICAgICAgICAgICAgICAgd3ZhbGlkICYgd3JlYWR5ICYgd2xhc3QpIHwKLSAgICAgICAgICAgICggICAgICAgICAgICAgICB+cmVxX3N0YXR1c19yZXFfZGF0YVtyZXFfcHJvY19wdHJdICYgYXJ2YWxpZCAmIGFycmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICkgICkgYmVnaW4KLQotICAgICAgICAgICAgcmVxX3Byb2NfcHRyIDw9IHJlcV9wcm9jX3B0ciArIDEnYjE7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJlcV9kb25lX3B0ciA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAoKGJ2YWxpZCAmIGJyZWFkeSB8IHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSAmIHJlcV9zdGF0dXNfcmVxX3Jlc3BbcmVxX2RvbmVfcHRyXSkgYmVnaW4KLQotICAgICAgICAgICAgcmVxX2RvbmVfcHRyIDw9IHJlcV9kb25lX3B0ciArIDEnYjE7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLQotCi1hc3NpZ24gYXJ2YWxpZCA9IHJlcV9zdGF0dXNfcmVxX2FkZHJbcmVxX3Byb2NfcHRyXSAmIH5yZXFfc3RhdHVzX3JlcV93cml0ZVtyZXFfcHJvY19wdHJdIHwgZm9yY2VfcmVhZDsKLWFzc2lnbiBhd3ZhbGlkID0gcmVxX3N0YXR1c19yZXFfYWRkcltyZXFfcHJvY19wdHJdICYgIHJlcV9zdGF0dXNfcmVxX3dyaXRlW3JlcV9wcm9jX3B0cl0gfCBmb3JjZV93cml0ZTsKLWFzc2lnbiAgd3ZhbGlkID0gcmVxX3N0YXR1c19yZXFfZGF0YVtyZXFfcHJvY19wdHJdICYgIHJlcV9zdGF0dXNfcmVxX3dyaXRlW3JlcV9wcm9jX3B0cl0gfCBmb3JjZV93cml0ZTsKLQotYXNzaWduIGFyYWRkciAgPSAofmZvcmNlX3JlYWQgKT8gcmVxX2ZpZm9fYXhpX2FkZHJbcmVxX3Byb2NfcHRyXSA6IGNvcmVfYWRkcjsKLWFzc2lnbiBhd2FkZHIgID0gKH5mb3JjZV93cml0ZSk/IHJlcV9maWZvX2F4aV9hZGRyW3JlcV9wcm9jX3B0cl0gOiBjb3JlX2FkZHI7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaWYgKGJ2YWxpZCAmIGJyZWFkeSAmIHJlcV9zdGF0dXNfcmVxX3Jlc3BbcmVxX2RvbmVfcHRyXSkgYmVnaW4KLSAgICAgICAgcmN2ZF9yZXNwID0gKGJyZXNwPT0yJ2IwMCk/IFNDUjFfTUVNX1JFU1BfUkRZX09LIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX0VSOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChydmFsaWQgJiBycmVhZHkgJiBybGFzdCAmIHJlcV9zdGF0dXNfcmVxX3Jlc3BbcmVxX2RvbmVfcHRyXSkgYmVnaW4KLSAgICAgICAgICAgIHJjdmRfcmVzcCA9IChycmVzcD09MidiMDApPyBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9NRU1fUkVTUF9SRFlfRVI7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICByY3ZkX3Jlc3AgPSBTQ1IxX01FTV9SRVNQX05PVFJEWTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotCi13aXJlIFtTQ1IxX0FERFJfV0lEVEgtMTowXSBDdXJBZGRyMSA9IHJlcV9maWZvX2F4aV9hZGRyW3JlcV9wcm9jX3B0cl07Ci13aXJlIFsxOjBdICBiU2hpZnQxID0gQ3VyQWRkcjFbMTowXTsKLQotLy8gV3JpdGUgZGF0YSBzaWduYWxzIGFkYXB0YXRpb24KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgaWYgKGZvcmNlX3dyaXRlKQotICAgICAgICBjYXNlIChjb3JlX3dpZHRoKQotICAgICAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6ICB3c3RyYiA9IDQnaDEgPDwgY29yZV9hZGRyWzE6MF07Ci0gICAgICAgICAgICBTQ1IxX01FTV9XSURUSF9IV09SRDogIHdzdHJiID0gNCdoMyA8PCBjb3JlX2FkZHJbMTowXTsKLSAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgOiAgd3N0cmIgPSA0J2hmIDw8IGNvcmVfYWRkclsxOjBdOwotICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICB3c3RyYiA9ICd4OwotICAgICAgICBlbmRjYXNlCi0gICAgZWxzZQotICAgICAgICBjYXNlIChyZXFfZmlmb19heGlfd2lkdGhbcmVxX3Byb2NfcHRyXSkKLSAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiAgd3N0cmIgPSA0J2gxIDw8IGJTaGlmdDE7Ci0gICAgICAgICAgICBTQ1IxX01FTV9XSURUSF9IV09SRDogIHdzdHJiID0gNCdoMyA8PCBiU2hpZnQxOwotICAgICAgICAgICAgU0NSMV9NRU1fV0lEVEhfV09SRCA6ICB3c3RyYiA9IDQnaGYgPDwgYlNoaWZ0MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgd3N0cmIgPSAneDsKLSAgICAgICAgZW5kY2FzZQotZW5kCi0KLQotCi1hc3NpZ24gd2RhdGEgPSAoZm9yY2Vfd3JpdGUpPyAgICAgICAgICAgICAgICAgICAgICAgY29yZV93ZGF0YSA8PCAoOCogICAgICAgICAgICAgICAgICAgICAgIGNvcmVfYWRkclsxOjBdKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19heGlfd2RhdGFbcmVxX3Byb2NfcHRyXSA8PCAoOCogYlNoaWZ0MSk7Ci0KLQotLy8gUmVhZCBkYXRhIGFkYXB0YXRpb24KLWFsd2F5c19jb21iIGJlZ2luCi0gICBjYXNlIChyZXFfZmlmb19heGlfd2lkdGhbcmVxX2RvbmVfcHRyXSkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6ICByY3ZkX3JkYXRhID0gcmRhdGEgPj4gKDgqYlNoaWZ0Mik7Ci0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEOiAgcmN2ZF9yZGF0YSA9IHJkYXRhID4+ICg4KmJTaGlmdDIpOwotICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogIHJjdmRfcmRhdGEgPSByZGF0YSA+PiAoOCpiU2hpZnQyKTsKLSAgICAgICAgZGVmYXVsdDogIHJjdmRfcmRhdGEgPSAneDsKLSAgICBlbmRjYXNlIAotZW5kCi0KLQotZ2VuZXJhdGUKLSAgICBpZiAoU0NSMV9BWElfUkVTUF9CUCA9PSAxKSBiZWdpbiA6IGF4aV9yZXNwX2JwCi0gICAgICAgIGFzc2lnbiBjb3JlX3JkYXRhID0gKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSA/IHJjdmRfcmRhdGEgOiAnMDsKLSAgICAgICAgYXNzaWduIGNvcmVfcmVzcCAgPSAoYXhpX3JlaW5pdCkgPyBTQ1IxX01FTV9SRVNQX05PVFJEWSA6IHJjdmRfcmVzcDsKLSAgICBlbmQgZWxzZSBiZWdpbiA6IGF4aV9yZXNwX25vX2JwCi0gICAgICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICAgICAgaWYgKH5yc3RfbikgICAgICAgICAgICAgIGNvcmVfcmVzcCAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNwICA8PSAoYXhpX3JlaW5pdCkgPyBTQ1IxX01FTV9SRVNQX05PVFJEWSA6IHJjdmRfcmVzcDsKLSAgICAgICAgZW5kCi0gICAgICAgIGFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgICAgICAgICAgaWYgKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSBjb3JlX3JkYXRhIDw9IHJjdmRfcmRhdGE7Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kZ2VuZXJhdGUKLQotCi0KLS8vIEFYSSBpbnRlcmZhY2UgYXNzaWdubWVudHMKLWFzc2lnbiBhd2lkICAgICA9IFNDUjFfQVhJX0lEV0lEVEgnKDEpOwotYXNzaWduIGF3bGVuICAgID0gOCdkMDsKLWFzc2lnbiBhd3NpemUgICA9IChmb3JjZV93cml0ZSkgPyB3aWR0aDJheHNpemUoY29yZV93aWR0aCkgOiB3aWR0aDJheHNpemUocmVxX2ZpZm9fYXhpX3dpZHRoW3JlcV9wcm9jX3B0cl0pOwotYXNzaWduIGF3YnVyc3QgID0gMidkMTsKLWFzc2lnbiBhd2NhY2hlICA9IDQnZDI7Ci1hc3NpZ24gYXdsb2NrICAgPSAnMDsKLWFzc2lnbiBhd3Byb3QgICA9ICcwOwotYXNzaWduIGF3cmVnaW9uID0gJzA7Ci1hc3NpZ24gYXd1c2VyICAgPSAnMDsKLWFzc2lnbiBhd3FvcyAgICA9ICcwOwotCi1hc3NpZ24gYXJpZCAgICAgPSBTQ1IxX0FYSV9JRFdJRFRIJygwKTsKLWFzc2lnbiBhcmxlbiAgICA9IDgnZDA7Ci1hc3NpZ24gYXJzaXplICAgPSAoZm9yY2VfcmVhZCkgPyB3aWR0aDJheHNpemUoY29yZV93aWR0aCkgOiB3aWR0aDJheHNpemUocmVxX2ZpZm9fYXhpX3dpZHRoW3JlcV9wcm9jX3B0cl0pOwotYXNzaWduIGFyYnVyc3QgID0gMidkMTsKLWFzc2lnbiBhcmNhY2hlICA9IDQnZDI7Ci1hc3NpZ24gYXJwcm90ICAgPSAnMDsKLWFzc2lnbiBhcnJlZ2lvbiA9ICcwOwotYXNzaWduIGFybG9jayAgID0gJzA7Ci1hc3NpZ24gYXJxb3MgICAgPSAnMDsKLWFzc2lnbiBhcnVzZXIgICA9ICcwOwotCi1hc3NpZ24gd2xhc3QgICAgPSAxJ2QxOwotYXNzaWduIHd1c2VyICAgID0gJzA7Ci0KLQotYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzc2VydGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFggY2hlY2tzCi1TQ1IxX1NWQV9BWElfWF9DSEVDSzAgIDogYXNzZXJ0IHByb3BlcnR5IChAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKSAgICEkaXN1bmtub3duKHtjb3JlX3JlcSwgYXdyZWFkeSwgd3JlYWR5LCBidmFsaWQsIGFycmVhZHksIHJ2YWxpZH0pICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkZXJyb3IoIkFYSSBicmlkZ2U6IFggc3RhdGUgb24gaW5wdXQiKTsKLVNDUjFfU1ZBX0FYSV9YX0NIRUNLMSAgOiBhc3NlcnQgcHJvcGVydHkgKEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pICAgY29yZV9yZXEgfC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJGlzdW5rbm93bih7Y29yZV9jbWQsIGNvcmVfd2lkdGgsIGNvcmVfYWRkcn0pICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkZXJyb3IoIkFYSSBicmlkZ2U6IFggc3RhdGUgb24gaW5wdXQiKTsKLVNDUjFfU1ZBX0FYSV9YX0NIRUNLMiAgOiBhc3NlcnQgcHJvcGVydHkgKEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pICAgYnZhbGlkIHwtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISRpc3Vua25vd24oe2JpZCwgYnJlc3B9KSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJGVycm9yKCJBWEkgYnJpZGdlOiBYIHN0YXRlIG9uIGlucHV0Iik7Ci1TQ1IxX1NWQV9BWElfWF9DSEVDSzMgIDogYXNzZXJ0IHByb3BlcnR5IChAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKSAgIHJ2YWxpZCB8LT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkaXN1bmtub3duKHtyaWQsIHJyZXNwfSkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICRlcnJvcigiQVhJIGJyaWRnZTogWCBzdGF0ZSBvbiBpbnB1dCIpOwotYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCi0KLWVuZG1vZHVsZSA6IHNjcjFfbWVtX2F4aQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90Y20uc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Mzc2Y2YuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdgorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwotLy8vIEBmaWxlICAgICAgIDxzY3IxX3RjbS5zdj4KLS8vLyBAYnJpZWYgICAgICBUaWdodGx5LUNvdXBsZWQgTWVtb3J5IChUQ00pCi0vLy8KLQotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotbW9kdWxlIHNjcjFfdGNtCi0jKAotICAgIHBhcmFtZXRlciBTQ1IxX1RDTV9TSVpFID0gYFNDUjFfSU1FTV9BV0lEVEgnaDAwMDEwMDAwCi0pCi0oCi0gICAgLy8gQ29udHJvbCBzaWduYWxzCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCi0KLSAgICAvLyBDb3JlIGluc3RydWN0aW9uIGludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcV9hY2ssCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxLAotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICBpbWVtX2FkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgIGltZW1fcmRhdGEsCi0gICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGltZW1fcmVzcCwKLQotICAgIC8vIENvcmUgZGF0YSBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfYWNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcSwKLSAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgZG1lbV9jbWQsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgIGRtZW1fd2lkdGgsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIGRtZW1fYWRkciwKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgZG1lbV93ZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgZG1lbV9yZGF0YSwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgZG1lbV9yZXNwCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JlcV9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX2VuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmQ7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3dyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgZG1lbV93cml0ZWRhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBkbWVtX3JkYXRhX2xvY2FsOwotbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9ieXRlZW47Ci1sb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JkYXRhX3NoaWZ0X3JlZzsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29yZSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIGltZW1fcmVxX2VuID0gKGltZW1fcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykgXiBpbWVtX3JlcTsKLWFzc2lnbiBkbWVtX3JlcV9lbiA9IChkbWVtX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spIF4gZG1lbV9yZXE7Ci0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIGltZW1fcmVzcCA8PSBTQ1IxX01FTV9SRVNQX05PVFJEWTsKLSAgICBlbmQgZWxzZSBpZiAoaW1lbV9yZXFfZW4pIGJlZ2luCi0gICAgICAgIGltZW1fcmVzcCA8PSBpbWVtX3JlcSA/IFNDUjFfTUVNX1JFU1BfUkRZX09LIDogU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZG1lbV9yZXNwIDw9IFNDUjFfTUVNX1JFU1BfTk9UUkRZOwotICAgIGVuZCBlbHNlIGlmIChkbWVtX3JlcV9lbikgYmVnaW4KLSAgICAgICAgZG1lbV9yZXNwIDw9IGRtZW1fcmVxID8gU0NSMV9NRU1fUkVTUF9SRFlfT0sgOiBTQ1IxX01FTV9SRVNQX05PVFJEWTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gaW1lbV9yZXFfYWNrID0gMSdiMTsKLWFzc2lnbiBkbWVtX3JlcV9hY2sgPSAxJ2IxOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZW1vcnkgZGF0YSBjb21wb3NpbmcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIGltZW1fcmQgID0gaW1lbV9yZXE7Ci1hc3NpZ24gZG1lbV9yZCAgPSBkbWVtX3JlcSAmIChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfUkQpOwotYXNzaWduIGRtZW1fd3IgID0gZG1lbV9yZXEgJiAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSKTsKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBkbWVtX3dyaXRlZGF0YSA9IGRtZW1fd2RhdGE7Ci0gICAgZG1lbV9ieXRlZW4gICAgPSA0J2IxMTExOwotICAgIGNhc2UgKCBkbWVtX3dpZHRoICkKLSAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCi0gICAgICAgICAgICBkbWVtX3dyaXRlZGF0YSAgPSB7KGBTQ1IxX0RNRU1fRFdJRFRIIC8gIDgpe2RtZW1fd2RhdGFbNzowXX19OwotICAgICAgICAgICAgZG1lbV9ieXRlZW4gICAgID0gNCdiMDAwMSA8PCBkbWVtX2FkZHJbMTowXTsKLSAgICAgICAgZW5kCi0gICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEIDogYmVnaW4KLSAgICAgICAgICAgIGRtZW1fd3JpdGVkYXRhICA9IHsoYFNDUjFfRE1FTV9EV0lEVEggLyAxNil7ZG1lbV93ZGF0YVsxNTowXX19OwotICAgICAgICAgICAgZG1lbV9ieXRlZW4gICAgID0gNCdiMDAxMSA8PCB7ZG1lbV9hZGRyWzFdLCAxJ2IwfTsKLSAgICAgICAgZW5kCi0gICAgICAgIGRlZmF1bHQgOiBiZWdpbgotICAgICAgICBlbmQKLSAgICBlbmRjYXNlCi1lbmQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGluc3RhbnRpYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9kcF9tZW1vcnkgIygKLSAgICAuU0NSMV9XSURUSCAoIDMyICAgICAgICAgICAgKSwKLSAgICAuU0NSMV9TSVpFICAoIFNDUjFfVENNX1NJWkUgKQotKSBpX2RwX21lbW9yeSAoCi0gICAgLmNsayAgICAoIGNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAvLyBJbnN0cnVjdGlvbiBwb3J0Ci0gICAgLy8gUG9ydCBBCi0gICAgLnJlbmEgICAoIGltZW1fcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAuYWRkcmEgICggaW1lbV9hZGRyWyRjbG9nMihTQ1IxX1RDTV9TSVpFKS0xOjJdICApLAotICAgIC5xYSAgICAgKCBpbWVtX3JkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgLy8gRGF0YSBwb3J0Ci0gICAgLy8gUG9ydCBCCi0gICAgLnJlbmIgICAoIGRtZW1fcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAud2VuYiAgICggZG1lbV93ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAotICAgIC53ZWJiICAgKCBkbWVtX2J5dGVlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgLmFkZHJiICAoIGRtZW1fYWRkclskY2xvZzIoU0NSMV9UQ01fU0laRSktMToyXSAgKSwKLSAgICAucWIgICAgICggZG1lbV9yZGF0YV9sb2NhbCAgICAgICAgICAgICAgICAgICAgICApLAotICAgIC5kYXRhYiAgKCBkbWVtX3dyaXRlZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICkKLSk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERhdGEgbWVtb3J5IG91dHB1dCBnZW5lcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmIChkbWVtX3JkKSBiZWdpbgotICAgICAgICBkbWVtX3JkYXRhX3NoaWZ0X3JlZyA8PSBkbWVtX2FkZHJbMTowXTsKLSAgICBlbmQKLWVuZAotCi1hc3NpZ24gZG1lbV9yZGF0YSA9IGRtZW1fcmRhdGFfbG9jYWwgPj4gKCA4ICogZG1lbV9yZGF0YV9zaGlmdF9yZWcgKTsKLQotZW5kbW9kdWxlIDogc2NyMV90Y20KLQotYGVuZGlmIC8vIFNDUjFfVENNX0VOCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdGltZXIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdGltZXIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5M2EuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2CisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdGltZXIuc3Y+Ci0vLy8gQGJyaWVmICAgICAgTWVtb3J5LW1hcHBlZCBUaW1lcgotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotCi1tb2R1bGUgc2NyMV90aW1lciAoCi0gICAgLy8gQ29tbW9uCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Y19jbGssCi0KLSAgICAvLyBNZW1vcnkgaW50ZXJmYWNlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXEsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgZG1lbV9jbWQsCi0gICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgZG1lbV93aWR0aCwKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICBkbWVtX2FkZHIsCi0gICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgZG1lbV93ZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9hY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgZG1lbV9yZGF0YSwKLSAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICBkbWVtX3Jlc3AsCi0KLSAgICAvLyBUaW1lciBpbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl92YWwsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfaXJxCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9USU1FUl9BRERSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNTsKLWxvY2FscGFyYW0gbG9naWMgW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdIFNDUjFfVElNRVJfQ09OVFJPTCAgICAgICAgICAgICA9IDUnaDA7Ci1sb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX0RJVklERVIgICAgICAgICAgICAgPSA1J2g0OwotbG9jYWxwYXJhbSBsb2dpYyBbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0gU0NSMV9USU1FUl9NVElNRUxPICAgICAgICAgICAgID0gNSdoODsKLWxvY2FscGFyYW0gbG9naWMgW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdIFNDUjFfVElNRVJfTVRJTUVISSAgICAgICAgICAgICA9IDUnaEM7Ci1sb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX01USU1FQ01QTE8gICAgICAgICAgPSA1J2gxMDsKLWxvY2FscGFyYW0gbG9naWMgW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdIFNDUjFfVElNRVJfTVRJTUVDTVBISSAgICAgICAgICA9IDUnaDE0OwotCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX1RJTUVSX0NPTlRST0xfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9USU1FUl9DT05UUk9MX0NMS1NSQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgID0gMTsKLWxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfVElNRVJfRElWSURFUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEwOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1lX3JlZzsKLWxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZV9uZXc7Ci1sb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVjbXBfcmVnOwotbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1lY21wX25ldzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9lbjsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9jbGtzcmNfcnRjOwotbG9naWMgW1NDUjFfVElNRVJfRElWSURFUl9XSURUSC0xOjBdICAgICAgICAgICAgICAgIHRpbWVyX2RpdjsKLQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xfdXA7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcl91cDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZWxvX3VwOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1laGlfdXA7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVjbXBsb191cDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZWNtcGhpX3VwOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfdmFsaWQ7Ci0KLWxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfZXh0X3B1bHNlOwotbG9naWMgW1NDUjFfVElNRVJfRElWSURFUl9XSURUSC0xOjBdICAgICAgICAgICAgICAgIHRpbWVjbGtfY250OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVjbGtfY250X2VuOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfcG9zZWRnZTsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2NtcF9mbGFnOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlZ2lzdGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENPTlRST0wKLWFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHRpbWVyX2VuICAgICAgICAgICAgPD0gMSdiMTsKLSAgICAgICAgdGltZXJfY2xrc3JjX3J0YyAgICA8PSAxJ2IwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChjb250cm9sX3VwKSBiZWdpbgotICAgICAgICAgICAgdGltZXJfZW4gICAgICAgICAgICA8PSBkbWVtX3dkYXRhW1NDUjFfVElNRVJfQ09OVFJPTF9FTl9PRkZTRVRdOwotICAgICAgICAgICAgdGltZXJfY2xrc3JjX3J0YyAgICA8PSBkbWVtX3dkYXRhW1NDUjFfVElNRVJfQ09OVFJPTF9DTEtTUkNfT0ZGU0VUXTsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8gRElWSURFUgotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgdGltZXJfZGl2ICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKGRpdmlkZXJfdXApIGJlZ2luCi0gICAgICAgICAgICB0aW1lcl9kaXYgICA8PSBkbWVtX3dkYXRhW1NDUjFfVElNRVJfRElWSURFUl9XSURUSC0xOjBdOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLyBNVElNRQotYXNzaWduIHRpbWVfcG9zZWRnZSA9ICh0aW1lY2xrX2NudF9lbiAmICh0aW1lY2xrX2NudCA9PSAwKSk7Ci0KLWFsd2F5c19jb21iIGJlZ2luCi0gICAgbXRpbWVfbmV3ICAgPSBtdGltZV9yZWc7Ci0gICAgaWYgKHRpbWVfcG9zZWRnZSkgYmVnaW4KLSAgICAgICAgbXRpbWVfbmV3ICAgPSBtdGltZV9yZWcgKyAxJ2IxOwotICAgIGVuZAotICAgIGlmIChtdGltZWxvX3VwKSBiZWdpbgotICAgICAgICBtdGltZV9uZXdbMzE6MF0gICAgID0gZG1lbV93ZGF0YTsKLSAgICBlbmQKLSAgICBpZiAobXRpbWVoaV91cCkgYmVnaW4KLSAgICAgICAgbXRpbWVfbmV3WzYzOjMyXSAgICA9IGRtZW1fd2RhdGE7Ci0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgbXRpbWVfcmVnICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHRpbWVfcG9zZWRnZSB8IG10aW1lbG9fdXAgfCBtdGltZWhpX3VwKSBiZWdpbgotICAgICAgICAgICAgbXRpbWVfcmVnICAgPD0gbXRpbWVfbmV3OwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLyBNVElNRUNNUAotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBtdGltZWNtcF9uZXcgICAgPSBtdGltZWNtcF9yZWc7Ci0gICAgaWYgKG10aW1lY21wbG9fdXApIGJlZ2luCi0gICAgICAgIG10aW1lY21wX25ld1szMTowXSAgPSBkbWVtX3dkYXRhOwotICAgIGVuZAotICAgIGlmIChtdGltZWNtcGhpX3VwKSBiZWdpbgotICAgICAgICBtdGltZWNtcF9uZXdbNjM6MzJdID0gZG1lbV93ZGF0YTsKLSAgICBlbmQKLWVuZAotCi1hbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICBtdGltZWNtcF9yZWcgICAgPD0gJzA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKG10aW1lY21wbG9fdXAgfCBtdGltZWNtcGhpX3VwKSBiZWdpbgotICAgICAgICAgICAgbXRpbWVjbXBfcmVnICAgIDw9IG10aW1lY21wX25ldzsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnRlcnJ1cHQgcGVuZGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gdGltZV9jbXBfZmxhZyA9IChtdGltZV9yZWcgPj0gKChtdGltZWNtcGxvX3VwIHwgbXRpbWVjbXBoaV91cCkgPyBtdGltZWNtcF9uZXcgOiBtdGltZWNtcF9yZWcpKTsKLQotYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgdGltZXJfaXJxICAgPD0gMSdiMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAofnRpbWVyX2lycSkgYmVnaW4KLSAgICAgICAgICAgIHRpbWVyX2lycSAgIDw9IHRpbWVfY21wX2ZsYWc7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIDEnYjEKLSAgICAgICAgICAgIGlmIChtdGltZWNtcGxvX3VwIHwgbXRpbWVjbXBoaV91cCkgYmVnaW4KLSAgICAgICAgICAgICAgICB0aW1lcl9pcnEgICA8PSB0aW1lX2NtcF9mbGFnOwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGltZXIgZGl2aWRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1hc3NpZ24gdGltZWNsa19jbnRfZW4gICA9ICh+dGltZXJfY2xrc3JjX3J0YyA/IDEnYjEgOiBydGNfZXh0X3B1bHNlKSAmIHRpbWVyX2VuOwotCi1hbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KLSAgICBpZiAofnJzdF9uKSBiZWdpbgotICAgICAgICB0aW1lY2xrX2NudCA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBjYXNlICgxJ2IxKQotICAgICAgICAgICAgZGl2aWRlcl91cCAgICAgIDogdGltZWNsa19jbnQgICA8PSBkbWVtX3dkYXRhW1NDUjFfVElNRVJfRElWSURFUl9XSURUSC0xOjBdOwotICAgICAgICAgICAgdGltZV9wb3NlZGdlICAgIDogdGltZWNsa19jbnQgICA8PSB0aW1lcl9kaXY7Ci0gICAgICAgICAgICB0aW1lY2xrX2NudF9lbiAgOiB0aW1lY2xrX2NudCAgIDw9IHRpbWVjbGtfY250IC0gMSdiMTsKLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICA6IGJlZ2luIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSVEMgc3luY2hyb25pemF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBydGNfZXh0X3B1bHNlICAgID0gcnRjX3N5bmNbM10gXiBydGNfc3luY1syXTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBydGNfY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJ0Y19zeW5jWzBdIDw9IDEnYjA7Ci0gICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgaWYgKHRpbWVyX2Nsa3NyY19ydGMpIGJlZ2luCi0gICAgICAgICAgICBydGNfc3luY1swXSA8PSB+cnRjX3N5bmNbMF07Ci0gICAgICAgIGVuZAotICAgIGVuZAotZW5kCi0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgIGlmICh+cnN0X24pIGJlZ2luCi0gICAgICAgIHJ0Y19zeW5jWzM6MV0gICA8PSAnMDsKLSAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICBpZiAodGltZXJfY2xrc3JjX3J0YykgYmVnaW4KLSAgICAgICAgICAgIHJ0Y19zeW5jWzM6MV0gICA8PSBydGNfc3luY1syOjBdOwotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lbW9yeSBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIGRtZW1fcmVxX3ZhbGlkICAgPSAgIChkbWVtX3dpZHRoID09IFNDUjFfTUVNX1dJRFRIX1dPUkQpICYgKH58ZG1lbV9hZGRyWzE6MF0pICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG1lbV9hZGRyW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjJdIDw9IFNDUjFfVElNRVJfTVRJTUVDTVBISVtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMToyXSk7Ci0KLWFzc2lnbiBkbWVtX3JlcV9hY2sgICAgID0gMSdiMTsKLQotYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5yc3RfbikgYmVnaW4KLSAgICAgICAgZG1lbV9yZXNwICAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgIGRtZW1fcmRhdGEgIDw9ICcwOwotICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgIGlmIChkbWVtX3JlcSkgYmVnaW4KLSAgICAgICAgICAgIGlmIChkbWVtX3JlcV92YWxpZCkgYmVnaW4KLSAgICAgICAgICAgICAgICBkbWVtX3Jlc3AgICA8PSBTQ1IxX01FTV9SRVNQX1JEWV9PSzsKLSAgICAgICAgICAgICAgICBpZiAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1JEKSBiZWdpbgotICAgICAgICAgICAgICAgICAgICBjYXNlIChkbWVtX2FkZHJbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RJTUVSX0NPTlRST0wgICAgICA6IGRtZW1fcmRhdGEgICAgPD0gYFNDUjFfRE1FTV9EV0lEVEgnKHt0aW1lcl9jbGtzcmNfcnRjLCB0aW1lcl9lbn0pOwotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9ESVZJREVSICAgICAgOiBkbWVtX3JkYXRhICAgIDw9IGBTQ1IxX0RNRU1fRFdJRFRIJyh0aW1lcl9kaXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUxPICAgICAgOiBkbWVtX3JkYXRhICAgIDw9IG10aW1lX3JlZ1szMTowXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVISSAgICAgIDogZG1lbV9yZGF0YSAgICA8PSBtdGltZV9yZWdbNjM6MzJdOwotICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUNNUExPICAgOiBkbWVtX3JkYXRhICAgIDw9IG10aW1lY21wX3JlZ1szMTowXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVDTVBISSAgIDogZG1lbV9yZGF0YSAgICA8PSBtdGltZWNtcF9yZWdbNjM6MzJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKLSAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQotICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICBkbWVtX3Jlc3AgICA8PSBTQ1IxX01FTV9SRVNQX1JEWV9FUjsKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQgZWxzZSBiZWdpbgotICAgICAgICAgICAgZG1lbV9yZXNwICAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7Ci0gICAgICAgICAgICBkbWVtX3JkYXRhICA8PSAnMDsKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotYWx3YXlzX2NvbWIgYmVnaW4KLSAgICBjb250cm9sX3VwICAgICAgPSAxJ2IwOwotICAgIGRpdmlkZXJfdXAgICAgICA9IDEnYjA7Ci0gICAgbXRpbWVsb191cCAgICAgID0gMSdiMDsKLSAgICBtdGltZWhpX3VwICAgICAgPSAxJ2IwOwotICAgIG10aW1lY21wbG9fdXAgICA9IDEnYjA7Ci0gICAgbXRpbWVjbXBoaV91cCAgID0gMSdiMDsKLSAgICBpZiAoZG1lbV9yZXEgJiBkbWVtX3JlcV92YWxpZCAmIChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpKSBiZWdpbgotICAgICAgICBjYXNlIChkbWVtX2FkZHJbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0pCi0gICAgICAgICAgICBTQ1IxX1RJTUVSX0NPTlRST0wgICAgICA6IGNvbnRyb2xfdXAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9USU1FUl9ESVZJREVSICAgICAgOiBkaXZpZGVyX3VwICAgID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVMTyAgICAgIDogbXRpbWVsb191cCAgICA9IDEnYjE7Ci0gICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FSEkgICAgICA6IG10aW1laGlfdXAgICAgPSAxJ2IxOwotICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUNNUExPICAgOiBtdGltZWNtcGxvX3VwID0gMSdiMTsKLSAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVDTVBISSAgIDogbXRpbWVjbXBoaV91cCA9IDEnYjE7Ci0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGJlZ2luIGVuZAotICAgICAgICBlbmRjYXNlCi0gICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaW1lciBpbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduIHRpbWVyX3ZhbCAgICA9IG10aW1lX3JlZzsKLQotZW5kbW9kdWxlIDogc2NyMV90aW1lcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90b3BfYWhiLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RvcF9haGIuc3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjhhN2QuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RvcF9haGIuc3YKKysrIC9kZXYvbnVsbApAQCAtMSw1MTMgKzAsMCBAQAotLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLS8vLyBAZmlsZSAgICAgICA8c2NyMV90b3BfYWhiLnN2PgotLy8vIEBicmllZiAgICAgIFNDUjEgQUhCIHRvcAotLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfYWhiLnN2aCIKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWBpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSBgZGVmaW5lIFNDUjFfSU1FTV9ST1VURVJfRU4KLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi1tb2R1bGUgc2NyMV90b3BfYWhiICgKLSAgICAvLyBDb250cm9sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X24sICAgICAgICAgICAgLy8gUG93ZXItVXAgUmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3RfbiwgICAgICAgICAgICAgIC8vIENQVSBSZXNldCAoQ29yZSBSZXNldCkKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21vZGUsICAgICAgICAgICAgICAvLyBUZXN0IG1vZGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JzdF9uLCAgICAgICAgICAgICAvLyBUZXN0IG1vZGUncyByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbSBjbG9jawotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Y19jbGssICAgICAgICAgICAgICAgIC8vIFJlYWwtdGltZSBjbG9jawotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX28sICAgICAgICAgICAgLy8gRXh0ZXJuYWwgU3lzdGVtIFJlc2V0IG91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgKGZvciB0aGUgcHJvY2Vzc29yIGNsdXN0ZXIncyBjb21wb25lbnRzIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgZXh0ZXJuYWwgU09DIChjb3VsZCBiZSB1c2VmdWwgaW4gc21hbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBTQ1ItY29yZS1jZW50cmljIFNPQ3MpKQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yZGNfcWxmeV9vLCAgICAgICAgIC8vIFN5c3RlbS10by1FeHRlcm5hbCBTT0MgUmVzZXQgRG9tYWluIENyb3NzaW5nIFF1YWxpZmllcgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBGdXNlcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGZ1c2VfbWhhcnRpZCwgICAgICAgICAgIC8vIEhhcnQgSUQKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2VfaWRjb2RlLCAgICAgICAgICAgIC8vIFRBUEMgSURDT0RFCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIElSUQotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfSVJRX0xJTkVTX05VTS0xOjBdICAgICAgICAgIGlycV9saW5lcywgICAgICAgICAgICAgIC8vIElSUSBsaW5lcyB0byBJUElDCi1gZWxzZSAvLyBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfaXJxLCAgICAgICAgICAgICAgICAvLyBFeHRlcm5hbCBJUlEgaW5wdXQKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0X2lycSwgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBJUlEgaW5wdXQKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gLS0gSlRBRyBJL0YKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGksCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkb19lbiwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gTWVtb3J5IEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHByb3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9oYnVyc3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9oc2l6ZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2h0cmFucywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2htYXN0bG9jaywKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBpbWVtX2hhZGRyLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHJlYWR5LAotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgICAgICAgICAgIGltZW1faHJkYXRhLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHJlc3AsCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hwcm90LAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1faGJ1cnN0LAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1faHNpemUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9odHJhbnMsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9obWFzdGxvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICAgICAgICAgICAgZG1lbV9oYWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2h3cml0ZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBkbWVtX2h3ZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hyZWFkeSwKLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBkbWVtX2hyZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hyZXNwCi0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgPSAyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZXNldCBsb2dpYwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX2xvY2FsOwotYGlmZGVmIFNDUjFfREJHX0VOCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X247Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fY21kOwotbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVzcDsKLQotLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gY29yZSB0byByb3V0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9jbWQ7Ci10eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3Jlc3A7Ci0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gQUhCIGJyaWRnZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2ltZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBhaGJfaW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3JkYXRhOwotdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBBSEIgYnJpZGdlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaGJfZG1lbV9yZXE7Ci10eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fY21kOwotdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmVzcDsKLQotYGlmZGVmIFNDUjFfVENNX0VOCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFRDTQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JkYXRhOwotdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9jbWQ7Ci10eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV93ZGF0YTsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXNwOwotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBtZW1vcnktbWFwcGVkIHRpbWVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fY21kOwotdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3Jlc3A7Ci0KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9pcnE7Ci1sb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsOwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVzZXQgbG9naWMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUG93ZXItVXAgUmVzZXQgc3luY2hyb25pemVyCi1zY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfcHdydXBfcnN0bl9yZXNldF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9pbiAgICAgICAoMSdiMSAgICAgICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgIChwd3J1cF9yc3Rfbl9zeW5jKQotKTsKLQotLy8gUmVndWxhciBSZXNldCBzeW5jaHJvbml6ZXIKLXNjcjFfcmVzZXRfc3luY19jZWxsICMoCi0gICAgLlNUQUdFU19BTU9VTlQgICAgICAgKFNDUjFfQ0xVU1RFUl9UT1BfUlNUX1NZTkNfU1RBR0VTX05VTSkKLSkgaV9yc3RuX3Jlc2V0X3N5bmMgKAotICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX2luICAgICAgIChyc3RfbiAgICAgICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKHJzdF9uX3N5bmMgICAgICApCi0pOwotCi0vLyBDUFUgUmVzZXQgc3luY2hyb25pemVyCi1zY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfY3B1X3JzdG5fcmVzZXRfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25faW4gICAgICAgKGNwdV9yc3RfbiAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAoY3B1X3JzdF9uX3N5bmMgICkKLSk7Ci0KLWBpZmRlZiBTQ1IxX0RCR19FTgotLy8gVEFQQyBSZXNldAotc2NyMV9yZXNldF9hbmQyX2NlbGwgaV90YXBjX3JzdG5fYW5kMl9jZWxsICgKLSAgICAucnN0X25faW4gICAgICAgKHt0cnN0X24sIHB3cnVwX3JzdF9ufSksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAodGFwY190cnN0X24gICAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTQ1IxIGNvcmUgaW5zdGFuY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9jb3JlX3RvcCBpX2NvcmVfdG9wICgKLSAgICAvLyBDb21tb24KLSAgICAucHdydXBfcnN0X24gICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgKSwKLSAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uX3N5bmMgICAgICAgKSwKLSAgICAuY3B1X3JzdF9uICAgICAgICAgICAgICAgICAgKGNwdV9yc3Rfbl9zeW5jICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgICAgICAgICAgICAgKHRlc3RfbW9kZSAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKLSAgICAuY29yZV9yc3Rfbl9vICAgICAgICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgKSwKLSAgICAuY29yZV9yZGNfcWxmeV9vICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgKSwKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC5zeXNfcnN0X25fbyAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX28gICAgICApLAotICAgIC5zeXNfcmRjX3FsZnlfbyAgICAgICAgICAgICAoc3lzX3JkY19xbGZ5X28gICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBGdXNlcwotICAgIC5jb3JlX2Z1c2VfbWhhcnRpZF9pICAgICAgICAoZnVzZV9taGFydGlkICAgICApLAotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLnRhcGNfZnVzZV9pZGNvZGVfaSAgICAgICAgIChmdXNlX2lkY29kZSAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIElSUQotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9saW5lc19pICAgICAgICAgICAoaXJxX2xpbmVzICAgICAgICApLAotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgLmNvcmVfaXJxX2V4dF9pICAgICAgICAgICAgIChleHRfaXJxICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0gICAgLmNvcmVfaXJxX3NvZnRfaSAgICAgICAgICAgIChzb2Z0X2lycSAgICAgICAgICksCi0gICAgLmNvcmVfaXJxX210aW1lcl9pICAgICAgICAgICh0aW1lcl9pcnEgICAgICAgICksCi0KLSAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCi0gICAgLmNvcmVfbXRpbWVyX3ZhbF9pICAgICAgICAgICh0aW1lcl92YWwgICAgICAgICksCi0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIERlYnVnIGludGVyZmFjZQotICAgIC50YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICAodGFwY190cnN0X24gICAgICApLAotICAgIC50YXBjX3RjayAgICAgICAgICAgICAgICAgICAodGNrICAgICAgICAgICAgICApLAotICAgIC50YXBjX3RtcyAgICAgICAgICAgICAgICAgICAodG1zICAgICAgICAgICAgICApLAotICAgIC50YXBjX3RkaSAgICAgICAgICAgICAgICAgICAodGRpICAgICAgICAgICAgICApLAotICAgIC50YXBjX3RkbyAgICAgICAgICAgICAgICAgICAodGRvICAgICAgICAgICAgICApLAotICAgIC50YXBjX3Rkb19lbiAgICAgICAgICAgICAgICAodGRvX2VuICAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmltZW0yY29yZV9yZXFfYWNrX2kgICAgICAgIChjb3JlX2ltZW1fcmVxX2FjayksCi0gICAgLmNvcmUyaW1lbV9yZXFfbyAgICAgICAgICAgIChjb3JlX2ltZW1fcmVxICAgICksCi0gICAgLmNvcmUyaW1lbV9jbWRfbyAgICAgICAgICAgIChjb3JlX2ltZW1fY21kICAgICksCi0gICAgLmNvcmUyaW1lbV9hZGRyX28gICAgICAgICAgIChjb3JlX2ltZW1fYWRkciAgICksCi0gICAgLmltZW0yY29yZV9yZGF0YV9pICAgICAgICAgIChjb3JlX2ltZW1fcmRhdGEgICksCi0gICAgLmltZW0yY29yZV9yZXNwX2kgICAgICAgICAgIChjb3JlX2ltZW1fcmVzcCAgICksCi0KLSAgICAvLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UKLSAgICAuZG1lbTJjb3JlX3JlcV9hY2tfaSAgICAgICAgKGNvcmVfZG1lbV9yZXFfYWNrKSwKLSAgICAuY29yZTJkbWVtX3JlcV9vICAgICAgICAgICAgKGNvcmVfZG1lbV9yZXEgICAgKSwKLSAgICAuY29yZTJkbWVtX2NtZF9vICAgICAgICAgICAgKGNvcmVfZG1lbV9jbWQgICAgKSwKLSAgICAuY29yZTJkbWVtX3dpZHRoX28gICAgICAgICAgKGNvcmVfZG1lbV93aWR0aCAgKSwKLSAgICAuY29yZTJkbWVtX2FkZHJfbyAgICAgICAgICAgKGNvcmVfZG1lbV9hZGRyICAgKSwKLSAgICAuY29yZTJkbWVtX3dkYXRhX28gICAgICAgICAgKGNvcmVfZG1lbV93ZGF0YSAgKSwKLSAgICAuZG1lbTJjb3JlX3JkYXRhX2kgICAgICAgICAgKGNvcmVfZG1lbV9yZGF0YSAgKSwKLSAgICAuZG1lbTJjb3JlX3Jlc3BfaSAgICAgICAgICAgKGNvcmVfZG1lbV9yZXNwICAgKQotKTsKLQotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVENNIGluc3RhbmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfdGNtICMoCi0gICAgLlNDUjFfVENNX1NJWkUgIChgU0NSMV9ETUVNX0FXSURUSCcoflNDUjFfVENNX0FERFJfTUFTSyArIDEnYjEpKQotKSBpX3RjbSAoCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwpLAotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gaW50ZXJmYWNlIHRvIFRDTQotICAgIC5pbWVtX3JlcV9hY2sgICAodGNtX2ltZW1fcmVxX2FjayksCi0gICAgLmltZW1fcmVxICAgICAgICh0Y21faW1lbV9yZXEgICAgKSwKLSAgICAuaW1lbV9hZGRyICAgICAgKHRjbV9pbWVtX2FkZHIgICApLAotICAgIC5pbWVtX3JkYXRhICAgICAodGNtX2ltZW1fcmRhdGEgICksCi0gICAgLmltZW1fcmVzcCAgICAgICh0Y21faW1lbV9yZXNwICAgKSwKLQotICAgIC8vIERhdGEgaW50ZXJmYWNlIHRvIFRDTQotICAgIC5kbWVtX3JlcV9hY2sgICAodGNtX2RtZW1fcmVxX2FjayksCi0gICAgLmRtZW1fcmVxICAgICAgICh0Y21fZG1lbV9yZXEgICAgKSwKLSAgICAuZG1lbV9jbWQgICAgICAgKHRjbV9kbWVtX2NtZCAgICApLAotICAgIC5kbWVtX3dpZHRoICAgICAodGNtX2RtZW1fd2lkdGggICksCi0gICAgLmRtZW1fYWRkciAgICAgICh0Y21fZG1lbV9hZGRyICAgKSwKLSAgICAuZG1lbV93ZGF0YSAgICAgKHRjbV9kbWVtX3dkYXRhICApLAotICAgIC5kbWVtX3JkYXRhICAgICAodGNtX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW1fcmVzcCAgICAgICh0Y21fZG1lbV9yZXNwICAgKQotKTsKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5LW1hcHBlZCB0aW1lciBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3RpbWVyIGlfdGltZXIgKAotICAgIC8vIENvbW1vbgotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCi0gICAgLnJ0Y19jbGsgICAgICAgIChydGNfY2xrICAgICAgICAgICApLAotCi0gICAgLy8gTWVtb3J5IGludGVyZmFjZQotICAgIC5kbWVtX3JlcSAgICAgICAodGltZXJfZG1lbV9yZXEgICAgKSwKLSAgICAuZG1lbV9jbWQgICAgICAgKHRpbWVyX2RtZW1fY21kICAgICksCi0gICAgLmRtZW1fd2lkdGggICAgICh0aW1lcl9kbWVtX3dpZHRoICApLAotICAgIC5kbWVtX2FkZHIgICAgICAodGltZXJfZG1lbV9hZGRyICAgKSwKLSAgICAuZG1lbV93ZGF0YSAgICAgKHRpbWVyX2RtZW1fd2RhdGEgICksCi0gICAgLmRtZW1fcmVxX2FjayAgICh0aW1lcl9kbWVtX3JlcV9hY2spLAotICAgIC5kbWVtX3JkYXRhICAgICAodGltZXJfZG1lbV9yZGF0YSAgKSwKLSAgICAuZG1lbV9yZXNwICAgICAgKHRpbWVyX2RtZW1fcmVzcCAgICksCi0KLSAgICAvLyBUaW1lciBpbnRlcmZhY2UKLSAgICAudGltZXJfdmFsICAgICAgKHRpbWVyX3ZhbCAgICAgICAgICksCi0gICAgLnRpbWVyX2lycSAgICAgICh0aW1lcl9pcnEgICAgICAgICApCi0pOwotCi0KLWBpZmRlZiBTQ1IxX0lNRU1fUk9VVEVSX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSByb3V0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9pbWVtX3JvdXRlciAjKAotIGBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX0FERFJfTUFTSyAgICAgKFNDUjFfVENNX0FERFJfTUFTSyksCi0gICAgLlNDUjFfQUREUl9QQVRURVJOICAoU0NSMV9UQ01fQUREUl9QQVRURVJOKQotIGBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotKSBpX2ltZW1fcm91dGVyICgKLSAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQotICAgIC5pbWVtX3JlcV9hY2sgICAoY29yZV9pbWVtX3JlcV9hY2spLAotICAgIC5pbWVtX3JlcSAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAotICAgIC5pbWVtX2NtZCAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAotICAgIC5pbWVtX2FkZHIgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAotICAgIC5pbWVtX3JkYXRhICAgICAoY29yZV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtX3Jlc3AgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAotICAgIC8vIEludGVyZmFjZSB0byBBSEIgYnJpZGdlCi0gICAgLnBvcnQwX3JlcV9hY2sgIChhaGJfaW1lbV9yZXFfYWNrICksCi0gICAgLnBvcnQwX3JlcSAgICAgIChhaGJfaW1lbV9yZXEgICAgICksCi0gICAgLnBvcnQwX2NtZCAgICAgIChhaGJfaW1lbV9jbWQgICAgICksCi0gICAgLnBvcnQwX2FkZHIgICAgIChhaGJfaW1lbV9hZGRyICAgICksCi0gICAgLnBvcnQwX3JkYXRhICAgIChhaGJfaW1lbV9yZGF0YSAgICksCi0gICAgLnBvcnQwX3Jlc3AgICAgIChhaGJfaW1lbV9yZXNwICAgICksCi0gYGlmZGVmIFNDUjFfVENNX0VOCi0gICAgLy8gSW50ZXJmYWNlIHRvIFRDTQotICAgIC5wb3J0MV9yZXFfYWNrICAodGNtX2ltZW1fcmVxX2FjayApLAotICAgIC5wb3J0MV9yZXEgICAgICAodGNtX2ltZW1fcmVxICAgICApLAotICAgIC5wb3J0MV9jbWQgICAgICAodGNtX2ltZW1fY21kICAgICApLAotICAgIC5wb3J0MV9hZGRyICAgICAodGNtX2ltZW1fYWRkciAgICApLAotICAgIC5wb3J0MV9yZGF0YSAgICAodGNtX2ltZW1fcmRhdGEgICApLAotICAgIC5wb3J0MV9yZXNwICAgICAodGNtX2ltZW1fcmVzcCAgICApCi0gYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0pOwotCi1gZWxzZSAvLyBTQ1IxX0lNRU1fUk9VVEVSX0VOCi0KLWFzc2lnbiBhaGJfaW1lbV9yZXEgICAgICAgICA9IGNvcmVfaW1lbV9yZXE7Ci1hc3NpZ24gYWhiX2ltZW1fY21kICAgICAgICAgPSBjb3JlX2ltZW1fY21kOwotYXNzaWduIGFoYl9pbWVtX2FkZHIgICAgICAgID0gY29yZV9pbWVtX2FkZHI7Ci1hc3NpZ24gY29yZV9pbWVtX3JlcV9hY2sgICAgPSBhaGJfaW1lbV9yZXFfYWNrOwotYXNzaWduIGNvcmVfaW1lbV9yZXNwICAgICAgID0gYWhiX2ltZW1fcmVzcDsKLWFzc2lnbiBjb3JlX2ltZW1fcmRhdGEgICAgICA9IGFoYl9pbWVtX3JkYXRhOwotCi1gZW5kaWYgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERhdGEgbWVtb3J5IHJvdXRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2RtZW1fcm91dGVyICMoCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKLSAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKFNDUjFfVENNX0FERFJfUEFUVEVSTiksCi1gZWxzZSAvLyBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoMzInaDAwMDAwMDAwKSwKLSAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKDMyJ2hGRkZGRkZGRiksCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotICAgIC5TQ1IxX1BPUlQyX0FERFJfTUFTSyAgICAgICAoU0NSMV9USU1FUl9BRERSX01BU0spLAotICAgIC5TQ1IxX1BPUlQyX0FERFJfUEFUVEVSTiAgICAoU0NSMV9USU1FUl9BRERSX1BBVFRFUk4pCi0KLSkgaV9kbWVtX3JvdXRlciAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuZG1lbV9yZXFfYWNrICAgKGNvcmVfZG1lbV9yZXFfYWNrICAgKSwKLSAgICAuZG1lbV9yZXEgICAgICAgKGNvcmVfZG1lbV9yZXEgICAgICAgKSwKLSAgICAuZG1lbV9jbWQgICAgICAgKGNvcmVfZG1lbV9jbWQgICAgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKGNvcmVfZG1lbV93aWR0aCAgICAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKGNvcmVfZG1lbV9hZGRyICAgICAgKSwKLSAgICAuZG1lbV93ZGF0YSAgICAgKGNvcmVfZG1lbV93ZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKGNvcmVfZG1lbV9yZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZXNwICAgICAgKGNvcmVfZG1lbV9yZXNwICAgICAgKSwKLWBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC8vIEludGVyZmFjZSB0byBUQ00KLSAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9kbWVtX3JlcV9hY2sgICAgKSwKLSAgICAucG9ydDFfcmVxICAgICAgKHRjbV9kbWVtX3JlcSAgICAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKHRjbV9kbWVtX2NtZCAgICAgICAgKSwKLSAgICAucG9ydDFfd2lkdGggICAgKHRjbV9kbWVtX3dpZHRoICAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKHRjbV9kbWVtX2FkZHIgICAgICAgKSwKLSAgICAucG9ydDFfd2RhdGEgICAgKHRjbV9kbWVtX3dkYXRhICAgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9kbWVtX3JkYXRhICAgICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9kbWVtX3Jlc3AgICAgICAgKSwKLWBlbHNlIC8vIFNDUjFfVENNX0VOCi0gICAgLnBvcnQxX3JlcV9hY2sgICgxJ2IwKSwKLSAgICAucG9ydDFfcmVxICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfd2lkdGggICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfd2RhdGEgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKCcwICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKFNDUjFfTUVNX1JFU1BfUkRZX0VSKSwKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotICAgIC8vIEludGVyZmFjZSB0byBtZW1vcnktbWFwcGVkIHRpbWVyCi0gICAgLnBvcnQyX3JlcV9hY2sgICh0aW1lcl9kbWVtX3JlcV9hY2sgICksCi0gICAgLnBvcnQyX3JlcSAgICAgICh0aW1lcl9kbWVtX3JlcSAgICAgICksCi0gICAgLnBvcnQyX2NtZCAgICAgICh0aW1lcl9kbWVtX2NtZCAgICAgICksCi0gICAgLnBvcnQyX3dpZHRoICAgICh0aW1lcl9kbWVtX3dpZHRoICAgICksCi0gICAgLnBvcnQyX2FkZHIgICAgICh0aW1lcl9kbWVtX2FkZHIgICAgICksCi0gICAgLnBvcnQyX3dkYXRhICAgICh0aW1lcl9kbWVtX3dkYXRhICAgICksCi0gICAgLnBvcnQyX3JkYXRhICAgICh0aW1lcl9kbWVtX3JkYXRhICAgICksCi0gICAgLnBvcnQyX3Jlc3AgICAgICh0aW1lcl9kbWVtX3Jlc3AgICAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIEFIQiBicmlkZ2UKLSAgICAucG9ydDBfcmVxX2FjayAgKGFoYl9kbWVtX3JlcV9hY2sgICAgKSwKLSAgICAucG9ydDBfcmVxICAgICAgKGFoYl9kbWVtX3JlcSAgICAgICAgKSwKLSAgICAucG9ydDBfY21kICAgICAgKGFoYl9kbWVtX2NtZCAgICAgICAgKSwKLSAgICAucG9ydDBfd2lkdGggICAgKGFoYl9kbWVtX3dpZHRoICAgICAgKSwKLSAgICAucG9ydDBfYWRkciAgICAgKGFoYl9kbWVtX2FkZHIgICAgICAgKSwKLSAgICAucG9ydDBfd2RhdGEgICAgKGFoYl9kbWVtX3dkYXRhICAgICAgKSwKLSAgICAucG9ydDBfcmRhdGEgICAgKGFoYl9kbWVtX3JkYXRhICAgICAgKSwKLSAgICAucG9ydDBfcmVzcCAgICAgKGFoYl9kbWVtX3Jlc3AgICAgICAgKQotKTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBBSEIgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfaW1lbV9haGIgaV9pbWVtX2FoYiAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBpbWVtIHJvdXRlcgotICAgIC5pbWVtX3JlcV9hY2sgICAoYWhiX2ltZW1fcmVxX2FjayAgICksCi0gICAgLmltZW1fcmVxICAgICAgIChhaGJfaW1lbV9yZXEgICAgICAgKSwKLSAgICAuaW1lbV9hZGRyICAgICAgKGFoYl9pbWVtX2FkZHIgICAgICApLAotICAgIC5pbWVtX3JkYXRhICAgICAoYWhiX2ltZW1fcmRhdGEgICAgICksCi0gICAgLmltZW1fcmVzcCAgICAgIChhaGJfaW1lbV9yZXNwICAgICAgKSwKLSAgICAvLyBBSEIgaW50ZXJmYWNlCi0gICAgLmhwcm90ICAgICAgICAgIChpbWVtX2hwcm90ICAgICAgICAgKSwKLSAgICAuaGJ1cnN0ICAgICAgICAgKGltZW1faGJ1cnN0ICAgICAgICApLAotICAgIC5oc2l6ZSAgICAgICAgICAoaW1lbV9oc2l6ZSAgICAgICAgICksCi0gICAgLmh0cmFucyAgICAgICAgIChpbWVtX2h0cmFucyAgICAgICAgKSwKLSAgICAuaG1hc3Rsb2NrICAgICAgKGltZW1faG1hc3Rsb2NrICAgICApLAotICAgIC5oYWRkciAgICAgICAgICAoaW1lbV9oYWRkciAgICAgICAgICksCi0gICAgLmhyZWFkeSAgICAgICAgIChpbWVtX2hyZWFkeSAgICAgICAgKSwKLSAgICAuaHJkYXRhICAgICAgICAgKGltZW1faHJkYXRhICAgICAgICApLAotICAgIC5ocmVzcCAgICAgICAgICAoaW1lbV9ocmVzcCAgICAgICAgICkKLSk7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIG1lbW9yeSBBSEIgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfZG1lbV9haGIgaV9kbWVtX2FoYiAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBkbWVtIHJvdXRlcgotICAgIC5kbWVtX3JlcV9hY2sgICAoYWhiX2RtZW1fcmVxX2FjayAgICksCi0gICAgLmRtZW1fcmVxICAgICAgIChhaGJfZG1lbV9yZXEgICAgICAgKSwKLSAgICAuZG1lbV9jbWQgICAgICAgKGFoYl9kbWVtX2NtZCAgICAgICApLAotICAgIC5kbWVtX3dpZHRoICAgICAoYWhiX2RtZW1fd2lkdGggICAgICksCi0gICAgLmRtZW1fYWRkciAgICAgIChhaGJfZG1lbV9hZGRyICAgICAgKSwKLSAgICAuZG1lbV93ZGF0YSAgICAgKGFoYl9kbWVtX3dkYXRhICAgICApLAotICAgIC5kbWVtX3JkYXRhICAgICAoYWhiX2RtZW1fcmRhdGEgICAgICksCi0gICAgLmRtZW1fcmVzcCAgICAgIChhaGJfZG1lbV9yZXNwICAgICAgKSwKLSAgICAvLyBBSEIgaW50ZXJmYWNlCi0gICAgLmhwcm90ICAgICAgICAgIChkbWVtX2hwcm90ICAgICAgICAgKSwKLSAgICAuaGJ1cnN0ICAgICAgICAgKGRtZW1faGJ1cnN0ICAgICAgICApLAotICAgIC5oc2l6ZSAgICAgICAgICAoZG1lbV9oc2l6ZSAgICAgICAgICksCi0gICAgLmh0cmFucyAgICAgICAgIChkbWVtX2h0cmFucyAgICAgICAgKSwKLSAgICAuaG1hc3Rsb2NrICAgICAgKGRtZW1faG1hc3Rsb2NrICAgICApLAotICAgIC5oYWRkciAgICAgICAgICAoZG1lbV9oYWRkciAgICAgICAgICksCi0gICAgLmh3cml0ZSAgICAgICAgIChkbWVtX2h3cml0ZSAgICAgICAgKSwKLSAgICAuaHdkYXRhICAgICAgICAgKGRtZW1faHdkYXRhICAgICAgICApLAotICAgIC5ocmVhZHkgICAgICAgICAoZG1lbV9ocmVhZHkgICAgICAgICksCi0gICAgLmhyZGF0YSAgICAgICAgIChkbWVtX2hyZGF0YSAgICAgICAgKSwKLSAgICAuaHJlc3AgICAgICAgICAgKGRtZW1faHJlc3AgICAgICAgICApCi0pOwotCi1lbmRtb2R1bGUgOiBzY3IxX3RvcF9haGIKLQotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2F4aS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90b3BfYXhpLnN2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzViOTAyLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90b3BfYXhpLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNzAxICswLDAgQEAKLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdG9wX2F4aS5zdj4KLS8vLyBAYnJpZWYgICAgICBTQ1IxIEFYSSB0b3AKLS8vLwotCi1gaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKLWBpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLWBpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSBgZGVmaW5lIFNDUjFfSU1FTV9ST1VURVJfRU4KLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi1tb2R1bGUgc2NyMV90b3BfYXhpICgKLSAgICAvLyBDb250cm9sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X24sICAgICAgICAgICAgLy8gUG93ZXItVXAgUmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3RfbiwgICAgICAgICAgICAgIC8vIENQVSBSZXNldCAoQ29yZSBSZXNldCkKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21vZGUsICAgICAgICAgICAgICAvLyBUZXN0IG1vZGUKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JzdF9uLCAgICAgICAgICAgICAvLyBUZXN0IG1vZGUncyByZXNldAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbSBjbG9jawotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Y19jbGssICAgICAgICAgICAgICAgIC8vIFJlYWwtdGltZSBjbG9jawotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX28sICAgICAgICAgICAgLy8gRXh0ZXJuYWwgU3lzdGVtIFJlc2V0IG91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgKGZvciB0aGUgcHJvY2Vzc29yIGNsdXN0ZXIncyBjb21wb25lbnRzIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgZXh0ZXJuYWwgU09DIChjb3VsZCBiZSB1c2VmdWwgaW4gc21hbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBTQ1ItY29yZS1jZW50cmljIFNPQ3MpKQotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yZGNfcWxmeV9vLCAgICAgICAgIC8vIFN5c3RlbS10by1FeHRlcm5hbCBTT0MgUmVzZXQgRG9tYWluIENyb3NzaW5nIFF1YWxpZmllcgotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBGdXNlcwotICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGZ1c2VfbWhhcnRpZCwgICAgICAgICAgIC8vIEhhcnQgSUQKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2VfaWRjb2RlLCAgICAgICAgICAgIC8vIFRBUEMgSURDT0RFCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIElSUQotYGlmZGVmIFNDUjFfSVBJQ19FTgotICAgIGlucHV0ICAgbG9naWMgW1NDUjFfSVJRX0xJTkVTX05VTS0xOjBdICAgICAgICAgIGlycV9saW5lcywgICAgICAgICAgICAgIC8vIElSUSBsaW5lcyB0byBJUElDCi1gZWxzZSAvLyBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfaXJxLCAgICAgICAgICAgICAgICAvLyBFeHRlcm5hbCBJUlEgaW5wdXQKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0X2lycSwgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBJUlEgaW5wdXQKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gLS0gSlRBRyBJL0YKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnN0X24sCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNrLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGksCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkb19lbiwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gTWVtb3J5IEludGVyZmFjZQotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3aWQsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdhZGRyLAotICAgIG91dHB1dCAgbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3bGVuLAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3c2l6ZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd2J1cnN0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3bG9jaywKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd2NhY2hlLAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3cHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3JlZ2lvbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3VzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdxb3MsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXd2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3JlYWR5LAotICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3dkYXRhLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3dzdHJiLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3dsYXN0LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3d1c2VyLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3d2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV93cmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYmlkLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2JyZXNwLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2J2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9idXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9icmVhZHksCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJpZCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmFkZHIsCi0gICAgb3V0cHV0ICBsb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJsZW4sCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJzaXplLAotICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FyYnVyc3QsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJsb2NrLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FyY2FjaGUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJwcm90LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FycmVnaW9uLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FydXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcnFvcywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcnZhbGlkLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FycmVhZHksCi0gICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcmlkLAotICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3JkYXRhLAotICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3JyZXNwLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3JsYXN0LAotICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3J1c2VyLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3J2YWxpZCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9ycmVhZHksCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2lkLAotICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3YWRkciwKLSAgICBvdXRwdXQgIGxvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2xlbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3NpemUsCi0gICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdidXJzdCwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2xvY2ssCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdjYWNoZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3Byb3QsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdyZWdpb24sCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXd1c2VyLAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3cW9zLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3dmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdyZWFkeSwKLSAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93ZGF0YSwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93c3RyYiwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93bGFzdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93dXNlciwKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93dmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fd3JlYWR5LAotICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2JpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9icmVzcCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9idmFsaWQsCi0gICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYnVzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYnJlYWR5LAotICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FyaWQsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJhZGRyLAotICAgIG91dHB1dCAgbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FybGVuLAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2Fyc2l6ZSwKLSAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcmJ1cnN0LAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FybG9jaywKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcmNhY2hlLAotICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FycHJvdCwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnJlZ2lvbiwKLSAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnVzZXIsCi0gICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJxb3MsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJ2YWxpZCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnJlYWR5LAotICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JpZCwKLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9yZGF0YSwKLSAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9ycmVzcCwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9ybGFzdCwKLSAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9ydXNlciwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9ydmFsaWQsCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fcnJlYWR5Ci0pOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHBhcmFtZXRlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgPSAyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZXNldCBsb2dpYwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uX3N5bmM7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX2xvY2FsOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9yc3RfbjsKLWBpZmRlZiBTQ1IxX0RCR19FTgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSBjb3JlIHRvIHJvdXRlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXE7Ci10eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX2NtZDsKLWxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3Jlc3A7Ci0KLS8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fY21kOwotdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3JkYXRhOwotdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXNwOwotCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIEFYSSBicmlkZ2UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfaW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfaW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYXhpX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBheGlfaW1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfaW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gQVhJIGJyaWRnZQotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX2NtZDsKLXR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfZG1lbV93aWR0aDsKLWxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBheGlfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX3JkYXRhOwotdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX3Jlc3A7Ci0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gVENNCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXE7Ci10eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fY21kOwotdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVzcDsKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX2NtZDsKLXR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXNwOwotCi0vLyBNaXNjCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfaXJxOwotbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3ZhbDsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfcmVpbml0OwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX2lkbGU7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1faWRsZTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZXNldCBsb2dpYwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQb3dlci1VcCBSZXNldCBzeW5jaHJvbml6ZXIKLXNjcjFfcmVzZXRfc3luY19jZWxsICMoCi0gICAgLlNUQUdFU19BTU9VTlQgICAgICAgKFNDUjFfQ0xVU1RFUl9UT1BfUlNUX1NZTkNfU1RBR0VTX05VTSkKLSkgaV9wd3J1cF9yc3RuX3Jlc2V0X3N5bmMgKAotICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX2luICAgICAgICgxJ2IxICAgICAgICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKHB3cnVwX3JzdF9uX3N5bmMpCi0pOwotCi0vLyBSZWd1bGFyIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3JzdG5fcmVzZXRfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25faW4gICAgICAgKHJzdF9uICAgICAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAocnN0X25fc3luYyAgICAgICkKLSk7Ci0KLS8vIENQVSBSZXNldCBzeW5jaHJvbml6ZXIKLXNjcjFfcmVzZXRfc3luY19jZWxsICMoCi0gICAgLlNUQUdFU19BTU9VTlQgICAgICAgKFNDUjFfQ0xVU1RFUl9UT1BfUlNUX1NZTkNfU1RBR0VTX05VTSkKLSkgaV9jcHVfcnN0bl9yZXNldF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9pbiAgICAgICAoY3B1X3JzdF9uICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgIChjcHVfcnN0X25fc3luYyAgKQotKTsKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0vLyBUQVBDIFJlc2V0Ci1zY3IxX3Jlc2V0X2FuZDJfY2VsbCBpX3RhcGNfcnN0bl9hbmQyX2NlbGwgKAotICAgIC5yc3Rfbl9pbiAgICAgICAoe3Ryc3RfbiwgcHdydXBfcnN0X259KSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgICh0YXBjX3Ryc3RfbiAgICAgKQotKTsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLWFzc2lnbiBheGlfcnN0X24gPSBzeXNfcnN0X25fbzsKLWBlbHNlIC8vIFNDUjFfREJHX0VOCi1hc3NpZ24gYXhpX3JzdF9uID0gcnN0X25fc3luYzsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNDUjEgY29yZSBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2NvcmVfdG9wIGlfY29yZV90b3AgKAotICAgIC8vIENvbW1vbgotICAgIC5wd3J1cF9yc3RfbiAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyApLAotICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAocnN0X25fc3luYyAgICAgICApLAotICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgICAgICAoY3B1X3JzdF9uX3N5bmMgICApLAotICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICApLAotICAgIC5jb3JlX3JzdF9uX28gICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCApLAotICAgIC5jb3JlX3JkY19xbGZ5X28gICAgICAgICAgICAoICAgICAgICAgICAgICAgICApLAotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLnN5c19yc3Rfbl9vICAgICAgICAgICAgICAgIChzeXNfcnN0X25fbyAgICAgICksCi0gICAgLnN5c19yZGNfcWxmeV9vICAgICAgICAgICAgIChzeXNfcmRjX3FsZnlfbyAgICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEZ1c2VzCi0gICAgLmNvcmVfZnVzZV9taGFydGlkX2kgICAgICAgIChmdXNlX21oYXJ0aWQgICAgICksCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAudGFwY19mdXNlX2lkY29kZV9pICAgICAgICAgKGZ1c2VfaWRjb2RlICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSVJRCi1gaWZkZWYgU0NSMV9JUElDX0VOCi0gICAgLmNvcmVfaXJxX2xpbmVzX2kgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICksCi1gZWxzZSAvLyBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfZXh0X2kgICAgICAgICAgICAgKGV4dF9pcnEgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfc29mdF9pICAgICAgICAgICAgKHNvZnRfaXJxICAgICAgICAgKSwKLSAgICAuY29yZV9pcnFfbXRpbWVyX2kgICAgICAgICAgKHRpbWVyX2lycSAgICAgICAgKSwKLQotICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKLSAgICAuY29yZV9tdGltZXJfdmFsX2kgICAgICAgICAgKHRpbWVyX3ZhbCAgICAgICAgKSwKLQotYGlmZGVmIFNDUjFfREJHX0VOCi0gICAgLy8gRGVidWcgaW50ZXJmYWNlCi0gICAgLnRhcGNfdHJzdF9uICAgICAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICksCi0gICAgLnRhcGNfdGNrICAgICAgICAgICAgICAgICAgICh0Y2sgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdG1zICAgICAgICAgICAgICAgICAgICh0bXMgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRpICAgICAgICAgICAgICAgICAgICh0ZGkgICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRvICAgICAgICAgICAgICAgICAgICh0ZG8gICAgICAgICAgICAgICksCi0gICAgLnRhcGNfdGRvX2VuICAgICAgICAgICAgICAgICh0ZG9fZW4gICAgICAgICAgICksCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UKLSAgICAuaW1lbTJjb3JlX3JlcV9hY2tfaSAgICAgICAgKGNvcmVfaW1lbV9yZXFfYWNrKSwKLSAgICAuY29yZTJpbWVtX3JlcV9vICAgICAgICAgICAgKGNvcmVfaW1lbV9yZXEgICAgKSwKLSAgICAuY29yZTJpbWVtX2NtZF9vICAgICAgICAgICAgKGNvcmVfaW1lbV9jbWQgICAgKSwKLSAgICAuY29yZTJpbWVtX2FkZHJfbyAgICAgICAgICAgKGNvcmVfaW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbTJjb3JlX3JkYXRhX2kgICAgICAgICAgKGNvcmVfaW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbTJjb3JlX3Jlc3BfaSAgICAgICAgICAgKGNvcmVfaW1lbV9yZXNwICAgKSwKLQotICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQotICAgIC5kbWVtMmNvcmVfcmVxX2Fja19pICAgICAgICAoY29yZV9kbWVtX3JlcV9hY2spLAotICAgIC5jb3JlMmRtZW1fcmVxX28gICAgICAgICAgICAoY29yZV9kbWVtX3JlcSAgICApLAotICAgIC5jb3JlMmRtZW1fY21kX28gICAgICAgICAgICAoY29yZV9kbWVtX2NtZCAgICApLAotICAgIC5jb3JlMmRtZW1fd2lkdGhfbyAgICAgICAgICAoY29yZV9kbWVtX3dpZHRoICApLAotICAgIC5jb3JlMmRtZW1fYWRkcl9vICAgICAgICAgICAoY29yZV9kbWVtX2FkZHIgICApLAotICAgIC5jb3JlMmRtZW1fd2RhdGFfbyAgICAgICAgICAoY29yZV9kbWVtX3dkYXRhICApLAotICAgIC5kbWVtMmNvcmVfcmRhdGFfaSAgICAgICAgICAoY29yZV9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtMmNvcmVfcmVzcF9pICAgICAgICAgICAoY29yZV9kbWVtX3Jlc3AgICApCi0pOwotCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQ00gaW5zdGFuY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV90Y20gIygKLSAgICAuU0NSMV9UQ01fU0laRSAgKGBTQ1IxX0RNRU1fQVdJRFRIJyh+U0NSMV9UQ01fQUREUl9NQVNLICsgMSdiMSkpCi0pIGlfdGNtICgKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCksCi0KLSAgICAvLyBJbnN0cnVjdGlvbiBpbnRlcmZhY2UgdG8gVENNCi0gICAgLmltZW1fcmVxX2FjayAgICh0Y21faW1lbV9yZXFfYWNrKSwKLSAgICAuaW1lbV9yZXEgICAgICAgKHRjbV9pbWVtX3JlcSAgICApLAotICAgIC5pbWVtX2FkZHIgICAgICAodGNtX2ltZW1fYWRkciAgICksCi0gICAgLmltZW1fcmRhdGEgICAgICh0Y21faW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbV9yZXNwICAgICAgKHRjbV9pbWVtX3Jlc3AgICApLAotCi0gICAgLy8gRGF0YSBpbnRlcmZhY2UgdG8gVENNCi0gICAgLmRtZW1fcmVxX2FjayAgICh0Y21fZG1lbV9yZXFfYWNrKSwKLSAgICAuZG1lbV9yZXEgICAgICAgKHRjbV9kbWVtX3JlcSAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAodGNtX2RtZW1fY21kICAgICksCi0gICAgLmRtZW1fd2lkdGggICAgICh0Y21fZG1lbV93aWR0aCAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKHRjbV9kbWVtX2FkZHIgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAodGNtX2RtZW1fd2RhdGEgICksCi0gICAgLmRtZW1fcmRhdGEgICAgICh0Y21fZG1lbV9yZGF0YSAgKSwKLSAgICAuZG1lbV9yZXNwICAgICAgKHRjbV9kbWVtX3Jlc3AgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZW1vcnktbWFwcGVkIHRpbWVyIGluc3RhbmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfdGltZXIgaV90aW1lciAoCi0gICAgLy8gQ29tbW9uCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgKSwKLSAgICAucnRjX2NsayAgICAgICAgKHJ0Y19jbGsgICAgICAgICAgICksCi0KLSAgICAvLyBNZW1vcnkgaW50ZXJmYWNlCi0gICAgLmRtZW1fcmVxICAgICAgICh0aW1lcl9kbWVtX3JlcSAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAodGltZXJfZG1lbV9jbWQgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHRpbWVyX2RtZW1fd2lkdGggICksCi0gICAgLmRtZW1fYWRkciAgICAgICh0aW1lcl9kbWVtX2FkZHIgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAodGltZXJfZG1lbV93ZGF0YSAgKSwKLSAgICAuZG1lbV9yZXFfYWNrICAgKHRpbWVyX2RtZW1fcmVxX2FjayksCi0gICAgLmRtZW1fcmRhdGEgICAgICh0aW1lcl9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAodGltZXJfZG1lbV9yZXNwICAgKSwKLQotICAgIC8vIFRpbWVyIGludGVyZmFjZQotICAgIC50aW1lcl92YWwgICAgICAodGltZXJfdmFsICAgICAgICAgKSwKLSAgICAudGltZXJfaXJxICAgICAgKHRpbWVyX2lycSAgICAgICAgICkKLSk7Ci0KLQotYGlmZGVmIFNDUjFfSU1FTV9ST1VURVJfRU4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IHJvdXRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2ltZW1fcm91dGVyICMoCi0gICAgLlNDUjFfQUREUl9NQVNLICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKLSAgICAuU0NSMV9BRERSX1BBVFRFUk4gIChTQ1IxX1RDTV9BRERSX1BBVFRFUk4pCi0pIGlfaW1lbV9yb3V0ZXIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICApLAotCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuaW1lbV9yZXFfYWNrICAgKGNvcmVfaW1lbV9yZXFfYWNrKSwKLSAgICAuaW1lbV9yZXEgICAgICAgKGNvcmVfaW1lbV9yZXEgICAgKSwKLSAgICAuaW1lbV9jbWQgICAgICAgKGNvcmVfaW1lbV9jbWQgICAgKSwKLSAgICAuaW1lbV9hZGRyICAgICAgKGNvcmVfaW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKGNvcmVfaW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbV9yZXNwICAgICAgKGNvcmVfaW1lbV9yZXNwICAgKSwKLQotICAgIC8vIEludGVyZmFjZSB0byBBWEkgYnJpZGdlCi0gICAgLnBvcnQwX3JlcV9hY2sgIChheGlfaW1lbV9yZXFfYWNrICksCi0gICAgLnBvcnQwX3JlcSAgICAgIChheGlfaW1lbV9yZXEgICAgICksCi0gICAgLnBvcnQwX2NtZCAgICAgIChheGlfaW1lbV9jbWQgICAgICksCi0gICAgLnBvcnQwX2FkZHIgICAgIChheGlfaW1lbV9hZGRyICAgICksCi0gICAgLnBvcnQwX3JkYXRhICAgIChheGlfaW1lbV9yZGF0YSAgICksCi0gICAgLnBvcnQwX3Jlc3AgICAgIChheGlfaW1lbV9yZXNwICAgICksCi0KLSAgICAvLyBJbnRlcmZhY2UgdG8gVENNCi0gICAgLnBvcnQxX3JlcV9hY2sgICh0Y21faW1lbV9yZXFfYWNrICksCi0gICAgLnBvcnQxX3JlcSAgICAgICh0Y21faW1lbV9yZXEgICAgICksCi0gICAgLnBvcnQxX2NtZCAgICAgICh0Y21faW1lbV9jbWQgICAgICksCi0gICAgLnBvcnQxX2FkZHIgICAgICh0Y21faW1lbV9hZGRyICAgICksCi0gICAgLnBvcnQxX3JkYXRhICAgICh0Y21faW1lbV9yZGF0YSAgICksCi0gICAgLnBvcnQxX3Jlc3AgICAgICh0Y21faW1lbV9yZXNwICAgICkKLSk7Ci0KLWBlbHNlIC8vIFNDUjFfSU1FTV9ST1VURVJfRU4KLQotYXNzaWduIGF4aV9pbWVtX3JlcSAgICAgICAgID0gY29yZV9pbWVtX3JlcTsKLWFzc2lnbiBheGlfaW1lbV9jbWQgICAgICAgICA9IGNvcmVfaW1lbV9jbWQ7Ci1hc3NpZ24gYXhpX2ltZW1fYWRkciAgICAgICAgPSBjb3JlX2ltZW1fYWRkcjsKLWFzc2lnbiBjb3JlX2ltZW1fcmVxX2FjayAgICA9IGF4aV9pbWVtX3JlcV9hY2s7Ci1hc3NpZ24gY29yZV9pbWVtX3Jlc3AgICAgICAgPSBheGlfaW1lbV9yZXNwOwotYXNzaWduIGNvcmVfaW1lbV9yZGF0YSAgICAgID0gYXhpX2ltZW1fcmRhdGE7Ci0KLWBlbmRpZiAvLyBTQ1IxX0lNRU1fUk9VVEVSX0VOCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIG1lbW9yeSByb3V0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9kbWVtX3JvdXRlciAjKAotCi1gaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICAgKFNDUjFfVENNX0FERFJfTUFTSyksCi0gICAgLlNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgIChTQ1IxX1RDTV9BRERSX1BBVFRFUk4pLAotYGVsc2UgLy8gU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9QT1JUMV9BRERSX01BU0sgICAgICAgKDMyJ2gwMDAwMDAwMCksCi0gICAgLlNDUjFfUE9SVDFfQUREUl9QQVRURVJOICAgICgzMidoRkZGRkZGRkYpLAotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLSAgICAuU0NSMV9QT1JUMl9BRERSX01BU0sgICAgICAgKFNDUjFfVElNRVJfQUREUl9NQVNLKSwKLSAgICAuU0NSMV9QT1JUMl9BRERSX1BBVFRFUk4gICAgKFNDUjFfVElNRVJfQUREUl9QQVRURVJOKQotCi0pIGlfZG1lbV9yb3V0ZXIgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICApLAotCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuZG1lbV9yZXFfYWNrICAgKGNvcmVfZG1lbV9yZXFfYWNrICAgKSwKLSAgICAuZG1lbV9yZXEgICAgICAgKGNvcmVfZG1lbV9yZXEgICAgICAgKSwKLSAgICAuZG1lbV9jbWQgICAgICAgKGNvcmVfZG1lbV9jbWQgICAgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKGNvcmVfZG1lbV93aWR0aCAgICAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKGNvcmVfZG1lbV9hZGRyICAgICAgKSwKLSAgICAuZG1lbV93ZGF0YSAgICAgKGNvcmVfZG1lbV93ZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKGNvcmVfZG1lbV9yZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZXNwICAgICAgKGNvcmVfZG1lbV9yZXNwICAgICAgKSwKLQotYGlmZGVmIFNDUjFfVENNX0VOCi0gICAgLy8gSW50ZXJmYWNlIHRvIFRDTQotICAgIC5wb3J0MV9yZXFfYWNrICAodGNtX2RtZW1fcmVxX2FjayAgICApLAotICAgIC5wb3J0MV9yZXEgICAgICAodGNtX2RtZW1fcmVxICAgICAgICApLAotICAgIC5wb3J0MV9jbWQgICAgICAodGNtX2RtZW1fY21kICAgICAgICApLAotICAgIC5wb3J0MV93aWR0aCAgICAodGNtX2RtZW1fd2lkdGggICAgICApLAotICAgIC5wb3J0MV9hZGRyICAgICAodGNtX2RtZW1fYWRkciAgICAgICApLAotICAgIC5wb3J0MV93ZGF0YSAgICAodGNtX2RtZW1fd2RhdGEgICAgICApLAotICAgIC5wb3J0MV9yZGF0YSAgICAodGNtX2RtZW1fcmRhdGEgICAgICApLAotICAgIC5wb3J0MV9yZXNwICAgICAodGNtX2RtZW1fcmVzcCAgICAgICApLAotYGVsc2UgLy8gU0NSMV9UQ01fRU4KLSAgICAucG9ydDFfcmVxX2FjayAgKDEnYjAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmVxICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfd2lkdGggICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfd2RhdGEgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKCcwICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKFNDUjFfTUVNX1JFU1BfUkRZX0VSKSwKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi0gICAgLy8gSW50ZXJmYWNlIHRvIG1lbW9yeS1tYXBwZWQgdGltZXIKLSAgICAucG9ydDJfcmVxX2FjayAgKHRpbWVyX2RtZW1fcmVxX2FjayAgKSwKLSAgICAucG9ydDJfcmVxICAgICAgKHRpbWVyX2RtZW1fcmVxICAgICAgKSwKLSAgICAucG9ydDJfY21kICAgICAgKHRpbWVyX2RtZW1fY21kICAgICAgKSwKLSAgICAucG9ydDJfd2lkdGggICAgKHRpbWVyX2RtZW1fd2lkdGggICAgKSwKLSAgICAucG9ydDJfYWRkciAgICAgKHRpbWVyX2RtZW1fYWRkciAgICAgKSwKLSAgICAucG9ydDJfd2RhdGEgICAgKHRpbWVyX2RtZW1fd2RhdGEgICAgKSwKLSAgICAucG9ydDJfcmRhdGEgICAgKHRpbWVyX2RtZW1fcmRhdGEgICAgKSwKLSAgICAucG9ydDJfcmVzcCAgICAgKHRpbWVyX2RtZW1fcmVzcCAgICAgKSwKLQotICAgIC8vIEludGVyZmFjZSB0byBBWEkgYnJpZGdlCi0gICAgLnBvcnQwX3JlcV9hY2sgIChheGlfZG1lbV9yZXFfYWNrICAgICksCi0gICAgLnBvcnQwX3JlcSAgICAgIChheGlfZG1lbV9yZXEgICAgICAgICksCi0gICAgLnBvcnQwX2NtZCAgICAgIChheGlfZG1lbV9jbWQgICAgICAgICksCi0gICAgLnBvcnQwX3dpZHRoICAgIChheGlfZG1lbV93aWR0aCAgICAgICksCi0gICAgLnBvcnQwX2FkZHIgICAgIChheGlfZG1lbV9hZGRyICAgICAgICksCi0gICAgLnBvcnQwX3dkYXRhICAgIChheGlfZG1lbV93ZGF0YSAgICAgICksCi0gICAgLnBvcnQwX3JkYXRhICAgIChheGlfZG1lbV9yZGF0YSAgICAgICksCi0gICAgLnBvcnQwX3Jlc3AgICAgIChheGlfZG1lbV9yZXNwICAgICAgICkKLSk7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgQVhJIGJyaWRnZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX21lbV9heGkgIygKLWBpZmRlZiBTQ1IxX0lNRU1fQVhJX1JFUV9CUAotICAgIC5TQ1IxX0FYSV9SRVFfQlAgICAgKDEpLAotYGVsc2UgLy8gU0NSMV9JTUVNX0FYSV9SRVFfQlAKLSAgICAuU0NSMV9BWElfUkVRX0JQICAgICgwKSwKLWBlbmRpZiAvLyBTQ1IxX0lNRU1fQVhJX1JFUV9CUAotYGlmZGVmIFNDUjFfSU1FTV9BWElfUkVTUF9CUAotICAgIC5TQ1IxX0FYSV9SRVNQX0JQICAgKDEpCi1gZWxzZSAvLyBTQ1IxX0lNRU1fQVhJX1JFU1BfQlAKLSAgICAuU0NSMV9BWElfUkVTUF9CUCAgICgwKQotYGVuZGlmIC8vIFNDUjFfSU1FTV9BWElfUkVTUF9CUAotKSBpX2ltZW1fYXhpICgKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucnN0X24gICAgICAgICAgKGF4aV9yc3RfbiAgICAgICAgICAgICAgKSwKLSAgICAuYXhpX3JlaW5pdCAgICAgKGF4aV9yZWluaXQgICAgICAgICAgICAgKSwKLQotICAgIC8vIEludGVyZmFjZSB0byBjb3JlCi0gICAgLmNvcmVfaWRsZSAgICAgIChheGlfaW1lbV9pZGxlICAgICAgICAgICksCi0gICAgLmNvcmVfcmVxX2FjayAgIChheGlfaW1lbV9yZXFfYWNrICAgICAgICksCi0gICAgLmNvcmVfcmVxICAgICAgIChheGlfaW1lbV9yZXEgICAgICAgICAgICksCi0gICAgLmNvcmVfY21kICAgICAgIChheGlfaW1lbV9jbWQgICAgICAgICAgICksCi0gICAgLmNvcmVfd2lkdGggICAgIChTQ1IxX01FTV9XSURUSF9XT1JEICAgICksCi0gICAgLmNvcmVfYWRkciAgICAgIChheGlfaW1lbV9hZGRyICAgICAgICAgICksCi0gICAgLmNvcmVfd2RhdGEgICAgICgnMCAgICAgICAgICAgICAgICAgICAgICksCi0gICAgLmNvcmVfcmRhdGEgICAgIChheGlfaW1lbV9yZGF0YSAgICAgICAgICksCi0gICAgLmNvcmVfcmVzcCAgICAgIChheGlfaW1lbV9yZXNwICAgICAgICAgICksCi0KLSAgICAvLyBBWEkgSS9PCi0gICAgLmF3aWQgICAgICAgICAgIChpb19heGlfaW1lbV9hd2lkICAgICAgICksCi0gICAgLmF3YWRkciAgICAgICAgIChpb19heGlfaW1lbV9hd2FkZHIgICAgICksCi0gICAgLmF3bGVuICAgICAgICAgIChpb19heGlfaW1lbV9hd2xlbiAgICAgICksCi0gICAgLmF3c2l6ZSAgICAgICAgIChpb19heGlfaW1lbV9hd3NpemUgICAgICksCi0gICAgLmF3YnVyc3QgICAgICAgIChpb19heGlfaW1lbV9hd2J1cnN0ICAgICksCi0gICAgLmF3bG9jayAgICAgICAgIChpb19heGlfaW1lbV9hd2xvY2sgICAgICksCi0gICAgLmF3Y2FjaGUgICAgICAgIChpb19heGlfaW1lbV9hd2NhY2hlICAgICksCi0gICAgLmF3cHJvdCAgICAgICAgIChpb19heGlfaW1lbV9hd3Byb3QgICAgICksCi0gICAgLmF3cmVnaW9uICAgICAgIChpb19heGlfaW1lbV9hd3JlZ2lvbiAgICksCi0gICAgLmF3dXNlciAgICAgICAgIChpb19heGlfaW1lbV9hd3VzZXIgICAgICksCi0gICAgLmF3cW9zICAgICAgICAgIChpb19heGlfaW1lbV9hd3FvcyAgICAgICksCi0gICAgLmF3dmFsaWQgICAgICAgIChpb19heGlfaW1lbV9hd3ZhbGlkICAgICksCi0gICAgLmF3cmVhZHkgICAgICAgIChpb19heGlfaW1lbV9hd3JlYWR5ICAgICksCi0gICAgLndkYXRhICAgICAgICAgIChpb19heGlfaW1lbV93ZGF0YSAgICAgICksCi0gICAgLndzdHJiICAgICAgICAgIChpb19heGlfaW1lbV93c3RyYiAgICAgICksCi0gICAgLndsYXN0ICAgICAgICAgIChpb19heGlfaW1lbV93bGFzdCAgICAgICksCi0gICAgLnd1c2VyICAgICAgICAgIChpb19heGlfaW1lbV93dXNlciAgICAgICksCi0gICAgLnd2YWxpZCAgICAgICAgIChpb19heGlfaW1lbV93dmFsaWQgICAgICksCi0gICAgLndyZWFkeSAgICAgICAgIChpb19heGlfaW1lbV93cmVhZHkgICAgICksCi0gICAgLmJpZCAgICAgICAgICAgIChpb19heGlfaW1lbV9iaWQgICAgICAgICksCi0gICAgLmJyZXNwICAgICAgICAgIChpb19heGlfaW1lbV9icmVzcCAgICAgICksCi0gICAgLmJ2YWxpZCAgICAgICAgIChpb19heGlfaW1lbV9idmFsaWQgICAgICksCi0gICAgLmJ1c2VyICAgICAgICAgIChpb19heGlfaW1lbV9idXNlciAgICAgICksCi0gICAgLmJyZWFkeSAgICAgICAgIChpb19heGlfaW1lbV9icmVhZHkgICAgICksCi0gICAgLmFyaWQgICAgICAgICAgIChpb19heGlfaW1lbV9hcmlkICAgICAgICksCi0gICAgLmFyYWRkciAgICAgICAgIChpb19heGlfaW1lbV9hcmFkZHIgICAgICksCi0gICAgLmFybGVuICAgICAgICAgIChpb19heGlfaW1lbV9hcmxlbiAgICAgICksCi0gICAgLmFyc2l6ZSAgICAgICAgIChpb19heGlfaW1lbV9hcnNpemUgICAgICksCi0gICAgLmFyYnVyc3QgICAgICAgIChpb19heGlfaW1lbV9hcmJ1cnN0ICAgICksCi0gICAgLmFybG9jayAgICAgICAgIChpb19heGlfaW1lbV9hcmxvY2sgICAgICksCi0gICAgLmFyY2FjaGUgICAgICAgIChpb19heGlfaW1lbV9hcmNhY2hlICAgICksCi0gICAgLmFycHJvdCAgICAgICAgIChpb19heGlfaW1lbV9hcnByb3QgICAgICksCi0gICAgLmFycmVnaW9uICAgICAgIChpb19heGlfaW1lbV9hcnJlZ2lvbiAgICksCi0gICAgLmFydXNlciAgICAgICAgIChpb19heGlfaW1lbV9hcnVzZXIgICAgICksCi0gICAgLmFycW9zICAgICAgICAgIChpb19heGlfaW1lbV9hcnFvcyAgICAgICksCi0gICAgLmFydmFsaWQgICAgICAgIChpb19heGlfaW1lbV9hcnZhbGlkICAgICksCi0gICAgLmFycmVhZHkgICAgICAgIChpb19heGlfaW1lbV9hcnJlYWR5ICAgICksCi0gICAgLnJpZCAgICAgICAgICAgIChpb19heGlfaW1lbV9yaWQgICAgICAgICksCi0gICAgLnJkYXRhICAgICAgICAgIChpb19heGlfaW1lbV9yZGF0YSAgICAgICksCi0gICAgLnJyZXNwICAgICAgICAgIChpb19heGlfaW1lbV9ycmVzcCAgICAgICksCi0gICAgLnJsYXN0ICAgICAgICAgIChpb19heGlfaW1lbV9ybGFzdCAgICAgICksCi0gICAgLnJ1c2VyICAgICAgICAgIChpb19heGlfaW1lbV9ydXNlciAgICAgICksCi0gICAgLnJ2YWxpZCAgICAgICAgIChpb19heGlfaW1lbV9ydmFsaWQgICAgICksCi0gICAgLnJyZWFkeSAgICAgICAgIChpb19heGlfaW1lbV9ycmVhZHkgICAgICkKLSk7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIG1lbW9yeSBBWEkgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfbWVtX2F4aSAjKAotYGlmZGVmIFNDUjFfRE1FTV9BWElfUkVRX0JQCi0gICAgLlNDUjFfQVhJX1JFUV9CUCAgICAoMSksCi1gZWxzZSAvLyBTQ1IxX0RNRU1fQVhJX1JFUV9CUAotICAgIC5TQ1IxX0FYSV9SRVFfQlAgICAgKDApLAotYGVuZGlmIC8vIFNDUjFfRE1FTV9BWElfUkVRX0JQCi1gaWZkZWYgU0NSMV9ETUVNX0FYSV9SRVNQX0JQCi0gICAgLlNDUjFfQVhJX1JFU1BfQlAgICAoMSkKLWBlbHNlIC8vIFNDUjFfRE1FTV9BWElfUkVTUF9CUAotICAgIC5TQ1IxX0FYSV9SRVNQX0JQICAgKDApCi1gZW5kaWYgLy8gU0NSMV9ETUVNX0FYSV9SRVNQX0JQCi0pIGlfZG1lbV9heGkgKAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICApLAotICAgIC5yc3RfbiAgICAgICAgICAoYXhpX3JzdF9uICAgICAgICAgICAgICApLAotICAgIC5heGlfcmVpbml0ICAgICAoYXhpX3JlaW5pdCAgICAgICAgICAgICApLAotCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuY29yZV9pZGxlICAgICAgKGF4aV9kbWVtX2lkbGUgICAgICAgICAgKSwKLSAgICAuY29yZV9yZXFfYWNrICAgKGF4aV9kbWVtX3JlcV9hY2sgICAgICAgKSwKLSAgICAuY29yZV9yZXEgICAgICAgKGF4aV9kbWVtX3JlcSAgICAgICAgICAgKSwKLSAgICAuY29yZV9jbWQgICAgICAgKGF4aV9kbWVtX2NtZCAgICAgICAgICAgKSwKLSAgICAuY29yZV93aWR0aCAgICAgKGF4aV9kbWVtX3dpZHRoICAgICAgICAgKSwKLSAgICAuY29yZV9hZGRyICAgICAgKGF4aV9kbWVtX2FkZHIgICAgICAgICAgKSwKLSAgICAuY29yZV93ZGF0YSAgICAgKGF4aV9kbWVtX3dkYXRhICAgICAgICAgKSwKLSAgICAuY29yZV9yZGF0YSAgICAgKGF4aV9kbWVtX3JkYXRhICAgICAgICAgKSwKLSAgICAuY29yZV9yZXNwICAgICAgKGF4aV9kbWVtX3Jlc3AgICAgICAgICAgKSwKLQotICAgIC8vIEFYSSBJL08KLSAgICAuYXdpZCAgICAgICAgICAgKGlvX2F4aV9kbWVtX2F3aWQgICAgICAgKSwKLSAgICAuYXdhZGRyICAgICAgICAgKGlvX2F4aV9kbWVtX2F3YWRkciAgICAgKSwKLSAgICAuYXdsZW4gICAgICAgICAgKGlvX2F4aV9kbWVtX2F3bGVuICAgICAgKSwKLSAgICAuYXdzaXplICAgICAgICAgKGlvX2F4aV9kbWVtX2F3c2l6ZSAgICAgKSwKLSAgICAuYXdidXJzdCAgICAgICAgKGlvX2F4aV9kbWVtX2F3YnVyc3QgICAgKSwKLSAgICAuYXdsb2NrICAgICAgICAgKGlvX2F4aV9kbWVtX2F3bG9jayAgICAgKSwKLSAgICAuYXdjYWNoZSAgICAgICAgKGlvX2F4aV9kbWVtX2F3Y2FjaGUgICAgKSwKLSAgICAuYXdwcm90ICAgICAgICAgKGlvX2F4aV9kbWVtX2F3cHJvdCAgICAgKSwKLSAgICAuYXdyZWdpb24gICAgICAgKGlvX2F4aV9kbWVtX2F3cmVnaW9uICAgKSwKLSAgICAuYXd1c2VyICAgICAgICAgKGlvX2F4aV9kbWVtX2F3dXNlciAgICAgKSwKLSAgICAuYXdxb3MgICAgICAgICAgKGlvX2F4aV9kbWVtX2F3cW9zICAgICAgKSwKLSAgICAuYXd2YWxpZCAgICAgICAgKGlvX2F4aV9kbWVtX2F3dmFsaWQgICAgKSwKLSAgICAuYXdyZWFkeSAgICAgICAgKGlvX2F4aV9kbWVtX2F3cmVhZHkgICAgKSwKLSAgICAud2RhdGEgICAgICAgICAgKGlvX2F4aV9kbWVtX3dkYXRhICAgICAgKSwKLSAgICAud3N0cmIgICAgICAgICAgKGlvX2F4aV9kbWVtX3dzdHJiICAgICAgKSwKLSAgICAud2xhc3QgICAgICAgICAgKGlvX2F4aV9kbWVtX3dsYXN0ICAgICAgKSwKLSAgICAud3VzZXIgICAgICAgICAgKGlvX2F4aV9kbWVtX3d1c2VyICAgICAgKSwKLSAgICAud3ZhbGlkICAgICAgICAgKGlvX2F4aV9kbWVtX3d2YWxpZCAgICAgKSwKLSAgICAud3JlYWR5ICAgICAgICAgKGlvX2F4aV9kbWVtX3dyZWFkeSAgICAgKSwKLSAgICAuYmlkICAgICAgICAgICAgKGlvX2F4aV9kbWVtX2JpZCAgICAgICAgKSwKLSAgICAuYnJlc3AgICAgICAgICAgKGlvX2F4aV9kbWVtX2JyZXNwICAgICAgKSwKLSAgICAuYnZhbGlkICAgICAgICAgKGlvX2F4aV9kbWVtX2J2YWxpZCAgICAgKSwKLSAgICAuYnVzZXIgICAgICAgICAgKGlvX2F4aV9kbWVtX2J1c2VyICAgICAgKSwKLSAgICAuYnJlYWR5ICAgICAgICAgKGlvX2F4aV9kbWVtX2JyZWFkeSAgICAgKSwKLSAgICAuYXJpZCAgICAgICAgICAgKGlvX2F4aV9kbWVtX2FyaWQgICAgICAgKSwKLSAgICAuYXJhZGRyICAgICAgICAgKGlvX2F4aV9kbWVtX2FyYWRkciAgICAgKSwKLSAgICAuYXJsZW4gICAgICAgICAgKGlvX2F4aV9kbWVtX2FybGVuICAgICAgKSwKLSAgICAuYXJzaXplICAgICAgICAgKGlvX2F4aV9kbWVtX2Fyc2l6ZSAgICAgKSwKLSAgICAuYXJidXJzdCAgICAgICAgKGlvX2F4aV9kbWVtX2FyYnVyc3QgICAgKSwKLSAgICAuYXJsb2NrICAgICAgICAgKGlvX2F4aV9kbWVtX2FybG9jayAgICAgKSwKLSAgICAuYXJjYWNoZSAgICAgICAgKGlvX2F4aV9kbWVtX2FyY2FjaGUgICAgKSwKLSAgICAuYXJwcm90ICAgICAgICAgKGlvX2F4aV9kbWVtX2FycHJvdCAgICAgKSwKLSAgICAuYXJyZWdpb24gICAgICAgKGlvX2F4aV9kbWVtX2FycmVnaW9uICAgKSwKLSAgICAuYXJ1c2VyICAgICAgICAgKGlvX2F4aV9kbWVtX2FydXNlciAgICAgKSwKLSAgICAuYXJxb3MgICAgICAgICAgKGlvX2F4aV9kbWVtX2FycW9zICAgICAgKSwKLSAgICAuYXJ2YWxpZCAgICAgICAgKGlvX2F4aV9kbWVtX2FydmFsaWQgICAgKSwKLSAgICAuYXJyZWFkeSAgICAgICAgKGlvX2F4aV9kbWVtX2FycmVhZHkgICAgKSwKLSAgICAucmlkICAgICAgICAgICAgKGlvX2F4aV9kbWVtX3JpZCAgICAgICAgKSwKLSAgICAucmRhdGEgICAgICAgICAgKGlvX2F4aV9kbWVtX3JkYXRhICAgICAgKSwKLSAgICAucnJlc3AgICAgICAgICAgKGlvX2F4aV9kbWVtX3JyZXNwICAgICAgKSwKLSAgICAucmxhc3QgICAgICAgICAgKGlvX2F4aV9kbWVtX3JsYXN0ICAgICAgKSwKLSAgICAucnVzZXIgICAgICAgICAgKGlvX2F4aV9kbWVtX3J1c2VyICAgICAgKSwKLSAgICAucnZhbGlkICAgICAgICAgKGlvX2F4aV9kbWVtX3J2YWxpZCAgICAgKSwKLSAgICAucnJlYWR5ICAgICAgICAgKGlvX2F4aV9kbWVtX3JyZWFkeSAgICAgKQotKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBWEkgcmVpbml0IGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFsd2F5c19mZiBAKG5lZ2VkZ2UgY29yZV9yc3Rfbl9sb2NhbCwgcG9zZWRnZSBjbGspIGJlZ2luCi0gICAgaWYgKH5jb3JlX3JzdF9uX2xvY2FsKSAgICAgICAgICAgICAgICAgICAgICBheGlfcmVpbml0IDw9IDEnYjE7Ci0gICAgZWxzZSBpZiAoYXhpX2ltZW1faWRsZSAmIGF4aV9kbWVtX2lkbGUpICAgICBheGlfcmVpbml0IDw9IDEnYjA7Ci1lbmQKLQotZW5kbW9kdWxlIDogc2NyMV90b3BfYXhpCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX3diLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RvcF93Yi5zdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlNjYwNy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX3diLnN2CisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIHlpZml2ZSBXaXNoYm9uZSBpbnRlcmZhY2UgZm9yIHN5bnRhY29yZSAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB5aWZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgIGludGVncmF0ZWQgd2lzaGJvbmUgaS9mIHRvIGluc3RydWN0aW9uL2RhdGEgbWVtb3J5ICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgIHYwOiAgICBKdW5lIDcsIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgd2lzaGJvbmUgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLS8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KLS8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KLS8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KLS8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KLS8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KLS8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KLS8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLS8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KLS8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KLS8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KLS8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLS8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICBPcmdpbmFsIG93bmVyIERldGFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLy8vCi0vLy8gQGZpbGUgICAgICAgPHNjcjFfdG9wX3diLnN2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8gQGJyaWVmICAgICAgU0NSMSBBSEIgdG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgotYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgotYGluY2x1ZGUgInNjcjFfd2Iuc3ZoIgotYGlmZGVmIFNDUjFfSVBJQ19FTgotYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCi1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotIGBkZWZpbmUgU0NSMV9JTUVNX1JPVVRFUl9FTgotYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0KLW1vZHVsZSBzY3IxX3RvcF93YiAoCi0gICAgLy8gQ29udHJvbAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X24sICAgICAgICAgICAgICAvLyBDUFUgUmVzZXQgKENvcmUgUmVzZXQpCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tb2RlLCAgICAgICAgICAgICAgLy8gVGVzdCBtb2RlCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yc3RfbiwgICAgICAgICAgICAgLy8gVGVzdCBtb2RlJ3MgcmVzZXQKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gY2xvY2sKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfY2xrLCAgICAgICAgICAgICAgICAvLyBSZWFsLXRpbWUgY2xvY2sKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9vLCAgICAgICAgICAgIC8vIEV4dGVybmFsIFN5c3RlbSBSZXNldCBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChmb3IgdGhlIHByb2Nlc3NvciBjbHVzdGVyJ3MgY29tcG9uZW50cyBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGV4dGVybmFsIFNPQyAoY291bGQgYmUgdXNlZnVsIGluIHNtYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgU0NSLWNvcmUtY2VudHJpYyBTT0NzKSkKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmRjX3FsZnlfbywgICAgICAgICAvLyBTeXN0ZW0tdG8tRXh0ZXJuYWwgU09DIFJlc2V0IERvbWFpbiBDcm9zc2luZyBRdWFsaWZpZXIKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWQsICAgICAgICAgICAvLyBIYXJ0IElECi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXNlX2lkY29kZSwgICAgICAgICAgICAvLyBUQVBDIElEQ09ERQotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0lSUV9MSU5FU19OVU0tMTowXSAgICAgICAgICBpcnFfbGluZXMsICAgICAgICAgICAgICAvLyBJUlEgbGluZXMgdG8gSVBJQwotYGVsc2UgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X2lycSwgICAgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgSVJRIGlucHV0Ci1gZW5kaWYgLy8gU0NSMV9JUElDX0VOCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdF9pcnEsICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgSVJRIGlucHV0Ci0KLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC8vIC0tIEpUQUcgSS9GCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJzdF9uLAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjaywKLSAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXMsCi0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRpLAotICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkbywKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW4sCi1gZW5kaWYgLy8gU0NSMV9EQkdfRU4KLQotICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ltZW1fc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9pbWVtX2Fkcl9vLCAvLyBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbWVtX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfaW1lbV9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2ltZW1fc2VsX28sIC8vIGJ5dGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9pbWVtX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbWVtX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW1lbV9lcnJfaSwgIC8vIGVycm9yCi0KLSAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKLSAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2RtZW1fc3RiX28sIC8vIHN0cm9iZS9yZXF1ZXN0Ci0gICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kbWVtX2Fkcl9vLCAvLyBhZGRyZXNzCi0gICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9kbWVtX3dlX28sICAvLyB3cml0ZQotICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9XQl9XSURUSC0xOjBdICAgICB3YmRfZG1lbV9kYXRfbywgLy8gZGF0YSBvdXRwdXQKLSAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2RtZW1fc2VsX28sIC8vIGJ5dGUgZW5hYmxlCi0gICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX1dCX1dJRFRILTE6MF0gICAgIHdiZF9kbWVtX2RhdF9pLCAvLyBkYXRhIGlucHV0Ci0gICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9kbWVtX2Fja19pLCAvLyBhY2tub3dsZWdlbWVudAotICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZG1lbV9lcnJfaSAgLy8gZXJyb3IKLSk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgcGFyYW1ldGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1sb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0gICAgICAgICAgICA9IDI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3Rfbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3Rfbl9zeW5jOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X25fbG9jYWw7Ci1gaWZkZWYgU0NSMV9EQkdfRU4KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Ryc3RfbjsKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gY29yZSB0byByb3V0ZXIKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JkYXRhOwotdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSBjb3JlIHRvIHJvdXRlcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZXE7Ci10eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX2NtZDsKLXR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVzcDsKLQotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBXQiBicmlkZ2UKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9pbWVtX3JlcV9hY2s7Ci1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfaW1lbV9yZXE7Ci10eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfaW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgd2JfaW1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHdiX2ltZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfaW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gV0IgYnJpZGdlCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fcmVxOwotdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fY21kOwotdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fd2lkdGg7Ci1sb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV9hZGRyOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHdiX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgd2JfZG1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kbWVtX3Jlc3A7Ci0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXFfYWNrOwotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9jbWQ7Ci1sb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZGF0YTsKLXR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9yZXNwOwotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gVENNCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXE7Ci10eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fY21kOwotdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX2FkZHI7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2RhdGE7Ci1sb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fcmVzcDsKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotCi0vLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgotbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxX2FjazsKLWxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3JlcTsKLXR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX2NtZDsKLXR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3dpZHRoOwotbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fYWRkcjsKLWxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3dkYXRhOwotbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmRhdGE7Ci10eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXNwOwotCi1sb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfaXJxOwotbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3ZhbDsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlc2V0IGxvZ2ljCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFBvd2VyLVVwIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX3B3cnVwX3JzdG5fcmVzZXRfc3luYyAoCi0gICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25faW4gICAgICAgKDEnYjEgICAgICAgICAgICApLAotICAgIC5yc3Rfbl9vdXQgICAgICAocHdydXBfcnN0X25fc3luYykKLSk7Ci0KLS8vIFJlZ3VsYXIgUmVzZXQgc3luY2hyb25pemVyCi1zY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAotICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCi0pIGlfcnN0bl9yZXNldF9zeW5jICgKLSAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKLSAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAotICAgIC5yc3Rfbl9pbiAgICAgICAocnN0X24gICAgICAgICAgICksCi0gICAgLnJzdF9uX291dCAgICAgIChyc3Rfbl9zeW5jICAgICAgKQotKTsKLQotLy8gQ1BVIFJlc2V0IHN5bmNocm9uaXplcgotc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKLSAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQotKSBpX2NwdV9yc3RuX3Jlc2V0X3N5bmMgKAotICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKLSAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAotICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCi0gICAgLnJzdF9uX2luICAgICAgIChjcHVfcnN0X24gICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKGNwdV9yc3Rfbl9zeW5jICApCi0pOwotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLS8vIFRBUEMgUmVzZXQKLXNjcjFfcmVzZXRfYW5kMl9jZWxsIGlfdGFwY19yc3RuX2FuZDJfY2VsbCAoCi0gICAgLnJzdF9uX2luICAgICAgICh7dHJzdF9uLCBwd3J1cF9yc3Rfbn0pLAotICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKLSAgICAucnN0X25fb3V0ICAgICAgKHRhcGNfdHJzdF9uICAgICApCi0pOwotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0NSMSBjb3JlIGluc3RhbmNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfY29yZV90b3AgaV9jb3JlX3RvcCAoCi0gICAgLy8gQ29tbW9uCi0gICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICksCi0gICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3Rfbl9zeW5jICAgICAgICksCi0gICAgLmNwdV9yc3RfbiAgICAgICAgICAgICAgICAgIChjcHVfcnN0X25fc3luYyAgICksCi0gICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICksCi0gICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgICksCi0gICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0gICAgLmNvcmVfcnN0X25fbyAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCi0gICAgLmNvcmVfcmRjX3FsZnlfbyAgICAgICAgICAgICggICAgICAgICAgICAgICAgICksCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9vICAgICAgKSwKLSAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gRnVzZXMKLSAgICAuY29yZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgKSwKLWBpZmRlZiBTQ1IxX0RCR19FTgotICAgIC50YXBjX2Z1c2VfaWRjb2RlX2kgICAgICAgICAoZnVzZV9pZGNvZGUgICAgICApLAotYGVuZGlmIC8vIFNDUjFfREJHX0VOCi0KLSAgICAvLyBJUlEKLWBpZmRlZiBTQ1IxX0lQSUNfRU4KLSAgICAuY29yZV9pcnFfbGluZXNfaSAgICAgICAgICAgKGlycV9saW5lcyAgICAgICAgKSwKLWBlbHNlIC8vIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9leHRfaSAgICAgICAgICAgICAoZXh0X2lycSAgICAgICAgICApLAotYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgotICAgIC5jb3JlX2lycV9zb2Z0X2kgICAgICAgICAgICAoc29mdF9pcnEgICAgICAgICApLAotICAgIC5jb3JlX2lycV9tdGltZXJfaSAgICAgICAgICAodGltZXJfaXJxICAgICAgICApLAotCi0gICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgotICAgIC5jb3JlX210aW1lcl92YWxfaSAgICAgICAgICAodGltZXJfdmFsICAgICAgICApLAotCi1gaWZkZWYgU0NSMV9EQkdfRU4KLSAgICAvLyBEZWJ1ZyBpbnRlcmZhY2UKLSAgICAudGFwY190cnN0X24gICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgKSwKLSAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgKHRjayAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190bXMgICAgICAgICAgICAgICAgICAgKHRtcyAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZGkgICAgICAgICAgICAgICAgICAgKHRkaSAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG8gICAgICAgICAgICAgICAgICAgKHRkbyAgICAgICAgICAgICAgKSwKLSAgICAudGFwY190ZG9fZW4gICAgICAgICAgICAgICAgKHRkb19lbiAgICAgICAgICAgKSwKLWBlbmRpZiAvLyBTQ1IxX0RCR19FTgotCi0gICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQotICAgIC5pbWVtMmNvcmVfcmVxX2Fja19pICAgICAgICAoY29yZV9pbWVtX3JlcV9hY2spLAotICAgIC5jb3JlMmltZW1fcmVxX28gICAgICAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAotICAgIC5jb3JlMmltZW1fY21kX28gICAgICAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAotICAgIC5jb3JlMmltZW1fYWRkcl9vICAgICAgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAotICAgIC5pbWVtMmNvcmVfcmRhdGFfaSAgICAgICAgICAoY29yZV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtMmNvcmVfcmVzcF9pICAgICAgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAotCi0gICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCi0gICAgLmRtZW0yY29yZV9yZXFfYWNrX2kgICAgICAgIChjb3JlX2RtZW1fcmVxX2FjayksCi0gICAgLmNvcmUyZG1lbV9yZXFfbyAgICAgICAgICAgIChjb3JlX2RtZW1fcmVxICAgICksCi0gICAgLmNvcmUyZG1lbV9jbWRfbyAgICAgICAgICAgIChjb3JlX2RtZW1fY21kICAgICksCi0gICAgLmNvcmUyZG1lbV93aWR0aF9vICAgICAgICAgIChjb3JlX2RtZW1fd2lkdGggICksCi0gICAgLmNvcmUyZG1lbV9hZGRyX28gICAgICAgICAgIChjb3JlX2RtZW1fYWRkciAgICksCi0gICAgLmNvcmUyZG1lbV93ZGF0YV9vICAgICAgICAgIChjb3JlX2RtZW1fd2RhdGEgICksCi0gICAgLmRtZW0yY29yZV9yZGF0YV9pICAgICAgICAgIChjb3JlX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgIChjb3JlX2RtZW1fcmVzcCAgICkKLSk7Ci0KLQotYGlmZGVmIFNDUjFfVENNX0VOCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRDTSBpbnN0YW5jZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX3RjbSAjKAotICAgIC5TQ1IxX1RDTV9TSVpFICAoYFNDUjFfRE1FTV9BV0lEVEgnKH5TQ1IxX1RDTV9BRERSX01BU0sgKyAxJ2IxKSkKLSkgaV90Y20gKAotICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsKSwKLQotICAgIC8vIEluc3RydWN0aW9uIGludGVyZmFjZSB0byBUQ00KLSAgICAuaW1lbV9yZXFfYWNrICAgKHRjbV9pbWVtX3JlcV9hY2spLAotICAgIC5pbWVtX3JlcSAgICAgICAodGNtX2ltZW1fcmVxICAgICksCi0gICAgLmltZW1fYWRkciAgICAgICh0Y21faW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKHRjbV9pbWVtX3JkYXRhICApLAotICAgIC5pbWVtX3Jlc3AgICAgICAodGNtX2ltZW1fcmVzcCAgICksCi0KLSAgICAvLyBEYXRhIGludGVyZmFjZSB0byBUQ00KLSAgICAuZG1lbV9yZXFfYWNrICAgKHRjbV9kbWVtX3JlcV9hY2spLAotICAgIC5kbWVtX3JlcSAgICAgICAodGNtX2RtZW1fcmVxICAgICksCi0gICAgLmRtZW1fY21kICAgICAgICh0Y21fZG1lbV9jbWQgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHRjbV9kbWVtX3dpZHRoICApLAotICAgIC5kbWVtX2FkZHIgICAgICAodGNtX2RtZW1fYWRkciAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgICh0Y21fZG1lbV93ZGF0YSAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHRjbV9kbWVtX3JkYXRhICApLAotICAgIC5kbWVtX3Jlc3AgICAgICAodGNtX2RtZW1fcmVzcCAgICkKLSk7Ci1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lbW9yeS1tYXBwZWQgdGltZXIgaW5zdGFuY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV90aW1lciBpX3RpbWVyICgKLSAgICAvLyBDb21tb24KLSAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICApLAotICAgIC5ydGNfY2xrICAgICAgICAocnRjX2NsayAgICAgICAgICAgKSwKLQotICAgIC8vIE1lbW9yeSBpbnRlcmZhY2UKLSAgICAuZG1lbV9yZXEgICAgICAgKHRpbWVyX2RtZW1fcmVxICAgICksCi0gICAgLmRtZW1fY21kICAgICAgICh0aW1lcl9kbWVtX2NtZCAgICApLAotICAgIC5kbWVtX3dpZHRoICAgICAodGltZXJfZG1lbV93aWR0aCAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKHRpbWVyX2RtZW1fYWRkciAgICksCi0gICAgLmRtZW1fd2RhdGEgICAgICh0aW1lcl9kbWVtX3dkYXRhICApLAotICAgIC5kbWVtX3JlcV9hY2sgICAodGltZXJfZG1lbV9yZXFfYWNrKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHRpbWVyX2RtZW1fcmRhdGEgICksCi0gICAgLmRtZW1fcmVzcCAgICAgICh0aW1lcl9kbWVtX3Jlc3AgICApLAotCi0gICAgLy8gVGltZXIgaW50ZXJmYWNlCi0gICAgLnRpbWVyX3ZhbCAgICAgICh0aW1lcl92YWwgICAgICAgICApLAotICAgIC50aW1lcl9pcnEgICAgICAodGltZXJfaXJxICAgICAgICAgKQotKTsKLQotCi1gaWZkZWYgU0NSMV9JTUVNX1JPVVRFUl9FTgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbnN0cnVjdGlvbiBtZW1vcnkgcm91dGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfaW1lbV9yb3V0ZXIgIygKLSBgaWZkZWYgU0NSMV9UQ01fRU4KLSAgICAuU0NSMV9BRERSX01BU0sgICAgIChTQ1IxX1RDTV9BRERSX01BU0spLAotICAgIC5TQ1IxX0FERFJfUEFUVEVSTiAgKFNDUjFfVENNX0FERFJfUEFUVEVSTikKLSBgZW5kaWYgLy8gU0NSMV9UQ01fRU4KLSkgaV9pbWVtX3JvdXRlciAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuaW1lbV9yZXFfYWNrICAgKGNvcmVfaW1lbV9yZXFfYWNrKSwKLSAgICAuaW1lbV9yZXEgICAgICAgKGNvcmVfaW1lbV9yZXEgICAgKSwKLSAgICAuaW1lbV9jbWQgICAgICAgKGNvcmVfaW1lbV9jbWQgICAgKSwKLSAgICAuaW1lbV9hZGRyICAgICAgKGNvcmVfaW1lbV9hZGRyICAgKSwKLSAgICAuaW1lbV9yZGF0YSAgICAgKGNvcmVfaW1lbV9yZGF0YSAgKSwKLSAgICAuaW1lbV9yZXNwICAgICAgKGNvcmVfaW1lbV9yZXNwICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gV0IgYnJpZGdlCi0gICAgLnBvcnQwX3JlcV9hY2sgICh3Yl9pbWVtX3JlcV9hY2sgKSwKLSAgICAucG9ydDBfcmVxICAgICAgKHdiX2ltZW1fcmVxICAgICApLAotICAgIC5wb3J0MF9jbWQgICAgICAod2JfaW1lbV9jbWQgICAgICksCi0gICAgLnBvcnQwX2FkZHIgICAgICh3Yl9pbWVtX2FkZHIgICAgKSwKLSAgICAucG9ydDBfcmRhdGEgICAgKHdiX2ltZW1fcmRhdGEgICApLAotICAgIC5wb3J0MF9yZXNwICAgICAod2JfaW1lbV9yZXNwICAgICksCi0gYGlmZGVmIFNDUjFfVENNX0VOCi0gICAgLy8gSW50ZXJmYWNlIHRvIFRDTQotICAgIC5wb3J0MV9yZXFfYWNrICAodGNtX2ltZW1fcmVxX2FjayApLAotICAgIC5wb3J0MV9yZXEgICAgICAodGNtX2ltZW1fcmVxICAgICApLAotICAgIC5wb3J0MV9jbWQgICAgICAodGNtX2ltZW1fY21kICAgICApLAotICAgIC5wb3J0MV9hZGRyICAgICAodGNtX2ltZW1fYWRkciAgICApLAotICAgIC5wb3J0MV9yZGF0YSAgICAodGNtX2ltZW1fcmRhdGEgICApLAotICAgIC5wb3J0MV9yZXNwICAgICAodGNtX2ltZW1fcmVzcCAgICApCi0gYGVuZGlmIC8vIFNDUjFfVENNX0VOCi0pOwotCi1gZWxzZSAvLyBTQ1IxX0lNRU1fUk9VVEVSX0VOCi0KLWFzc2lnbiB3Yl9pbWVtX3JlcSAgICAgICAgID0gY29yZV9pbWVtX3JlcTsKLWFzc2lnbiB3Yl9pbWVtX2NtZCAgICAgICAgID0gY29yZV9pbWVtX2NtZDsKLWFzc2lnbiB3Yl9pbWVtX2FkZHIgICAgICAgID0gY29yZV9pbWVtX2FkZHI7Ci1hc3NpZ24gY29yZV9pbWVtX3JlcV9hY2sgICAgPSB3Yl9pbWVtX3JlcV9hY2s7Ci1hc3NpZ24gY29yZV9pbWVtX3Jlc3AgICAgICAgPSB3Yl9pbWVtX3Jlc3A7Ci1hc3NpZ24gY29yZV9pbWVtX3JkYXRhICAgICAgPSB3Yl9pbWVtX3JkYXRhOwotCi1gZW5kaWYgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERhdGEgbWVtb3J5IHJvdXRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY3IxX2RtZW1fcm91dGVyICMoCi0KLWBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKLSAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKFNDUjFfVENNX0FERFJfUEFUVEVSTiksCi1gZWxzZSAvLyBTQ1IxX1RDTV9FTgotICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoMzInaDAwMDAwMDAwKSwKLSAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKDMyJ2hGRkZGRkZGRiksCi1gZW5kaWYgLy8gU0NSMV9UQ01fRU4KLQotICAgIC5TQ1IxX1BPUlQyX0FERFJfTUFTSyAgICAgICAoU0NSMV9USU1FUl9BRERSX01BU0spLAotICAgIC5TQ1IxX1BPUlQyX0FERFJfUEFUVEVSTiAgICAoU0NSMV9USU1FUl9BRERSX1BBVFRFUk4pCi0KLSkgaV9kbWVtX3JvdXRlciAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKLSAgICAuZG1lbV9yZXFfYWNrICAgKGNvcmVfZG1lbV9yZXFfYWNrICAgKSwKLSAgICAuZG1lbV9yZXEgICAgICAgKGNvcmVfZG1lbV9yZXEgICAgICAgKSwKLSAgICAuZG1lbV9jbWQgICAgICAgKGNvcmVfZG1lbV9jbWQgICAgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKGNvcmVfZG1lbV93aWR0aCAgICAgKSwKLSAgICAuZG1lbV9hZGRyICAgICAgKGNvcmVfZG1lbV9hZGRyICAgICAgKSwKLSAgICAuZG1lbV93ZGF0YSAgICAgKGNvcmVfZG1lbV93ZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKGNvcmVfZG1lbV9yZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZXNwICAgICAgKGNvcmVfZG1lbV9yZXNwICAgICAgKSwKLWBpZmRlZiBTQ1IxX1RDTV9FTgotICAgIC8vIEludGVyZmFjZSB0byBUQ00KLSAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9kbWVtX3JlcV9hY2sgICAgKSwKLSAgICAucG9ydDFfcmVxICAgICAgKHRjbV9kbWVtX3JlcSAgICAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKHRjbV9kbWVtX2NtZCAgICAgICAgKSwKLSAgICAucG9ydDFfd2lkdGggICAgKHRjbV9kbWVtX3dpZHRoICAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKHRjbV9kbWVtX2FkZHIgICAgICAgKSwKLSAgICAucG9ydDFfd2RhdGEgICAgKHRjbV9kbWVtX3dkYXRhICAgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9kbWVtX3JkYXRhICAgICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9kbWVtX3Jlc3AgICAgICAgKSwKLWBlbHNlIC8vIFNDUjFfVENNX0VOCi0gICAgLnBvcnQxX3JlcV9hY2sgICgxJ2IwKSwKLSAgICAucG9ydDFfcmVxICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfY21kICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfd2lkdGggICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfYWRkciAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfd2RhdGEgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmRhdGEgICAgKCcwICAgICAgICAgICAgICAgICAgKSwKLSAgICAucG9ydDFfcmVzcCAgICAgKFNDUjFfTUVNX1JFU1BfUkRZX0VSKSwKLWBlbmRpZiAvLyBTQ1IxX1RDTV9FTgotICAgIC8vIEludGVyZmFjZSB0byBtZW1vcnktbWFwcGVkIHRpbWVyCi0gICAgLnBvcnQyX3JlcV9hY2sgICh0aW1lcl9kbWVtX3JlcV9hY2sgICksCi0gICAgLnBvcnQyX3JlcSAgICAgICh0aW1lcl9kbWVtX3JlcSAgICAgICksCi0gICAgLnBvcnQyX2NtZCAgICAgICh0aW1lcl9kbWVtX2NtZCAgICAgICksCi0gICAgLnBvcnQyX3dpZHRoICAgICh0aW1lcl9kbWVtX3dpZHRoICAgICksCi0gICAgLnBvcnQyX2FkZHIgICAgICh0aW1lcl9kbWVtX2FkZHIgICAgICksCi0gICAgLnBvcnQyX3dkYXRhICAgICh0aW1lcl9kbWVtX3dkYXRhICAgICksCi0gICAgLnBvcnQyX3JkYXRhICAgICh0aW1lcl9kbWVtX3JkYXRhICAgICksCi0gICAgLnBvcnQyX3Jlc3AgICAgICh0aW1lcl9kbWVtX3Jlc3AgICAgICksCi0gICAgLy8gSW50ZXJmYWNlIHRvIFdCIGJyaWRnZQotICAgIC5wb3J0MF9yZXFfYWNrICAod2JfZG1lbV9yZXFfYWNrICAgICksCi0gICAgLnBvcnQwX3JlcSAgICAgICh3Yl9kbWVtX3JlcSAgICAgICAgKSwKLSAgICAucG9ydDBfY21kICAgICAgKHdiX2RtZW1fY21kICAgICAgICApLAotICAgIC5wb3J0MF93aWR0aCAgICAod2JfZG1lbV93aWR0aCAgICAgICksCi0gICAgLnBvcnQwX2FkZHIgICAgICh3Yl9kbWVtX2FkZHIgICAgICAgKSwKLSAgICAucG9ydDBfd2RhdGEgICAgKHdiX2RtZW1fd2RhdGEgICAgICApLAotICAgIC5wb3J0MF9yZGF0YSAgICAod2JfZG1lbV9yZGF0YSAgICAgICksCi0gICAgLnBvcnQwX3Jlc3AgICAgICh3Yl9kbWVtX3Jlc3AgICAgICAgKQotKTsKLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluc3RydWN0aW9uIG1lbW9yeSBXQiBicmlkZ2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NyMV9pbWVtX3diIGlfaW1lbV93YiAoCi0gICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgKSwKLSAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAotICAgIC8vIEludGVyZmFjZSB0byBpbWVtIHJvdXRlcgotICAgIC5pbWVtX3JlcV9hY2sgICAod2JfaW1lbV9yZXFfYWNrICAgKSwKLSAgICAuaW1lbV9yZXEgICAgICAgKHdiX2ltZW1fcmVxICAgICAgICksCi0gICAgLmltZW1fYWRkciAgICAgICh3Yl9pbWVtX2FkZHIgICAgICApLAotICAgIC5pbWVtX3JkYXRhICAgICAod2JfaW1lbV9yZGF0YSAgICAgKSwKLSAgICAuaW1lbV9yZXNwICAgICAgKHdiX2ltZW1fcmVzcCAgICAgICksCi0gICAgLy8gV0IgaW50ZXJmYWNlCi0gICAgLndiZF9zdGJfbyAgICAgICh3YmRfaW1lbV9zdGJfbyAgICApLCAKLSAgICAud2JkX2Fkcl9vICAgICAgKHdiZF9pbWVtX2Fkcl9vICAgICksIAotICAgIC53YmRfd2VfbyAgICAgICAod2JkX2ltZW1fd2VfbyAgICAgKSwgIAotICAgIC53YmRfZGF0X28gICAgICAod2JkX2ltZW1fZGF0X28gICAgKSwgCi0gICAgLndiZF9zZWxfbyAgICAgICh3YmRfaW1lbV9zZWxfbyAgICApLCAKLSAgICAud2JkX2RhdF9pICAgICAgKHdiZF9pbWVtX2RhdF9pICAgICksIAotICAgIC53YmRfYWNrX2kgICAgICAod2JkX2ltZW1fYWNrX2kgICAgKSwgCi0gICAgLndiZF9lcnJfaSAgICAgICh3YmRfaW1lbV9lcnJfaSAgICApCi0pOwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBtZW1vcnkgV0IgYnJpZGdlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjcjFfZG1lbV93YiBpX2RtZW1fd2IgKAotICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgICksCi0gICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgKSwKLSAgICAvLyBJbnRlcmZhY2UgdG8gZG1lbSByb3V0ZXIKLSAgICAuZG1lbV9yZXFfYWNrICAgKHdiX2RtZW1fcmVxX2FjayAgICksCi0gICAgLmRtZW1fcmVxICAgICAgICh3Yl9kbWVtX3JlcSAgICAgICApLAotICAgIC5kbWVtX2NtZCAgICAgICAod2JfZG1lbV9jbWQgICAgICAgKSwKLSAgICAuZG1lbV93aWR0aCAgICAgKHdiX2RtZW1fd2lkdGggICAgICksCi0gICAgLmRtZW1fYWRkciAgICAgICh3Yl9kbWVtX2FkZHIgICAgICApLAotICAgIC5kbWVtX3dkYXRhICAgICAod2JfZG1lbV93ZGF0YSAgICAgKSwKLSAgICAuZG1lbV9yZGF0YSAgICAgKHdiX2RtZW1fcmRhdGEgICAgICksCi0gICAgLmRtZW1fcmVzcCAgICAgICh3Yl9kbWVtX3Jlc3AgICAgICApLAotICAgIC8vIFdCIGludGVyZmFjZQotICAgIC53YmRfc3RiX28gICAgICAod2JkX2RtZW1fc3RiX28gICAgKSwgCi0gICAgLndiZF9hZHJfbyAgICAgICh3YmRfZG1lbV9hZHJfbyAgICApLCAKLSAgICAud2JkX3dlX28gICAgICAgKHdiZF9kbWVtX3dlX28gICAgICksICAKLSAgICAud2JkX2RhdF9vICAgICAgKHdiZF9kbWVtX2RhdF9vICAgICksIAotICAgIC53YmRfc2VsX28gICAgICAod2JkX2RtZW1fc2VsX28gICAgKSwgCi0gICAgLndiZF9kYXRfaSAgICAgICh3YmRfZG1lbV9kYXRfaSAgICApLCAKLSAgICAud2JkX2Fja19pICAgICAgKHdiZF9kbWVtX2Fja19pICAgICksIAotICAgIC53YmRfZXJyX2kgICAgICAod2JkX2RtZW1fZXJyX2kgICAgKQotKTsKLQotZW5kbW9kdWxlIDogc2NyMV90b3Bfd2IKLQotCg==