LyoKICogTFRDMjYzMiBEaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0b3JzIHNwaSBkcml2ZXIKICoKICogQ29weXJpZ2h0IDIwMTcgTWF4aW1lIFJvdXNzaW4tQulsYW5nZXIKICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogKi8KCiNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgoKI2RlZmluZSBMVEMyNjMyX0RBQ19DSEFOTkVMUyAgICAgICAgICAgICAgICAgICAgMgoKI2RlZmluZSBMVEMyNjMyX0FERFJfREFDMCAgICAgICAgICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgTFRDMjYzMl9BRERSX0RBQzEgICAgICAgICAgICAgICAgICAgICAgIDB4MQoKI2RlZmluZSBMVEMyNjMyX0NNRF9XUklURV9JTlBVVF9OICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgTFRDMjYzMl9DTURfVVBEQVRFX0RBQ19OICAgICAgICAgICAgICAgIDB4MQojZGVmaW5lIExUQzI2MzJfQ01EX1dSSVRFX0lOUFVUX05fVVBEQVRFX0FMTCAgICAweDIKI2RlZmluZSBMVEMyNjMyX0NNRF9XUklURV9JTlBVVF9OX1VQREFURV9OICAgICAgMHgzCiNkZWZpbmUgTFRDMjYzMl9DTURfUE9XRVJET1dOX0RBQ19OICAgICAgICAgICAgIDB4NAojZGVmaW5lIExUQzI2MzJfQ01EX1BPV0VSRE9XTl9DSElQICAgICAgICAgICAgICAweDUKI2RlZmluZSBMVEMyNjMyX0NNRF9JTlRFUk5BTF9SRUZFUiAgICAgICAgICAgICAgMHg2CiNkZWZpbmUgTFRDMjYzMl9DTURfRVhURVJOQUxfUkVGRVIgICAgICAgICAgICAgIDB4NwoKLyoqCiAqIHN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmaWMgaW5mb3JtYXRpb24KICogQGNoYW5uZWxzOgkJY2hhbm5lbCBzcGVjIGZvciB0aGUgREFDCiAqIEB2cmVmX212OgkJcmVmZXJlbmNlIHZvbHRhZ2UKICovCnN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyB7Cgljb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbm5lbHM7Cgljb25zdCBpbnQgdnJlZl9tdjsKfTsKCi8qKgogKiBzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAtIGRyaXZlciBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAqIEBzcGlfZGV2OgkJCXBvaW50ZXIgdG8gdGhlIHNwaV9kZXZpY2Ugc3RydWN0CiAqIEBwb3dlcmRvd25fY2FjaGVfbWFzawl1c2VkIHRvIHNob3cgY3VycmVudCBjaGFubmVsIHBvd2VyZG93biBzdGF0ZQogKi8Kc3RydWN0IGx0YzI2MzJfc3RhdGUgewoJc3RydWN0IHNwaV9kZXZpY2UgKnNwaV9kZXY7Cgl1bnNpZ25lZCBpbnQgcG93ZXJkb3duX2NhY2hlX21hc2s7Cn07CgplbnVtIGx0YzI2MzJfc3VwcG9ydGVkX2RldmljZV9pZHMgewoJSURfTFRDMjYzMkwxMiwKCUlEX0xUQzI2MzJMMTAsCglJRF9MVEMyNjMyTDgsCglJRF9MVEMyNjMySDEyLAoJSURfTFRDMjYzMkgxMCwKCUlEX0xUQzI2MzJIOCwKfTsKCnN0YXRpYyBpbnQgbHRjMjYzMl9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKCQkJICAgICB1OCBjbWQsIHU4IGFkZHIsIHUxNiB2YWwsIHU4IHNoaWZ0KQp7Cgl1MzIgZGF0YTsKCXU4IG1zZ1szXTsKCgkvKgoJICogVGhlIGlucHV0IHNoaWZ0IHJlZ2lzdGVyIGlzIDI0IGJpdHMgd2lkZS4KCSAqIFRoZSBuZXh0IGZvdXIgYXJlIHRoZSBjb21tYW5kIGJpdHMsIEMzIHRvIEMwLAoJICogZm9sbG93ZWQgYnkgdGhlIDQtYml0IERBQyBhZGRyZXNzLCBBMyB0byBBMCwgYW5kIHRoZW4gdGhlCgkgKiAxMi0sIDEwLSwgOC1iaXQgZGF0YS13b3JkLiBUaGUgZGF0YS13b3JkIGNvbXByaXNlcyB0aGUgMTItLAoJICogMTAtLCA4LWJpdCBpbnB1dCBjb2RlIGZvbGxvd2VkIGJ5IDQsIDYsIG9yIDggZG9uJ3QgY2FyZSBiaXRzLgoJICovCglkYXRhID0gKGNtZCA8PCAyMCkgfCAoYWRkciA8PCAxNikgfCAodmFsIDw8IHNoaWZ0KTsKCW1zZ1swXSA9IGRhdGEgPj4gMTY7Cgltc2dbMV0gPSBkYXRhID4+IDg7Cgltc2dbMl0gPSBkYXRhOwoKCXJldHVybiBzcGlfd3JpdGUoc3BpLCBtc2csIHNpemVvZihtc2cpKTsKfQoKc3RhdGljIGludCBsdGMyNjMyX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCgkJCSAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKCQkJICAgIGludCAqdmFsLAoJCQkgICAgaW50ICp2YWwyLAoJCQkgICAgbG9uZyBtKQp7CglzdHJ1Y3QgbHRjMjYzMl9jaGlwX2luZm8gKmNoaXBfaW5mbzsKCgljb25zdCBzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgKnNwaV9kZXZfaWQgPSBzcGlfZ2V0X2RldmljZV9pZChzdC0+c3BpX2Rldik7CgoJY2hpcF9pbmZvID0gKHN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyAqKXNwaV9kZXZfaWQtPmRyaXZlcl9kYXRhOwoKCXN3aXRjaCAobSkgewoJY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxFOgoJCSp2YWwgPSBjaGlwX2luZm8tPnZyZWZfbXY7CgkJKnZhbDIgPSBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHM7CgkJcmV0dXJuIElJT19WQUxfRlJBQ1RJT05BTF9MT0cyOwoJfQoJcmV0dXJuIC1FSU5WQUw7Cn0KCnN0YXRpYyBpbnQgbHRjMjYzMl93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKCQkJICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKCQkJICAgICBpbnQgdmFsLAoJCQkgICAgIGludCB2YWwyLAoJCQkgICAgIGxvbmcgbWFzaykKewoJc3RydWN0IGx0YzI2MzJfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCglzd2l0Y2ggKG1hc2spIHsKCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CgkJaWYgKHZhbCA+PSAoMSA8PCBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpIHx8IHZhbCA8IDApCgkJCXJldHVybiAtRUlOVkFMOwoKCQlyZXR1cm4gbHRjMjYzMl9zcGlfd3JpdGUoc3QtPnNwaV9kZXYsCgkJCQkJIExUQzI2MzJfQ01EX1dSSVRFX0lOUFVUX05fVVBEQVRFX04sCgkJCQkJIGNoYW4tPmFkZHJlc3MsIHZhbCwKCQkJCQkgY2hhbi0+c2Nhbl90eXBlLnNoaWZ0KTsKCWRlZmF1bHQ6CgkJcmV0dXJuIC1FSU5WQUw7Cgl9Cn0KCnN0YXRpYyBzc2l6ZV90IGx0YzI2MzJfcmVhZF9kYWNfcG93ZXJkb3duKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCgkJCQkJICB1aW50cHRyX3QgcHJpdmF0ZSwKCQkJCQkgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFuLAoJCQkJCSAgY2hhciAqYnVmKQp7CglzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAoJCSAgICAgICAhIShzdC0+cG93ZXJkb3duX2NhY2hlX21hc2sgJiAoMSA8PCBjaGFuLT5jaGFubmVsKSkpOwp9CgpzdGF0aWMgc3NpemVfdCBsdGMyNjMyX3dyaXRlX2RhY19wb3dlcmRvd24oc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKCQkJCQkgICB1aW50cHRyX3QgcHJpdmF0ZSwKCQkJCQkgICBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbiwKCQkJCQkgICBjb25zdCBjaGFyICpidWYsCgkJCQkJICAgc2l6ZV90IGxlbikKewoJYm9vbCBwd3JfZG93bjsKCWludCByZXQ7CglzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXJldCA9IHN0cnRvYm9vbChidWYsICZwd3JfZG93bik7CglpZiAocmV0KQoJCXJldHVybiByZXQ7CgoJaWYgKHB3cl9kb3duKQoJCXN0LT5wb3dlcmRvd25fY2FjaGVfbWFzayB8PSAoMSA8PCBjaGFuLT5jaGFubmVsKTsKCWVsc2UKCQlzdC0+cG93ZXJkb3duX2NhY2hlX21hc2sgJj0gfigxIDw8IGNoYW4tPmNoYW5uZWwpOwoKCXJldCA9IGx0YzI2MzJfc3BpX3dyaXRlKHN0LT5zcGlfZGV2LAoJCQkJTFRDMjYzMl9DTURfUE9XRVJET1dOX0RBQ19OLAoJCQkJY2hhbi0+Y2hhbm5lbCwgMCwgMCk7CgoJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKfQoKc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBsdGMyNjMyX2luZm8gPSB7Cgkud3JpdGVfcmF3CT0gbHRjMjYzMl93cml0ZV9yYXcsCgkucmVhZF9yYXcJPSBsdGMyNjMyX3JlYWRfcmF3LAp9OwoKc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjX2V4dF9pbmZvIGx0YzI2MzJfZXh0X2luZm9bXSA9IHsKCXsKCQkubmFtZSA9ICJwb3dlcmRvd24iLAoJCS5yZWFkID0gbHRjMjYzMl9yZWFkX2RhY19wb3dlcmRvd24sCgkJLndyaXRlID0gbHRjMjYzMl93cml0ZV9kYWNfcG93ZXJkb3duLAoJCS5zaGFyZWQgPSBJSU9fU0VQQVJBVEUsCgl9LAoJeyB9LAp9OwoKI2RlZmluZSBMVEMyNjMyX0NIQU5ORUwoX2NoYW4sIF9iaXRzKSB7IFwKCQkudHlwZSA9IElJT19WT0xUQUdFLCBcCgkJLmluZGV4ZWQgPSAxLCBcCgkJLm91dHB1dCA9IDEsIFwKCQkuY2hhbm5lbCA9IChfY2hhbiksIFwKCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwgXAoJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSksIFwKCQkuYWRkcmVzcyA9IChfY2hhbiksIFwKCQkuc2Nhbl90eXBlID0geyBcCgkJCS5yZWFsYml0cwk9IChfYml0cyksIFwKCQkJLnNoaWZ0CQk9IDE2IC0gKF9iaXRzKSwgXAoJCX0sIFwKCQkuZXh0X2luZm8gPSBsdGMyNjMyX2V4dF9pbmZvLCBcCn0KCiNkZWZpbmUgREVDTEFSRV9MVEMyNjMyX0NIQU5ORUxTKF9uYW1lLCBfYml0cykgXAoJY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgX25hbWUgIyMgX2NoYW5uZWxzW10gPSB7IFwKCQlMVEMyNjMyX0NIQU5ORUwoMCwgX2JpdHMpLCBcCgkJTFRDMjYzMl9DSEFOTkVMKDEsIF9iaXRzKSwgXAoJfQoKc3RhdGljIERFQ0xBUkVfTFRDMjYzMl9DSEFOTkVMUyhsdGMyNjMybDEyLCAxMik7CnN0YXRpYyBERUNMQVJFX0xUQzI2MzJfQ0hBTk5FTFMobHRjMjYzMmwxMCwgMTApOwpzdGF0aWMgREVDTEFSRV9MVEMyNjMyX0NIQU5ORUxTKGx0YzI2MzJsOCwgOCk7CgpzdGF0aWMgREVDTEFSRV9MVEMyNjMyX0NIQU5ORUxTKGx0YzI2MzJoMTIsIDEyKTsKc3RhdGljIERFQ0xBUkVfTFRDMjYzMl9DSEFOTkVMUyhsdGMyNjMyaDEwLCAxMCk7CnN0YXRpYyBERUNMQVJFX0xUQzI2MzJfQ0hBTk5FTFMobHRjMjYzMmg4LCA4KTsKCnN0YXRpYyBjb25zdCBzdHJ1Y3QgbHRjMjYzMl9jaGlwX2luZm8gbHRjMjYzMl9jaGlwX2luZm9fdGJsW10gPSB7CglbSURfTFRDMjYzMkwxMl0gPSB7CgkJLmNoYW5uZWxzCT0gbHRjMjYzMmwxMl9jaGFubmVscywKCQkudnJlZl9tdgk9IDI1MDAsCgl9LAoJW0lEX0xUQzI2MzJMMTBdID0gewoJCS5jaGFubmVscwk9IGx0YzI2MzJsMTBfY2hhbm5lbHMsCgkJLnZyZWZfbXYJPSAyNTAwLAoJfSwKCVtJRF9MVEMyNjMyTDhdID0gIHsKCQkuY2hhbm5lbHMJPSBsdGMyNjMybDhfY2hhbm5lbHMsCgkJLnZyZWZfbXYJPSAyNTAwLAoJfSwKCVtJRF9MVEMyNjMySDEyXSA9IHsKCQkuY2hhbm5lbHMJPSBsdGMyNjMyaDEyX2NoYW5uZWxzLAoJCS52cmVmX212CT0gNDA5NiwKCX0sCglbSURfTFRDMjYzMkgxMF0gPSB7CgkJLmNoYW5uZWxzCT0gbHRjMjYzMmgxMF9jaGFubmVscywKCQkudnJlZl9tdgk9IDQwOTYsCgl9LAoJW0lEX0xUQzI2MzJIOF0gPSAgewoJCS5jaGFubmVscwk9IGx0YzI2MzJoOF9jaGFubmVscywKCQkudnJlZl9tdgk9IDQwOTYsCgl9LAp9OwoKc3RhdGljIGludCBsdGMyNjMyX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCnsKCXN0cnVjdCBsdGMyNjMyX3N0YXRlICpzdDsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CglzdHJ1Y3QgbHRjMjYzMl9jaGlwX2luZm8gKmNoaXBfaW5mbzsKCWludCByZXQ7CgoJaW5kaW9fZGV2ID0gZGV2bV9paW9fZGV2aWNlX2FsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpzdCkpOwoJaWYgKCFpbmRpb19kZXYpCgkJcmV0dXJuIC1FTk9NRU07CgoJc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGluZGlvX2Rldik7CglzdC0+c3BpX2RldiA9IHNwaTsKCgljaGlwX2luZm8gPSAoc3RydWN0IGx0YzI2MzJfY2hpcF9pbmZvICopCgkJCXNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhOwoKCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKCWluZGlvX2Rldi0+bmFtZSA9IGRldl9vZl9ub2RlKCZzcGktPmRldikgPyBkZXZfb2Zfbm9kZSgmc3BpLT5kZXYpLT5uYW1lCgkJCQkJCSA6IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPm5hbWU7CglpbmRpb19kZXYtPmluZm8gPSAmbHRjMjYzMl9pbmZvOwoJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwoJaW5kaW9fZGV2LT5jaGFubmVscyA9IGNoaXBfaW5mby0+Y2hhbm5lbHM7CglpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IExUQzI2MzJfREFDX0NIQU5ORUxTOwoKCXJldCA9IGx0YzI2MzJfc3BpX3dyaXRlKHNwaSwgTFRDMjYzMl9DTURfSU5URVJOQUxfUkVGRVIsIDAsIDAsIDApOwoJaWYgKHJldCkgewoJCWRldl9lcnIoJnNwaS0+ZGV2LAoJCQkiU2V0IGludGVybmFsIHJlZmVyZW5jZSBjb21tYW5kIGZhaWxlZCwgJWRcbiIsIHJldCk7CgkJcmV0dXJuIHJldDsKCX0KCglyZXR1cm4gZGV2bV9paW9fZGV2aWNlX3JlZ2lzdGVyKCZzcGktPmRldiwgaW5kaW9fZGV2KTsKfQoKc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGx0YzI2MzJfaWRbXSA9IHsKCXsgImx0YzI2MzItbDEyIiwgKGtlcm5lbF91bG9uZ190KSZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkwxMl0gfSwKCXsgImx0YzI2MzItbDEwIiwgKGtlcm5lbF91bG9uZ190KSZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkwxMF0gfSwKCXsgImx0YzI2MzItbDgiLCAoa2VybmVsX3Vsb25nX3QpJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMyTDhdIH0sCgl7ICJsdGMyNjMyLWgxMiIsIChrZXJuZWxfdWxvbmdfdCkmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJIMTJdIH0sCgl7ICJsdGMyNjMyLWgxMCIsIChrZXJuZWxfdWxvbmdfdCkmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJIMTBdIH0sCgl7ICJsdGMyNjMyLWg4IiwgKGtlcm5lbF91bG9uZ190KSZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkg4XSB9LAoJe30KfTsKTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGx0YzI2MzJfaWQpOwoKc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGx0YzI2MzJfZHJpdmVyID0gewoJLmRyaXZlcgkJPSB7CgkJLm5hbWUJPSAibHRjMjYzMiIsCgl9LAoJLnByb2JlCQk9IGx0YzI2MzJfcHJvYmUsCgkuaWRfdGFibGUJPSBsdGMyNjMyX2lkLAp9Owptb2R1bGVfc3BpX2RyaXZlcihsdGMyNjMyX2RyaXZlcik7CgpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBsdGMyNjMyX29mX21hdGNoW10gPSB7Cgl7CgkJLmNvbXBhdGlibGUgPSAibGx0YyxsdGMyNjMyLWwxMiIsCgkJLmRhdGEgPSAmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJMMTJdCgl9LCB7CgkJLmNvbXBhdGlibGUgPSAibGx0YyxsdGMyNjMyLWwxMCIsCgkJLmRhdGEgPSAmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJMMTBdCgl9LCB7CgkJLmNvbXBhdGlibGUgPSAibGx0YyxsdGMyNjMyLWw4IiwKCQkuZGF0YSA9ICZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkw4XQoJfSwgewoJCS5jb21wYXRpYmxlID0gImxsdGMsbHRjMjYzMi1oMTIiLAoJCS5kYXRhID0gJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMySDEyXQoJfSwgewoJCS5jb21wYXRpYmxlID0gImxsdGMsbHRjMjYzMi1oMTAiLAoJCS5kYXRhID0gJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMySDEwXQoJfSwgewoJCS5jb21wYXRpYmxlID0gImxsdGMsbHRjMjYzMi1oOCIsCgkJLmRhdGEgPSAmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJIOF0KCX0sCgl7fQp9OwpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsdGMyNjMyX29mX21hdGNoKTsKCk1PRFVMRV9BVVRIT1IoIk1heGltZSBSb3Vzc2luLUJlbGFuZ2VyIDxtYXhpbWUucm91c3NpbmJlbGFuZ2VyQGdtYWlsLmNvbT4iKTsKTU9EVUxFX0RFU0NSSVBUSU9OKCJMVEMyNjMyIERBQyBTUEkgZHJpdmVyIik7Ck1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK