LyoKICogIE5vdGVwYWQgKEZyZW5jaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBUcmFuc2xhdGlvbiBieSBMYXVyZW50IEJ1ZmZsZXIgPGxhdXJlbnRAYmx1ZXdpbi5jaD4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCnsKIFBPUFVQICImRmljaGllciIgewogIE1FTlVJVEVNICImTm91dmVhdS4uLiIsIDB4MTAwCiAgTUVOVUlURU0gIiZPdXZyaXIiLCAweDEwMQogIE1FTlVJVEVNICImRW5yZWdpc3RyZXIiLCAweDEwMgogIE1FTlVJVEVNICJFbnJlZ2lzdHJlciAmc291cy4uLiIsIDB4MTAzCiAgTUVOVUlURU0gIkltJnByaW1lciIsIDB4MTA0CiAgTUVOVUlURU0gIiZNaXNlIGVuIHBhZ2UuLi4iLCAweDEwNQogIE1FTlVJVEVNICImQ29uZmlndXJhdGlvbiBkZSBsJ2ltcHJpbWFudGUuLi4iLCAweDEwNgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImUXVpdHRlciIsIDB4MTA4CiB9ClBPUFVQICImRWRpdGlvbiIgewogIE1FTlVJVEVNICImQW5udWxlclx0Q3RybCtaIiwgMHgxMTAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ28mdXBlclx0Q3RybCtYIiwgMHgxMTEKICBNRU5VSVRFTSAiJkNvcGllclx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiJkNvbGxlclx0Q3RybCtWIiwgMHgxMTMKICBNRU5VSVRFTSAiJkVmZmFjZXJcdERlbCIsIDB4MTE0CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlRvdXQgJnPpbGVjdGlvbm5lciIsIDB4MTE2CiAgTUVOVUlURU0gIiZIZXVyZS9EYXRlXHRGNSIsIDB4MTE3CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZSZXRvdXIg4CBsYSBsaWduZSIsIDB4MTE5CiB9ClBPUFVQICImUmVjaGVyY2hlciIgewogIE1FTlVJVEVNICImUmVjaGVyY2hlciIsIDB4MTIwCiAgTUVOVUlURU0gIiZTdWl2YW50XHRGMyIsIDB4MTIxCiB9ClBPUFVQICImQWlkZSIgewogIE1FTlVJVEVNICImU29tbWFpcmUiLCAweDEzMAogIE1FTlVJVEVNICImUmVjaGVyY2hlci4uLiIsIDB4MTMxCiAgTUVOVUlURU0gIiZBaWRlIHN1ciBsJ2FpZGUiLCAweDEzMgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmby4uLiIgewogICBNRU5VSVRFTSAiJkxpY2VuY2UiLCAweDEzNQogICBNRU5VSVRFTSAiJkFVQ1VORSBHQVJBTlRJRSIsIDB4MTM2CiAgIE1FTlVJVEVNICImQSBwcm9wb3MgZGUgV2luZSIsIDB4MTM3CiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQXyBESUFMT0cgMCwgMCwgMjI1LCA5NQpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJQYWdlIFNldHVwIgp7CkxURVhUICAgICImRW4tdOp0ZToiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUGllZCBkZSBwYWdlOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ2VzOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkdhdWNoZToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkhhdXQ6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEcm9pdGU6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCYXM6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAweDE1MSwgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgMHgxNTIsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBaWRlIiwgICAgICAgMHgxNTMsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwJIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwJIlBhZ2UgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsCQkiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsCQkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLAkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsCQkJCQkiTm90ZXBhZCIKU1RSSU5HX0VSUk9SLAkJCQkJIkVSUkVVUiIKU1RSSU5HX1dBUk5JTkcsCQkJCQkiQVRURU5USU9OIgpTVFJJTkdfSU5GTywJCQkJCSJJbmZvcm1hdGlvbiIKClNUUklOR19VTlRJVExFRCwJCQkJIihzYW5zLXRpdHJlKSIKClNUUklOR19BTExfRklMRVMsCQkJCSJUb3VzIGZpY2hpZXJzICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsCQkJIkZpY2hpZXJzIHRleHRlICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsCQkJCSJMZSBmaWNoaWVyICclcycgZXN0IHRyb3AgZ3JhbmQgcG91ciBsZSBibG9jLW5vdGVzLlxuIFwKVmV1aWxsZXogdXRpbGlzZXIgdW4gYXV0cmUg6WRpdGV1ci4iClNUUklOR19OT1RFWFQsCQkJCQkiVm91cyBuJ2F2ZXogcGFzIGVudHLpIGRlIHRleHRlLiBWZXVpbGxleiB0YXBlciBxdWVscXVlIGNob3NlIGV0IHJlY29tbWVuY2VyXApcbiIKU1RSSU5HX0RPRVNOT1RFWElTVCwJCQkiTGUgZmljaGllciAnJXMnXG5cJ2V4aXN0ZSBwYXMuXG5cbiBcClZvdWxleiB2b3VzIGNy6WVyIHVuIG5vdXZlYXUgZmljaGllciA/IgpTVFJJTkdfTk9UU0FWRUQsCQkJCSJMZSBmaWNoaWVyICclcydcbmEg6XTpIG1vZGlmaelcblxuIFwKVm91bGV6IHZvdXMgZW5yZWdpc3RyZXIgdm9zIG1vZGlmaWNhdGlvbnMgPyIKU1RSSU5HX05PVEZPVU5ELAkJCQkiJyVzJyBub24gdHJvdXbpLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksCQkJIlBhcyBhc3NleiBkZSBt6W1vaXJlIHBvdXIgZmluaXIgY2V0dGUgdOJjaGUuICBcCnRhc2suIFxuIEZlcm1leiB1bmUgb3UgcGx1c2llciBhcHBsaWNhdGlvbnMgcG91ciBsaWLpcmVyXG5cCmRlIGxhIG3pbW9pcmUuIgoKfQo=