LyoKICogIE5vdGVwYWQgKEZyZW5jaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBUcmFuc2xhdGlvbiBieSBMYXVyZW50IEJ1ZmZsZXIgPGxhdXJlbnRAYmx1ZXdpbi5jaD4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCnsKIFBPUFVQICImRmljaGllciIgewogIE1FTlVJVEVNICImTm91dmVhdS4uLiIsIDB4MTAwCiAgTUVOVUlURU0gIiZPdXZyaXIiLCAweDEwMQogIE1FTlVJVEVNICImRW5yZWdpc3RyZXIiLCAweDEwMgogIE1FTlVJVEVNICJFbnJlZ2lzdHJlciAmc291cy4uLiIsIDB4MTAzCiAgTUVOVUlURU0gIkltJnByaW1lciIsIDB4MTA0CiAgTUVOVUlURU0gIiZNaXNlIGVuIHBhZ2UuLi4iLCAweDEwNQogIE1FTlVJVEVNICImQ29uZmlndXJhdGlvbiBkZSBsJ2ltcHJpbWFudGUuLi4iLCAweDEwNgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImUXVpdHRlciIsIDB4MTA4CiB9ClBPUFVQICImRWRpdGlvbiIgewogIE1FTlVJVEVNICImQW5udWxlclx0Q3RybCtaIiwgMHgxMTAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ28mdXBlclx0Q3RybCtYIiwgMHgxMTEKICBNRU5VSVRFTSAiJkNvcGllclx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiJkNvbGxlclx0Q3RybCtWIiwgMHgxMTMKICBNRU5VSVRFTSAiJkVmZmFjZXJcdERlbCIsIDB4MTE0CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlRvdXQgJnPpbGVjdGlvbm5lciIsIDB4MTE2CiAgTUVOVUlURU0gIiZIZXVyZS9EYXRlXHRGNSIsIDB4MTE3CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZSZXRvdXIg4CBsYSBsaWduZSIsIDB4MTE5CiB9ClBPUFVQICImUmVjaGVyY2hlciIgewogIE1FTlVJVEVNICImUmVjaGVyY2hlciIsIDB4MTIwCiAgTUVOVUlURU0gIiZTdWl2YW50XHRGMyIsIDB4MTIxCiB9ClBPUFVQICImQWlkZSIgewogIE1FTlVJVEVNICImU29tbWFpcmUiLCAweDEzMAogIE1FTlVJVEVNICImUmVjaGVyY2hlci4uLiIsIDB4MTMxCiAgTUVOVUlURU0gIiZBaWRlIHN1ciBsJ2FpZGUiLCAweDEzMgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmby4uLiIgewogICBNRU5VSVRFTSAiJkxpY2VuY2UiLCAweDEzNQogICBNRU5VSVRFTSAiJkFVQ1VORSBHQVJBTlRJRSIsIDB4MTM2CiAgIE1FTlVJVEVNICImQSBwcm9wb3MgZGUgV2luZSIsIDB4MTM3CiAgfQogfQp9IAoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUF8gRElBTE9HIDAsIDAsIDIyNSwgOTUKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiSGVsdiIKQ0FQVElPTiAiUGFnZSBTZXR1cCIKewpMVEVYVCAgICAiJkVuLXTqdGU6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlBpZWQgZGUgcGFnZToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmdlczoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZHYXVjaGU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZIYXV0OiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRHJvaXRlOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQmFzOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGVyIiwgICAgIDB4MTUyLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQWlkZSIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsCSImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsCSJQYWdlICZzIiAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLAkJIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLAkiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLAkJIjI1IG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwJIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELAkJCQkJIk5vdGVwYWQiClNUUklOR19FUlJPUiwJCQkJCSJFUlJFVVIiClNUUklOR19XQVJOSU5HLAkJCQkJIkFUVEVOVElPTiIKU1RSSU5HX0lORk8sCQkJCQkiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsCQkJCSIoc2Fucy10aXRyZSkiCgpTVFJJTkdfQUxMX0ZJTEVTLAkJCQkiVG91cyBmaWNoaWVycyAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULAkJCSJGaWNoaWVycyB0ZXh0ZSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLAkJCQkiTGUgZmljaGllciAnJXMnIGVzdCB0cm9wIGdyYW5kIHBvdXIgbGUgYmxvYy1ub3Rlcy5cbiBcClZldWlsbGV6IHV0aWxpc2VyIHVuIGF1dHJlIOlkaXRldXIuIgpTVFJJTkdfTk9URVhULAkJCQkJIlZvdXMgbidhdmV6IHBhcyBlbnRy6SBkZSB0ZXh0ZS4gVmV1aWxsZXogdGFwZXIgcXVlbHF1ZSBjaG9zZSBldCByZWNvbW1lbmNlclwKXG4iClNUUklOR19ET0VTTk9URVhJU1QsCQkJIkxlIGZpY2hpZXIgJyVzJ1xuXCdleGlzdGUgcGFzLlxuXG4gXApWb3VsZXogdm91cyBjcullciB1biBub3V2ZWF1IGZpY2hpZXIgPyIKU1RSSU5HX05PVFNBVkVELAkJCQkiTGUgZmljaGllciAnJXMnXG5hIOl06SBtb2RpZmnpXG5cbiBcClZvdWxleiB2b3VzIGVucmVnaXN0cmVyIHZvcyBtb2RpZmljYXRpb25zID8iClNUUklOR19OT1RGT1VORCwJCQkJIiclcycgbm9uIHRyb3V26S4iClNUUklOR19PVVRfT0ZfTUVNT1JZLAkJCSJQYXMgYXNzZXogZGUgbeltb2lyZSBwb3VyIGZpbmlyIGNldHRlIHTiY2hlLiAgXAp0YXNrLiBcbiBGZXJtZXogdW5lIG91IHBsdXNpZXIgYXBwbGljYXRpb25zIHBvdXIgbGli6XJlclxuXApkZSBsYSBt6W1vaXJlLiIKCn0KCg==