LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA2IFZpdGFsaXkgTWFyZ29sZW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIE1FTlVJVEVNICImwe7r/Pjo5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgTUVOVUlURU0gIibM5evq6OUg5+3g9+roIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgogICAgTUVOVUlURU0gIibR7+jx7uoiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCiAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBQT1BVUCAiJs/w7vHs7vLwIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImwe7r/Pjo5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgICAgICAgICBNRU5VSVRFTSAiJszl6+ro5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCiAgICAgICAgICAgIE1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwogICAgICAgICAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAi0+/u8P/k7vfo8vwgJuft4Pfq6CIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJujs5e3oIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJvLo7/MiLAkweDMyCS8qIGNvbHVtbiAyICovCiAgICAgICAgICAgIE1FTlVJVEVNICLP7iAm8ODn7OXw8yIsCTB4MzEJLyogLi4uICovCiAgICAgICAgICAgIE1FTlVJVEVNICLP7iAm5ODy5SIsCTB4MzMKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImwOLy7uzg8uj35fHq6CIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNICLCJvvw7uLt//L8IOft4Pfq6CIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIs4m4e3u4ujy/CIsCQlGQ0lETV9TSFZJRVdfUkVGUkVTSAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImwvHy4OLo8vwiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAogICAgICAgIE1FTlVJVEVNICLC8fLg4ujy/CAm//Dr++oiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICLR7ufk4PL8IgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImz+Dv6uAiLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgogICAgICAgICAgICBNRU5VSVRFTSAiJt/w6/vqIiwJCUZDSURNX1NIVklFV19ORVdMSU5LCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR4u4m6fHy4uAiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKICAgIEVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibP8O7i7uTt6OoiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKICAgICAgICBNRU5VSVRFTSAiJs7y6vD78vwiLAkJRkNJRE1fU0hWSUVXX09QRU4KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsL78OXn4PL8IiwJCUZDSURNX1NIVklFV19DVVQKICAgICAgICBNRU5VSVRFTSAiJsru7+jw7uLg8vwiLAkJRkNJRE1fU0hWSUVXX0NPUFkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAi0e7n5ODy/CAm//Dr++oiLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwogICAgICAgIE1FTlVJVEVNICIm0+Tg6+zy/CIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIs/l8OXoJuzl7e7i4PL8IiwJRkNJRE1fU0hWSUVXX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR4u4m6fHy4uAiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKICAgIEVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIs7h5+7wIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIERFRlBVU0hCVVRUT04gIsTgIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICLO8uzl7ejy/CIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogICAgTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiAgICBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKCSAgICAgICAgVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJICAgICAgICBXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJICAgICAgICA0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIs4gJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICLQ4Ofw4OHu8vfo6uggV2luZToiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKIExURVhUICLC4uXk6PLlIOjs/yDv8O7j8ODs7PssIO/g7+roLCDk7urz7OXt8uAg6OvoIPDl8fPw8SDI7fLl8O3l8uAsIOggV2luZSDu8urw7uXyIOj1LiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImzvLq8Pvy/DoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAizvLs5e3gIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAizuEm5+7wLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAvKiBjb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcgKi8KICAgIElEU19TSFZfQ09MVU1OMQkJIsjs/yIKICAgIElEU19TSFZfQ09MVU1OMgkJItDg5+zl8CIKICAgIElEU19TSFZfQ09MVU1OMwkJItLo7yIKICAgIElEU19TSFZfQ09MVU1ONAkJIsjn7OXtuO0iCiAgICBJRFNfU0hWX0NPTFVNTjUJCSLA8vDo4fPy+yIKICAgIElEU19TSFZfQ09MVU1ONgkJIs/u6+376SDu4fq47CIKICAgIElEU19TSFZfQ09MVU1ONwkJItHi7uHu5O3uIgogICAgSURTX1NIVl9DT0xVTU44CQkiyOz/IgogICAgSURTX1NIVl9DT0xVTU45CQkiyu7s7OXt8uDw6OkiCiAgICBJRFNfU0hWX0NPTFVNTjEwCQkiwuvg5OXr5fYiCiAgICBJRFNfU0hWX0NPTFVNTjExCQkiw/Dz7+/gIgoKICAgIC8qIHNwZWNpYWwgZm9sZGVycyAqLwogICAgSURTX0RFU0tUT1AJCQki0ODh7vfo6SDx8u7rIgogICAgSURTX01ZQ09NUFVURVIJCSLM7ukg6u7s7/z+8uXwIgoKICAgIC8qIGNvbnRleHQgbWVudXMgKi8KICAgIElEU19WSUVXX0xBUkdFCQkiJsHu6/z46OUg5+3g9+roIgogICAgSURTX1ZJRVdfU01BTEwJCSImzOXr6ujlIOft4Pfq6CIKICAgIElEU19WSUVXX0xJU1QJCSIm0e/o8e7qIgogICAgSURTX1ZJRVdfREVUQUlMUwkJIibP7uTw7uHt7iIKICAgIElEU19TRUxFQ1QJCQkiJsL74fDg8vwiCiAgICBJRFNfT1BFTgkJCSImzvLq8Pvy/CIKCiAgICBJRFNfQ1JFQVRFRk9MREVSX0RFTklFRAkizeXi7ufs7ubt7iDx7ufk4PL8IO/g7+rzIC0g7eXyIO/u6+3u7O736OkuIgogICAgSURTX0NSRUFURUZPTERFUl9DQVBUSU9OCSLO+Ojh6uAg4u4g4vDl7P8g8e7n5ODt6P8g7+Dv6ugiCiAgICBJRFNfREVMRVRFSVRFTV9DQVBUSU9OCSLP7uTy4uXw5uTl7ejlIPPk4Ovl7ej/IPTg6evgIgogICAgSURTX0RFTEVURUZPTERFUl9DQVBUSU9OCSLP7uTy4uXw5uTl7ejlIPPk4Ovl7ej/IO/g7+roIgogICAgSURTX0RFTEVURUlURU1fVEVYVAkJItPk4Ovo8vwgJyUxJz8iCiAgICBJRFNfREVMRVRFTVVMVElQTEVfVEVYVAki0+Tg6+jy/CD98ugg7uH85ery+yAoJTE/IgogICAgSURTX09WRVJXUklURUZJTEVfVEVYVCAiVGhpcyBmb2xkZXIgYWxyZWFkeSBjb250YWlucyBhIGZpbGUgY2FsbGVkICclMScuXG5cbkRvIHlvdSB3YW50IHRvIHJlcGxhY2UgaXQ/IgogICAgSURTX09WRVJXUklURUZJTEVfQ0FQVElPTgkiz+7k8uLl8Obk5e3o5SDn4Ozl7fsg9ODp6+AiCiAgICBJRFNfT1ZFUldSSVRFRk9MREVSX1RFWFQgIlRoaXMgZm9sZGVyIGFscmVhZHkgY29udGFpbnMgYSBmb2xkZXIgbmFtZWQgJyUxJy5cblxuIlwKCSAgICAiSWYgdGhlIGZpbGVzIGluIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyBmaWxlcyBpbiB0aGVcbiJcCgkgICAgInNlbGVjdGVkIGZvbGRlciB0aGV5IHdpbGwgYmUgcmVwbGFjZWQuIERvIHlvdSBzdGlsbCB3YW50IHRvIG1vdmUgb3IgY29weVxuIlwKCSAgICAidGhlIGZvbGRlcj8iCgogICAgLyogbWVzc2FnZSBib3ggc3RyaW5ncyAqLwogICAgSURTX1JFU1RBUlRfVElUTEUJCSLP5fDl5+Dj8PPn6PL8IgogICAgSURTX1JFU1RBUlRfUFJPTVBUCQkiwvsg9e7y6PLlIPHo7PPr6PDu4uDy/CDv5fDl5+Dv8/HqIFdpbmRvd3M/IgogICAgSURTX1NIVVRET1dOX1RJVExFCQkiwvvq6/736PL8IO/o8uDt6OUiCiAgICBJRFNfU0hVVERPV05fUFJPTVBUCQkix+Dq7u336PL8IPDg4e7y8yDxIFdpbmU/IgoKICAgIC8qIHNoZWxsIGZvbGRlciBwYXRoIGRlZmF1bHQgdmFsdWVzICovCiAgICBJRFNfUFJPR1JBTVMgICAgICAgICAgICAgICAgIsPr4OLt7uUg7OXt/lxcz/Du4/Dg7Oz7IgogICAgSURTX1BFUlNPTkFMICAgICAgICAgICAgICAgICLM7ugg5O7q8+zl7fL7IgogICAgSURTX0ZBVk9SSVRFUyAgICAgICAgICAgICAgICLI5+Hw4O3t7uUiCiAgICBJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIsPr4OLt7uUg7OXt/lxcz/Du4/Dg7Oz7XFzA4vLu5+Dj8PPn6uAiCiAgICBJRFNfUkVDRU5UICAgICAgICAgICAgICAgICAgIs3l5ODi7eXlIgogICAgSURTX1NFTkRUTyAgICAgICAgICAgICAgICAgICLO8u/w4OLo8vwiCiAgICBJRFNfU1RBUlRNRU5VICAgICAgICAgICAgICAgIsPr4OLt7uUg7OXt/iIKICAgIElEU19NWU1VU0lDICAgICAgICAgICAgICAgICAizO7/IOzz5/vq4CIKICAgIElEU19NWVZJREVPICAgICAgICAgICAgICAgICAizO7oIPTo6/zs+yIKICAgIElEU19ERVNLVE9QRElSRUNUT1JZICAgICAgICAi0ODh7vfo6SDx8u7rIgogICAgSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICLR5fLl4u7lIO7q8PPm5e3o5SIKICAgIElEU19URU1QTEFURVMgICAgICAgICAgICAgICAi2ODh6+7t+yIKICAgIElEU19BUFBEQVRBICAgICAgICAgICAgICAgICAiQXBwbGljYXRpb24gRGF0YSIKICAgIElEU19QUklOVEhPT0QgICAgICAgICAgICAgICAiz/Do7fLl8PsiCiAgICBJRFNfTE9DQUxfQVBQREFUQSAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhIgogICAgSURTX0lOVEVSTkVUX0NBQ0hFICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcVGVtcG9yYXJ5IEludGVybmV0IEZpbGVzIgogICAgSURTX0NPT0tJRVMgICAgICAgICAgICAgICAgICJDb29raWVzIgogICAgSURTX0hJU1RPUlkgICAgICAgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcSGlzdG9yeSIKICAgIElEU19QUk9HUkFNX0ZJTEVTICAgICAgICAgICAiUHJvZ3JhbSBGaWxlcyIKICAgIElEU19NWVBJQ1RVUkVTICAgICAgICAgICAgICAizO7oIPDo8fPt6ugiCiAgICBJRFNfUFJPR1JBTV9GSUxFU19DT01NT04gICAgIlByb2dyYW0gRmlsZXNcXENvbW1vbiBGaWxlcyIKICAgIElEU19DT01NT05fRE9DVU1FTlRTICAgICAgICAizuH56OUg5O7q8+zl7fL7IgogICAgSURTX0FETUlOVE9PTFMgICAgICAgICAgICAgICLD6+Di7e7lIOzl7f5cXM/w7uPw4Ozs+1xcQWRtaW5pc3RyYXRpdmUgVG9vbHMiCiAgICBJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIs7h+ejlIOTu6vPs5e3y+1xczO7/IOzz5/vq4CIKICAgIElEU19DT01NT05fUElDVFVSRVMgICAgICAgICAizuH56OUg5O7q8+zl7fL7XFzM7ugg8Ojx8+3q6CIKICAgIElEU19DT01NT05fVklERU8gICAgICAgICAgICAizuH56OUg5O7q8+zl7fL7XFzM7ugg9Ojr/Oz7IgogICAgSURTX0NEQlVSTl9BUkVBICAgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcQXBwbGljYXRpb24gRGF0YVxcTWljcm9zb2Z0XFxDRCBCdXJuaW5nIgp9Cg==