LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIENvcHlyaWdodCAxOTk4IEp1ZXJnZW4gU2NobWllZAogKiBDb3B5cmlnaHQgMjAwMyBGaWxpcCBOYXZhcmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZWZWRsZSBzZWJlIiwJCUZDSURNX1NIVklFV19CSUdJQ09OCglNRU5VSVRFTSAiJklrb255IiwJCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImU2V6bmFtIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZQb2Ryb2Jub3N0aSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICJaJm9icmF6aXQiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZWZWRsZSBzZWJlIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJklrb255IiwJCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJlNlem5hbSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJlBvZHJvYm5vc3RpIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBQT1BVUCAiU2X4YWRpdCAmaWtvbnkiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIlBvZGxlICZO4Xp2dSIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAiUG9kbGUgJlR5cHUiLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBvZGxlICZWZWxpa29zdGkiLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJQb2RsZSAmRGF0YSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJlJvdm5hdCBhdXRvbWF0aWNreSIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIlphcm92bmF0IGlrb255IiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBJmt0dWFsaXpvdmF0IiwJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJWJmxvnml0IiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIlZsb55pdCB64XN0JnVwY2UiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIiZOb3b9IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOb3bhICZzbG+ea2EiLAlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCgkgICAgTUVOVUlURU0gIk5vdv0gJnrhc3R1cGNlIiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlZsYXN0bm9zdGkiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIiZTZWxlY3QiCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSAiUCZyb3prb3VtYXQiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIk8mdGV2+O10IiwJCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlZ5aiZtb3V0IiwJCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICImS29w7XJvdmF0IiwJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiVnl0dm/4aXQgeuFzdHVwYyZlIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIk8mZHN0cmFuaXQiLAkJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiJlD4ZWptZW5vdmF0IiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImVmxhc3Rub3N0aSIsCQlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAiUHJvY2jhemV0Li4uIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJTdG9ybm8iLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMjAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTyBhcGxpa2FjaSAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMywgNjAsIDEyLCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJXaW5lICZsaWNlbnNlLi4uIiwgSURDX0FCT1VUX0xJQ0VOU0UsIDE1MywgMTEzLCA2MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggSURDX0FCT1VUX0xJU1RCT1gsIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgc3RjMSwgMTAsIDEwLCAzMCwgMzAKIExURVhUICIiLCBJRENfQUJPVVRfU1RBVElDX1RFWFQxLCA0MCwgMTAsIDE3MCwgMTAKIExURVhUICIiLCBJRENfQUJPVVRfU1RBVElDX1RFWFQyLCA0MCwgMjIsIDE3MCwgMTAKIExURVhUICJSdW5uaW5nIG9uICVzIiwgSURDX0FCT1VUX1NUQVRJQ19URVhUMywgNDIsIDM0LCAxNzAsIDEwCiBMVEVYVCAiV2luZSBqZSBk7WxlbToiLCBJRENfQUJPVVRfV0lORV9URVhULCA4LCA1NCwgMjA0LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIlphZGVqdGUgbuF6ZXYgcHJvZ3JhbXUsIHNsb55reSwgZG9rdW1lbnR1LCBuZWJvIHpkcm9qZSB2IHPtdGkgSW50ZXJuZXQgYSBXaW5lIGplaiBwcm8gduFzIG90ZXb4ZS4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJk90ZXb47XQ6IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIlN0b3JubyIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZQcm9jaOF6ZXQuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KCi8qCglzcGVjaWFsIGZvbGRlcnMKKi8KU1RSSU5HVEFCTEUKewoJSURTX0RFU0tUT1AJCSJQbG9jaGEiCglJRFNfTVlDT01QVVRFUgkJIlRlbnRvIHBv6O10YegiCgogICAgICAgIC8qIGNvbnRleHQgbWVudXMgKi8KCUlEU19WSUVXX0xBUkdFCQkiJlZlZGxlIHNlYmUiCglJRFNfVklFV19TTUFMTAkJIiZJa29ueSIKCUlEU19WSUVXX0xJU1QJCSImU2V6bmFtIgoJSURTX1ZJRVdfREVUQUlMUwkiJlBvZHJvYm5vc3RpIgoJSURTX1NFTEVDVAkJIlZ5YnJhdCIKCUlEU19PUEVOCQkiT3RldvjtdCIKCglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiTmVsemUgdnl0dm/4aXQgbm92b3Ugc2xvnmt1IHByb3RvnmUgcPjtc3R1cCBieWwgb2RlcPhlbi4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkNoeWJhIHD4aSBwb2t1c3Ugdnl0dm/4aXQgbm92/SBhZHJlc+H4IgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiUG90dnJkaXQgb2RzdHJhbuxu7SBzb3Vib3J1IgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJQb3R2cmRpdCBvZHN0cmFu7G7tIGFkcmVz4fhlIgoJSURTX0RFTEVURUlURU1fVEVYVCAiT3ByYXZkdSBjaGNldGUgb2RzdHJhbml0ICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIk9wcmF2ZHUgY2hjZXRlIG9kc3RyYW5pdCB07GNodG8gJTEgcG9sb55laz8iCglJRFNfREVMRVRFU0VMRUNURURfVEVYVCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbShzKT8iCglJRFNfVFJBU0hJVEVNX1RFWFQgIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHNlbmQgJyUxJyB0byB0aGUgVHJhc2g/IgoJSURTX1RSQVNIRk9MREVSX1RFWFQgIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHNlbmQgJyUxJyBhbmQgYWxsIGl0cyBjb250ZW50IHRvIHRoZSBUcmFzaD8iCglJRFNfVFJBU0hNVUxUSVBMRV9URVhUICJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBzZW5kIHRoZXNlICUxIGl0ZW1zIHRvIHRoZSBUcmFzaD8iCglJRFNfQ0FOVFRSQVNIX1RFWFQgIlRoZSBpdGVtICclMScgY2FuJ3QgYmUgc2VudCB0byBUcmFzaC4gRG8geW91IHdhbnQgdG8gZGVsZXRlIGl0IGluc3RlYWQ/IgoJSURTX09WRVJXUklURUZJTEVfVEVYVCAiVGhpcyBmb2xkZXIgYWxyZWFkeSBjb250YWlucyBhIGZpbGUgY2FsbGVkICclMScuXG5cbkRvIHlvdSB3YW50IHRvIHJlcGxhY2UgaXQ/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiUG90dnJkaXQgcPhlcHPhbu0gc291Ym9ydSIKCUlEU19PVkVSV1JJVEVGT0xERVJfVEVYVCAiVGhpcyBmb2xkZXIgYWxyZWFkeSBjb250YWlucyBhIGZvbGRlciBuYW1lZCAnJTEnLlxuXG4iXAoJICAgICJJZiB0aGUgZmlsZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGZvbGRlciBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIGZpbGVzIGluIHRoZVxuIlwKCSAgICAic2VsZWN0ZWQgZm9sZGVyIHRoZXkgd2lsbCBiZSByZXBsYWNlZC4gRG8geW91IHN0aWxsIHdhbnQgdG8gbW92ZSBvciBjb3B5XG4iXAoJICAgICJ0aGUgZm9sZGVyPyIKCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwoJSURTX1NIVl9DT0xVTU4xCQkiTuF6ZXYiCglJRFNfU0hWX0NPTFVNTjIJCSJWZWxpa29zdCIKCUlEU19TSFZfQ09MVU1OMwkJIlR5cCIKCUlEU19TSFZfQ09MVU1ONAkJIlpt7G7sbm8iCglJRFNfU0hWX0NPTFVNTjUJCSJBdHJpYnV0eSIKCUlEU19TSFZfQ09MVU1ONgkJIlZlbGlrb3N0IgoJSURTX1NIVl9DT0xVTU43CQkiVm9sbukgbe1zdG8iCglJRFNfU0hWX0NPTFVNTjgJCSJKbelubyIKCUlEU19TSFZfQ09MVU1OOQkJIktvbWVudOH4IgoJSURTX1NIVl9DT0xVTU4xMAkiT3duZXIiCglJRFNfU0hWX0NPTFVNTjExCSJHcm91cCIKCUlEU19TSFZfQ09MVU1OX0RFTEZST00JIk9yaWdpbmFsIGxvY2F0aW9uIgoJSURTX1NIVl9DT0xVTU5fREVMREFURQkiRGF0ZSBkZWxldGVkIgoKCUlEU19ORVdGT0xERVIJCSJOZXcgRm9sZGVyIgp9Cg==