LyoKICogV2luZU1pbmUKICogRGFuaXNoIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDggSmVucyBBbGJyZXRzZW4gPGplbnNAYWxicmV0c2VuLmRrPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJNaW5lcnlkZGVyIgogICAgIElEU19OT0JPRFksICAiSW5nZW4iCiAgICAgSURTX0FCT1VULCAgICJPcGhhdnNyZXQgMjAwMCB0aWxo+HJlciBKb3NodWEgVGhpZWxlbiIKfQoKTUVOVV9XSU5FTUlORSBNRU5VIERJU0NBUkRBQkxFCnsKICAgIFBPUFVQICImSW5kc3RpbGxpbmdlciIgewogICAgICAgIE1FTlVJVEVNICImTnl0IHNwaWxcdEYyIiwgICBJRE1fTkVXCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZCcnVnIHNw+HJnc23lbHN0ZWduIixJRE1fTUFSS1EKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiTnkmYmVneW5kZXIiLCAgICAgSURNX0JFR0lOTkVSCiAgICAgICAgTUVOVUlURU0gIiZBdmFuY2VyZXQiLCAgICAgIElETV9BRFZBTkNFRAogICAgICAgIE1FTlVJVEVNICImRWtzcGVydCIsICAgICAgICBJRE1fRVhQRVJUCiAgICAgICAgTUVOVUlURU0gIkImcnVnZXJkZWZpbmVyZXQiIElETV9DVVNUT00KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQWZzbHV0JnRcdEFsdCtYIiwgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICImSGrmbHAiIHsKICAgICAgICBNRU5VSVRFTSAiJkJlZHN0ZSB0aWRlciIsICAgSURNX1RJTUVTCiAgICAgICAgTUVOVUlURU0gIiZPbSIsICAgICAgICAgICAgIElETV9BQk9VVAogICAgfQp9CgpETEdfVElNRVMgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiQmVkc3RlIHRpZGVyIgp7CiAgICBHUk9VUEJPWCAgICAgICAgIkJlZHN0ZSB0aWRlciIsIElESUdOT1JFLCAgMTAsICAxMCwgMTQwLCAgNDUKICAgIExURVhUICAgICAgICAgICAiTnliZWd5bmRlciIsICAgSURJR05PUkUsICAyMCwgIDIwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJBdmFuY2VyZXQiLCAgICBJRElHTk9SRSwgIDIwLCAgMzAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIkVrc3BlcnQiLCAgICAgIElESUdOT1JFLCAgMjAsICA0MCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUxLCAgNzAsICAyMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUyLCAgNzAsICAzMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUzLCAgNzAsICA0MCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUxLCAgOTAsICAyMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUyLCAgOTAsICAzMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUzLCAgOTAsICA0MCwgIDU1LCAgIDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICBJRE9LLCAgNTUsICA2MCwgIDUwLCAgMTUKfQoKRExHX0NPTkdSQVRTIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA2MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJUaWxseWtrZSEiCnsKICAgIExURVhUICAgICAgICAgICAiSW5kdGFzdCBkaXQgbmF2biIsIElESUdOT1JFLCAgMTAsICAxMCwgMTUwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQ19FRElUTkFNRSwgIDI1LCAgMjAsIDExMCwgIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgICAgICBJRE9LLCAgNjAsICA0MCwgIDQwLCAgMTUKfQoKRExHX0NVU1RPTSBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDEwMCwgMTAwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIkJydWdlcmRlZmluZXJldCBzcGlsIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlLma2tlciIsICAgSURJR05PUkUsICAgNSwgICA1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJLb2xvbm5lciIsIElESUdOT1JFLCAgIDUsICAzNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiTWluZXIiLCAgICBJRElHTk9SRSwgICA1LCAgNjUsICAzMCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgSURDX0VESVRST1dTLCAgIDUsICAxNSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgICAgICAgIElEQ19FRElUQ09MUywgICA1LCAgNDUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgICAgICAgICBJRENfRURJVE1JTkVTLCAgIDUsICA3NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgIElET0ssICAgICAgNDAsICAzMCwgIDUwLCAgMTUKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxsZXIiLCBJRENBTkNFTCwgIDQwLCAgNTAsICA1MCwgIDE1Cn0K