LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDUgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQpCRUdJTgpJRFNfRURJVCwJCSLG7cH9KCZFKSIKSURTX0RFRkFVTFQsCQkiseK6u8C4t84gvLPBpCgmRCkiCklEU19QUk9QRVJUSUVTLAkJIrzTvLooJlApIgpJRFNfTUFSSywJCSImTWFyayIKSURTX0NPUFksCQkiurm75ygmQykiCklEU19QQVNURSwJCSK62b+ps9ax4igmUCkiCklEU19TRUxFQ1RBTEwsCQkiuPC1ziC8scXDKCZTKSIKSURTX1NDUk9MTCwJCSK9usWpt9EoJlIpIgpJRFNfU0VBUkNILAkJIsOjseIoJkUpIgpJRFNfRk5UX0RJU1BMQVksCSKworCiwMcgsdvA2rTCICVsZCAgx8i8vyCzyrrxv6EgJWxkIMfIvL8gs/TAzLimILChwf20z7TZIgpJRFNfRk5UX1BSRVZJRVdfMSwJIsDMsM3AuiDF1726xq7A1LTPtNkiCklEU19GTlRfUFJFVklFV18yLAkiIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAivLPEoSAtILHiursgvLPBpCIKSURTX0RMR19USVRfQ1VSUkVOVCwgICAgIryzxKEgLSDH9sDnILyzwaQiCklEU19ETEdfVElUX0VSUk9SLAkivLPBpCC/obevIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsIAkivbrFqbiwILn2xtsgxamx4rTCILndteW9wyDDorq4tNkgsLCwxbOqIMS/vt/H1bTPtNkuIgoKSURTX0NNRF9JTlZBTElEX0VWRU5UX0lEICAid2luZWNvbnNvbGU6IMDMuqXGriBpZLimILrZv6kgs9bAuyC89iC++L3AtM+02VxuIgpJRFNfQ01EX0lOVkFMSURfQkFDS0VORCAgICAid2luZWNvbnNvbGU6IL/Dudm4o8H2IL7KwLoguem/o7XlXG4iCklEU19DTURfSU5WQUxJRF9PUFRJT04gICAgIndpbmVjb25zb2xlOiDAzMfYx9K89iC++LTCILjtt8kgtvPAziC/ybzHXG4iCklEU19DTURfQUJPVVQgICAgICAgICAgICAgICJXaW5lIMTcvNa/obytIMfBt86x17elIL3DwNtcbiIKSURTX0NNRF9MQVVOQ0hfRkFJTEVEICAgICAgIndpbmVjb25zb2xlOiDHrrHXuLIgJXMgvcPA2yC9x8bQLlxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIsDMILjtt8nAuiC/w7nZuKPB9iC+yr3AtM+02S5cbiIKCklEU19VU0FHRV9IRUFERVIgICAgICAgICAgICJcbrvnv+u5/TpcbiAgd2luZWNvbnNvbGUgW7/JvMddIDy47bfJPlxuXG6/ybzHOlxuIgpJRFNfVVNBR0VfQkFDS0VORCAgICAgICAgICAiICAtLWJhY2tlbmQ9e3VzZXJ8bmN1cnNlc30gILvnv+vA2rChILv1IMOiwLsgv60gsM3AzsH2LFxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzsKEgV2luZSDE3LzWw7O3syDH9sDnIMXNucyzzr+hICCzqsW4s74gsM3AzsH2ILyxxcNcbiIKSURTX1VTQUdFX0NPTU1BTkQgICAgICAgICAgIiAgPLjtt8k+ICAgICAgICAgICAgICAgICBUaGUgV2luZSDHwbfOsde3pcC6IMTcvNbAuyDF68fYvK0gvcPA27XKXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbr+5OlxuICB3aW5lY29uc29sZSBjbWRcbldpbmUgxNy81r+hvK0gV2luZSC47bfJIMfBt9LHwcauIL3DwNtcblxuIgoKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIL/JvMcgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICLEv7ytIMWpseIiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIsDbsNQoJlMpIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIsHfsKMoJk0pIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICLFqbDUKCZMKSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLEwcaut9EiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIsbLvvcguN60uiIsIC0xLCA3OSwgMjMsIDQwLCAxMAoJQVVUT0NIRUNLQk9YICLEwcaut9EoJkMpIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICK9rMfBxq4oJkgpIiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICK6/LilIMbtwf0iLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAisKG0ySgmRSkiLCBJRENfT1BUX1FVSUNLX0VESVQsIDEyOSwgNDMsIDYwLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK47bfJIMj3vbrF5LiuIiwgLTEsIDEwLCA1NywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICK02b3DILrOuKO0wiC47bfJwMcgsLm89igmTikgOiIsIC0xLCAxNCwgNjcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDkyLCA2OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAitc65+CAgwaawxSgmUikiLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNjcsIDUwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgsduywyAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJTFRFWFQgIrHbssMoJkYpIiwgLTEsIDUsIDUsIDI0LCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9GT05ULCA1LCAxOCwgOTAsIDQyLCBMQlNfU09SVHxXU19WU0NST0xMCglMVEVYVCAiu/a78ygmQykiLCAtMSwgMTAwLCA1LCA1MCwgOAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9GRywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCAxOCwgNDgsIDE2CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0JLLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDQwLCA0OCwgMTYKCUxURVhUICLFqbHiOygmUykiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3NiwgODAsIDE4Cn0KCklERF9DT05GSUcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgvLPBpCAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIrn2xtsgwbgiLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIrPKuvEoJlcpIDoiLCAtMSwgMTQsIDI1LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9XSURUSCwgNjgsIDIzLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAis/TAzCgmSCkgOiIsIC0xLCAxNCwgMzksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX0hFSUdIVCwgNjgsIDM3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICLDoiDFqbHiIiwgLTEsIDEwLCA1NSwgMTAwLCA0MgoJTFRFWFQgIrPKuvEoJkkpIDoiLCAtMSwgMTQsIDY5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fV0lEVEgsIDY4LCA2NywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICKz9MDMKCZFKSA6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAix66x17iywMcgs6EiLCAtMSwgMTE1LCAxMSwgODAsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICLE3LzWILTdseIoJkMpIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3NSwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiv6G18LzHIiwgLTEsIDExNSwgNTUsIDgwLCA0MgoJQ09NQk9CT1ggSURDX0NORl9FRElUSU9OX01PREUsIDExOSwgNjksIDc1LCAyMCwgQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKfQoKSUREX1NBVkVfU0VUVElOR1MgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMjAsIDIwLCAxNDAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiIMTcvNYguMWws7qvvPYiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIiIsIC0xLCAxMCwgMTAsIDEyMCwgMzEsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIrOqwd/AxyC8vLzHwLsgwKfH2CC8s8GkILq4wbgiLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICK/wMH3IMf2wOfAxyC8vLzHuLgguq+w5iIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxMTAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiyK7AziIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDY1LCA0NSwgMzUsIDEyCn0K