LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyogbm93IHNldHVwIHRoZSBHZW5lcmFsIHB1cnBvc2UgYnVzIHRvIGdpdmUgdXMgYWNjZXNzIHRvIHRoZSBMRURzLgogKiBXZSBjYW4gdGhlbiB1c2UgdGhlIGxlZHMgdG8gZGlzcGxheSBzdGF0dXMgaW5mb3JtYXRpb24uCiAqLwoKc2M1MjBfY2RwX3JlZ2lzdGVyczoKLyogc2l6ZSAgICBvZmZzZXQgICAgICAgIHZhbHVlICovCi53b3JkIDEgOyAud29yZCAweDA0MCA7IC5sb25nIDB4MDAgICAgICAgLyogU0RSQU0gYnVmZmVyIGNvbnRyb2wgKi8KLndvcmQgMiA7IC53b3JkIDB4YzA4IDsgLmxvbmcgMHgwMDAxICAgICAvKiBHUCBDUyBvZmZzZXQgKi8KLndvcmQgMiA7IC53b3JkIDB4YzA5IDsgLmxvbmcgMHgwMDAzICAgICAvKiBHUCBDUyB3aWR0aCAqLwoud29yZCAyIDsgLndvcmQgMHhjMGEgOyAubG9uZyAweDAwMDEgICAgIC8qIEdQIENTIHdpZHRoICovCi53b3JkIDIgOyAud29yZCAweGMwYiA7IC5sb25nIDB4MDAwMyAgICAgLyogR1AgUkQgcHVsc2Ugd2lkdGggKi8KLndvcmQgMiA7IC53b3JkIDB4YzBjIDsgLmxvbmcgMHgwMDAxICAgICAvKiBHUCBSRCBvZmZzZSAqLwoud29yZCAyIDsgLndvcmQgMHhjMGQgOyAubG9uZyAweDAwMDMgICAgIC8qIEdQIFdSIHB1bHNlIHdpZHRoICovCi53b3JkIDIgOyAud29yZCAweGMwZSA7IC5sb25nIDB4MDAwMSAgICAgLyogR1AgV1Igb2Zmc2V0ICovCi53b3JkIDIgOyAud29yZCAweGMyYyA7IC5sb25nIDB4MDAzZiAgICAgLyogR1BJTyBkaXJlY3Rpb25yZWcgMzEtMTYgKi8KLndvcmQgMiA7IC53b3JkIDB4YzJhIDsgLmxvbmcgMHhlMDAwICAgICAvKiBHUElPIGRpcmVjdGlvbnJlZyAxNS0wICovCi53b3JkIDIgOyAud29yZCAweGMyMiA7IC5sb25nIDB4ZmZjMCAgICAgLyogR1BJTyBwaW4gZnVuY3Rpb24gMzEtMTYgcmVnICovCi53b3JkIDIgOyAud29yZCAweGMyMCA7IC5sb25nIDB4MWZmZiAgICAgLyogR1BJTyBwaW4gZnVuY3Rpb24gMTUtMCByZWcgKi8KLndvcmQgMCA7IC53b3JkIDB4MDAwIDsgLmxvbmcgMHgwMAoKLyogYm9hcmQgZWFybHkgaW50aWFsaXphdGlvbiAqLwouZ2xvYmwgZWFybHlfYm9hcmRfaW5pdAplYXJseV9ib2FyZF9pbml0OgoJbW92bCAgICAkc2M1MjBfY2RwX3JlZ2lzdGVycywlZXNpCmluaXRfbG9vcDoKCW1vdmwgICAgJDB4ZmZmZWYwMDAsJWVkaSAgICAgLyogTU1DUiBiYXNlIHRvIGVkaSAqLwoJbW92dwkoJWVzaSksICVieCAgICAgICAgICAvKiBsb2FkIHNpemUgdG8gYnggKi8KCWNtcHcJJDAsICVieCAgICAgICAgICAgICAgLyogaWYgc2l6ZSBpcyAwIHdlJ3JlIGRvbmUgKi8KCWplCWRvbmUKCXhvcmwJJWVkeCwlZWR4Cgltb3Z3CTIoJWVzaSksICVkeCAgICAgICAgLyogbG9hZCBNTUNSIG9mZnNldCB0byBkeCAqLwoJYWRkbAklZWR4LCAlZWRpICAgICAgICAgIC8qIGFkZCBvZmZzZXQgdG8gYmFzZSBpbiBlZGkgKi8KCW1vdmwJNCglZXNpKSwgJWVheCAgICAgICAvKiBsb2FkIHZhbHVlIGluIGVheCAqLwoJY21wdwkkMSwgJWJ4CglqZQlieXRlICAgICAgICAgICAgICAgICAvKiBieXRlIG9wPyAqLwoJY21wdwkkMiwgJWJ4CglqZQl3b3JkICAgICAgICAgICAgICAgICAvKiB3b3JkIG9wPyAqLwoJbW92bAklZWF4LCAoJWVkaSkgICAgICAgICAvKiBtdXN0IGJlIGxvbmcsIHRoZW4gKi8KCWptcAluZXh0CmJ5dGU6ICAgbW92YiAgICAlYWwsKCVlZGkpCglqbXAJbmV4dAp3b3JkOgltb3Z3CSVheCwoJWVkaSkKbmV4dDoJYWRkbAkkOCwgJWVzaSAgICAgICAgICAgICAvKiBhZHZhbmNlIGVzaSAqLwoJam1wCWluaXRfbG9vcAoKCS8qIGxpZ2h0IGFsbCBsZWRzICovCmRvbmU6ICAgbW92bCAgICAkMHhmZmZlZmMzMiwlZWR4Cgltb3Z3ICAgICQwMDAwLCglZWR4KQoKCWptcCAJKiVlYnAJCSAgICAgLyogcmV0dXJuIHRvIGNhbGxlciAqLwoKCi5nbG9ibCBfX3Nob3dfYm9vdF9wcm9ncmVzcwpfX3Nob3dfYm9vdF9wcm9ncmVzczoKCW1vdmwgICAgJDB4ZmZmZWZjMzIsJWVkeAoJeG9ydyAgICAkMHhmZmZmLCAlYXgKCW1vdncgICAgJWF4LCglZWR4KQoJam1wCSolZWJwCg==