LyoKICogTW9zdCBvZiB0aGlzIHRha2VuIGZyb20gUmVkYm9vdCBoYWxfcGxhdGZvcm1fc2V0dXAuaCB3aXRoIGNsZWFudXAKICoKICogTk9URTogSSBoYXZlbid0IGNsZWFuIHRoaXMgdXAgY29uc2lkZXJhYmx5LCBqdXN0IGVub3VnaCB0byBnZXQgaXQKICogcnVubmluZy4gU2VlIGhhbF9wbGF0Zm9ybV9zZXR1cC5oIGZvciB0aGUgc291cmNlLiBTZWUKICogYm9hcmQvY3JhZGxlL2xvd2xldmVsX2luaXQuUyBmb3IgYW5vdGhlciBQWEEyNTAgc2V0dXAgdGhhdCBpcwogKiBtdWNoIGNsZWFuZXIuCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgojaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KCkRSQU1fU0laRTogIC5sb25nICAgQ09ORklHX1NZU19EUkFNX1NJWkUKCi8qIHdhaXQgZm9yIGNvcHJvY2Vzc29yIHdyaXRlIGNvbXBsZXRlICovCiAgIC5tYWNybyBDUFdBSVQgcmVnCiAgIG1yYyAgcDE1LDAsXHJlZyxjMixjMCwwCiAgIG1vdiAgXHJlZyxccmVnCiAgIHN1YiAgcGMscGMsIzQKICAgLmVuZG0KCgovKgogKglNZW1vcnkgc2V0dXAKICovCgouZ2xvYmwgbG93bGV2ZWxfaW5pdApsb3dsZXZlbF9pbml0OgoKCS8qIFNldCB1cCBHUElPIHBpbnMgZmlyc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglsZHIJcjAsID1HUFNSMAoJbGRyCXIxLCA9Q09ORklHX1NZU19HUFNSMF9WQUwKCXN0cglyMSwgW3IwXQoKCWxkcglyMCwgPUdQU1IxCglsZHIJcjEsID1DT05GSUdfU1lTX0dQU1IxX1ZBTAoJc3RyCXIxLCBbcjBdCgoJbGRyCXIwLCA9R1BTUjIKCWxkcglyMSwgPUNPTkZJR19TWVNfR1BTUjJfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HUENSMAoJbGRyCXIxLCA9Q09ORklHX1NZU19HUENSMF9WQUwKCXN0cglyMSwgW3IwXQoKCWxkcglyMCwgPUdQQ1IxCglsZHIJcjEsID1DT05GSUdfU1lTX0dQQ1IxX1ZBTAoJc3RyCXIxLCBbcjBdCgoJbGRyCXIwLCA9R1BDUjIKCWxkcglyMSwgPUNPTkZJR19TWVNfR1BDUjJfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HUERSMAoJbGRyCXIxLCA9Q09ORklHX1NZU19HUERSMF9WQUwKCXN0cglyMSwgW3IwXQoKCWxkcglyMCwgPUdQRFIxCglsZHIJcjEsID1DT05GSUdfU1lTX0dQRFIxX1ZBTAoJc3RyCXIxLCBbcjBdCgoJbGRyCXIwLCA9R1BEUjIKCWxkcglyMSwgPUNPTkZJR19TWVNfR1BEUjJfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HQUZSMF9MCglsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIwX0xfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HQUZSMF9VCglsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIwX1VfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HQUZSMV9MCglsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIxX0xfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HQUZSMV9VCglsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIxX1VfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HQUZSMl9MCglsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIyX0xfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1HQUZSMl9VCglsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIyX1VfVkFMCglzdHIJcjEsIFtyMF0KCglsZHIJcjAsID1QU1NSCQkJLyogZW5hYmxlIEdQSU8gcGlucyAqLwoJbGRyCXIxLCA9Q09ORklHX1NZU19QU1NSX1ZBTAoJc3RyCXIxLCBbcjBdCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogRW5hYmxlIG1lbW9yeSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogVGhlIHNlcXVlbmNlIGJlbG93IGlzIGJhc2VkIG9uIHRoZSByZWNvbW1lbmRlZCBpbml0IHN0ZXBzICAgICAgICAqLwoJLyogZGV0YWlsZWQgaW4gdGhlIEludGVsIFBYQTI1MCBPcGVyYXRpbmcgU3lzdGVtcyBEZXZlbG9wZXJzIEd1aWRlLCAqLwoJLyogQ2hhcHRlciAxMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgMTogV2FpdCBmb3IgYXQgbGVhc3QgMjAwIG1pY3Jvc2Vkb25kcyB0byBhbGxvdyBpbnRlcm5hbCAgICAgKi8KCS8qICAgICAgICAgY2xvY2tzIHRvIHNldHRsZS4gT25seSBuZWNlc3NhcnkgYWZ0ZXIgaGFyZCByZXNldC4uLiAgICAgKi8KCS8qICAgICAgICAgRklYTUU6IGNhbiBiZSBvcHRpbWl6ZWQgbGF0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglsZHIJcjMsID1PU0NSCQkJLyogcmVzZXQgdGhlIE9TIFRpbWVyIENvdW50IHRvIHplcm8gKi8KCW1vdglyMiwgIzAKCXN0cglyMiwgW3IzXQoJbGRyCXI0LCA9MHgzMDAJCQkvKiByZWFsbHkgMHgyRTEgaXMgYWJvdXQgMjAwdXNlYywgICAqLwoJCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLwoxOgoJbGRyCXIyLCBbcjNdCgljbXAJcjQsIHIyCgliZ3QJMWIKCm1lbV9pbml0OgoKCWxkcglyMSwgPU1FTUNfQkFTRQkJCS8qIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHIuICovCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCAyYTogSW5pdGlhbGl6ZSBBc3luY2hyb25vdXMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8qIE1TQyByZWdpc3RlcnM6IHRpbWluZywgYnVzIHdpZHRoLCBtZW0gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KCgkvKiBNU0MwOiBuQ1MoMCwxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01TQzBfVkFMCglzdHIJcjIsIFtyMSwgI01TQzBfT0ZGU0VUXQoJbGRyCXIyLCBbcjEsICNNU0MwX09GRlNFVF0JCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLwoJCQkJCQkvKiB0aGF0IGRhdGEgbGF0Y2hlcyAgICAgICAgKi8KCS8qIE1TQzE6IG5DUygyLDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCWxkcglyMiwgPUNPTkZJR19TWVNfTVNDMV9WQUwKCXN0cglyMiwgW3IxLCAjTVNDMV9PRkZTRVRdCglsZHIJcjIsIFtyMSwgI01TQzFfT0ZGU0VUXQoKCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCWxkcglyMiwgPUNPTkZJR19TWVNfTVNDMl9WQUwKCXN0cglyMiwgW3IxLCAjTVNDMl9PRkZTRVRdCglsZHIJcjIsIFtyMSwgI01TQzJfT0ZGU0VUXQoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgMmI6IEluaXRpYWxpemUgQ2FyZCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCgkvKiBNRUNSOiBNZW1vcnkgRXhwYW5zaW9uIENhcmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01FQ1JfVkFMCglzdHIJcjIsIFtyMSwgI01FQ1JfT0ZGU0VUXQoJbGRyCXIyLCBbcjEsICNNRUNSX09GRlNFVF0KCgkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01DTUVNMF9WQUwKCXN0cglyMiwgW3IxLCAjTUNNRU0wX09GRlNFVF0KCWxkcglyMiwgW3IxLCAjTUNNRU0wX09GRlNFVF0KCgkvKiBNQ01FTTE6IENhcmQgSW50ZXJmYWNlIHNsb3QgMSB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01DTUVNMV9WQUwKCXN0cglyMiwgW3IxLCAjTUNNRU0xX09GRlNFVF0KCWxkcglyMiwgW3IxLCAjTUNNRU0xX09GRlNFVF0KCgkvKiBNQ0FUVDA6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMCAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01DQVRUMF9WQUwKCXN0cglyMiwgW3IxLCAjTUNBVFQwX09GRlNFVF0KCWxkcglyMiwgW3IxLCAjTUNBVFQwX09GRlNFVF0KCgkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01DQVRUMV9WQUwKCXN0cglyMiwgW3IxLCAjTUNBVFQxX09GRlNFVF0KCWxkcglyMiwgW3IxLCAjTUNBVFQxX09GRlNFVF0KCgkvKiBNQ0lPMDogQ2FyZCBJbnRlcmZhY2UgSS9PIFNwYWNlIFRpbWluZywgc2xvdCAwICAgICAgICAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01DSU8wX1ZBTAoJc3RyCXIyLCBbcjEsICNNQ0lPMF9PRkZTRVRdCglsZHIJcjIsIFtyMSwgI01DSU8wX09GRlNFVF0KCgkvKiBNQ0lPMTogQ2FyZCBJbnRlcmZhY2UgSS9PIFNwYWNlIFRpbWluZywgc2xvdCAxICAgICAgICAgICAgICAgICAgICovCglsZHIJcjIsID1DT05GSUdfU1lTX01DSU8xX1ZBTAoJc3RyCXIyLCBbcjEsICNNQ0lPMV9PRkZTRVRdCglsZHIJcjIsIFtyMSwgI01DSU8xX09GRlNFVF0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDJjOiBXcml0ZSBGTFlDTkZHICBGSVhNRTogd2hhdCdzIHRoYXQ/Pz8gICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCgkvKiBCZWZvcmUgYWNjZXNzaW5nIE1EUkVGUiB3ZSBuZWVkIGEgdmFsaWQgRFJJIGZpZWxkLCBzbyB3ZSBzZXQgICAgICovCgkvKiB0aGlzIHRvIHBvd2VyIG9uIGRlZmF1bHRzICsgRFJJIGZpZWxkLCBzZXQgU0RSQU0gY2xvY2tzIGZyZWUgcnVubmluZyAqLwoKCWxkcglyMywgPUNPTkZJR19TWVNfTURSRUZSX1ZBTAoJbGRyCXIyLCA9MHhGRkYKCWFuZAlyMywgcjMsICByMgoKCWxkcglyMCwgW3IxLCAjTURSRUZSX09GRlNFVF0KCWJpYwlyMCwgcjAsIHIyCgliaWMJcjAsIHIwLCAjKE1EUkVGUl9LMEZSRUV8TURSRUZSX0sxRlJFRXxNRFJFRlJfSzJGUkVFKQoJb3JyCXIwLCByMCwgcjMKCglzdHIJcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwoKCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDM6IEluaXRpYWxpemUgU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSAoRmxhc2gvUGVyaXBoZXJhbHMpICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogSW5pdGlhbGl6ZSBTWENORkcgcmVnaXN0ZXIuIEFzc2VydCB0aGUgZW5hYmxlIGJpdHMgICAgICAgICAgICAgICAqLwoKCS8qIFdyaXRlIFNYTVJTIHRvIGNhdXNlIGFuIE1SUyBjb21tYW5kIHRvIGFsbCBlbmFibGVkIGJhbmtzIG9mICAgICAgKi8KCS8qIHN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkuIE5vdGUgdGhhdCBTWExDUiBuZWVkIG5vdCBiZSB3cml0dGVuICAgKi8KCS8qIGF0IHRoaXMgdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCgkvKiBGSVhNRTogd2UgdXNlIGFzeW5jIG1vZGUgZm9yIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgNDogSW5pdGlhbGl6ZSBTRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCgkvKiBzZXQgTURSRUZSIGFjY29yZGluZyB0byB1c2VyIGRlZmluZSB3aXRoIGV4Y2VwdGlvbiBvZiBhIGZldyBiaXRzICovCgoJbGRyICAgICByNCwgPUNPTkZJR19TWVNfTURSRUZSX1ZBTAoJbGRyCXIyLCA9KE1EUkVGUl9LMFJVTnxNRFJFRlJfSzBEQjJ8TURSRUZSX0sxUlVOfE1EUkVGUl9LMURCMnxcCgkJCQkJTURSRUZSX0syUlVOIHxNRFJFRlJfSzJEQjIpCglhbmQJcjQsIHI0LCByMgoJYmljCXIwLCByMCwgcjIKCW9ycglyMCwgcjAsIHI0CgoJc3RyICAgICByMCwgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCglsZHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXQoKCS8qIFN0ZXAgNGI6IGRlLWFzc2VydCBNRFJFRlI6U0xGUlNILiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCgliaWMJcjAsIHIwLCAjKE1EUkVGUl9TTEZSU0gpCglzdHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KCWxkciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCgoKCS8qIFN0ZXAgNGM6IGFzc2VydCBNRFJFRlI6RTFQSU4gYW5kIEUwUElPIGFzIGRlc2lyZWQsIHNldCBLWEZSRUUgICovCgoJbGRyICAgICByNCwgPUNPTkZJR19TWVNfTURSRUZSX1ZBTAoJbGRyCXIyLCA9KE1EUkVGUl9FMFBJTnxNRFJFRlJfRTFQSU58TURSRUZSX0swRlJFRXwgXAoJCQlNRFJFRlJfSzFGUkVFIHwgTURSRUZSX0syRlJFRSkKCWFuZAlyNCwgcjQsIHIyCglvcnIJcjAsIHIwLCByNAoJc3RyICAgICByMCwgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCglsZHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXQoKCgkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCgkvKiAgICAgICAgICBjb25maWd1cmUgYnV0IG5vdCBlbmFibGUgZWFjaCBTRFJBTSBwYXJ0aXRpb24gcGFpci4gICAgICovCgoJbGRyCXI0LCA9Q09ORklHX1NZU19NRENORkdfVkFMCgliaWMJcjQsIHI0LCAjKE1EQ05GR19ERTB8TURDTkZHX0RFMSkKCWJpYwlyNCwgcjQsICMoTURDTkZHX0RFMnxNRENORkdfREUzKQoJc3RyICAgICByNCwgW3IxLCAjTURDTkZHX09GRlNFVF0JLyogd3JpdGUgYmFjayBNRENORkcgICAgICAgICovCglsZHIgICAgIHI0LCBbcjEsICNNRENORkdfT0ZGU0VUXQoKCgkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCgkvKiAgICAgICAgICAxMDAuLjIwMCC1c2VjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoJbGRyCXIzLCA9T1NDUgkJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCgltb3YJcjIsICMwCglzdHIJcjIsIFtyM10KCWxkcglyNCwgPTB4MzAwCQkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KCQkJCQkJLyogc28gMHgzMDAgc2hvdWxkIGJlIHBsZW50eSAgICAgICAgKi8KMToKCWxkcglyMiwgW3IzXQoJY21wCXI0LCByMgoJYmd0CTFiCgoKCS8qIFN0ZXAgNGY6IFRyaWdnZXIgYSBudW1iZXIgKHVzdWFsbHkgOCkgcmVmcmVzaCBjeWNsZXMgYnkgICAgICAgICAgKi8KCS8qICAgICAgICAgIGF0dGVtcHRpbmcgbm9uLWJ1cnN0IHJlYWQgb3Igd3JpdGUgYWNjZXNzZXMgdG8gZGlzYWJsZWQgKi8KCS8qICAgICAgICAgIFNEUkFNLCBhcyBjb21tb25seSBzcGVjaWZpZWQgaW4gdGhlIHBvd2VyIHVwIHNlcXVlbmNlICAgKi8KCS8qICAgICAgICAgIGRvY3VtZW50ZWQgaW4gU0RSQU0gZGF0YSBzaGVldHMuIFRoZSBhZGRyZXNzKGVzKSB1c2VkICAgKi8KCS8qICAgICAgICAgIGZvciB0aGlzIHB1cnBvc2UgbXVzdCBub3QgYmUgY2FjaGVhYmxlLiAgICAgICAgICAgICAgICAgKi8KCglsZHIJcjMsID1DT05GSUdfU1lTX0RSQU1fQkFTRQoucmVwdCA4CglzdHIJcjIsIFtyM10KLmVuZHIKCgkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCgkvKiAgICAgICAgICAoTURDTkZHOkRFeCBzZXQgdG8gMSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoJbGRyICAgICByMywgW3IxLCAjTURDTkZHX09GRlNFVF0KCW9ycglyMywgcjMsICMoTURDTkZHX0RFMHxNRENORkdfREUxKQoJc3RyICAgICByMywgW3IxLCAjTURDTkZHX09GRlNFVF0KCgkvKiBTdGVwIDRoOiBXcml0ZSBNRE1SUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoJbGRyICAgICByMiwgPUNPTkZJR19TWVNfTURNUlNfVkFMCglzdHIgICAgIHIyLCBbcjEsICNNRE1SU19PRkZTRVRdCgoKCS8qIFdlIGFyZSBmaW5pc2hlZCB3aXRoIEludGVsJ3MgbWVtb3J5IGNvbnRyb2xsZXIgaW5pdGlhbGlzYXRpb24gICAgKi8KCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogRGlzYWJsZSAobWFzaykgYWxsIGludGVycnVwdHMgYXQgaW50ZXJydXB0IGNvbnRyb2xsZXIgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKaW5pdGlycXM6CgoJbW92ICAgICByMSwgIzAJCS8qIGNsZWFyIGludC4gbGV2ZWwgcmVnaXN0ZXIgKElSUSwgbm90IEZJUSkgKi8KCWxkciAgICAgcjIsID1JQ0xSCglzdHIgICAgIHIxLCBbcjJdCgoJbGRyICAgICByMiwgPUlDTVIJLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAgICAqLwoJc3RyICAgICByMSwgW3IyXQoKCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBDbG9jayBpbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgppbml0Y2xrczoKCgkvKiBEaXNhYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrcywgYW5kIHNldCB0aGUgY29yZSBjbG9jayBmcmVxdWVuY3kgICovCgoJLyogVHVybiBPZmYgQUxMIG9uLWNoaXAgcGVyaXBoZXJhbCBjbG9ja3MgZm9yIHJlLWNvbmZpZ3VyYXRpb24gICAgICAqLwoJLyogTm90ZTogU2VlIGxhYmVsICdFTkFCTEVDTEtTJyBmb3IgdGhlIHJlLWVuYWJsaW5nICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMSwgPUNLRU4KCW1vdiAgICAgcjIsICMwCglzdHIgICAgIHIyLCBbcjFdCgoKCS8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KCWxkciAgICAgcjIsID0oQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMCkgIC8qIERFRkFVTFQ6IHsyMDAvMjAwLzEwMH0gKi8KCgkvKiAuLi4gYW5kIHdyaXRlIHRoZSBjb3JlIGNsb2NrIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIxLCA9Q0NDUgoJc3RyICAgICByMiwgW3IxXQoKI2lmZGVmIFJUQwoJLyogZW5hYmxlIHRoZSAzMktoeiBvc2NpbGxhdG9yIGZvciBSVEMgYW5kIFBvd2VyTWFuYWdlciAgICAgICAgICAgICAqLwoKCWxkciAgICAgcjEsID1PU0NDCgltb3YgICAgIHIyLCAjT1NDQ19PT04KCXN0ciAgICAgcjIsIFtyMV0KCgkvKiBOT1RFOiAgc3BpbiBoZXJlIHVudGlsIE9TQ0MuT09LIGdldCBzZXQsIG1lYW5pbmcgdGhlIFBMTCAgICAgICAgICovCgkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjYwOgoJbGRyICAgICByMiwgW3IxXQoJYW5kcyAgICByMiwgcjIsICMxCgliZXEgICAgIDYwYgojZW5kaWYKCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogU2F2ZSBTRFJBTSBzaXplICovCglsZHIgICAgIHIxLCA9RFJBTV9TSVpFCglzdHIJcjgsIFtyMV0KCgkvKiBJbnRlcnJ1cHQgaW5pdDogTWFzayBhbGwgaW50ZXJydXB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIJcjAsID1JQ01SIC8qIGVuYWJsZSBubyBzb3VyY2VzICovCgltb3YJcjEsICMwCglzdHIJcjEsIFtyMF0KCgkvKiBGSVhNRSAqLwoKI2RlZmluZSBOT0RFQlVHCiNpZmRlZiBOT0RFQlVHCgkvKkRpc2FibGUgc29mdHdhcmUgYW5kIGRhdGEgYnJlYWtwb2ludHMgKi8KCW1vdglyMCwjMAoJbWNyCXAxNSwwLHIwLGMxNCxjOCwwICAvKiBpYmNyMCAqLwoJbWNyCXAxNSwwLHIwLGMxNCxjOSwwICAvKiBpYmNyMSAqLwoJbWNyCXAxNSwwLHIwLGMxNCxjNCwwICAvKiBkYmNvbiAqLwoKCS8qRW5hYmxlIGFsbCBkZWJ1ZyBmdW5jdGlvbmFsaXR5ICovCgltb3YJcjAsIzB4ODAwMDAwMDAKCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwoKI2VuZGlmCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogRW5kIGxvd2xldmVsX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgplbmRsb3dsZXZlbF9pbml0OgoKCW1vdiAgICAgcGMsIGxyCg==