LyoKICogIE5vdGVwYWQgKEVzcGVyYW50byBMYW5ndWFnZSBSZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMjAwNiBBbnRvbmlvIENvZGF6emkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19FU1BFUkFOVE8sIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIkRvc2llcm8iIHsKICBNRU5VSVRFTSAiJk5vdmFcdEN0cmwrTiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIk1hbGZlcm11XHRDdHJsK08iLCAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiS29uJnNlcnZ1XHRDdHJsK1MiLCAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiS29uc2VydnUgJmtpZWwiLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJQcmVzdVx0Q3RybCtQIiwgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiSW1wb3p1IHBh+G9uIiwgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiSW1wb3p1IFByaW50aWxvbiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkZpbnUiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJlJlZGFrdG8iIHsKICBNRU5VSVRFTSAiTnVsaWd1XHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVG9uZHVcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICJLb3BpdVx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIkVubWV0dVx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIkZvcmlndVx0RGVsIiwgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkVsZWsmdHUg5mlvblx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiSG9yby9EYXRvXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFsaW5ldSBh/XRvbWF0ZSIsICBDTURfV1JBUAogIE1FTlVJVEVNICImSW1wb3p1IHRpcGFyb24uLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJlNlcuZ1IiB7CiAgTUVOVUlURU0gIlNlcuZ1XHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiU2Vy5nUgc2VrdmFudGFcdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkhlbHBvIiB7CiAgTUVOVUlURU0gIkVuaGF2byIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiU2Vy5nUuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIlByaSBIZWxwYW50byIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlByaSBOb3RlcGFkIiwgIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJJbXBvenUgbGEgcGH4b24iCnsKTFRFWFQgICAgIkthcG5vdG9qOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJQaWVkbm90b2o6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFy+GVub2o6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImTWFsZGVrc3RyYToiLCAgICAgICAgMHgxNDUsICAgMTMsIDU1LCAzNywgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlN1cHJhOiIsICAgICAgICAgMHgxNDgsICAgIDEzLCA3MywgMzcsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEZWtzdHJhOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiU3UmYmE6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiQm9uZSIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIlJlemlnbmkiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkhlbHBvIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiUGH4byAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3RibG9rbyIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVST1JPIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVRFTlRVIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtbyBwcmkiCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNlbi1ub21vKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUdXRhaiBkb3NpZXJvaiAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJUZWtzdGRvc2llcm9qICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGEgZG9zaWVybyAnJXMnIGVzdGFzIHRybyBncmFuZGEgcG9yIE5vdGVwYWQuXG4gXApPbmkga29uc2lsYXMgdXppIGFsaWFuIHJlZGFrdGlsb24uIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmUgZXN0YXMgZW5tZXRpdGEgdGVrc3RvLiBcClxuT25pIGtvbnNpbGFzIHNrcmliaSBkZXZvdmUga2FqIHJlcHJvdmkiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYSBkb3NpZXJvICclcydcbm5lIGVrc2lzdGFzXG5cbiBcCsZ1IG1pIGRldmFzIGtyZWkgbm92YW4gZG9zaWVyb24/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGEgZG9zaWVybyclcydcbiBlc3RpcyD+YW74aXRhXG5cbiBcCsZ1IHZpIHZvbGFzIGtvbnNlcnZpIGxhIP5hbvhvam4/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaSBuZSB0cm92aXMgJyVzJy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTGEgbWVtb3JvIGVzdGFzIG5lc3VmaeZhIHBvciBrb21wbGV0aWdvIGplIGxhIHRhc2tvIFwKXG5Pbmkga29uc2lsYXMgZmVybWkgdW51IG8gcGx1cmFqIHByb2dyYW1vaiBwb3JcbmxpYmVyaWdpIG1lbW9yb24uIgoKfQo=