LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA2IFZpdGFsaXkgTWFyZ29sZW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIE1FTlVJVEVNICImwe7r/Pjo5SDI6u7t6ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgTUVOVUlURU0gIibM5evq6OUgyOru7eroIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgogICAgTUVOVUlURU0gIibR7+jx7uoiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCiAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBQT1BVUCAiJs/w7vHs7vLwIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImwe7r/Pjo5SDI6u7t6ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgICAgICAgICBNRU5VSVRFTSAiJszl6+ro5SDI6u7t6ugiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCiAgICAgICAgICAgIE1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwogICAgICAgICAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiQXJyYW5nZSAmSWNvbnMiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIs/uICbI7OXt6CIsCTB4MzAJLyogY29sdW1uIDAgKi8KICAgICAgICAgICAgTUVOVUlURU0gIs/uICbS6O/zIiwJMHgzMgkvKiBjb2x1bW4gMiAqLwogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJtDg5+zl8PMiLAkweDMxCS8qIC4uLiAqLwogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJsTg8uUiLAkweDMzCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAiJsDi8u7s4PLo9+Xx6ugiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSAiwib78O7i7f/y/CDo6u7t6ugiLAlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLOJuHt7uLo8vwiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsLx8uDi6PL8IiwJCUZDSURNX1NIVklFV19JTlNFUlQKICAgICAgICBNRU5VSVRFTSAiwvHy4OLo8vwgJv/w6uv76iIsCUZDSURNX1NIVklFV19JTlNFUlRMSU5LCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgItHu5+Tg8vwiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIibP4O/q4CIsCQlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCiAgICAgICAgICAgIE1FTlVJVEVNICIm3/Dr++oiLAkJRkNJRE1fU0hWSUVXX05FV0xJTksKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItHi7ibp8fLi4CIsCQlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwogICAgRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJs/w7uLu5O3o6iIsCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQogICAgICAgIE1FTlVJVEVNICImzvLq8Pvy/CIsCQlGQ0lETV9TSFZJRVdfT1BFTgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImwvvw5efg8vwiLAkJRkNJRE1fU0hWSUVXX0NVVAogICAgICAgIE1FTlVJVEVNICImyu7v6PDu4uDy/CIsCQlGQ0lETV9TSFZJRVdfQ09QWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR7ufk4PL8ICbf7uv76iIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCiAgICAgICAgTUVOVUlURU0gIibT5ODr7PL8IiwJCUZDSURNX1NIVklFV19ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiz+Xw5egm7OXt7uLg8vwiLAlGQ0lETV9TSFZJRVdfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItHi7ibp8fLi4CIsCQlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwogICAgRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAizuHn7vAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgREVGUFVTSEJVVFRPTiAixOAiLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIs7y7OXt6PL8IiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiAgICBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKICAgIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAoJICAgICAgICBUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CgkgICAgICAgIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgkgICAgICAgIDQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiziAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMywgNTAsIDEyLCBXU19UQUJTVE9QCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDEwLCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCAzMCwgMTAsIDEzNywgMTAKIExURVhUICIiLCAxMDEsIDMwLCAyMiwgMTM3LCAxMAogTFRFWFQgItDg5/Dg4e7y9+jq6CBXaW5lOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIsLi5eTo8uUg6Oz/IO/w7uPw4Ozs+ywg7+Dv6ugsIOTu6vPs5e3y4CDo6+gg8OXx8/DxIMjt8uXw7eXy4Cwg6CBXaW5lIO7y6vDu5fIg6PUuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIibO8urw+/L8OiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICLO8uzl7eAiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICLO4Sbn7vAuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIC8qIGNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldyAqLwogICAgSURTX1NIVl9DT0xVTU4xCQkiyOz/IgogICAgSURTX1NIVl9DT0xVTU4yCQki0ODn7OXwIgogICAgSURTX1NIVl9DT0xVTU4zCQki0ujvIgogICAgSURTX1NIVl9DT0xVTU40CQkiyOfs5e3l7SIKICAgIElEU19TSFZfQ09MVU1ONQkJIsDy8Ojh8/L7IgogICAgSURTX1NIVl9DT0xVTU42CQkiz+7r7fvpIO7h+uXsIgogICAgSURTX1NIVl9DT0xVTU43CQki0eLu4e7k7e4iCiAgICBJRFNfU0hWX0NPTFVNTjgJCSLI7P8iCiAgICBJRFNfU0hWX0NPTFVNTjkJCSLK7uzs5e3y4PDo6SIKICAgIElEU19TSFZfQ09MVU1OMTAJCSLC6+Dk5evl9iIKICAgIElEU19TSFZfQ09MVU1OMTEJCSLD8PPv7+AiCgogICAgLyogc3BlY2lhbCBmb2xkZXJzICovCiAgICBJRFNfREVTS1RPUAkJCSLQ4OHu9+jpIPHy7usiCiAgICBJRFNfTVlDT01QVVRFUgkJIszu6SDq7uzv/P7y5fAiCgogICAgLyogY29udGV4dCBtZW51cyAqLwogICAgSURTX1ZJRVdfTEFSR0UJCSImwe7r/Pjo5SDI6u7t6ugiCiAgICBJRFNfVklFV19TTUFMTAkJIibM5evq6OUgyOru7eroIgogICAgSURTX1ZJRVdfTElTVAkJIibR7+jx7uoiCiAgICBJRFNfVklFV19ERVRBSUxTCQkiJs/u5PDu4e3uIgogICAgSURTX1NFTEVDVAkJCSImwvvh8ODy/CIKICAgIElEU19PUEVOCQkJIibO8urw+/L8IgoKICAgIElEU19DUkVBVEVGT0xERVJfREVOSUVECSLN5eLu5+zu5u3uIPHu5+Tg8vwg7+Dv6vMgLSDt5fIg7+7r7e7s7vfo6S4iCiAgICBJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04JIs746OHq4CDi7iDi8OXs/yDx7ufk4O3o/yDv4O/q6CIKICAgIElEU19ERUxFVEVJVEVNX0NBUFRJT04JIs/u5PLi5fDm5OXt6OUg8+Tg6+Xt6P8g9ODp6+AiCiAgICBJRFNfREVMRVRFRk9MREVSX0NBUFRJT04JIs/u5PLi5fDm5OXt6OUg8+Tg6+Xt6P8g7+Dv6ugiCiAgICBJRFNfREVMRVRFSVRFTV9URVhUCQki0+Tg6+jy/CAnJTEnPyIKICAgIElEU19ERUxFVEVNVUxUSVBMRV9URVhUCSLT5ODr6PL8IP3y6CDu4fzl6vL7ICglMT8iCiAgICBJRFNfT1ZFUldSSVRFRklMRV9URVhUCSLH4Ozl7ejy/CD04OnrKPspICUxPyIKICAgIElEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04JIs/u5PLi5fDm5OXt6OUg5+Ds5e37IPTg6evgIgoKICAgIC8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgIElEU19SRVNUQVJUX1RJVExFCQkiz+Xw5efg4/Dz5+jy/CIKICAgIElEU19SRVNUQVJUX1BST01QVAkJIsL7IPXu8ujy5SDx6Ozz6+jw7uLg8vwg7+Xw5efg7/Px6iBXaW5kb3dzPyIKICAgIElEU19TSFVURE9XTl9USVRMRQkJIsL76uv+9+jy/CDv6PLg7ejlIgogICAgSURTX1NIVVRET1dOX1BST01QVAkJIsL7IPXu8ujy5SDn4Oro7ffo8vwg8ODh7vLzIPEgV2luZT8iCgogICAgLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KICAgIElEU19QUk9HUkFNUyAgICAgICAgICAgICAgICAiw+vg4u3u5SDs5e3+XFzP8O7j8ODs7PsiCiAgICBJRFNfUEVSU09OQUwgICAgICAgICAgICAgICAgIszu6CDk7urz7OXt8vsiCiAgICBJRFNfRkFWT1JJVEVTICAgICAgICAgICAgICAgIsjn4fDg7e3u5SIKICAgIElEU19TVEFSVFVQICAgICAgICAgICAgICAgICAiw+vg4u3u5SDs5e3+XFzP8O7j8ODs7PtcXMDi8u7n4OPw8+fq4CIKICAgIElEU19SRUNFTlQgICAgICAgICAgICAgICAgICAiUmVjZW50IgogICAgSURTX1NFTkRUTyAgICAgICAgICAgICAgICAgICLO8u/w4uLo8vwiCiAgICBJRFNfU1RBUlRNRU5VICAgICAgICAgICAgICAgIsPr4OLt7uUg7OXt/iIKICAgIElEU19NWU1VU0lDICAgICAgICAgICAgICAgICAizO7/IOzz5/vq4CIKICAgIElEU19NWVZJREVPICAgICAgICAgICAgICAgICAizO7oIPTo6/zs+yIKICAgIElEU19ERVNLVE9QRElSRUNUT1JZICAgICAgICAi0ODh7vfo6SDx8u7rIgogICAgSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICJOZXRIb29kIgogICAgSURTX1RFTVBMQVRFUyAgICAgICAgICAgICAgICLY4OHr7u37IgogICAgSURTX0FQUERBVEEgICAgICAgICAgICAgICAgICJBcHBsaWNhdGlvbiBEYXRhIgogICAgSURTX1BSSU5USE9PRCAgICAgICAgICAgICAgICJQcmludEhvb2QiCiAgICBJRFNfTE9DQUxfQVBQREFUQSAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhIgogICAgSURTX0lOVEVSTkVUX0NBQ0hFICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcVGVtcG9yYXJ5IEludGVybmV0IEZpbGVzIgogICAgSURTX0NPT0tJRVMgICAgICAgICAgICAgICAgICJDb29raWVzIgogICAgSURTX0hJU1RPUlkgICAgICAgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcSGlzdG9yeSIKICAgIElEU19QUk9HUkFNX0ZJTEVTICAgICAgICAgICAiUHJvZ3JhbSBGaWxlcyIKICAgIElEU19NWVBJQ1RVUkVTICAgICAgICAgICAgICAizO7oIPDo8fPt6ugiCiAgICBJRFNfUFJPR1JBTV9GSUxFU19DT01NT04gICAgIlByb2dyYW0gRmlsZXNcXENvbW1vbiBGaWxlcyIKICAgIElEU19DT01NT05fRE9DVU1FTlRTICAgICAgICAizuH56OUg5O7q8+zl7fL7IgogICAgSURTX0FETUlOVE9PTFMgICAgICAgICAgICAgICLD6+Di7e7lIOzl7f5cXM/w7uPw4Ozs+1xcQWRtaW5pc3RyYXRpdmUgVG9vbHMiCiAgICBJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIs7h+ejlIOTu6vPs5e3y+1xczO7/IOzz5/vq4CIKICAgIElEU19DT01NT05fUElDVFVSRVMgICAgICAgICAizuH56OUg5O7q8+zl7fL7XFzM7ugg8Ojx8+3q6CIKICAgIElEU19DT01NT05fVklERU8gICAgICAgICAgICAizuH56OUg5O7q8+zl7fL7XFzM7ugg9Ojr/Oz7IgogICAgSURTX0NEQlVSTl9BUkVBICAgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcQXBwbGljYXRpb24gRGF0YVxcTWljcm9zb2Z0XFxDRCBCdXJuaW5nIgp9Cg==