LyoKICogIE5vdGVwYWQgKFR1cmtpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0gPGZhdGloLmFzaWNpQGdtYWlsLmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZEb3N5YSIgewogIE1FTlVJVEVNICImWWVuaVx0Q3RybCtOIiwgICAgQ01EX05FVwogIE1FTlVJVEVNICImQecuLi5cdEN0cmwrTyIsICAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJktheWRldFx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIiZGYXJrbP0gS2F5ZGV0Li4uIiwgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJZYSZ6ZP1yLi4uXHRDdHJsK1AiLCAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNhJnlmYSBBeWFy/S4uLiIsICAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJZYXr9Y/0gJkF5YXJsYXL9Li4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsf9a/3+IiwgICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICJEJvx6ZW5sZSIgewogIE1FTlVJVEVNICImR2VyaSBBbFx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZLZXNcdEN0cmwrWCIsICAgICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICJLJm9weWFsYVx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIllhJnD9/nT9clx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZTaWxcdERlbCIsICAgICAgICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVPxt/G78IHNl51x0Q3RybCtBIiwgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIlMmYWF0L1RhcmloXHRGNSIsICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVXp1biBzYXT9cmxhcv0ga/1ycCIsIENNRF9XUkFQCiAgTUVOVUlURU0gIiZZYXr9IFRpcGkuLi4iLCAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZCdWwiIHsKICBNRU5VSVRFTSAiJkJ1bC4uLlx0Q3RybCtGIiwgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZTb25yYWtpbmkgYnVsXHRGMyIsICAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImWWFyZP1tIiB7CiAgTUVOVUlURU0gIibd52luZGVraWxlciIsICAgICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImQXJhLi4uIiwgICAgICAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImWWFyZP1tIGt1bGxhbv1t/SIsICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFib3V0IE5vdGVwYWQiLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiU2F5ZmEgQXlhcmxhcv0iCnsKTFRFWFQgICAgIiZTYXlmYSBCYf79OiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImU2F5ZmEgU29udToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZLZW5hcmz9a2xhcjoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZTb2w6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIibcc3Q6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiUyZh8DoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIkEmbHQ6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiVGFtYW0iLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICLdcHRhbCIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJllhcmT9bSIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIiZwLiBTYXlmYSIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3QgRGVmdGVyaSIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBVEEiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVWUFSSSIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJpbGdpIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkc/16IgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlT8bSBkb3N5YWxhciAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJNZXRpbiBEb3N5YWxhcv0gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGRvc3lhc/0gbm90IGRlZnRlcmkgaedpbiDnb2sgYvx5/GsuXG4gXApM/HRmZW4gZGXwaf5payBiaXIgZPx6ZW5sZXlpY2kga3VsbGFu/W4uIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGnnYmlyIG1ldGluIHlhem1hZP1u/XouIFwKXG5M/HRmZW4gYmly/mV5IHlhev1uIHZlIHRla3JhciBkZW5leWluIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBkb3N5YXP9XG5tZXZjdXQgZGXwaWxcblxuIFwKWWVuaSBiaXIgZG9zeWEgb2x1/nR1cm1hayBpc3RlciBtaXNpbml6PyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZG9zeWFz/VxuZGXwaf50aXJpbGRpXG5cbiBcCkRl8Gn+aWtsaWtsZXJpIGtheWRldG1layBpc3RlciBtaXNpbml6PyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBidWx1bmFt/Xlvci4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiQnUgaf5sZW1pIHRhbWFtbGFtYWsgaedpbiB5ZXRlcmxpIGJlbGxla1wKYWxhbv0geW9rLlxuQmlyIHZleWEgZGFoYSBmYXpsYSB1eWd1bGFtYXn9IGthcGF0YXJhayBib/4gYmVsbGVrIG1pa3Rhcv1u/VxuYXJ0dP1ybWF5/SBcCmRlbmV5aW4uIgoKfQo=