LyoKICogTkVULkVYRSAtIFdpbmUtY29tcGF0aWJsZSBuZXQgcHJvZ3JhbQogKiBQb3J0dWd1ZXNlIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IFJpY2FyZG8gRmlsaXBlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZXMuaCIKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQp7CiAgICBTVFJJTkdfVVNBR0UsICJBIHNpbnRheGUgZGVzdGUgY29tYW5kbyDpOlxuXG5ORVQgWyBIRUxQIHwgU1RBUlQgfCBTVE9QIHwgVVNFIF1cbiIKICAgIFNUUklOR19TVEFSVF9VU0FHRSwgIkVzcGVjaWZpcXVlIG8gbm9tZSBkbyBzZXJ2aedvIHBhcmEgaW5pY2lhci5cbiIKICAgIFNUUklOR19TVE9QX1VTQUdFLCAiRXNwZWNpZmlxdWUgbyBub21lIGRvIHNlcnZp528gcGFyYSBwYXJhci5cbiIKICAgIFNUUklOR19TVE9QX0RFUCwgIkEgcGFyYXIgbyBzZXJ2aedvIGRlcGVuZGVudGU6ICVzXG4iCiAgICBTVFJJTkdfQ0FOVF9TVE9QLCAiTuNvIGZvaSBwb3Nz7XZlbCBwYXJhciBvIHNlcnZp528gJXNcbiIKICAgIFNUUklOR19OT19TQ00sICJO428gZm9pIHBvc3PtdmVsIGVudHJlZ2FyIG8gaGFuZGxlIGFvIGNvbnRyb2xhZG9yIGRlIHNlcnZp529zLlxuIgogICAgU1RSSU5HX05PX1NWQ0hBTkRMRSwgIk7jbyBmb2kgcG9zc+12ZWwgZW50cmVnYXIgbyBoYW5kbGUgYW8gc2Vydmnnby5cbiIKICAgIFNUUklOR19TVEFSVF9TVkMsICJPIHNlcnZp528gJXMgZXN04SBhIGluaWNpYXIuXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDX1NVQ0NFU1MsICJPIHNlcnZp528gJXMgZm9pIGluaWNpYWRvIGNvbSBzdWNlc3NvLlxuIgogICAgU1RSSU5HX1NUQVJUX1NWQ19GQUlMLCAiTyBzZXJ2aedvICVzIGZhbGhvdSBhbyBpbmljaWFyLlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDLCAiTyBzZXJ2aedvICVzIGVzdOEgYSBwYXJhci5cbiIKICAgIFNUUklOR19TVE9QX1NWQ19TVUNDRVNTLCAiTyBzZXJ2aedvICVzIGZvaSBwYXJhZG8gY29tIHN1Y2Vzc28uXG4iCiAgICBTVFJJTkdfU1RPUF9TVkNfRkFJTCwgIk8gc2VydmnnbyAlcyBmYWxob3UgYSBwYXJhci5cbiIKICAgIFNUUklOR19IRUxQX1VTQUdFLCAiQSBzaW50YXhlIGRlc3RlIGNvbWFuZG8g6TpcblxuTkVUIEhFTFAgY29tbWFuZFxuICAgIC1vci1cbk5FVCBjb21tYW5kIC9IRUxQXG5cbiJcCiAgICAgICAgICAgICAgICAgICAgICAgIiAgIE9zIGNvbWFuZG9zIGRpc3Bvbu12ZWlzIHPjbzpcbiAgIE5FVCBIRUxQICAgIE5FVCBTVEFSVCAgICBORVQgU1RPUCAgICBORVQgVVNFXG4iCiAgICBTVFJJTkdfTk9fRU5UUklFUywgIk7jbyBo4SBlbnRyYWRhcyBuYSBsaXN0YS5cbiIKICAgIFNUUklOR19VU0VfSEVBREVSLCAiXG5Fc3RhZG8gIExvY2FsICAgUmVtb3RvXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgIFNUUklOR19VU0VfRU5UUlksICAiJXMgICAgICAlUyAgICAgICVTICAgICAgUmVjdXJzb3MgZGlzcG9u7XZlaXM6ICVsdVxuIgp9Cg==