LyoKICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgoKI2RlZmluZSBCT09UX1NFRwkweGZmZmYwMDAwCS8qIGxpbmVhciBzZWdtZW50IG9mIGJvb3QgY29kZSAqLwojZGVmaW5lIGEzMgkJLmJ5dGUgMHg2NzsKI2RlZmluZSBvMzIJCS5ieXRlIDB4NjY7Cgouc2VjdGlvbiAuc3RhcnQxNiwgImF4IgouY29kZTE2Ci5nbG9ibCBzdGFydDE2CnN0YXJ0MTY6CgkvKiBGaXJzdCB3ZSBsZXQgdGhlIEJTUCBkbyBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uCgkgKiB0aGlzIGNvZGUgaGF2ZSB0byBtYXAgdGhlIGZsYXNoIHRvIGl0cyBmaW5hbCBwb3NpdGlvbgoJICovCgltb3YJJGJvYXJkX2luaXQxNl9yZXQsICVicAoJam1wCWJvYXJkX2luaXQxNgpib2FyZF9pbml0MTZfcmV0OgoKCS8qIFR1cm4gb2YgY2FjaGUgKHRoaXMgbWlnaHQgcmVxdWlyZSBhIDQ4Ni1jbGFzcyBDUFUpICovCgltb3ZsCSVjcjAsICVlYXgKCW9ybAkkMHg2MDAwMDAwMCwlZWF4Cgltb3ZsCSVlYXgsICVjcjAKCXdiaW52ZAoKCS8qIGxvYWQgdGhlIGRlc2NyaXB0b3IgdGFibGVzICovCm8zMiBjcwlsaWR0CWlkdF9wdHIKbzMyIGNzCWxnZHQJZ2R0X3B0cgoKCgkvKiBOb3csIHdlIGVudGVyIHByb3RlY3RlZCBtb2RlICovCgltb3ZsCSVjcjAsICVlYXgKCW9ybAkkMSwlZWF4Cgltb3ZsCSVlYXgsICVjcjAKCgkvKiBGbHVzaCB0aGUgcHJlZmV0Y2ggcXVldWUgKi8KCWptcAlmZgpmZjoKCgkvKiBGaW5hbGx5IGp1bXAgdG8gdGhlIDMyYml0IGluaXRpYWxpemF0aW9uIGNvZGUgKi8KCW1vdncJJGNvZGUzMnN0YXJ0LCAlYXgKCW1vdncJJWF4LCVicApvMzIgY3MJbGptcAkqKCVicCkKCgkvKiA0OC1iaXQgZmFyIHBvaW50ZXIgKi8KY29kZTMyc3RhcnQ6CgkubG9uZwlfc3RhcnQJCS8qIG9mZnNldCAqLwoJLndvcmQJMHgxMAkJLyogc2VnbWVudCAqLwoKaWR0X3B0cjoKCS53b3JkCTAJCS8qIGxpbWl0ICovCgkubG9uZwkwCQkvKiBiYXNlICovCgpnZHRfcHRyOgoJLndvcmQJMHgzMAkJLyogbGltaXQgKDQ4IGJ5dGVzID0gNiBHRFQgZW50cmllcykgKi8KCS5sb25nCUJPT1RfU0VHICsgZ2R0CS8qIGJhc2UgKi8KCgkvKiBUaGUgR0RUIHRhYmxlIC4uLgoJICoKCSAqCSBTZWxlY3RvcglUeXBlCgkgKgkgMHgwMAkJTlVMTAoJICoJIDB4MDgJCVVudXNlZAoJICoJIDB4MTAJCTMyYml0IGNvZGUKCSAqCSAweDE4CQkzMmJpdCBkYXRhL3N0YWNrCgkgKgkgMHgyMAkJMTZiaXQgY29kZQoJICoJIDB4MjgJCTE2Yml0IGRhdGEvc3RhY2sKCSAqLwoKZ2R0OgoJLndvcmQJMCwgMCwgMCwgMAkvKiBOVUxMICAqLwoJLndvcmQJMCwgMCwgMCwgMAkvKiB1bnVzZWQgKi8KCgkud29yZAkweEZGRkYJCS8qIDRHYiAtICgweDEwMDAwMCoweDEwMDAgPSA0R2IpICovCgkud29yZAkwCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCgkud29yZAkweDlCMDAJCS8qIGNvZGUgcmVhZC9leGVjICovCgkud29yZAkweDAwQ0YJCS8qIGdyYW51bGFyaXR5ID0gNDA5NiwgMzg2ICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KCgkud29yZAkweEZGRkYJCS8qIDRHYiAtICgweDEwMDAwMCoweDEwMDAgPSA0R2IpICovCgkud29yZAkweDAJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KCS53b3JkCTB4OTMwMAkJLyogZGF0YSByZWFkL3dyaXRlICovCgkud29yZAkweDAwQ0YJCS8qIGdyYW51bGFyaXR5ID0gNDA5NiwgMzg2ICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KCgkud29yZAkweEZGRkYJCS8qIDY0a2IgKi8KCS53b3JkCTAJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KCS53b3JkCTB4OWIwMAkJLyogZGF0YSByZWFkL3dyaXRlICovCgkud29yZAkweDAwMTAJCS8qIGdyYW51bGFyaXR5ID0gMSAgKCs1dGggbmliYmxlIG9mIGxpbWl0KSAqLwoKCS53b3JkCTB4RkZGRgkJLyogNjRrYiAqLwoJLndvcmQJMAkJLyogYmFzZSBhZGRyZXNzID0gMCAqLwoJLndvcmQJMHg5MzAwCQkvKiBkYXRhIHJlYWQvd3JpdGUgKi8KCS53b3JkCTB4MDAxMAkJLyogZ3JhbnVsYXJpdHkgPSAxICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8K