IC8qCiAqIE1vc3Qgb2YgdGhpcyB0YWtlbiBmcm9tIFJlZGJvb3QgaGFsX3BsYXRmb3JtX3NldHVwLmggd2l0aCBjbGVhbnVwCiAqCiAqIE5PVEU6IEkgaGF2ZW4ndCBjbGVhbiB0aGlzIHVwIGNvbnNpZGVyYWJseSwganVzdCBlbm91Z2ggdG8gZ2V0IGl0CiAqIHJ1bm5pbmcuIFNlZSBoYWxfcGxhdGZvcm1fc2V0dXAuaCBmb3IgdGhlIHNvdXJjZS4gU2VlCiAqIGJvYXJkL2NyYWRsZS9sb3dsZXZlbF9pbml0LlMgZm9yIGFub3RoZXIgUFhBMjUwIHNldHVwIHRoYXQgaXMKICogbXVjaCBjbGVhbmVyLgogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CgpEUkFNX1NJWkU6ICAubG9uZyAgIENGR19EUkFNX1NJWkUKCi8qIHdhaXQgZm9yIGNvcHJvY2Vzc29yIHdyaXRlIGNvbXBsZXRlICovCgkubWFjcm8gQ1BXQUlUIHJlZwoJbXJjICBwMTUsMCxccmVnLGMyLGMwLDAKCW1vdiAgXHJlZyxccmVnCglzdWIgIHBjLHBjLCM0CgkuZW5kbQoKCi5nbG9ibCBsb3dsZXZlbF9pbml0Cmxvd2xldmVsX2luaXQ6CgoJbW92CSByMTAsIGxyCgoJLyogU2V0IHVwIEdQSU8gcGlucyBmaXJzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCWxkcglyMCw9R1BTUjAKCWxkcglyMSw9Q0ZHX0dQU1IwX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdQU1IxCglsZHIJcjEsPUNGR19HUFNSMV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HUFNSMgoJbGRyCXIxLD1DRkdfR1BTUjJfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R1BDUjAKCWxkcglyMSw9Q0ZHX0dQQ1IwX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdQQ1IxCglsZHIJcjEsPUNGR19HUENSMV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HUENSMgoJbGRyCXIxLD1DRkdfR1BDUjJfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R1BEUjAKCWxkcglyMSw9Q0ZHX0dQRFIwX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdQRFIxCglsZHIJcjEsPUNGR19HUERSMV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HUERSMgoJbGRyCXIxLD1DRkdfR1BEUjJfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R0FGUjBfTAoJbGRyCXIxLD1DRkdfR0FGUjBfTF9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HQUZSMF9VCglsZHIJcjEsPUNGR19HQUZSMF9VX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIxX0wKCWxkcglyMSw9Q0ZHX0dBRlIxX0xfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R0FGUjFfVQoJbGRyCXIxLD1DRkdfR0FGUjFfVV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HQUZSMl9MCglsZHIJcjEsPUNGR19HQUZSMl9MX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIyX1UKCWxkcglyMSw9Q0ZHX0dBRlIyX1VfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9UFNTUgkJLyogZW5hYmxlIEdQSU8gcGlucyAqLwoJbGRyCXIxLD1DRkdfUFNTUl9WQUwKCXN0cglyMSxbcjBdCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogRW5hYmxlIG1lbW9yeSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogVGhlIHNlcXVlbmNlIGJlbG93IGlzIGJhc2VkIG9uIHRoZSByZWNvbW1lbmRlZCBpbml0IHN0ZXBzICAgICAgICAqLwoJLyogZGV0YWlsZWQgaW4gdGhlIEludGVsIFBYQTI1MCBPcGVyYXRpbmcgU3lzdGVtcyBEZXZlbG9wZXJzIEd1aWRlLCAqLwoJLyogQ2hhcHRlciAxMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgMTogV2FpdCBmb3IgYXQgbGVhc3QgMjAwIG1pY3Jvc2Vkb25kcyB0byBhbGxvdyBpbnRlcm5hbCAgICAgKi8KCS8qICAgICAgICAgY2xvY2tzIHRvIHNldHRsZS4gT25seSBuZWNlc3NhcnkgYWZ0ZXIgaGFyZCByZXNldC4uLiAgICAgKi8KCS8qICAgICAgICAgRklYTUU6IGNhbiBiZSBvcHRpbWl6ZWQgbGF0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglsZHIJcjMsID1PU0NSCQkvKiByZXNldCB0aGUgT1MgVGltZXIgQ291bnQgdG8gemVybyAqLwoJbW92CXIyLCAjMAoJc3RyCXIyLCBbcjNdCglsZHIJcjQsID0weDMwMAkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLwoxOgoJbGRyCXIyLCBbcjNdCgljbXAJcjQsIHIyCgliZ3QJMWIKCm1lbV9pbml0OgoKCWxkcglyMSw9TUVNQ19CQVNFCQkvKiBnZXQgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBhZGRyLiAqLwoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgMmE6IEluaXRpYWxpemUgQXN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkgY29udHJvbGxlciAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCgkvKiBNU0MgcmVnaXN0ZXJzOiB0aW1pbmcsIGJ1cyB3aWR0aCwgbWVtIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICovCgoJLyogTVNDMDogbkNTKDAsMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMiw9Q0ZHX01TQzBfVkFMCglzdHIgICAgIHIyLFtyMSwgI01TQzBfT0ZGU0VUXQoJbGRyICAgICByMixbcjEsICNNU0MwX09GRlNFVF0JLyogcmVhZCBiYWNrIHRvIGVuc3VyZSBkYXRhIGxhdGNoZXMgKi8KCgkvKiBNU0MxOiBuQ1MoMiwzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DRkdfTVNDMV9WQUwKCXN0ciAgICAgcjIsW3IxLCAjTVNDMV9PRkZTRVRdCglsZHIgICAgIHIyLFtyMSwgI01TQzFfT0ZGU0VUXQoKCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCWxkciAgICAgcjIsPUNGR19NU0MyX1ZBTAoJc3RyICAgICByMixbcjEsICNNU0MyX09GRlNFVF0KCWxkciAgICAgcjIsW3IxLCAjTVNDMl9PRkZTRVRdCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCAyYjogSW5pdGlhbGl6ZSBDYXJkIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8qIE1FQ1I6IE1lbW9yeSBFeHBhbnNpb24gQ2FyZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCWxkciAgICAgcjIsPUNGR19NRUNSX1ZBTAoJc3RyICAgICByMixbcjEsICNNRUNSX09GRlNFVF0KCWxkcglyMixbcjEsICNNRUNSX09GRlNFVF0KCgkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DRkdfTUNNRU0wX1ZBTAoJc3RyICAgICByMixbcjEsICNNQ01FTTBfT0ZGU0VUXQoJbGRyCXIyLFtyMSwgI01DTUVNMF9PRkZTRVRdCgoJLyogTUNNRU0xOiBDYXJkIEludGVyZmFjZSBzbG90IDEgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMiw9Q0ZHX01DTUVNMV9WQUwKCXN0ciAgICAgcjIsW3IxLCAjTUNNRU0xX09GRlNFVF0KCWxkcglyMixbcjEsICNNQ01FTTFfT0ZGU0VUXQoKCS8qIE1DQVRUMDogQ2FyZCBJbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFRpbWluZywgc2xvdCAwICAgICAgICAgICAgKi8KCWxkciAgICAgcjIsPUNGR19NQ0FUVDBfVkFMCglzdHIgICAgIHIyLFtyMSwgI01DQVRUMF9PRkZTRVRdCglsZHIJcjIsW3IxLCAjTUNBVFQwX09GRlNFVF0KCgkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DRkdfTUNBVFQxX1ZBTAoJc3RyICAgICByMixbcjEsICNNQ0FUVDFfT0ZGU0VUXQoJbGRyCXIyLFtyMSwgI01DQVRUMV9PRkZTRVRdCgoJLyogTUNJTzA6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMCAgICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMiw9Q0ZHX01DSU8wX1ZBTAoJc3RyICAgICByMixbcjEsICNNQ0lPMF9PRkZTRVRdCglsZHIJcjIsW3IxLCAjTUNJTzBfT0ZGU0VUXQoKCS8qIE1DSU8xOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAgICAgICAgKi8KCWxkciAgICAgcjIsPUNGR19NQ0lPMV9WQUwKCXN0ciAgICAgcjIsW3IxLCAjTUNJTzFfT0ZGU0VUXQoJbGRyCXIyLFtyMSwgI01DSU8xX09GRlNFVF0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDJjOiBXcml0ZSBGTFlDTkZHICBGSVhNRTogd2hhdCdzIHRoYXQ/Pz8gICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCAyZDogSW5pdGlhbGl6ZSBUaW1pbmcgZm9yIFN5bmMgTWVtb3J5IChTRENMSzApICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCUAgZ2V0IHRoZSBtZHJlZnIgc2V0dGluZ3MKCWxkciAgICAgcjQsPUNGR19NRFJFRlJfVkFMCgoJQCB3cml0ZSBiYWNrIG1kcmVmcgoJc3RyICAgICByNCxbcjEsICNNRFJFRlJfT0ZGU0VUXQoJbGRyICAgICByNCxbcjEsICNNRFJFRlJfT0ZGU0VUXQoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIFN0ZXAgMzogSW5pdGlhbGl6ZSBTeW5jaHJvbm91cyBTdGF0aWMgTWVtb3J5IChGbGFzaC9QZXJpcGhlcmFscykgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCgkvKiBJbml0aWFsaXplIFNYQ05GRyByZWdpc3Rlci4gQXNzZXJ0IHRoZSBlbmFibGUgYml0cyAgICAgICAgICAgICAgICovCgoJLyogV3JpdGUgU1hNUlMgdG8gY2F1c2UgYW4gTVJTIGNvbW1hbmQgdG8gYWxsIGVuYWJsZWQgYmFua3Mgb2YgICAgICAqLwoJLyogc3luY2hyb25vdXMgc3RhdGljIG1lbW9yeS4gTm90ZSB0aGF0IFNYTENSIG5lZWQgbm90IGJlIHdyaXR0ZW4gICAqLwoJLyogYXQgdGhpcyB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKCS8qIEZJWE1FOiB3ZSB1c2UgYXN5bmMgbW9kZSBmb3Igbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDQ6IEluaXRpYWxpemUgU0RSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJQCBzZXQgSzFSVU4gZm9yIGJhbmsgMAoJQAoJb3JyICAgcjQsICByNCwgICNNRFJFRlJfSzFSVU4KCglAIHdyaXRlIGJhY2sgbWRyZWZyCglACglzdHIgICAgIHI0LCAgW3IxLCAjTURSRUZSX09GRlNFVF0KCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQoKCUAgZGVhc3NlcnQgU0xGUlNICglACgliaWMgICAgIHI0LCAgcjQsICAjTURSRUZSX1NMRlJTSAoKCUAgd3JpdGUgYmFjayBtZHJlZnIKCUAKCXN0ciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQoJbGRyICAgICByNCwgIFtyMSwgI01EUkVGUl9PRkZTRVRdCgoJQCBhc3NlcnQgRTFQSU4KCUAgaWYgRTBQSU4gaXMgYWxzbyB1c2VkOgkgIyhNRFJFRlJfRTFQSU58TURSRUZSX0UwUElOKQoJb3JyICAgICByNCwgIHI0LCAjKE1EUkVGUl9FMVBJTikKCglAIHdyaXRlIGJhY2sgbWRyZWZyCglACglzdHIgICAgIHI0LCAgW3IxLCAjTURSRUZSX09GRlNFVF0KCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQoJbm9wCglub3AKCgkvKiBTdGVwIDRkOgkJCQkJCQkqLwoJLyogZmV0Y2ggcGxhdGZvcm0gdmFsdWUgb2YgbWRjbmZnCQkJCSovCglACglsZHIgICAgIHIyLCAgPUNGR19NRENORkdfVkFMCgoJQCBkaXNhYmxlIGFsbCBzZHJhbSBiYW5rcwoJQAoJYmljICAgICByMiwgIHIyLCAgIyhNRENORkdfREUwIHwgTURDTkZHX0RFMSkKCWJpYyAgICAgcjIsICByMiwgICMoTURDTkZHX0RFMiB8IE1EQ05GR19ERTMpCgoJQCBwcm9ncmFtIGJhbmtzIDAvMSBmb3IgYnVzIHdpZHRoCglACgliaWMgICByMiwgIHIyLCAgI01EQ05GR19EV0lEMCAgICAgIEAwPTMyLWJpdAoKCUAgd3JpdGUgaW5pdGlhbCB2YWx1ZSBvZiBtZGNuZmcsIHcvbyBlbmFibGluZyBzZHJhbSBiYW5rcwoJQAoJc3RyICAgICByMiwgIFtyMSwgI01EQ05GR19PRkZTRVRdCgoJLyogU3RlcCA0ZTogV2FpdCBmb3IgdGhlIGNsb2NrIHRvIHRoZSBTRFJBTXMgdG8gc3RhYmlsaXplLCAgICAgICAgICAqLwoJLyogICAgICAgICAgMTAwLi4yMDAgtXNlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKCWxkcglyMywgPU9TQ1IJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCgltb3YJcjIsICMwCglzdHIJcjIsIFtyM10KCWxkcglyNCwgPTB4MzAwCQkvKiByZWFsbHkgMHgyRTEgaXMgYWJvdXQgMjAwdXNlYywgICAqLwoJCQkJCS8qIHNvIDB4MzAwIHNob3VsZCBiZSBwbGVudHkgICAgICAgICovCjE6CglsZHIJcjIsIFtyM10KCWNtcAlyNCwgcjIKCWJndAkxYgoKCgkvKiBTdGVwIDRmOiBUcmlnZ2VyIGEgbnVtYmVyICh1c3VhbGx5IDgpIHJlZnJlc2ggY3ljbGVzIGJ5ICAgICAgICAgICovCgkvKiAgICAgICAgICBhdHRlbXB0aW5nIG5vbi1idXJzdCByZWFkIG9yIHdyaXRlIGFjY2Vzc2VzIHRvIGRpc2FibGVkICovCgkvKiAgICAgICAgICBTRFJBTSwgYXMgY29tbW9ubHkgc3BlY2lmaWVkIGluIHRoZSBwb3dlciB1cCBzZXF1ZW5jZSAgICovCgkvKiAgICAgICAgICBkb2N1bWVudGVkIGluIFNEUkFNIGRhdGEgc2hlZXRzLiBUaGUgYWRkcmVzcyhlcykgdXNlZCAgICovCgkvKiAgICAgICAgICBmb3IgdGhpcyBwdXJwb3NlIG11c3Qgbm90IGJlIGNhY2hlYWJsZS4gICAgICAgICAgICAgICAgICovCgoJbGRyCXIzLAk9Q0ZHX0RSQU1fQkFTRQoJc3RyCXIyLAlbcjNdCglzdHIJcjIsCVtyM10KCXN0cglyMiwJW3IzXQoJc3RyCXIyLAlbcjNdCglzdHIJcjIsCVtyM10KCXN0cglyMiwJW3IzXQoJc3RyCXIyLAlbcjNdCglzdHIJcjIsCVtyM10KCXN0cglyMiwJW3IzXQoKCgkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCgkvKiBnZXQgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQoKCUBmZXRjaCBjdXJyZW50IG1kY25mZyB2YWx1ZQoJQAoJbGRyICAgICByMywgIFtyMSwgI01EQ05GR19PRkZTRVRdCgoJQGVuYWJsZSBzZHJhbSBiYW5rIDAgaWYgaW5zdGFsbGVkIChtdXN0IGRvIGZvciBhbnkgcG9wdWxhdGVkIGJhbmspCglACglvcnIgICAgIHIzLCAgcjMsICAjTURDTkZHX0RFMAoKCUB3cml0ZSBiYWNrIG1kY25mZywgZW5hYmxpbmcgdGhlIHNkcmFtIGJhbmsocykKCUAKCXN0ciAgICAgcjMsICBbcjEsICNNRENORkdfT0ZGU0VUXQoKCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCglsZHIgICAgIHIyLAk9Q0ZHX01ETVJTX1ZBTAoJc3RyICAgICByMiwJW3IxLCAjTURNUlNfT0ZGU0VUXQoKCgkvKiBXZSBhcmUgZmluaXNoZWQgd2l0aCBJbnRlbCdzIG1lbW9yeSBjb250cm9sbGVyIGluaXRpYWxpc2F0aW9uICAgICovCgoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIERpc2FibGUgKG1hc2spIGFsbCBpbnRlcnJ1cHRzIGF0IGludGVycnVwdCBjb250cm9sbGVyICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCmluaXRpcnFzOgoJbW92ICAgICByMSwgIzAJCS8qIGNsZWFyIGludC4gbGV2ZWwgcmVnaXN0ZXIgKElSUSwgbm90IEZJUSkgKi8KCWxkciAgICAgcjIsICA9SUNMUgoJc3RyICAgICByMSwgIFtyMl0KCglsZHIgICAgIHIxLCAgPUNGR19JQ01SX1ZBTCAvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGF0IHRoZSBjb250cm9sbGVyICovCglsZHIgICAgIHIyLCAgPUlDTVIKCXN0ciAgICAgcjEsICBbcjJdCgoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCmluaXRjbGtzOgoKCS8qIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2tzLCBhbmQgc2V0IHRoZSBjb3JlIGNsb2NrIGZyZXF1ZW5jeSAgKi8KCS8qIChoYXJkLWNvZGluZyBhdCAzOTguMTJNSHogZm9yIG5vdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCS8qIFR1cm4gT2ZmIEFMTCBvbi1jaGlwIHBlcmlwaGVyYWwgY2xvY2tzIGZvciByZS1jb25maWd1cmF0aW9uICAgICAgKi8KCS8qIE5vdGU6IFNlZSBsYWJlbCAnRU5BQkxFQ0xLUycgZm9yIHRoZSByZS1lbmFibGluZyAgICAgICAgICAgICAgICAgKi8KCWxkciAgICAgcjEsICA9Q0tFTgoJbW92ICAgICByMiwgICMwCglzdHIgICAgIHIyLCAgW3IxXQoKCgkvKiBkZWZhdWx0IHZhbHVlCQkJCQkJICAgICovCglsZHIgICAgIHIyLCA9KENDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTApICAvKiBERUZBVUxUOiB7MjAwLzIwMC8xMDB9ICovCgoJLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMSwgID1DQ0NSCglzdHIgICAgIHIyLCAgW3IxXQoKI2lmZGVmIFJUQwoJLyogZW5hYmxlIHRoZSAzMktoeiBvc2NpbGxhdG9yIGZvciBSVEMgYW5kIFBvd2VyTWFuYWdlciAgICAgICAgICAgICAqLwoKCWxkciAgICAgcjEsICA9T1NDQwoJbW92ICAgICByMiwgICNPU0NDX09PTgoJc3RyICAgICByMiwgIFtyMV0KCgkvKiBOT1RFOiAgc3BpbiBoZXJlIHVudGlsIE9TQ0MuT09LIGdldCBzZXQsIG1lYW5pbmcgdGhlIFBMTCAgICAgICAgICovCgkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjYwOgoJbGRyICAgICByMiwgW3IxXQoJYW5kcyAgICByMiwgcjIsICMxCgliZXEgICAgIDYwYgojZW5kaWYKCglAIFR1cm4gb24gbmVlZGVkIGNsb2NrcwoJQAp0ZXN0OgoJbGRyICAgICByMSwgID1DS0VOCglsZHIgICAgIHIyLCAgPUNGR19DS0VOX1ZBTAoJc3RyICAgICByMiwgIFtyMV0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogU2F2ZSBTRFJBTSBzaXplID8qLwoJbGRyCXIxLCA9RFJBTV9TSVpFCglzdHIJcjgsIFtyMV0KCgkvKiBGSVhNRSAqLwoKI2RlZmluZSBOT0RFQlVHCiNpZmRlZiBOT0RFQlVHCgkvKkRpc2FibGUgc29mdHdhcmUgYW5kIGRhdGEgYnJlYWtwb2ludHMgKi8KCW1vdglyMCwjMAoJbWNyCXAxNSwwLHIwLGMxNCxjOCwwICAvKiBpYmNyMCAqLwoJbWNyCXAxNSwwLHIwLGMxNCxjOSwwICAvKiBpYmNyMSAqLwoJbWNyCXAxNSwwLHIwLGMxNCxjNCwwICAvKiBkYmNvbiAqLwoKCS8qRW5hYmxlIGFsbCBkZWJ1ZyBmdW5jdGlvbmFsaXR5ICovCgltb3YJcjAsIzB4ODAwMDAwMDAKCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwoKI2VuZGlmCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogRW5kIGxvd2xldmVsX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgplbmRsb3dsZXZlbF9pbml0OgoKCW1vdiAgICAgcGMsIGxyCg==