LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAyMDA0LCAyMDA4IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicHJvZ21hbi5oIgoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKCi8qIERpYWxvZyBgTmV3JyAqLwoKRElBTE9HX05FVyBESUFMT0cgMCwgMCwgMTcwLCA2NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJOdWV2byIKewpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX0dST1VQLCAgICAxMCwgMTUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJkdydXBvIGRlIHByb2dyYW1hIiwgICAtMSwgICAgMjAsIDE4LCAgODAsIDE1ClJBRElPQlVUVE9OICAgIiIsICAgICAgICAgICAgICAgICBQTV9ORVdfUFJPR1JBTSwgIDEwLCAzNSwgIDEwLCAxNQpMVEVYVCAgICAgICAgICImUHJvZ3JhbWEiLCAtMSwgIDIwLCAzOCwgIDgwLCAxNQpERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgICAgSURPSywgICAgICAgICAgIDEwNSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgIElEQ0FOQ0VMLCAgICAgICAxMDUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkEmeXVkYSIsICAgICAgICBQTV9IRUxQLCAgICAgICAgMTA1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYE1vdmUnICovCgpESUFMT0dfTU9WRSBESUFMT0cgMCwgMCwgMjUwLCA2NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJNb3ZlciBwcm9ncmFtYSIKewpMVEVYVCAgICAgICAgICJNb3ZlciBwcm9ncmFtYToiLCAgLTEsICAgICAgICAgICA1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgUE1fUFJPR1JBTSwgICAgICAgIDk1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICImRGVsIGdydXBvOiIsICAgICAgLTEsICAgICAgICAgICA1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgUE1fRlJPTV9HUk9VUCwgICAgIDk1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICImQWwgZ3J1cG86IiwgICAgICAgUE1fVE9fR1JPVVBfVFhULCAgICA1LCAyOCwgMTQwLCAxNQpDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fVE9fR1JPVVAsICAgICAgICA1LCAzOCwgMTQwLCA1MCwgV1NfVEFCU1RPUCB8IENCU19EUk9QRE9XTkxJU1QKREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsICAgICAgICAgIElET0ssICAgICAgICAgICAgIDE4NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgIDE4NSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQSZ5dWRhIiwgICAgICAgICAgIFBNX0hFTFAsICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBDb3B5JyAqLwoKRElBTE9HX0NPUFkgRElBTE9HIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQ29waWFyIHByb2dyYW1hIgp7CkxURVhUICAgICAgICAgIkNvcGlhciBwcm9ncmFtYToiLCAgLTEsICAgICAgICAgIDUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgUE1fUFJPR1JBTSwgICAgICAgOTUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIiZEZWwgZ3J1cG86IiwgICAgICAgLTEsICAgICAgICAgIDUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgUE1fRlJPTV9HUk9VUCwgICAgOTUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiZBbCBncnVwbzoiLCAgICAgICAgUE1fVE9fR1JPVVBfVFhULCAgIDUsIDI4LCAxNDAsIDE1CkNPTUJPQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fVE9fR1JPVVAsICAgICAgIDUsIDM4LCAxNDAsIDUwLCBXU19UQUJTVE9QIHwgQ0JTX0RST1BET1dOTElTVApERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgICAgIElET0ssICAgICAgICAgICAgMTg1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgMTg1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBJnl1ZGEiLCAgICAgICAgICAgIFBNX0hFTFAsICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYEdyb3VwIGF0dHJpYnV0ZXMnICovCgpESUFMT0dfR1JPVVAgRElBTE9HIDAsIDAsIDIzMCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQXRyaWJ1dG9zIGRlbCBncnVwbyBkZSBwcm9ncmFtYSIKewpMVEVYVCAgICAgICAgICImRGVzY3JpcGNp8246IiwgIFBNX0RFU0NSSVBUSU9OX1RYVCwgICAwNSwgMTgsIDUwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgIFBNX0RFU0NSSVBUSU9OLCAgICAgICA2MCwgMTgsIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkFyY2hpdm8gZGUgZ3J1cG86IiwgIFBNX0ZJTEVfVFhULCAgICAgICAgICAwNSwgMzgsIDUwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgIFBNX0ZJTEUsICAgICAgICAgICAgICA2MCwgMzgsIDkwLCAxNSwgV1NfVEFCU1RPUApERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgIElET0ssICAgICAgICAgICAgICAgIDE1NSwgIDUsIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgIDE1NSwgMjUsIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBJnl1ZGEiLCAgICAgICAgIFBNX0hFTFAsICAgICAgICAgICAgIDE1NSwgNDUsIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYFByb2dyYW0gYXR0cmlidXRlcycgKi8KCkRJQUxPR19QUk9HUkFNIERJQUxPRyAwLCAwLCAyNTAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBdHJpYnV0b3MgZGVsIHByb2dyYW1hIgp7CkxURVhUICAgICAgICAgIiZEZXNjcmlwY2nzbjoiLCAgUE1fREVTQ1JJUFRJT05fVFhULCAgIDA1LCAxMCwgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgUE1fREVTQ1JJUFRJT04sICAgICAgIDgwLCAxMCwgOTAsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgIiZM7W5lYSBkZSBjb21hbmRvczoiLCAgUE1fQ09NTUFORF9MSU5FX1RYVCwgIDA1LCAyNSwgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgUE1fQ09NTUFORF9MSU5FLCAgICAgIDgwLCAyNSwgOTAsIDE1LCBXU19UQUJTVE9QCkxURVhUICJEaXJlY3RvcmlvIGRlICZ0cmFiYWpvOiIsUE1fRElSRUNUT1JZX1RYVCwgICAgIDA1LCA0MCwgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgUE1fRElSRUNUT1JZLCAgICAgICAgIDgwLCA0MCwgOTAsIDE1LCBXU19UQUJTVE9QCkxURVhUICImQ29tYmluYWNp824gZGUgdGVjbGFzOiIsUE1fSE9UX0tFWV9UWFQsICAgICAgIDA1LCA1NSwgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgUE1fSE9UX0tFWSwgICAgICAgICAgIDgwLCA1NSwgOTAsIDE1LCBXU19UQUJTVE9QCklDT04gICAgICAgICAgIiIsICAgICAgICAgICAgICAgUE1fSUNPTiwgICAgICAgICAgICAgIDIwLCA3MApDSEVDS0JPWCAgICAgICIiLCAgICAgICAgICAgICAgIFBNX1NZTUJPTCwgICAgICAgICAgICA4MCwgNzUsIDEwLCAxMCwgV1NfVEFCU1RPUApMVEVYVCAiJk1pbmltaXphciBhbCBsYW56YXJzZSIsIC0xLCAgICAgICAgICAgICA5NSwgNzUsIDc1LCAxMApERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgIElET0ssICAgICAgICAgICAgICAgIDE4NSwgIDUsIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgIDE4NSwgMjUsIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImRXhwbG9yYXIuLi4iLCAgIFBNX0JST1dTRSwgICAgICAgICAgIDE4NSwgNDUsIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICJDYW1iaWFyICZpY29uby4uLiIsIFBNX09USEVSX1NZTUJPTCwgICAgIDE4NSwgNjUsIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBJnl1ZGEiLCAgICAgICAgIFBNX0hFTFAsICAgICAgICAgICAgIDE4NSwgODUsIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYFN5bWJvbCcgKi8KCkRJQUxPR19TWU1CT0wgRElBTE9HIDAsIDAsIDIwMCwgODUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQ2FtYmlhciBpY29ubyIKewpMVEVYVCAgICAgIiZOb21icmUgZGUgYXJjaGl2bzoiLCBQTV9JQ09OX0ZJTEVfVFhULCAgICA1LCAxNSwgIDQwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OX0ZJTEUsICAgICAgIDQ1LCAxNSwgIDg1LCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICImSWNvbm8gYWN0dWFsOiIsICBQTV9TWU1CT0xfTElTVF9UWFQsICA1LCAzMCwgMTI1LCAxMApDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0xfTElTVCwgICAgICA1LCA0MCwgMTI1LCA1MCwKICAgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19PV05FUkRSQVdGSVhFRCB8IFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsICAgICAgICAgSURPSywgICAgICAgICAgICAgIDEzNSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgICAgSURDQU5DRUwsICAgICAgICAgIDEzNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkV4cGxvcmFyLi4uIiwgICAgUE1fQlJPV1NFLCAgICAgICAgIDEzNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQSZ5dWRhIiwgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBFeGVjdXRlJyAqLwoKRElBTE9HX0VYRUNVVEUgRElBTE9HIDAsIDAsIDIwMCwgODUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRWplY3V0YXIgcHJvZ3JhbWEiCnsKTFRFWFQgICAgICAgICAiTO1uZWEgZGUgJmNvbWFuZG9zOiIsICAgICAtMSwgICAwNSwgMTUsIDEyMCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9DT01NQU5ELCAwNSwgMjUsIDEyMCwgMTUsIFdTX1RBQlNUT1AKQ0hFQ0tCT1ggICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0wsICAwNSwgNDUsICAxMCwgMTAsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiJk1pbmltaXphciBhbCBsYW56YXJzZSIsICAtMSwgICAyMCwgNDUsIDEyMCwgMTAKREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsICAgICAgICAgICAgICAgICBJRE9LLCAgICAgIDEzNSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgICAgICAgICAgICBJRENBTkNFTCwgIDEzNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkV4cGxvcmFyLi4uIiwgICAgICAgICAgICBQTV9CUk9XU0UsIDEzNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQSZ5dWRhIiwgICAgICAgICAgICAgICAgICBQTV9IRUxQLCAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQo=