LyoKICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlIAogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAyCU9taWNyb24gQ2V0aSBBQiwgRGFuaWVsIEVuZ3N0cvZtIDxkZW5haWVsQG9taWNyb24uc2U+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KCgkKLnNlY3Rpb24gLnRleHQKLmNvZGUzMgouZ2xvYmwgX3N0YXJ0Ci50eXBlIF9zdGFydCwgQGZ1bmN0aW9uCQouZ2xvYmwgX2kzODZib290X3N0YXJ0Cl9pMzg2Ym9vdF9zdGFydDoKX3N0YXJ0OgkJCiAgICAgICAgbW92bCAgICAkMHgxOCwlZWF4ICAgICAgICAgCS8qIExvYWQgb3VyIHNlZ2VtZW50IHJlZ2lzdGVzLCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGdkdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYnkgc3RhcnQxNi5TICovCiAgICAgICAgbW92dyAgICAlYXgsJWZzCgltb3Z3CSVheCwlZHMKICAgICAgICBtb3Z3ICAgICVheCwlZ3MKICAgICAgICBtb3Z3ICAgICVheCwlZXMKICAgICAgICBtb3Z3ICAgICVheCwlc3MKCQoJLyogV2UgY2FsbCBhIGZldyBmdW5jdGlvbnMgaW4gdGhlIGJvYXJkIHN1cHBvcnQgcGFja2FnZQoJICogc2luY2Ugd2UgaGF2ZSBubyBzdGFjayB5ZXQgd2UnbGwgaGF2ZSB0byB1c2UgJWVicAoJICogdG8gc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzICovCgkKCS8qIEVhcmx5IHBsYXRmb3JtIGluaXQgKHNldHVwIGdwaW8sIGV0YyApICovCgltb3YgICAgICRlYXJseV9ib2FyZF9pbml0X3JldCwgJWVicAoJam1wCWVhcmx5X2JvYXJkX2luaXQKZWFybHlfYm9hcmRfaW5pdF9yZXQ6CgkKCS8qIFRoZSBfX3BvcnQ4MCBlbnRyeS1wb2ludCBzaG91bGQgYmUgdXNhYmUgYnkgbm93ICovCgkvKiBzbyB3ZSB0cnkgdG8gaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDEsICVheCAgICAKCW1vdmwJJC5wcm9ncmVzczAsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MwOiAgCQoKCS8qIHNpemUgbWVtb3J5ICovCgltb3YJJG1lbV9pbml0X3JldCwgJWVicAoJam1wICAgICBtZW1faW5pdAkJCm1lbV9pbml0X3JldDoKCQoJLyogY2hlY2sgYW1tb3VudCBvZiBjb25maWd1cmVkIG1lbW9yeSAKCSAqICh3ZSBuZWVkIGF0bGVhc3QgYnNzIHN0YXJ0K2JzcyBzaXplK3N0YWNrIHNpemUpICovCQkKCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlY3ggICAgICAgIC8qIEJTUyBzdGFydCAqLwoJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWN4ICAgICAgICAgLyogQlNTIHNpemUgKi8JCglhZGRsCSRDRkdfU1RBQ0tfU0laRSwgJWVjeAoJY21wbAklZWN4LCAlZWF4IAoJamFlCW1lbV9vawoJCgkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4ODEsICVheCAgICAKCW1vdmwJJC5wcm9ncmVzczBhLCAlZWJwCglqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLnByb2dyZXNzMGE6ICAJCglqbXAgCWRpZQptZW1fb2s6CQoKCS8qIGluZGljYXRlIHByb2dyZXNzICovCgltb3Z3CSQweDAyLCAlYXggICAgCgltb3ZsCSQucHJvZ3Jlc3MxLCAlZWJwCglqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLnByb2dyZXNzMTogIAkKCgkvKiBjcmVhdGUgYSBzdGFjayBhZnRlciB0aGUgYnNzICovCiAgICAgICAgbW92bCAgICAkX2kzODZib290X2Jzc19zdGFydCwgJWVheAoJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWF4CglhZGRsCSRDRkdfU1RBQ0tfU0laRSwgJWVheAogICAgICAgIG1vdmwgICAgJWVheCwgJWVzcAoJCglwdXNobAkkMAoJcG9wbAklZWF4CgljbXBsCSQwLCAlZWF4CglqbmUJbm9fc3RhY2sKCXB1c2gJJDB4NTVhYTU1YWEKCXBvcGwJJWVieAoJY21wbAkkMHg1NWFhNTVhYSwgJWVieAoJamUJc3RhY2tfb2sKCm5vX3N0YWNrOgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDgyLCAlYXggICAgCgltb3ZsCSQucHJvZ3Jlc3MxYSwgJWVicAoJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi5wcm9ncmVzczFhOiAgCQoJam1wIGRpZQoJCgkKc3RhY2tfb2s6CQoJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDMsICVheCAgICAKCW1vdmwJJC5wcm9ncmVzczIsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MyOiAgCQoKCS8qIGNvcHkgZGF0YSBzZWN0aW9uIHRvIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICovCgltb3ZsCSRfaTM4NmJvb3Rfcm9tZGF0YV9kZXN0LCAlZWRpCSAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0LCAlZXNpCSAgLyogc291cmNlIGFkZHJlc3MgKi8KCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3NpemUsICVlY3ggICAgIC8qIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCgltb3ZsCSVlY3gsICVlYXgKCWFuZGwJJDMsICVlYXgKCWpueglkYXRhX2ZhaWwKCQoJc2hybAkkMiwgJWVjeAkgICAgICAgICAgICAgICAgICAvKiBjb3B5IDQgYnl0ZSBlYWNoIHRpbWUgKi8KCWNsZAkgCgljbXBsCSQwLCAlZWN4CglqZQlkYXRhX29rCQpkYXRhX3NlZ21lbnQ6CQoJbW92c2wJCQoJbG9vcAlkYXRhX3NlZ21lbnQKCWptcAlkYXRhX29rCmRhdGFfZmFpbDoKCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwoJbW92dwkkMHg4MywgJWF4ICAgIAoJbW92bAkkLnByb2dyZXNzMmEsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MyYTogIAkKCWptcCAJZGllCgpkYXRhX29rOgkKCgkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwoJbW92dwkkMHgwNCwgJWF4ICAgIAoJbW92bAkkLnByb2dyZXNzMywgJWVicAoJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi5wcm9ncmVzczM6ICAJCgoJLyogY2xlYXIgYnNzIHNlY3Rpb24gaW4gcmFtLCBzaXplIG11c3QgYmUgNC1ieXRlIGFsaWduZWQgICovCgltb3ZsCSRfaTM4NmJvb3RfYnNzX3N0YXJ0LCAlZWF4ICAgICAgICAvKiBCU1Mgc3RhcnQgKi8KCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCQoJbW92bAklZWN4LCAlZWF4CglhbmRsCSQzLCAlZWF4CglqbnoJYnNzX2ZhaWwKCXNocmwJJDIsICVlY3gJICAgICAgICAgICAgICAgICAgLyogY2xlYXIgNCBieXRlIGVhY2ggdGltZSAqLwoJY2xkCQkgICAgICAKCWNtcGwJJDAsICVlY3gKCWplCWJzc19vawkKYnNzOgkKCW1vdmwJJDAsICglZWRpKQoJYWRkCSQ0LCAlZWRpCQkJCglsb29wCWJzcwoJam1wIAlic3Nfb2sKCmJzc19mYWlsOgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDg0LCAlYXggICAgCgltb3ZsCSQucHJvZ3Jlc3MzYSwgJWVicAoJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi5wcm9ncmVzczNhOiAgCQoJam1wIAlkaWUKCmJzc19vazoJCgoJd2JpbnZkCSAKCgoJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDUsICVheCAgICAKCW1vdmwJJC5wcm9ncmVzczQsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3M0OgoKCWNhbGwJc3RhcnRfaTM4NmJvb3QgIC8qIEVudGVyLCBVLWJvb3QhICovCgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDg1LCAlYXggICAgCgltb3ZsCSQucHJvZ3Jlc3M0YSwgJWVicAoJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi5wcm9ncmVzczRhOgoKZGllOglobHQKCWptcAlkaWUKCWhsdCAgICAgICAgICAgICAgICAgICAgIAoKCg==