ZGlmZiAtLWdpdCBhL2J1aWxkLnhtbCBiL2J1aWxkLnhtbAppbmRleCA3NWYxOTM2Li5mMzdhODRlIDEwMDc1NQotLS0gYS9idWlsZC54bWwKKysrIGIvYnVpbGQueG1sCkBAIC05LDcgKzksNyBAQAogICA8cHJvcGVydHkgbmFtZT0iZ3d0LmFwaWNoZWNrLmNvbmZpZyIgCiAgICAgbG9jYXRpb249InRvb2xzL2FwaS1jaGVja2VyL2NvbmZpZy9nd3QxNV8xNnVzZXJBcGkuY29uZiIvPgogICA8cHJvcGVydHkgbmFtZT0iZ3d0LmFwaWNoZWNrLm9sZHJvb3QiIAotICAgIGxvY2F0aW9uPSIuLi9nd3QtMS41Ii8+CisgICAgdmFsdWU9Ii4uL2d3dC0xLjUiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkb25seSIgZGVwZW5kcz0iZGV2LCB1c2VyLCBzZXJ2bGV0LCBqbmkiIGRlc2NyaXB0aW9uPSJCdWlsZCB3aXRob3V0IGRvY3Mvc2FtcGxlcyI+CiAgICAgPGd3dC5hbnQgZGlyPSJkaXN0cm8tc291cmNlIiAvPgpAQCAtODcsNiArODcsOCBAQAogICAgIDwvY29weT4KICAgICA8amF2YSBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSIKICAgICAgICAgICBjbGFzc25hbWU9ImNvbS5nb29nbGUuZ3d0LnRvb2xzLmFwaWNoZWNrZXIuQXBpQ29tcGF0aWJpbGl0eUNoZWNrZXIiPgorICAgICAgPGp2bWFyZyBsaW5lPSItWG14NTEybSIgLz4KKyAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Imd3dC5kZXZqYXIiIHZhbHVlPSIke2d3dC5kZXYuc3RhZ2luZy5qYXJ9IiAvPgogICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2d3dC5idWlsZC5vdXR9L3Rvb2xzL2FwaS1jaGVja2VyL2JpbiIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7Z3d0LmJ1aWxkLm91dH0vZGV2L2NvcmUvYmluIi8+CkBAIC05NCw2ICs5Niw3IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtnd3QudG9vbHMubGlifS9lY2xpcHNlL2pkdC0zLjMuMS5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7amF2YS5jbGFzcy5wYXRofSIvPgogICAgICAgPC9jbGFzc3BhdGg+CisgICAgICA8YXJnIHZhbHVlPSItY29uZmlnRmlsZSIvPgogICAgICAgPGFyZyBmaWxlPSIke2d3dC5idWlsZC5vdXR9L3VzZXJBcGkuY29uZiIvPgogICAgIDwvamF2YT4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9kZXYvY29yZS9idWlsZC54bWwgYi9kZXYvY29yZS9idWlsZC54bWwKaW5kZXggZTUwOTBlNi4uMmNhOGI5YSAxMDA3NTUKLS0tIGEvZGV2L2NvcmUvYnVpbGQueG1sCisrKyBiL2Rldi9jb3JlL2J1aWxkLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDxnd3QuamFyIGRlc3RmaWxlPSIke2FsbGRlcHMuamFyfSI+CiAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7Z3d0LnRvb2xzLmxpYn0vYXBhY2hlL3RhcGVzdHJ5LXV0aWwtdGV4dC00LjAuMi5qYXIiIC8+CiAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7Z3d0LnRvb2xzLmxpYn0vYXBhY2hlL2FudC0xLjYuNS5qYXIiIC8+Ci0gICAgICA8emlwZmlsZXNldCBzcmM9IiR7Z3d0LnRvb2xzLmxpYn0vZWNsaXBzZS9qZHQtMy4zLjEuamFyIiAvPgorICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2d3dC50b29scy5saWJ9L2VjbGlwc2UvamR0LTMuNC4yLmphciIgLz4KICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtnd3QudG9vbHMubGlifS9qZXR0eS9qZXR0eS02LjEuMTEuamFyIiAvPgogICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2d3dC50b29scy5saWJ9L3RvbWNhdC9hbnQtbGF1bmNoZXItMS42LjUuamFyIiAvPgogICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2d3dC50b29scy5saWJ9L3RvbWNhdC9jYXRhbGluYS0xLjAuamFyIiAvPgpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L0xpbmtlckNvbnRleHQuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9MaW5rZXJDb250ZXh0LmphdmEKaW5kZXggMTIwZGUzMS4uN2YxZDM3ZiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L0xpbmtlckNvbnRleHQuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvTGlua2VyQ29udGV4dC5qYXZhCkBAIC00MCw2ICs0MCwxMyBAQAogICBTdHJpbmcgZ2V0TW9kdWxlRnVuY3Rpb25OYW1lKCk7CiAKICAgLyoqCisgICAqIFJldHVybnMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIG1vZHVsZSBiZWluZyBjb21waWxlZCB3YXMgbGFzdCBtb2RpZmllZC4gQ2FuCisgICAqIGJlIHVzZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHRpbWVzdGFtcCBvbiBhcnRpZmFjdHMgd2hpY2ggZGVwZW5kIHNvbGVseSBvbgorICAgKiB0aGUgbW9kdWxlIGRlZmluaXRpb24uCisgICAqLworICBsb25nIGdldE1vZHVsZUxhc3RNb2RpZmllZCgpOworCisgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgY29tcGlsZWQuCiAgICAqLwogICBTdHJpbmcgZ2V0TW9kdWxlTmFtZSgpOwpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TZXJ2bGV0Q29udGFpbmVyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvU2VydmxldENvbnRhaW5lci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIGRldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvU2VydmxldENvbnRhaW5lci5qYXZhCnJlbmFtZSB0byBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvU2VydmxldENvbnRhaW5lci5qYXZhCmluZGV4IDczMjk5OGEuLmFjZDJhMjUgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvU2VydmxldENvbnRhaW5lci5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9TZXJ2bGV0Q29udGFpbmVyLmphdmEKQEAgLTEzLDIzICsxMywyOCBAQAogICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKICAqIHRoZSBMaWNlbnNlLgogICovCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbDsKLQotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0OwogCiAvKioKICAqIEFuIGluc3RhbmNlIG9mIGEgc2VydmxldCBjb250YWluZXIgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgc2hlbGwuIEl0IGlzCi0gKiBhc3N1bWVkIHRoYXQgdGhpcyBzZXJ2bGV0IGNvbnRhaW5lciBzZXJ2ZXMgYSB3ZWIgYXBwIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5Ci0gKiBzcGVjaWZpZWQgYnkgYSBjYWxsIHRvCi0gKiB7QGxpbmsgU2VydmxldENvbnRhaW5lckxhdW5jaGVyI3NldEFwcFJvb3REaXIoamF2YS5pby5GaWxlKX0uCisgKiBhc3N1bWVkIHRoYXQgdGhpcyBzZXJ2bGV0IGNvbnRhaW5lciBzZXJ2ZXMgYSB3ZWIgYXBwIGZyb20gdGhlIGRpcmVjdG9yeQorICogc3BlY2lmaWVkIHdoZW4gdGhpcyBzZXJ2bGV0IGNvbnRhaW5lciB3YXMgY3JlYXRlZC4KICAqLwotcHVibGljIGludGVyZmFjZSBTZXJ2bGV0Q29udGFpbmVyIHsKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZXJ2bGV0Q29udGFpbmVyIHsKIAogICAvKioKLSAgICogUHJvdmlkZXMgdGhlIHBvcnQgb24gd2hpY2ggdGhlIHNlcnZlciBpcyBhY3R1YWxseSBydW5uaW5nLCB3aGljaCBjYW4gYmUKLSAgICogdXNlZnVsIHdoZW4gYXV0b21hdGljIHBvcnQgc2VsZWN0aW9uIHdhcyByZXF1ZXN0ZWQuCisgICAqIFJldHVybnMgdGhlIGhvc3Qgb24gd2hpY2ggdGhlIHNlcnZsZXQgY29udGFpbmVyIGlzIHJ1bm5pbmcuIERlZmF1bHRzIHRvCisgICAqICJsb2NhbGhvc3QiLiBVc2VkIHRvIGNvbnN0cnVjdCBhIFVSTCB0byByZWFjaCB0aGUgc2VydmxldCBjb250YWluZXIuCiAgICAqLwotICBpbnQgZ2V0UG9ydCgpOworICBwdWJsaWMgU3RyaW5nIGdldEhvc3QoKSB7CisgICAgcmV0dXJuICJsb2NhbGhvc3QiOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHBvcnQgb24gd2hpY2ggdGhlIHNlcnZlciBpcyBydW5uaW5nLlVzZWQgdG8gY29uc3RydWN0IGEgVVJMIHRvCisgICAqIHJlYWNoIHRoZSBzZXJ2bGV0IGNvbnRhaW5lci4KKyAgICovCisgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UG9ydCgpOwogCiAgIC8qKgogICAgKiBDYXVzZXMgdGhlIHdlYiBhcHAgdG8gcGljayB1cCBjaGFuZ2VzIG1hZGUgd2l0aGluIHRoZSBhcHAgcm9vdCBkaXIgd2hpbGUKQEAgLTQyLDEyICs0NywxMiBAQAogICAgKiAKICAgICogQHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uCiAgICAqLwotICB2b2lkIHJlZnJlc2goKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVmcmVzaCgpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOwogCiAgIC8qKgogICAgKiBTdG9wcyB0aGUgcnVubmluZyBzZXJ2bGV0IGNvbnRhaW5lci4gSXQgY2Fubm90IGJlIHJlc3RhcnRlZCBhZnRlciB0aGlzLgogICAgKiAKICAgICogQHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uCiAgICAqLwotICB2b2lkIHN0b3AoKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgc3RvcCgpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9TZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL1NlcnZsZXRDb250YWluZXJMYXVuY2hlci5qYXZhCnJlbmFtZSB0byBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvU2VydmxldENvbnRhaW5lckxhdW5jaGVyLmphdmEKaW5kZXggZDllZjczMS4uMDc4NWZiMSAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvU2VydmxldENvbnRhaW5lckxhdW5jaGVyLmphdmEKQEAgLTEzLDMzICsxMywyOCBAQAogICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKICAqIHRoZSBMaWNlbnNlLgogICovCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbDsKLQotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXI7CitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0OwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEubmV0LkJpbmRFeGNlcHRpb247CiAKLWltcG9ydCBqYXZheC5zZXJ2bGV0LkZpbHRlcjsKLQogLyoqCiAgKiBEZWZpbmVzIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGludGVyZmFjZSBmb3IgbGF1bmNoaW5nIHNlcnZsZXQgY29udGFpbmVycyB0aGF0Ci0gKiBjYW4gYmUgdXNlZCBieSB0aGUgc2hlbGwuCisgKiBjYW4gYmUgdXNlZCBieSB0aGUgR1dUIGhvc3RlZCBtb2RlLgogICovCi1wdWJsaWMgaW50ZXJmYWNlIFNlcnZsZXRDb250YWluZXJMYXVuY2hlciB7CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VydmxldENvbnRhaW5lckxhdW5jaGVyIHsKIAogICAvKioKLSAgICogU3RhcnQgYW4gZW1iZWRkZWQgSFRUUCBzZXJ2ZXIuCisgICAqIFN0YXJ0IGFuIGVtYmVkZGVkIEhUVFAgc2VydmxldCBjb250YWluZXIuCiAgICAqIAogICAgKiBAcGFyYW0gbG9nZ2VyIHRoZSBzZXJ2ZXIgbG9nZ2VyCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBUQ1AgcG9ydCB0byBzZXJ2ZSBvbgorICAgKiBAcGFyYW0gcG9ydCB0aGUgVENQIHBvcnQgdG8gc2VydmUgb247IGlmIDAgaXMgcmVxdWVzdGVkLCBhIHBvcnQgc2hvdWxkIGJlCisgICAqICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQKICAgICogQHBhcmFtIGFwcFJvb3REaXIgdGhlIGJhc2UgV0FSIGRpcmVjdG9yeQotICAgKiBAcGFyYW0gZmlsdGVyIGEgc2VydmxldCBmaWx0ZXIgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcm9vdCBwYXRoIHRvCi0gICAqICAgICAgICAgIHNlcnZlIGdlbmVyYXRlZCBmaWxlcwotICAgKiBAcmV0dXJuIHRoZSBsYXVuY2ggc2VydmxldCBjb250YWluZWQKKyAgICogQHJldHVybiB0aGUgbGF1bmNoZWQgc2VydmxldCBjb250YWluZXIKICAgICogQHRocm93cyBCaW5kRXhjZXB0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgcG9ydCBpcyBhbHJlYWR5IGluIHVzZQogICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpZiB0aGUgc2VydmVyIGZhaWxzIHRvIHN0YXJ0IGZvciBhbnkgb3RoZXIgcmVhc29uCiAgICAqLwotICBTZXJ2bGV0Q29udGFpbmVyIHN0YXJ0KFRyZWVMb2dnZXIgbG9nZ2VyLCBpbnQgcG9ydCwgRmlsZSBhcHBSb290RGlyLAotICAgICAgRmlsdGVyIGZpbHRlcikgdGhyb3dzIEJpbmRFeGNlcHRpb24sIEV4Y2VwdGlvbjsKKyAgcHVibGljIGFic3RyYWN0IFNlcnZsZXRDb250YWluZXIgc3RhcnQoVHJlZUxvZ2dlciBsb2dnZXIsIGludCBwb3J0LAorICAgICAgRmlsZSBhcHBSb290RGlyKSB0aHJvd3MgQmluZEV4Y2VwdGlvbiwgRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9BYnN0cmFjdExpbmtlci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9BYnN0cmFjdExpbmtlci5qYXZhCmluZGV4IGE0NWUzNGMuLjA2Yjk1NDkgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvQWJzdHJhY3RMaW5rZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL0Fic3RyYWN0TGlua2VyLmphdmEKQEAgLTQyLDYgKzQyLDIxIEBACiAgIH0KIAogICAvKioKKyAgICogQSBoZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhbiBhcnRpZmFjdCBmcm9tIGFuIGFycmF5IG9mIGJ5dGVzLgorICAgKiAKKyAgICogQHBhcmFtIGxvZ2dlciBhIFRyZWVMb2dnZXIKKyAgICogQHBhcmFtIHdoYXQgdGhlIGRhdGEgdG8gZW1pdAorICAgKiBAcGFyYW0gcGFydGlhbFBhdGggdGhlIHBhcnRpYWwgcGF0aCBvZiB0aGUgcmVzb3VyY2UKKyAgICogQHJldHVybiBhbiBhcnRpZmFjdCB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBkYXRhCisgICAqIEBwYXJhbSBsYXN0TW9kaWZpZWQgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBvZiB0aGUgbmV3IGFydGlmYWN0CisgICAqIEB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbgorICAgKi8KKyAgcHJvdGVjdGVkIGZpbmFsIFN5bnRoZXRpY0FydGlmYWN0IGVtaXRCeXRlcyhUcmVlTG9nZ2VyIGxvZ2dlciwgYnl0ZVtdIHdoYXQsCisgICAgICBTdHJpbmcgcGFydGlhbFBhdGgsIGxvbmcgbGFzdE1vZGlmaWVkKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG5ldyBTeW50aGV0aWNBcnRpZmFjdChsb2dnZXIsIGdldENsYXNzKCksIHBhcnRpYWxQYXRoLCB3aGF0LCBsYXN0TW9kaWZpZWQpOworICB9CisKKyAgLyoqCiAgICAqIEEgaGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYW4gYXJ0aWZhY3QgdG8gZW1pdCB0aGUgY29udGVudHMgb2YgYW4KICAgICogSW5wdXRTdHJlYW0uCiAgICAqIApAQCAtNTQsOCArNjksMjUgQEAKICAgICAgIElucHV0U3RyZWFtIHdoYXQsIFN0cmluZyBwYXJ0aWFsUGF0aCkgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewogICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CiAgICAgVXRpbC5jb3B5KGxvZ2dlciwgd2hhdCwgb3V0KTsKLSAgICByZXR1cm4gbmV3IFN5bnRoZXRpY0FydGlmYWN0KGxvZ2dlciwgZ2V0Q2xhc3MoKSwgcGFydGlhbFBhdGgsCi0gICAgICAgIG91dC50b0J5dGVBcnJheSgpKTsKKyAgICByZXR1cm4gZW1pdEJ5dGVzKGxvZ2dlciwgb3V0LnRvQnl0ZUFycmF5KCksIHBhcnRpYWxQYXRoKTsKKyAgfQorCisgIC8qKgorICAgKiBBIGhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGFuIGFydGlmYWN0IHRvIGVtaXQgdGhlIGNvbnRlbnRzIG9mIGFuCisgICAqIElucHV0U3RyZWFtLgorICAgKiAKKyAgICogQHBhcmFtIGxvZ2dlciBhIFRyZWVMb2dnZXIKKyAgICogQHBhcmFtIHdoYXQgdGhlIHNvdXJjZSBJbnB1dFN0cmVhbQorICAgKiBAcGFyYW0gcGFydGlhbFBhdGggdGhlIHBhcnRpYWwgcGF0aCBvZiB0aGUgZW1pdHRlZCByZXNvdXJjZQorICAgKiBAcGFyYW0gbGFzdE1vZGlmaWVkIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgb2YgdGhlIG5ldyBhcnRpZmFjdAorICAgKiBAcmV0dXJuIGFuIGFydGlmYWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBJbnB1dFN0cmVhbQorICAgKi8KKyAgcHJvdGVjdGVkIGZpbmFsIFN5bnRoZXRpY0FydGlmYWN0IGVtaXRJbnB1dFN0cmVhbShUcmVlTG9nZ2VyIGxvZ2dlciwKKyAgICAgIElucHV0U3RyZWFtIHdoYXQsIFN0cmluZyBwYXJ0aWFsUGF0aCwgbG9uZyBsYXN0TW9kaWZpZWQpCisgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICBVdGlsLmNvcHkobG9nZ2VyLCB3aGF0LCBvdXQpOworICAgIHJldHVybiBlbWl0Qnl0ZXMobG9nZ2VyLCBvdXQudG9CeXRlQXJyYXkoKSwgcGFydGlhbFBhdGgsIGxhc3RNb2RpZmllZCk7CiAgIH0KIAogICAvKioKQEAgLTcyLDYgKzEwNCwyMCBAQAogICB9CiAKICAgLyoqCisgICAqIEEgaGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYW4gYXJ0aWZhY3QgdG8gZW1pdCBhIFN0cmluZy4KKyAgICogCisgICAqIEBwYXJhbSBsb2dnZXIgYSBUcmVlTG9nZ2VyCisgICAqIEBwYXJhbSB3aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgQXJ0aWZhY3QgdG8gZW1pdAorICAgKiBAcGFyYW0gcGFydGlhbFBhdGggdGhlIHBhcnRpYWwgcGF0aCBvZiB0aGUgZW1pdHRlZCByZXNvdXJjZQorICAgKiBAcGFyYW0gbGFzdE1vZGlmaWVkIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgb2YgdGhlIG5ldyBhcnRpZmFjdAorICAgKiBAcmV0dXJuIGFuIGFydGlmYWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBTdHJpbmcKKyAgICovCisgIHByb3RlY3RlZCBmaW5hbCBTeW50aGV0aWNBcnRpZmFjdCBlbWl0U3RyaW5nKFRyZWVMb2dnZXIgbG9nZ2VyLCBTdHJpbmcgd2hhdCwKKyAgICAgIFN0cmluZyBwYXJ0aWFsUGF0aCwgbG9uZyBsYXN0TW9kaWZpZWQpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gZW1pdEJ5dGVzKGxvZ2dlciwgVXRpbC5nZXRCeXRlcyh3aGF0KSwgcGFydGlhbFBhdGgsIGxhc3RNb2RpZmllZCk7CisgIH0KKworICAvKioKICAgICogQSBoZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhbiBhcnRpZmFjdCBmcm9tIGFuIGFycmF5IG9mIGJ5dGVzIHdpdGggYSBzdHJvbmcKICAgICogbmFtZS4KICAgICogCkBAIC04OSw0ICsxMzUsMjQgQEAKICAgICBTdHJpbmcgc3Ryb25nTmFtZSA9IHByZWZpeCArIFV0aWwuY29tcHV0ZVN0cm9uZ05hbWUod2hhdCkgKyBzdWZmaXg7CiAgICAgcmV0dXJuIGVtaXRCeXRlcyhsb2dnZXIsIHdoYXQsIHN0cm9uZ05hbWUpOwogICB9CisKKyAgLyoqCisgICAqIEEgaGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYW4gYXJ0aWZhY3QgZnJvbSBhbiBhcnJheSBvZiBieXRlcyB3aXRoIGEgc3Ryb25nCisgICAqIG5hbWUuCisgICAqIAorICAgKiBAcGFyYW0gbG9nZ2VyIGEgVHJlZUxvZ2dlcgorICAgKiBAcGFyYW0gd2hhdCB0aGUgZGF0YSB0byBlbWl0CisgICAqIEBwYXJhbSBwcmVmaXggYSBub24tbnVsbCBzdHJpbmcgdG8gcHJlcGVuZCB0byB0aGUgaGFzaCB0byBkZXRlcm1pbmUgdGhlCisgICAqICAgICAgICAgIEFydGlmYWN0J3MgcGFydGlhbCBwYXRoCisgICAqIEBwYXJhbSBzdWZmaXggYSBub24tbnVsbCBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBoYXNoIHRvIGRldGVybWluZSB0aGUKKyAgICogICAgICAgICAgQXJ0aWZhY3QncyBwYXJ0aWFsIHBhdGgKKyAgICogQHBhcmFtIGxhc3RNb2RpZmllZCB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIG9mIHRoZSBuZXcgYXJ0aWZhY3QKKyAgICogQHJldHVybiBhbiBhcnRpZmFjdCB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBkYXRhCisgICAqLworICBwcm90ZWN0ZWQgZmluYWwgU3ludGhldGljQXJ0aWZhY3QgZW1pdFdpdGhTdHJvbmdOYW1lKFRyZWVMb2dnZXIgbG9nZ2VyLAorICAgICAgYnl0ZVtdIHdoYXQsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBzdWZmaXgsIGxvbmcgbGFzdE1vZGlmaWVkKQorICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIFN0cmluZyBzdHJvbmdOYW1lID0gcHJlZml4ICsgVXRpbC5jb21wdXRlU3Ryb25nTmFtZSh3aGF0KSArIHN1ZmZpeDsKKyAgICByZXR1cm4gZW1pdEJ5dGVzKGxvZ2dlciwgd2hhdCwgc3Ryb25nTmFtZSwgbGFzdE1vZGlmaWVkKTsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9FbWl0dGVkQXJ0aWZhY3QuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvRW1pdHRlZEFydGlmYWN0LmphdmEKaW5kZXggOTZiYzQ2Yi4uNmRjNzgwZiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9FbWl0dGVkQXJ0aWZhY3QuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL0VtaXR0ZWRBcnRpZmFjdC5qYXZhCkBAIC01Myw2ICs1MywyMCBAQAogICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CiAKICAgLyoqCisgICAqIFJldHVybnMgdGhlIHRpbWUsIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBlcG9jaCwgYXQgd2hpY2ggdGhlCisgICAqIEFydGlmYWN0IHdhcyBsYXN0IG1vZGlmaWVkLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBzZXQgdGhlIGxhc3QtbW9kaWZpZWQKKyAgICogdGltZXN0YW1wIG9uIHRoZSBmaWxlcyB3cml0dGVuIHRvIGRpc2suCisgICAqIDxwPgorICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcmV0dXJucyB0aGUgY3VycmVudCB0aW1lLiBTdWJjbGFzc2VzCisgICAqIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGEgdHlwZS1hcHByb3ByaWF0ZSB2YWx1ZS4KKyAgICogCisgICAqIEByZXR1cm4gdGhlIHRpbWUgYXQgd2hpY2ggdGhlIEFydGlmYWN0IHdhcyBsYXN0IG1vZGlmaWVkCisgICAqLworICBwdWJsaWMgbG9uZyBnZXRMYXN0TW9kaWZpZWQoKSB7CisgICAgcmV0dXJuIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICB9CisKKyAgLyoqCiAgICAqIFJldHVybnMgdGhlIHBhcnRpYWwgcGF0aCB3aXRoaW4gdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgdGhlCiAgICAqIEVtaXR0ZWRBcnRpZmFjdC4KICAgICovCmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL1N5bnRoZXRpY0FydGlmYWN0LmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL1N5bnRoZXRpY0FydGlmYWN0LmphdmEKaW5kZXggZWVkNmM2YS4uZjQ2YzdjMiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9TeW50aGV0aWNBcnRpZmFjdC5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvU3ludGhldGljQXJ0aWZhY3QuamF2YQpAQCAtMzAsOSArMzAsMTUgQEAKICAqLwogcHVibGljIGNsYXNzIFN5bnRoZXRpY0FydGlmYWN0IGV4dGVuZHMgRW1pdHRlZEFydGlmYWN0IHsKICAgcHJpdmF0ZSBmaW5hbCBGaWxlIGJhY2tpbmc7CisgIHByaXZhdGUgZmluYWwgbG9uZyBsYXN0TW9kaWZpZWQ7CiAKICAgU3ludGhldGljQXJ0aWZhY3QoVHJlZUxvZ2dlciBsb2dnZXIsIENsYXNzPD8gZXh0ZW5kcyBMaW5rZXI+IGxpbmtlclR5cGUsCiAgICAgICBTdHJpbmcgcGFydGlhbFBhdGgsIGJ5dGVbXSBkYXRhKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgdGhpcyhsb2dnZXIsIGxpbmtlclR5cGUsIHBhcnRpYWxQYXRoLCBkYXRhLCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisgIH0KKworICBTeW50aGV0aWNBcnRpZmFjdChUcmVlTG9nZ2VyIGxvZ2dlciwgQ2xhc3M8PyBleHRlbmRzIExpbmtlcj4gbGlua2VyVHlwZSwgU3RyaW5nIHBhcnRpYWxQYXRoLAorICAgICAgYnl0ZVtdIGRhdGEsIGxvbmcgbGFzdE1vZGlmaWVkKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CiAgICAgc3VwZXIobGlua2VyVHlwZSwgcGFydGlhbFBhdGgpOwogICAgIGFzc2VydCBkYXRhICE9IG51bGw7CiAKQEAgLTQ1LDYgKzUxLDcgQEAKICAgICAgICAgICArIHBhcnRpYWxQYXRoLCBlKTsKICAgICAgIHRocm93IG5ldyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uKCk7CiAgICAgfQorICAgIHRoaXMubGFzdE1vZGlmaWVkID0gbGFzdE1vZGlmaWVkOwogICB9CiAKICAgQE92ZXJyaWRlCkBAIC01OCw0ICs2NSw5IEBACiAgICAgICB0aHJvdyBuZXcgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbigpOwogICAgIH0KICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGxvbmcgZ2V0TGFzdE1vZGlmaWVkKCkgeworICAgIHJldHVybiBsYXN0TW9kaWZpZWQ7CisgIH0KK30KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9TZWxlY3Rpb25TY3JpcHRMaW5rZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9TZWxlY3Rpb25TY3JpcHRMaW5rZXIuamF2YQppbmRleCBhNTI3YzU2Li5jN2UzYTY5IDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL2ltcGwvU2VsZWN0aW9uU2NyaXB0TGlua2VyLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL1NlbGVjdGlvblNjcmlwdExpbmtlci5qYXZhCkBAIC0xNDAsMTAgKzE0MCwyMyBAQAogICAgICAgTGlua2VyQ29udGV4dCBjb250ZXh0LCBBcnRpZmFjdFNldCBhcnRpZmFjdHMpCiAgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CiAgICAgU3RyaW5nIHNlbGVjdGlvblNjcmlwdCA9IGdlbmVyYXRlU2VsZWN0aW9uU2NyaXB0KGxvZ2dlciwgY29udGV4dCwgYXJ0aWZhY3RzKTsKLSAgICBieXRlW10gc2VsZWN0aW9uU2NyaXB0Qnl0ZXMgPSBVdGlsLmdldEJ5dGVzKGNvbnRleHQub3B0aW1pemVKYXZhU2NyaXB0KAotICAgICAgICBsb2dnZXIsIHNlbGVjdGlvblNjcmlwdCkpOwotICAgIHJldHVybiBlbWl0Qnl0ZXMobG9nZ2VyLCBzZWxlY3Rpb25TY3JpcHRCeXRlcywgY29udGV4dC5nZXRNb2R1bGVOYW1lKCkKLSAgICAgICAgKyAiLm5vY2FjaGUuanMiKTsKKyAgICBzZWxlY3Rpb25TY3JpcHQgPSBjb250ZXh0Lm9wdGltaXplSmF2YVNjcmlwdChsb2dnZXIsIHNlbGVjdGlvblNjcmlwdCk7CisKKyAgICAvKgorICAgICAqIExhc3QgbW9kaWZpZWQgaXMgaW1wb3J0YW50IHRvIGtlZXAgaG9zdGVkIG1vZGUgcmVmcmVzZXMgZnJvbSBjbG9iYmVyaW5nCisgICAgICogd2ViIG1vZGUgY29tcGlsZXMuIFdlIHNldCB0aGUgdGltZXN0YW1wIG9uIHRoZSBob3N0ZWQgbW9kZSBzZWxlY3Rpb24KKyAgICAgKiBzY3JpcHQgdG8gdGhlIHNhbWUgbW9kIHRpbWUgYXMgdGhlIG1vZHVsZSAodG8gYWxsb3cgdXBkYXRlcykuIEZvciB3ZWIKKyAgICAgKiBtb2RlLCB3ZSBqdXN0IHNldCBpdCB0byBub3cuCisgICAgICovCisgICAgbG9uZyBsYXN0TW9kaWZpZWQ7CisgICAgaWYgKGFydGlmYWN0cy5maW5kKENvbXBpbGF0aW9uUmVzdWx0LmNsYXNzKS5zaXplKCkgPT0gMCkgeworICAgICAgbGFzdE1vZGlmaWVkID0gY29udGV4dC5nZXRNb2R1bGVMYXN0TW9kaWZpZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgbGFzdE1vZGlmaWVkID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRTdHJpbmcobG9nZ2VyLCBzZWxlY3Rpb25TY3JpcHQsIGNvbnRleHQuZ2V0TW9kdWxlTmFtZSgpCisgICAgICAgICsgIi5ub2NhY2hlLmpzIiwgbGFzdE1vZGlmaWVkKTsKICAgfQogCiAgIHByb3RlY3RlZCBTdHJpbmcgZ2VuZXJhdGVQcm9wZXJ0eVByb3ZpZGVyKFNlbGVjdGlvblByb3BlcnR5IHByb3ApIHsKQEAgLTI0Niw5ICsyNTksMTIgQEAKICAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsKICAgICAgIFN0cmluZ0J1ZmZlciB0ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgaWYgKGNvbXBpbGF0aW9ucy5zaXplKCkgPT0gMCkgewotICAgICAgICAvLyBXZSdsbCBzZWUgdGhpcyB3aGVuIHJ1bm5pbmcgaW4gSG9zdGVkIE1vZGUuIFRoZSB3YXkgdGhlIHNlbGVjdGlvbgotICAgICAgICAvLyB0ZW1wbGF0ZXMgYXJlIHN0cnVjdHVyZWQgaXMgc3VjaCB0aGF0IHRoaXMgbGluZSB3b24ndCBiZSBleGVjdXRlZAotICAgICAgICB0ZXh0LmFwcGVuZCgic3Ryb25nTmFtZSA9IG51bGw7Iik7CisgICAgICAgIC8vIEhvc3RlZCBtb2RlIGxpbmsuCisgICAgICAgIHRleHQuYXBwZW5kKCJhbGVydChcIkdXVCBtb2R1bGUgJyIKKyAgICAgICAgICAgICsgY29udGV4dC5nZXRNb2R1bGVOYW1lKCkKKyAgICAgICAgICAgICsgIicgbmVlZHMgdG8gYmUgKHJlKWNvbXBpbGVkLCAiCisgICAgICAgICAgICArICJwbGVhc2UgcnVuIGEgY29tcGlsZSBvciB1c2UgdGhlIENvbXBpbGUvQnJvd3NlIGJ1dHRvbiBpbiBob3N0ZWQgbW9kZVwiKTsiKTsKKyAgICAgICAgdGV4dC5hcHBlbmQoInJldHVybjsiKTsKIAogICAgICAgfSBlbHNlIGlmIChjb21waWxhdGlvbnMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgLy8gSnVzdCBvbmUgZGlzdGluY3QgY29tcGlsYXRpb247IG5vIG5lZWQgdG8gZXZhbHVhdGUgcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL1N0YW5kYXJkR2VuZXJhdGVkUmVzb3VyY2UuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9TdGFuZGFyZEdlbmVyYXRlZFJlc291cmNlLmphdmEKaW5kZXggZDUyMGYzMy4uYzI3YTdhZiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL1N0YW5kYXJkR2VuZXJhdGVkUmVzb3VyY2UuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL2ltcGwvU3RhbmRhcmRHZW5lcmF0ZWRSZXNvdXJjZS5qYXZhCkBAIC0yMCwzMCArMjAsMzYgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5VbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0Lmxpbmtlci5HZW5lcmF0ZWRSZXNvdXJjZTsKIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwogCiAvKioKICAqIFRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgR2VuZXJhdGVkUmVzb3VyY2V9LgogICovCiBwdWJsaWMgY2xhc3MgU3RhbmRhcmRHZW5lcmF0ZWRSZXNvdXJjZSBleHRlbmRzIEdlbmVyYXRlZFJlc291cmNlIHsKLSAgcHJpdmF0ZSBmaW5hbCBVUkwgdXJsOworICBwcml2YXRlIGZpbmFsIEZpbGUgZmlsZTsKIAogICBwdWJsaWMgU3RhbmRhcmRHZW5lcmF0ZWRSZXNvdXJjZShDbGFzczw/IGV4dGVuZHMgR2VuZXJhdG9yPiBnZW5lcmF0b3JUeXBlLAotICAgICAgU3RyaW5nIHBhcnRpYWxQYXRoLCBVUkwgdXJsKSB7CisgICAgICBTdHJpbmcgcGFydGlhbFBhdGgsIEZpbGUgZmlsZSkgewogICAgIHN1cGVyKFN0YW5kYXJkTGlua2VyQ29udGV4dC5jbGFzcywgZ2VuZXJhdG9yVHlwZSwgcGFydGlhbFBhdGgpOwotICAgIHRoaXMudXJsID0gdXJsOworICAgIHRoaXMuZmlsZSA9IGZpbGU7CiAgIH0KIAogICBAT3ZlcnJpZGUKICAgcHVibGljIElucHV0U3RyZWFtIGdldENvbnRlbnRzKFRyZWVMb2dnZXIgbG9nZ2VyKQogICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewogICAgIHRyeSB7Ci0gICAgICByZXR1cm4gdXJsLm9wZW5TdHJlYW0oKTsKKyAgICAgIHJldHVybiBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwogICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgIlVuYWJsZSB0byBvcGVuIGZpbGUiLCBlKTsKICAgICAgIHRocm93IG5ldyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uKCk7CiAgICAgfQogICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBsb25nIGdldExhc3RNb2RpZmllZCgpIHsKKyAgICByZXR1cm4gZmlsZS5sYXN0TW9kaWZpZWQoKTsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL1N0YW5kYXJkTGlua2VyQ29udGV4dC5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL1N0YW5kYXJkTGlua2VyQ29udGV4dC5qYXZhCmluZGV4IDFhNGU2NDkuLjQ1NGY2NDggMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9TdGFuZGFyZExpbmtlckNvbnRleHQuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL2ltcGwvU3RhbmRhcmRMaW5rZXJDb250ZXh0LmphdmEKQEAgLTExNyw2ICsxMTcsNyBAQAogICBwcml2YXRlIGZpbmFsIE1hcDxDbGFzczw/IGV4dGVuZHMgTGlua2VyPiwgU3RyaW5nPiBsaW5rZXJTaG9ydE5hbWVzID0gbmV3IEhhc2hNYXA8Q2xhc3M8PyBleHRlbmRzIExpbmtlcj4sIFN0cmluZz4oKTsKIAogICBwcml2YXRlIGZpbmFsIFN0cmluZyBtb2R1bGVGdW5jdGlvbk5hbWU7CisgIHByaXZhdGUgZmluYWwgbG9uZyBtb2R1bGVMYXN0TW9kaWZpZWQ7CiAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1vZHVsZU5hbWU7CiAKICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdGFuZGFyZFNlbGVjdGlvblByb3BlcnR5PiBwcm9wZXJ0aWVzQnlOYW1lID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdGFuZGFyZFNlbGVjdGlvblByb3BlcnR5PigpOwpAQCAtMTMzLDYgKzEzNCw3IEBACiAgICAgdGhpcy5qanNPcHRpb25zID0gampzT3B0aW9uczsKICAgICB0aGlzLm1vZHVsZUZ1bmN0aW9uTmFtZSA9IG1vZHVsZS5nZXRGdW5jdGlvbk5hbWUoKTsKICAgICB0aGlzLm1vZHVsZU5hbWUgPSBtb2R1bGUuZ2V0TmFtZSgpOworICAgIHRoaXMubW9kdWxlTGFzdE1vZGlmaWVkID0gbW9kdWxlLmxhc3RNb2RpZmllZCgpOwogCiAgICAgLy8gU29ydCB0aGUgbGlua2VycyBpbnRvIHRoZSBvcmRlciB0aGV5IHNob3VsZCBhY3R1YWxseSBydW4uCiAgICAgTGlzdDxDbGFzczw/IGV4dGVuZHMgTGlua2VyPj4gc29ydGVkTGlua2VycyA9IG5ldyBBcnJheUxpc3Q8Q2xhc3M8PyBleHRlbmRzIExpbmtlcj4+KCk7CkBAIC0zMDIsNiArMzA0LDEwIEBACiAgICAgcmV0dXJuIG1vZHVsZUZ1bmN0aW9uTmFtZTsKICAgfQogCisgIHB1YmxpYyBsb25nIGdldE1vZHVsZUxhc3RNb2RpZmllZCgpIHsKKyAgICByZXR1cm4gbW9kdWxlTGFzdE1vZGlmaWVkOworICB9CisKICAgcHVibGljIFN0cmluZyBnZXRNb2R1bGVOYW1lKCkgewogICAgIHJldHVybiBtb2R1bGVOYW1lOwogICB9CkBAIC00NTIsMTAgKzQ1OCwxMSBAQAogICAgICAgICBvdXRGaWxlID0gbmV3IEZpbGUob3V0cHV0UGF0aCwgYXJ0aWZhY3QuZ2V0UGFydGlhbFBhdGgoKSk7CiAgICAgICB9CiAKLSAgICAgIC8vIFRPRE8oc2NvdHRiKTogZmlndXJlIG91dCBob3cgdG8gZG8gYSBjbGVhbi4KLSAgICAgIC8vIGFzc2VydCAhb3V0RmlsZS5leGlzdHMoKSA6ICJBdHRlbXB0ZWQgdG8gb3ZlcndyaXRlICIgKwotICAgICAgLy8gb3V0RmlsZS5nZXRQYXRoKCk7Ci0gICAgICBVdGlsLmNvcHkoYXJ0aWZhY3RMb2dnZXIsIGFydGlmYWN0LmdldENvbnRlbnRzKGFydGlmYWN0TG9nZ2VyKSwgb3V0RmlsZSk7CisgICAgICBpZiAoIW91dEZpbGUuZXhpc3RzKCkKKyAgICAgICAgICB8fCAob3V0RmlsZS5sYXN0TW9kaWZpZWQoKSA8PSBhcnRpZmFjdC5nZXRMYXN0TW9kaWZpZWQoKSkpIHsKKyAgICAgICAgVXRpbC5jb3B5KGFydGlmYWN0TG9nZ2VyLCBhcnRpZmFjdC5nZXRDb250ZW50cyhhcnRpZmFjdExvZ2dlciksIG91dEZpbGUpOworICAgICAgICBvdXRGaWxlLnNldExhc3RNb2RpZmllZChhcnRpZmFjdC5nZXRMYXN0TW9kaWZpZWQoKSk7CisgICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9TdGFuZGFyZFB1YmxpY1Jlc291cmNlLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL2ltcGwvU3RhbmRhcmRQdWJsaWNSZXNvdXJjZS5qYXZhCmluZGV4IDJhMWEwYmQuLjc4NDMxYzMgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9TdGFuZGFyZFB1YmxpY1Jlc291cmNlLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL1N0YW5kYXJkUHVibGljUmVzb3VyY2UuamF2YQpAQCAtMzcsMTAgKzM3LDEzIEBACiAgICAqLwogICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBTZXJpYWxpemVkUHVibGljUmVzb3VyY2UgZXh0ZW5kcyBQdWJsaWNSZXNvdXJjZSB7CiAgICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gZGF0YTsKKyAgICBwcml2YXRlIGZpbmFsIGxvbmcgbGFzdE1vZGlmaWVkOwogCi0gICAgcHJvdGVjdGVkIFNlcmlhbGl6ZWRQdWJsaWNSZXNvdXJjZShTdHJpbmcgcGFydGlhbFBhdGgsIGJ5dGVbXSBkYXRhKSB7CisgICAgcHJvdGVjdGVkIFNlcmlhbGl6ZWRQdWJsaWNSZXNvdXJjZShTdHJpbmcgcGFydGlhbFBhdGgsIGJ5dGVbXSBkYXRhLAorICAgICAgICBsb25nIGxhc3RNb2RpZmllZCkgewogICAgICAgc3VwZXIoU3RhbmRhcmRMaW5rZXJDb250ZXh0LmNsYXNzLCBwYXJ0aWFsUGF0aCk7CiAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgdGhpcy5sYXN0TW9kaWZpZWQgPSBsYXN0TW9kaWZpZWQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC00OCw2ICs1MSwxMSBAQAogICAgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CiAgICAgICByZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGRhdGEpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBsb25nIGdldExhc3RNb2RpZmllZCgpIHsKKyAgICAgIHJldHVybiBsYXN0TW9kaWZpZWQ7CisgICAgfQogICB9CiAKICAgcHJpdmF0ZSBmaW5hbCBSZXNvdXJjZSByZXNvdXJjZTsKQEAgLTYzLDYgKzcxLDExIEBACiAgICAgcmV0dXJuIHJlc291cmNlLm9wZW5Db250ZW50cygpOwogICB9CiAKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBsb25nIGdldExhc3RNb2RpZmllZCgpIHsKKyAgICByZXR1cm4gcmVzb3VyY2UuZ2V0TGFzdE1vZGlmaWVkKCk7CisgIH0KKwogICBwcml2YXRlIE9iamVjdCB3cml0ZVJlcGxhY2UoKSB7CiAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgU2VyaWFsaXphYmxlKSB7CiAgICAgICByZXR1cm4gdGhpczsKQEAgLTcxLDcgKzg0LDggQEAKICAgICB0cnkgewogICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CiAgICAgICBVdGlsLmNvcHkocmVzb3VyY2Uub3BlbkNvbnRlbnRzKCksIGJhb3MpOwotICAgICAgcmV0dXJuIG5ldyBTZXJpYWxpemVkUHVibGljUmVzb3VyY2UoZ2V0UGFydGlhbFBhdGgoKSwgYmFvcy50b0J5dGVBcnJheSgpKTsKKyAgICAgIHJldHVybiBuZXcgU2VyaWFsaXplZFB1YmxpY1Jlc291cmNlKGdldFBhcnRpYWxQYXRoKCksIGJhb3MudG9CeXRlQXJyYXkoKSwKKyAgICAgICAgICBnZXRMYXN0TW9kaWZpZWQoKSk7CiAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL2hvc3RlZC5odG1sIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvZXh0L2xpbmtlci9pbXBsL2hvc3RlZC5odG1sCmluZGV4IGQwMmJlMDcuLmFlZWM5NWUgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9ob3N0ZWQuaHRtbAorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9leHQvbGlua2VyL2ltcGwvaG9zdGVkLmh0bWwKQEAgLTE3LDcgKzE3LDcgQEAKIGZ1bmN0aW9uIGd3dE9uTG9hZChlcnJGbiwgbW9kTmFtZSwgbW9kQmFzZSl7CiAgICRtb2R1bGVOYW1lID0gbW9kTmFtZTsKICAgJG1vZHVsZUJhc2UgPSBtb2RCYXNlOwotICBpZiAoIWV4dGVybmFsLmd3dE9uTG9hZCh3aW5kb3csIG1vZE5hbWUsICIxLjUiKSkgeworICBpZiAoIWV4dGVybmFsLmd3dE9uTG9hZCh3aW5kb3csIG1vZE5hbWUsICIxLjYiKSkgewogICAgIGlmIChlcnJGbikgewogICAgICAgZXJyRm4obW9kTmFtZSk7CiAgICAgfQpAQCAtMjksNyArMjksNyBAQAogfTsKIAogd2luZG93Lm9udW5sb2FkID0gZnVuY3Rpb24oKSB7Ci0gIGV4dGVybmFsLmd3dE9uTG9hZCh3aW5kb3csIG51bGwsICIxLjUiKTsKKyAgZXh0ZXJuYWwuZ3d0T25Mb2FkKHdpbmRvdywgbnVsbCwgIjEuNiIpOwogfTsKIAogd2luZG93Ll9fZ3d0X21vZHVsZV9pZCA9IDA7CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9saW5rZXIvSUZyYW1lTGlua2VyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9saW5rZXIvSUZyYW1lTGlua2VyLmphdmEKaW5kZXggOGU1NGQ4Zi4uZjU3ODdmYyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvbGlua2VyL0lGcmFtZUxpbmtlci5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2xpbmtlci9JRnJhbWVMaW5rZXIuamF2YQpAQCAtMTksMTUgKzE5LDE4IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVHJlZUxvZ2dlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5VbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0Lmxpbmtlci5BcnRpZmFjdFNldDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5saW5rZXIuRW1pdHRlZEFydGlmYWN0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0Lmxpbmtlci5MaW5rZXJPcmRlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5saW5rZXIuTGlua2VyT3JkZXIuT3JkZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQubGlua2VyLmltcGwuSG9zdGVkTW9kZUxpbmtlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5saW5rZXIuaW1wbC5TZWxlY3Rpb25TY3JpcHRMaW5rZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LkFib3V0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLkRlZmF1bHRUZXh0T3V0cHV0OwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlV0aWw7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5VdGlsaXR5OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwogCiAvKioKICAqIEltcGxlbWVudHMgdGhlIGNhbm9uaWNhbCBHV1QgYm9vdHN0cmFwIHNlcXVlbmNlIHRoYXQgbG9hZHMgdGhlIEdXVCBtb2R1bGUgaW4KQEAgLTQ4LDggKzUxLDM0IEBACiAgICAgdHJ5IHsKICAgICAgIC8vIEFkZCBob3N0ZWQgbW9kZSBpZnJhbWUgY29udGVudHMKICAgICAgIC8vIFRPRE8gbW92ZSB0aGlzIGludG8gb3duIGltcGwgcGFja2FnZSBpZiBIb3N0ZWRNb2RlTGlua2VyIGdvZXMgYXdheQotICAgICAgU3RyaW5nIGhvc3RlZEh0bWwgPSBVdGlsaXR5LmdldEZpbGVGcm9tQ2xhc3NQYXRoKCJjb20vZ29vZ2xlL2d3dC9jb3JlL2V4dC9saW5rZXIvaW1wbC9ob3N0ZWQuaHRtbCIpOwotICAgICAgdG9SZXR1cm4uYWRkKGVtaXRCeXRlcyhsb2dnZXIsIFV0aWwuZ2V0Qnl0ZXMoaG9zdGVkSHRtbCksICJob3N0ZWQuaHRtbCIpKTsKKyAgICAgIFVSTCByZXNvdXJjZSA9IEhvc3RlZE1vZGVMaW5rZXIuY2xhc3MuZ2V0UmVzb3VyY2UoImhvc3RlZC5odG1sIik7CisgICAgICBpZiAocmVzb3VyY2UgPT0gbnVsbCkgeworICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsCisgICAgICAgICAgICAiVW5hYmxlIHRvIGZpbmQgc3VwcG9ydCByZXNvdXJjZSAnaG9zdGVkLmh0bWwnIik7CisgICAgICAgIHRocm93IG5ldyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uKCk7CisgICAgICB9CisKKyAgICAgIGZpbmFsIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHJlc291cmNlLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAvLyBUT0RPOiBleHRyYWN0IFVSTEFydGlmYWN0IGNsYXNzPworICAgICAgRW1pdHRlZEFydGlmYWN0IGhvc3RlZEh0bWwgPSBuZXcgRW1pdHRlZEFydGlmYWN0KElGcmFtZUxpbmtlci5jbGFzcywKKyAgICAgICAgICAiaG9zdGVkLmh0bWwiKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0Q29udGVudHMoVHJlZUxvZ2dlciBsb2dnZXIpCisgICAgICAgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiVW5hYmxlIHRvIGNvcHkgc3VwcG9ydCByZXNvdXJjZSIsIGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24oKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TGFzdE1vZGlmaWVkKCkgeworICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLmdldExhc3RNb2RpZmllZCgpOworICAgICAgICB9CisgICAgICB9OworICAgICAgdG9SZXR1cm4uYWRkKGhvc3RlZEh0bWwpOwogICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgIlVuYWJsZSB0byBjb3B5IHN1cHBvcnQgcmVzb3VyY2UiLCBlKTsKICAgICAgIHRocm93IG5ldyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uKCk7CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9saW5rZXIvSUZyYW1lVGVtcGxhdGUuanMgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvY29yZS9saW5rZXIvSUZyYW1lVGVtcGxhdGUuanMKaW5kZXggMmEyYjkzNy4uNmNlMDEzMSAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvbGlua2VyL0lGcmFtZVRlbXBsYXRlLmpzCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL2xpbmtlci9JRnJhbWVUZW1wbGF0ZS5qcwpAQCAtNjUsNiArNjUsNyBAQAogICAvLyAtLS0tLS0tLS0tLS0tLS0gSU5URVJOQUwgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLQogCiAgIGZ1bmN0aW9uIGlzSG9zdGVkTW9kZSgpIHsKKyAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CiAgICAgdHJ5IHsKICAgICAgIHZhciBxdWVyeSA9ICR3bmQubG9jYXRpb24uc2VhcmNoOwogICAgICAgcmV0dXJuIChxdWVyeS5pbmRleE9mKCdnd3QuaG9zdGVkPScpICE9IC0xIApAQCAtNzMsOCArNzQsOSBAQAogICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgIC8vIERlZmVuc2l2ZTogc29tZSB2ZXJzaW9ucyBvZiBJRTcgcmVwb3J0ZWRseSBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uCiAgICAgICAvLyBldmFsdWF0aW5nICJleHRlcm5hbC5nd3RPbkxvYWQiLgotICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBpc0hvc3RlZE1vZGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc3VsdDsgfTsKKyAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgLy8gQ2FsbGVkIGJ5IG9uU2NyaXB0TG9hZCgpLCBvbkluamVjdGlvbkRvbmUoKSwgYW5kIG9ubG9hZCgpLiBJdCBjYXVzZXMKQEAgLTM0MCw2ICszNDIsMTkgQEAKIAogICAvLyBkbyBpdCBlYXJseSBmb3IgY29tcGlsZS9icm93c2UgcmViYXNpbmcKICAgY29tcHV0ZVNjcmlwdEJhc2UoKTsKKworICB2YXIgc3Ryb25nTmFtZTsKKyAgdmFyIGluaXRpYWxIdG1sOworICBpZiAoaXNIb3N0ZWRNb2RlKCkpIHsKKyAgICBpZiAoJHduZC5leHRlcm5hbC5pbml0TW9kdWxlICYmICR3bmQuZXh0ZXJuYWwuaW5pdE1vZHVsZSgnX19NT0RVTEVfTkFNRV9fJykpIHsKKyAgICAgIC8vIFJlZnJlc2ggdGhlIHBhZ2UgdG8gdXBkYXRlIHRoaXMgc2VsZWN0aW9uIHNjcmlwdCEKKyAgICAgICR3bmQubG9jYXRpb24ucmVsb2FkKCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGluaXRpYWxIdG1sID0gImhvc3RlZC5odG1sP19fTU9EVUxFX0ZVTkNfXyI7CisgICAgc3Ryb25nTmFtZSA9ICIiOworICB9CisKICAgcHJvY2Vzc01ldGFzKCk7CiAKICAgLy8gLS0tLS0tLS0tLS0tLS0tIFdJTkRPVyBPTkxPQUQgSE9PSyAtLS0tLS0tLS0tLS0tLS0KQEAgLTM1MiwxMiArMzY3LDcgQEAKICAgICB0eXBlOiAnc2VsZWN0aW5nUGVybXV0YXRpb24nCiAgIH0pOwogCi0gIHZhciBzdHJvbmdOYW1lOwotICB2YXIgaW5pdGlhbEh0bWw7Ci0gIGlmIChpc0hvc3RlZE1vZGUoKSkgewotCWluaXRpYWxIdG1sID0gImhvc3RlZC5odG1sP19fTU9EVUxFX0ZVTkNfXyI7Ci0gICAgc3Ryb25nTmFtZSA9ICIiOwotICB9IGVsc2UgeworICBpZiAoIWlzSG9zdGVkTW9kZSgpKSB7CiAgICAgdHJ5IHsKIC8vIF9fUEVSTVVUQVRJT05TX0JFR0lOX18KICAgICAgIC8vIFBlcm11dGF0aW9uIGxvZ2ljCmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1NoZWxsT3B0aW9ucy5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9BcmdQcm9jZXNzb3JCYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCA2MCUKY29weSBmcm9tIGRldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvU2hlbGxPcHRpb25zLmphdmEKY29weSB0byBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0FyZ1Byb2Nlc3NvckJhc2UuamF2YQppbmRleCA3MWVhNGU4Li4zZjM4OTIwIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1NoZWxsT3B0aW9ucy5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQXJnUHJvY2Vzc29yQmFzZS5qYXZhCkBAIC0xNSwxNSArMTUsMjMgQEAKICAqLwogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5kZXY7CiAKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuampzLkpKU09wdGlvbnM7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLk9wdGlvbkV4dHJhRGlyOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5PcHRpb25HZW5EaXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLk9wdGlvbkxvZ0xldmVsOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5PcHRpb25PdXREaXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5Ub29sQmFzZTsKIAogLyoqCi0gKiBUaGUgY29tcGxldGUgc2V0IG9mIG9wdGlvbnMgZm9yIHRoZSBHV1QgY29tcGlsZXIuCisgKiBCYXNlIGNsYXNzIGZvciBuZXctc3R5bGUgYXJndW1lbnQgcHJvY2Vzc29ycy4KICAqLwotcHVibGljIGludGVyZmFjZSBTaGVsbE9wdGlvbnMgZXh0ZW5kcyBKSlNPcHRpb25zLCBPcHRpb25Mb2dMZXZlbCwgT3B0aW9uT3V0RGlyLAotICAgIE9wdGlvbkdlbkRpciwgT3B0aW9uRXh0cmFEaXIgeworYWJzdHJhY3QgY2xhc3MgQXJnUHJvY2Vzc29yQmFzZSBleHRlbmRzIFRvb2xCYXNlIHsKKyAgLyoKKyAgICogT3ZlcnJpZGRlbiB0byBtYWtlIHB1YmxpYy4KKyAgICovCisgIEBPdmVycmlkZQorICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwcm9jZXNzQXJncyhTdHJpbmdbXSBhcmdzKSB7CisgICAgcmV0dXJuIHN1cGVyLnByb2Nlc3NBcmdzKGFyZ3MpOworICB9CisKKyAgLyoKKyAgICogTWFkZSBhYnN0cmFjdCB0byBmb3JjZSBvdmVycmlkZS4KKyAgICovCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKIH0KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZUFyZ1Byb2Nlc3Nvci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlQXJnUHJvY2Vzc29yLmphdmEKaW5kZXggZmRjNWU5OS4uNTZlYjMzYyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlQXJnUHJvY2Vzc29yLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlQXJnUHJvY2Vzc29yLmphdmEKQEAgLTE5LDI0ICsxOSwxMiBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyTW9kdWxlTmFtZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlclRyZWVMb2dnZXJGbGFnOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyV29ya0RpclJlcXVpcmVkOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuVG9vbEJhc2U7CiAKLWFic3RyYWN0IGNsYXNzIENvbXBpbGVBcmdQcm9jZXNzb3IgZXh0ZW5kcyBUb29sQmFzZSB7CithYnN0cmFjdCBjbGFzcyBDb21waWxlQXJnUHJvY2Vzc29yIGV4dGVuZHMgQXJnUHJvY2Vzc29yQmFzZSB7CiAgIHB1YmxpYyBDb21waWxlQXJnUHJvY2Vzc29yKENvbXBpbGVUYXNrT3B0aW9ucyBvcHRpb25zKSB7CiAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyTG9nTGV2ZWwob3B0aW9ucykpOwogICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlclRyZWVMb2dnZXJGbGFnKG9wdGlvbnMpKTsKICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJXb3JrRGlyUmVxdWlyZWQob3B0aW9ucykpOwogICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlck1vZHVsZU5hbWUob3B0aW9ucykpOwogICB9Ci0KLSAgLyoKLSAgICogT3ZlcnJpZGRlbiB0byBtYWtlIHB1YmxpYy4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwcm9jZXNzQXJncyhTdHJpbmdbXSBhcmdzKSB7Ci0gICAgcmV0dXJuIHN1cGVyLnByb2Nlc3NBcmdzKGFyZ3MpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlUGVybXMuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZVBlcm1zLmphdmEKaW5kZXggMTA2YzJlMS4uYTM1ZGE4NSAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlUGVybXMuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0NvbXBpbGVQZXJtcy5qYXZhCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgLyoqCiAgICAqIENvbXBpbGUgbXVsdGlwbGUgcGVybXV0YXRpb25zLgogICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbXBpbGUoVHJlZUxvZ2dlciBsb2dnZXIsCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb21waWxlKFRyZWVMb2dnZXIgbG9nZ2VyLAogICAgICAgUHJlY29tcGlsYXRpb24gcHJlY29tcGlsYXRpb24sIFBlcm11dGF0aW9uW10gcGVybXMsIGludCBsb2NhbFdvcmtlcnMsCiAgICAgICBMaXN0PEZpbGVCYWNrZWRPYmplY3Q8UGVybXV0YXRpb25SZXN1bHQ+PiByZXN1bHRGaWxlcykKICAgICAgIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKQEAgLTIwMCw3ICsyMDAsNiBAQAogICAgIFBlcm11dGF0aW9uV29ya2VyRmFjdG9yeS5jb21waWxlUGVybXV0YXRpb25zKGxvZ2dlciwgcHJlY29tcGlsYXRpb24sIHBlcm1zLAogICAgICAgICBsb2NhbFdvcmtlcnMsIHJlc3VsdEZpbGVzKTsKICAgICBicmFuY2gubG9nKFRyZWVMb2dnZXIuSU5GTywgIlBlcm11dGF0aW9uIGNvbXBpbGUgc3VjY2VlZGVkIik7Ci0gICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CkBAIC0yNTMsNTAgKzI1Miw1NCBAQAogICB9CiAKICAgcHVibGljIGJvb2xlYW4gcnVuKFRyZWVMb2dnZXIgbG9nZ2VyKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0gICAgRmlsZSBwcmVjb21waWxhdGlvbkZpbGUgPSBuZXcgRmlsZShvcHRpb25zLmdldENvbXBpbGVyV29ya0RpcigpLAotICAgICAgICBQcmVjb21waWxlLlBSRUNPTVBJTEFUSU9OX0ZJTEVOQU1FKTsKLSAgICBpZiAoIXByZWNvbXBpbGF0aW9uRmlsZS5leGlzdHMoKSkgewotICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiRmlsZSBub3QgZm91bmQgJyIKLSAgICAgICAgICArIHByZWNvbXBpbGF0aW9uRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKQotICAgICAgICAgICsgIic7IHBsZWFzZSBydW4gUHJlY29tcGlsZSBmaXJzdCIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBQcmVjb21waWxhdGlvbiBwcmVjb21waWxhdGlvbjsKLSAgICB0cnkgewotICAgICAgLyoKLSAgICAgICAqIFRPRE86IGRvbid0IGJvdGhlciBkZXNlcmlhbGl6aW5nIHRoZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLgotICAgICAgICovCi0gICAgICBwcmVjb21waWxhdGlvbiA9IFV0aWwucmVhZEZpbGVBc09iamVjdChwcmVjb21waWxhdGlvbkZpbGUsCi0gICAgICAgICAgUHJlY29tcGlsYXRpb24uY2xhc3MpOwotICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiVW5hYmxlIHRvIGRlc2VyaWFsaXplICciCi0gICAgICAgICAgKyBwcmVjb21waWxhdGlvbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiJyIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFBlcm11dGF0aW9uW10gcGVybXMgPSBwcmVjb21waWxhdGlvbi5nZXRQZXJtdXRhdGlvbnMoKTsKLSAgICBQZXJtdXRhdGlvbltdIHN1YlBlcm1zOwotICAgIGludFtdIHBlcm1zVG9SdW4gPSBvcHRpb25zLmdldFBlcm1zVG9Db21waWxlKCk7Ci0gICAgaWYgKHBlcm1zVG9SdW4ubGVuZ3RoID09IDApIHsKLSAgICAgIHN1YlBlcm1zID0gcGVybXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGludCBpID0gMDsKLSAgICAgIHN1YlBlcm1zID0gbmV3IFBlcm11dGF0aW9uW3Blcm1zVG9SdW4ubGVuZ3RoXTsKLSAgICAgIC8vIFJhbmdlIGNoZWNrIHRoZSBzdXBwbGllZCBwZXJtcy4KLSAgICAgIGZvciAoaW50IHBlcm1Ub1J1biA6IHBlcm1zVG9SdW4pIHsKLSAgICAgICAgaWYgKHBlcm1Ub1J1biA+PSBwZXJtcy5sZW5ndGgpIHsKLSAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJUaGUgc3BlY2lmaWVkIHBlcm0gbnVtYmVyICciCi0gICAgICAgICAgICAgICsgcGVybVRvUnVuICsgIicgaXMgdG9vIGJpZzsgdGhlIG1heGltdW0gdmFsdWUgaXMgIgotICAgICAgICAgICAgICArIChwZXJtcy5sZW5ndGggLSAxKSArICInIik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHN1YlBlcm1zW2krK10gPSBwZXJtc1twZXJtVG9SdW5dOworICAgIGZvciAoU3RyaW5nIG1vZHVsZU5hbWUgOiBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkpIHsKKyAgICAgIEZpbGUgY29tcGlsZXJXb3JrRGlyID0gb3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIobW9kdWxlTmFtZSk7CisgICAgICBGaWxlIHByZWNvbXBpbGF0aW9uRmlsZSA9IG5ldyBGaWxlKGNvbXBpbGVyV29ya0RpciwKKyAgICAgICAgICBQcmVjb21waWxlLlBSRUNPTVBJTEFUSU9OX0ZJTEVOQU1FKTsKKyAgICAgIGlmICghcHJlY29tcGlsYXRpb25GaWxlLmV4aXN0cygpKSB7CisgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgIkZpbGUgbm90IGZvdW5kICciCisgICAgICAgICAgICArIHByZWNvbXBpbGF0aW9uRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKQorICAgICAgICAgICAgKyAiJzsgcGxlYXNlIHJ1biBQcmVjb21waWxlIGZpcnN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICB9CisgICAgICBQcmVjb21waWxhdGlvbiBwcmVjb21waWxhdGlvbjsKKyAgICAgIHRyeSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86IGRvbid0IGJvdGhlciBkZXNlcmlhbGl6aW5nIHRoZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJlY29tcGlsYXRpb24gPSBVdGlsLnJlYWRGaWxlQXNPYmplY3QocHJlY29tcGlsYXRpb25GaWxlLAorICAgICAgICAgICAgUHJlY29tcGlsYXRpb24uY2xhc3MpOworICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSAnIgorICAgICAgICAgICAgKyBwcmVjb21waWxhdGlvbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiJyIsIGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CiAKLSAgICBMaXN0PEZpbGVCYWNrZWRPYmplY3Q8UGVybXV0YXRpb25SZXN1bHQ+PiByZXN1bHRGaWxlcyA9IG1ha2VSZXN1bHRGaWxlcygKLSAgICAgICAgb3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIoKSwgcGVybXMpOwotICAgIHJldHVybiBjb21waWxlKGxvZ2dlciwgcHJlY29tcGlsYXRpb24sIHN1YlBlcm1zLCBvcHRpb25zLmdldExvY2FsV29ya2VycygpLAotICAgICAgICByZXN1bHRGaWxlcyk7CisgICAgICBQZXJtdXRhdGlvbltdIHBlcm1zID0gcHJlY29tcGlsYXRpb24uZ2V0UGVybXV0YXRpb25zKCk7CisgICAgICBQZXJtdXRhdGlvbltdIHN1YlBlcm1zOworICAgICAgaW50W10gcGVybXNUb1J1biA9IG9wdGlvbnMuZ2V0UGVybXNUb0NvbXBpbGUoKTsKKyAgICAgIGlmIChwZXJtc1RvUnVuLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIHN1YlBlcm1zID0gcGVybXM7CisgICAgICB9IGVsc2UgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHN1YlBlcm1zID0gbmV3IFBlcm11dGF0aW9uW3Blcm1zVG9SdW4ubGVuZ3RoXTsKKyAgICAgICAgLy8gUmFuZ2UgY2hlY2sgdGhlIHN1cHBsaWVkIHBlcm1zLgorICAgICAgICBmb3IgKGludCBwZXJtVG9SdW4gOiBwZXJtc1RvUnVuKSB7CisgICAgICAgICAgaWYgKHBlcm1Ub1J1biA+PSBwZXJtcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgIlRoZSBzcGVjaWZpZWQgcGVybSBudW1iZXIgJyIKKyAgICAgICAgICAgICAgICArIHBlcm1Ub1J1biArICInIGlzIHRvbyBiaWc7IHRoZSBtYXhpbXVtIHZhbHVlIGlzICIKKyAgICAgICAgICAgICAgICArIChwZXJtcy5sZW5ndGggLSAxKSArICInIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIHN1YlBlcm1zW2krK10gPSBwZXJtc1twZXJtVG9SdW5dOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIExpc3Q8RmlsZUJhY2tlZE9iamVjdDxQZXJtdXRhdGlvblJlc3VsdD4+IHJlc3VsdEZpbGVzID0gbWFrZVJlc3VsdEZpbGVzKAorICAgICAgICAgIGNvbXBpbGVyV29ya0Rpciwgc3ViUGVybXMpOworICAgICAgY29tcGlsZShsb2dnZXIsIHByZWNvbXBpbGF0aW9uLCBzdWJQZXJtcywgb3B0aW9ucy5nZXRMb2NhbFdvcmtlcnMoKSwKKyAgICAgICAgICByZXN1bHRGaWxlcyk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogICB9CiB9CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0NvbXBpbGVQZXJtc1NlcnZlci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlUGVybXNTZXJ2ZXIuamF2YQppbmRleCBkZjE0ZTk4Li4zOTcxZWY3IDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0NvbXBpbGVQZXJtc1NlcnZlci5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZVBlcm1zU2VydmVyLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uTG9nTGV2ZWw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwubG9nLlByaW50V3JpdGVyVHJlZUxvZ2dlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJTdHJpbmc7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5Ub29sQmFzZTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKQEAgLTE2NCw3ICsxNjMsNyBAQAogICAgIH0KICAgfQogCi0gIHN0YXRpYyBjbGFzcyBBcmdQcm9jZXNzb3IgZXh0ZW5kcyBUb29sQmFzZSB7CisgIHN0YXRpYyBjbGFzcyBBcmdQcm9jZXNzb3IgZXh0ZW5kcyBBcmdQcm9jZXNzb3JCYXNlIHsKICAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKENvbXBpbGVTZXJ2ZXJPcHRpb25zIG9wdGlvbnMpIHsKICAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckxvZ0xldmVsKG9wdGlvbnMpKTsKICAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckNvbXBpbGVIb3N0KG9wdGlvbnMpKTsKQEAgLTE3MiwxNCArMTcxLDYgQEAKICAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckNvb2tpZShvcHRpb25zKSk7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBPdmVycmlkZGVuIHRvIG1ha2UgcHVibGljLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHByb2Nlc3NBcmdzKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgIHJldHVybiBzdXBlci5wcm9jZXNzQXJncyhhcmdzKTsKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICByZXR1cm4gQ29tcGlsZVBlcm1zU2VydmVyLmNsYXNzLmdldE5hbWUoKTsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZVRhc2tPcHRpb25zSW1wbC5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlVGFza09wdGlvbnNJbXBsLmphdmEKaW5kZXggZTkyZDFjOC4uY2FiYmM0ZiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlVGFza09wdGlvbnNJbXBsLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlVGFza09wdGlvbnNJbXBsLmphdmEKQEAgLTE4LDYgKzE4LDggQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyLlR5cGU7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCiAgKiBDb25jcmV0ZSBjbGFzcyB0byBpbXBsZW1lbnQgY29tcGlsZXIgdGFzayBvcHRpb25zLgpAQCAtMjUsNyArMjcsNyBAQAogY2xhc3MgQ29tcGlsZVRhc2tPcHRpb25zSW1wbCBpbXBsZW1lbnRzIENvbXBpbGVUYXNrT3B0aW9ucyB7CiAKICAgcHJpdmF0ZSBUeXBlIGxvZ0xldmVsOwotICBwcml2YXRlIFN0cmluZyBtb2R1bGVOYW1lOworICBwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiBtb2R1bGVOYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICBwcml2YXRlIGJvb2xlYW4gdXNlR3VpTG9nZ2VyOwogICBwcml2YXRlIEZpbGUgd29ya0RpcjsKIApAQCAtMzYsMjMgKzM4LDI3IEBACiAgICAgY29weUZyb20ob3RoZXIpOwogICB9CiAKKyAgcHVibGljIHZvaWQgYWRkTW9kdWxlTmFtZShTdHJpbmcgbW9kdWxlTmFtZSkgeworICAgIG1vZHVsZU5hbWVzLmFkZChtb2R1bGVOYW1lKTsKKyAgfQorCiAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKENvbXBpbGVUYXNrT3B0aW9ucyBvdGhlcikgewogICAgIHNldExvZ0xldmVsKG90aGVyLmdldExvZ0xldmVsKCkpOwotICAgIHNldE1vZHVsZU5hbWUob3RoZXIuZ2V0TW9kdWxlTmFtZSgpKTsKKyAgICBzZXRNb2R1bGVOYW1lcyhvdGhlci5nZXRNb2R1bGVOYW1lcygpKTsKICAgICBzZXRVc2VHdWlMb2dnZXIob3RoZXIuaXNVc2VHdWlMb2dnZXIoKSk7CiAgICAgc2V0V29ya0RpcihvdGhlci5nZXRXb3JrRGlyKCkpOwogICB9CiAKLSAgcHVibGljIEZpbGUgZ2V0Q29tcGlsZXJXb3JrRGlyKCkgewotICAgIHJldHVybiBuZXcgRmlsZShuZXcgRmlsZShnZXRXb3JrRGlyKCksIGdldE1vZHVsZU5hbWUoKSksICJjb21waWxlciIpOworICBwdWJsaWMgRmlsZSBnZXRDb21waWxlcldvcmtEaXIoU3RyaW5nIG1vZHVsZU5hbWUpIHsKKyAgICByZXR1cm4gbmV3IEZpbGUobmV3IEZpbGUoZ2V0V29ya0RpcigpLCBtb2R1bGVOYW1lKSwgImNvbXBpbGVyIik7CiAgIH0KIAogICBwdWJsaWMgVHlwZSBnZXRMb2dMZXZlbCgpIHsKICAgICByZXR1cm4gbG9nTGV2ZWw7CiAgIH0KIAotICBwdWJsaWMgU3RyaW5nIGdldE1vZHVsZU5hbWUoKSB7Ci0gICAgcmV0dXJuIG1vZHVsZU5hbWU7CisgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0TW9kdWxlTmFtZXMoKSB7CisgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8U3RyaW5nPihtb2R1bGVOYW1lcyk7CiAgIH0KIAogICBwdWJsaWMgRmlsZSBnZXRXb3JrRGlyKCkgewpAQCAtNjcsOCArNzMsOSBAQAogICAgIHRoaXMubG9nTGV2ZWwgPSBsb2dMZXZlbDsKICAgfQogCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZU5hbWUoU3RyaW5nIG1vZHVsZU5hbWUpIHsKLSAgICB0aGlzLm1vZHVsZU5hbWUgPSBtb2R1bGVOYW1lOworICBwdWJsaWMgdm9pZCBzZXRNb2R1bGVOYW1lcyhMaXN0PFN0cmluZz4gbW9kdWxlTmFtZXMpIHsKKyAgICB0aGlzLm1vZHVsZU5hbWVzLmNsZWFyKCk7CisgICAgdGhpcy5tb2R1bGVOYW1lcy5hZGRBbGwobW9kdWxlTmFtZXMpOwogICB9CiAKICAgcHVibGljIHZvaWQgc2V0VXNlR3VpTG9nZ2VyKGJvb2xlYW4gdXNlR3VpTG9nZ2VyKSB7CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0NvbXBpbGVUYXNrUnVubmVyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0NvbXBpbGVUYXNrUnVubmVyLmphdmEKaW5kZXggNzQ3ZTdlMC4uNWMxMTM5NCAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlVGFza1J1bm5lci5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZVRhc2tSdW5uZXIuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgIGlmIChvcHRpb25zLmlzVXNlR3VpTG9nZ2VyKCkpIHsKICAgICAgIC8vIEluaXRpYWxpemUgYSB0cmVlIGxvZ2dlciB3aW5kb3cuCiAgICAgICBEZXRhY2hlZFRyZWVMb2dnZXJXaW5kb3cgbG9nZ2VyV2luZG93ID0gRGV0YWNoZWRUcmVlTG9nZ2VyV2luZG93LmdldEluc3RhbmNlKAotICAgICAgICAgICJCdWlsZCBPdXRwdXQgZm9yICIgKyBvcHRpb25zLmdldE1vZHVsZU5hbWUoKSwgODAwLCA2MDAsIHRydWUpOworICAgICAgICAgICJCdWlsZCBPdXRwdXQgZm9yICIgKyBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCksIDgwMCwgNjAwLCB0cnVlKTsKIAogICAgICAgLy8gRWFnZXIgQVdUIGluaXRpYWxpemF0aW9uIGZvciBPUyBYIHRvIGVuc3VyZSBzYWZlIGNvZXhpc3RlbmNlIHdpdGggU1dULgogICAgICAgQm9vdFN0cmFwUGxhdGZvcm0uaW5pdEd1aSgpOwpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDRkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0NvbXBpbGVyLmphdmEKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QuZGV2OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVHJlZUxvZ2dlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5VbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5Db21waWxlVGFza1J1bm5lci5Db21waWxlVGFzazsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuTGluay5MaW5rT3B0aW9uc0ltcGw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LlByZWNvbXBpbGUuUHJlY29tcGlsZU9wdGlvbnNJbXBsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5jZmcuTW9kdWxlRGVmOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5jZmcuTW9kdWxlRGVmTG9hZGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLkZpbGVCYWNrZWRPYmplY3Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuUGVyZkxvZ2dlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5VdGlsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyRXh0cmFEaXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJMb2NhbFdvcmtlcnM7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJXYXJEaXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJXb3JrRGlyT3B0aW9uYWw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5VdGlsaXR5OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogVGhlIG1haW4gZXhlY3V0YWJsZSBlbnRyeSBwb2ludCBmb3IgdGhlIEdXVCBKYXZhIHRvIEphdmFTY3JpcHQgY29tcGlsZXIuCisgKi8KK3B1YmxpYyBjbGFzcyBDb21waWxlciB7CisKKyAgc3RhdGljIGNsYXNzIEFyZ1Byb2Nlc3NvciBleHRlbmRzIFByZWNvbXBpbGUuQXJnUHJvY2Vzc29yIHsKKyAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CisgICAgICBzdXBlcihvcHRpb25zKTsKKworICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyTG9jYWxXb3JrZXJzKG9wdGlvbnMpKTsKKworICAgICAgLy8gT3ZlcnJpZGUgdGhlIEFyZ0hhbmRsZXJXb3JrRGlyUmVxdWlyZWQgaW4gdGhlIHN1cGVyIGNsYXNzLgorICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV29ya0Rpck9wdGlvbmFsKG9wdGlvbnMpKTsKKworICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV2FyRGlyKG9wdGlvbnMpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckV4dHJhRGlyKG9wdGlvbnMpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICByZXR1cm4gQ29tcGlsZXIuY2xhc3MuZ2V0TmFtZSgpOworICAgIH0KKyAgfQorCisgIHN0YXRpYyBjbGFzcyBDb21waWxlck9wdGlvbnNJbXBsIGV4dGVuZHMgUHJlY29tcGlsZU9wdGlvbnNJbXBsIGltcGxlbWVudHMKKyAgICAgIENvbXBpbGVyT3B0aW9ucyB7CisKKyAgICBwcml2YXRlIExpbmtPcHRpb25zSW1wbCBsaW5rT3B0aW9ucyA9IG5ldyBMaW5rT3B0aW9uc0ltcGwoKTsKKyAgICBwcml2YXRlIGludCBsb2NhbFdvcmtlcnM7CisKKyAgICBwdWJsaWMgQ29tcGlsZXJPcHRpb25zSW1wbCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29tcGlsZXJPcHRpb25zSW1wbChDb21waWxlck9wdGlvbnMgb3RoZXIpIHsKKyAgICAgIGNvcHlGcm9tKG90aGVyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShDb21waWxlck9wdGlvbnMgb3RoZXIpIHsKKyAgICAgIHN1cGVyLmNvcHlGcm9tKG90aGVyKTsKKyAgICAgIGxpbmtPcHRpb25zLmNvcHlGcm9tKG90aGVyKTsKKyAgICAgIGxvY2FsV29ya2VycyA9IG90aGVyLmdldExvY2FsV29ya2VycygpOworICAgIH0KKworICAgIHB1YmxpYyBGaWxlIGdldEV4dHJhRGlyKCkgeworICAgICAgcmV0dXJuIGxpbmtPcHRpb25zLmdldEV4dHJhRGlyKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRMb2NhbFdvcmtlcnMoKSB7CisgICAgICByZXR1cm4gbG9jYWxXb3JrZXJzOworICAgIH0KKworICAgIHB1YmxpYyBGaWxlIGdldFdhckRpcigpIHsKKyAgICAgIHJldHVybiBsaW5rT3B0aW9ucy5nZXRXYXJEaXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRFeHRyYURpcihGaWxlIGV4dHJhRGlyKSB7CisgICAgICBsaW5rT3B0aW9ucy5zZXRFeHRyYURpcihleHRyYURpcik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxXb3JrZXJzKGludCBsb2NhbFdvcmtlcnMpIHsKKyAgICAgIHRoaXMubG9jYWxXb3JrZXJzID0gbG9jYWxXb3JrZXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFdhckRpcihGaWxlIG91dERpcikgeworICAgICAgbGlua09wdGlvbnMuc2V0V2FyRGlyKG91dERpcik7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIC8qCisgICAgICogTk9URTogbWFpbiBhbHdheXMgZXhpdHMgd2l0aCBhIGNhbGwgdG8gU3lzdGVtLmV4aXQgdG8gdGVybWluYXRlIGFueQorICAgICAqIG5vbi1kYWVtb24gdGhyZWFkcyB0aGF0IHdlcmUgc3RhcnRlZCBpbiBHZW5lcmF0b3JzLiBUeXBpY2FsbHksIHRoaXMgaXMgdG8KKyAgICAgKiBzaHV0ZG93biBBV1QgcmVsYXRlZCB0aHJlYWRzLCBzaW5jZSB0aGUgY29udHJhY3QgZm9yIHRoZWlyIHRlcm1pbmF0aW9uIGlzCisgICAgICogc3RpbGwgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LgorICAgICAqLworICAgIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zID0gbmV3IENvbXBpbGVyT3B0aW9uc0ltcGwoKTsKKyAgICBpZiAobmV3IEFyZ1Byb2Nlc3NvcihvcHRpb25zKS5wcm9jZXNzQXJncyhhcmdzKSkgeworICAgICAgQ29tcGlsZVRhc2sgdGFzayA9IG5ldyBDb21waWxlVGFzaygpIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcnVuKFRyZWVMb2dnZXIgbG9nZ2VyKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG5ldyBDb21waWxlcihvcHRpb25zKS5ydW4obG9nZ2VyKTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICAgIGlmIChDb21waWxlVGFza1J1bm5lci5ydW5XaXRoQXBwcm9wcmlhdGVMb2dnZXIob3B0aW9ucywgdGFzaykpIHsKKyAgICAgICAgLy8gRXhpdCB3LyBzdWNjZXNzIGNvZGUuCisgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgfQorICAgIH0KKyAgICAvLyBFeGl0IHcvIG5vbi1zdWNjZXNzIGNvZGUuCisgICAgU3lzdGVtLmV4aXQoMSk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIENvbXBpbGVyT3B0aW9uc0ltcGwgb3B0aW9uczsKKworICBwdWJsaWMgQ29tcGlsZXIoQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIHsKKyAgICB0aGlzLm9wdGlvbnMgPSBuZXcgQ29tcGlsZXJPcHRpb25zSW1wbChvcHRpb25zKTsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIHJ1bihUcmVlTG9nZ2VyIGxvZ2dlcikgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIFBlcmZMb2dnZXIuc3RhcnQoImNvbXBpbGUiKTsKKyAgICBib29sZWFuIHRlbXBXb3JrRGlyID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIGlmIChvcHRpb25zLmdldFdvcmtEaXIoKSA9PSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMuc2V0V29ya0RpcihVdGlsaXR5Lm1ha2VUZW1wb3JhcnlEaXJlY3RvcnkobnVsbCwgImd3dGMiKSk7CisgICAgICAgIHRlbXBXb3JrRGlyID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgZm9yIChTdHJpbmcgbW9kdWxlTmFtZSA6IG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKSkgeworICAgICAgICBNb2R1bGVEZWYgbW9kdWxlID0gTW9kdWxlRGVmTG9hZGVyLmxvYWRGcm9tQ2xhc3NQYXRoKGxvZ2dlciwgbW9kdWxlTmFtZSk7CisgICAgICAgIEZpbGUgY29tcGlsZXJXb3JrRGlyID0gb3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIobW9kdWxlTmFtZSk7CisKKyAgICAgICAgaWYgKG9wdGlvbnMuaXNWYWxpZGF0ZU9ubHkoKSkgeworICAgICAgICAgIGlmICghUHJlY29tcGlsZS52YWxpZGF0ZShsb2dnZXIsIG9wdGlvbnMsIG1vZHVsZSwKKyAgICAgICAgICAgICAgb3B0aW9ucy5nZXRHZW5EaXIoKSwgY29tcGlsZXJXb3JrRGlyKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb25nIGNvbXBpbGVTdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgIGxvZ2dlciA9IGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5JTkZPLCAiQ29tcGlsaW5nIG1vZHVsZSAiCisgICAgICAgICAgICAgICsgbW9kdWxlTmFtZSk7CisKKyAgICAgICAgICBQcmVjb21waWxhdGlvbiBwcmVjb21waWxhdGlvbiA9IFByZWNvbXBpbGUucHJlY29tcGlsZShsb2dnZXIsCisgICAgICAgICAgICAgIG9wdGlvbnMsIG1vZHVsZSwgb3B0aW9ucy5nZXRHZW5EaXIoKSwgY29tcGlsZXJXb3JrRGlyKTsKKworICAgICAgICAgIGlmIChwcmVjb21waWxhdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorCisgICAgICAgICAgUGVybXV0YXRpb25bXSBhbGxQZXJtcyA9IHByZWNvbXBpbGF0aW9uLmdldFBlcm11dGF0aW9ucygpOworICAgICAgICAgIExpc3Q8RmlsZUJhY2tlZE9iamVjdDxQZXJtdXRhdGlvblJlc3VsdD4+IHJlc3VsdEZpbGVzCisgICAgICAgICAgICAgID0gQ29tcGlsZVBlcm1zLm1ha2VSZXN1bHRGaWxlcygKKyAgICAgICAgICAgICAgb3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIobW9kdWxlTmFtZSksIGFsbFBlcm1zKTsKKyAgICAgICAgICBDb21waWxlUGVybXMuY29tcGlsZShsb2dnZXIsIHByZWNvbXBpbGF0aW9uLCBhbGxQZXJtcywgb3B0aW9ucy5nZXRMb2NhbFdvcmtlcnMoKSwKKyAgICAgICAgICAgICAgcmVzdWx0RmlsZXMpOworCisgICAgICAgICAgTGluay5saW5rKGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5JTkZPLCAiTGlua2luZyBpbnRvICIKKyAgICAgICAgICAgICAgKyBvcHRpb25zLmdldFdhckRpcigpLmdldFBhdGgoKSksIG1vZHVsZSwgcHJlY29tcGlsYXRpb24sCisgICAgICAgICAgICAgIHJlc3VsdEZpbGVzLCBvcHRpb25zLmdldFdhckRpcigpLCBvcHRpb25zLmdldEV4dHJhRGlyKCkpOworCisgICAgICAgICAgbG9uZyBjb21waWxlRG9uZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgIGxvbmcgZGVsdGEgPSBjb21waWxlRG9uZSAtIGNvbXBpbGVTdGFydDsKKyAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuSU5GTywgIkNvbXBpbGF0aW9uIHN1Y2NlZWRlZCAtLSAiCisgICAgICAgICAgICAgICsgU3RyaW5nLmZvcm1hdCgiJS4zZiIsIGRlbHRhIC8gMTAwMGQpICsgInMiKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiVW5hYmxlIHRvIGNyZWF0ZSBjb21waWxlciB3b3JrIGRpcmVjdG9yeSIsCisgICAgICAgICAgZSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIFBlcmZMb2dnZXIuZW5kKCk7CisgICAgICBpZiAodGVtcFdvcmtEaXIpIHsKKyAgICAgICAgVXRpbC5yZWN1cnNpdmVEZWxldGUob3B0aW9ucy5nZXRXb3JrRGlyKCksIGZhbHNlKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUQ29tcGlsZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUQ29tcGlsZXIuamF2YQppbmRleCA0YTc0YTQ1Li5hZDE4NTRmIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0dXVENvbXBpbGVyLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RDb21waWxlci5qYXZhCkBAIC0xOCwxNCArMTgsMTIgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LkNvbXBpbGVUYXNrUnVubmVyLkNvbXBpbGVUYXNrOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5MaW5rLkxpbmtPcHRpb25zSW1wbDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuUHJlY29tcGlsZS5QcmVjb21waWxlT3B0aW9uc0ltcGw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWY7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWZMb2FkZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuRmlsZUJhY2tlZE9iamVjdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5QZXJmTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlV0aWw7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJFeHRyYURpcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlckxvY2FsV29ya2VyczsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlck91dERpcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlclNveWM7CkBAIC0zOCwxOSArMzYsMjIgQEAKIAogLyoqCiAgKiBUaGUgbWFpbiBleGVjdXRhYmxlIGVudHJ5IHBvaW50IGZvciB0aGUgR1dUIEphdmEgdG8gSmF2YVNjcmlwdCBjb21waWxlci4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBDb21waWxlcn0gaW5zdGVhZAogICovCitARGVwcmVjYXRlZAogcHVibGljIGNsYXNzIEdXVENvbXBpbGVyIHsKIAogICBzdGF0aWMgZmluYWwgY2xhc3MgQXJnUHJvY2Vzc29yIGV4dGVuZHMgUHJlY29tcGlsZS5BcmdQcm9jZXNzb3IgewotICAgIHB1YmxpYyBBcmdQcm9jZXNzb3IoQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIHsKKyAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKExlZ2FjeUNvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICAgICBzdXBlcihvcHRpb25zKTsKIAorICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyT3V0RGlyKG9wdGlvbnMpKTsKKwogICAgICAgLy8gT3ZlcnJpZGUgdGhlIEFyZ0hhbmRsZXJXb3JrRGlyUmVxdWlyZWQgaW4gdGhlIHN1cGVyIGNsYXNzLgogICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV29ya0Rpck9wdGlvbmFsKG9wdGlvbnMpKTsKIAotICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyRXh0cmFEaXIob3B0aW9ucykpOwogICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyTG9jYWxXb3JrZXJzKG9wdGlvbnMpKTsKLSAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlck91dERpcihvcHRpb25zKSk7CiAgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTb3ljKG9wdGlvbnMpKTsKICAgICB9CiAKQEAgLTYxLDI2ICs2MiwyMiBAQAogICB9CiAKICAgc3RhdGljIGNsYXNzIEdXVENvbXBpbGVyT3B0aW9uc0ltcGwgZXh0ZW5kcyBQcmVjb21waWxlT3B0aW9uc0ltcGwgaW1wbGVtZW50cwotICAgICAgQ29tcGlsZXJPcHRpb25zIHsKKyAgICAgIExlZ2FjeUNvbXBpbGVyT3B0aW9ucyB7CiAKLSAgICBwcml2YXRlIExpbmtPcHRpb25zSW1wbCBsaW5rT3B0aW9ucyA9IG5ldyBMaW5rT3B0aW9uc0ltcGwoKTsKICAgICBwcml2YXRlIGludCBsb2NhbFdvcmtlcnM7CisgICAgcHJpdmF0ZSBGaWxlIG91dERpcjsKIAogICAgIHB1YmxpYyBHV1RDb21waWxlck9wdGlvbnNJbXBsKCkgewogICAgIH0KIAotICAgIHB1YmxpYyBHV1RDb21waWxlck9wdGlvbnNJbXBsKENvbXBpbGVyT3B0aW9ucyBvdGhlcikgeworICAgIHB1YmxpYyBHV1RDb21waWxlck9wdGlvbnNJbXBsKExlZ2FjeUNvbXBpbGVyT3B0aW9ucyBvdGhlcikgewogICAgICAgY29weUZyb20ob3RoZXIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKENvbXBpbGVyT3B0aW9ucyBvdGhlcikgeworICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKExlZ2FjeUNvbXBpbGVyT3B0aW9ucyBvdGhlcikgewogICAgICAgc3VwZXIuY29weUZyb20ob3RoZXIpOwotICAgICAgbGlua09wdGlvbnMuY29weUZyb20ob3RoZXIpOwotICAgICAgbG9jYWxXb3JrZXJzID0gb3RoZXIuZ2V0TG9jYWxXb3JrZXJzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGUgZ2V0RXh0cmFEaXIoKSB7Ci0gICAgICByZXR1cm4gbGlua09wdGlvbnMuZ2V0RXh0cmFEaXIoKTsKKyAgICAgIHNldExvY2FsV29ya2VycyhvdGhlci5nZXRMb2NhbFdvcmtlcnMoKSk7CisgICAgICBzZXRPdXREaXIob3RoZXIuZ2V0T3V0RGlyKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TG9jYWxXb3JrZXJzKCkgewpAQCAtODgsMTEgKzg1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgRmlsZSBnZXRPdXREaXIoKSB7Ci0gICAgICByZXR1cm4gbGlua09wdGlvbnMuZ2V0T3V0RGlyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RXh0cmFEaXIoRmlsZSBleHRyYURpcikgewotICAgICAgbGlua09wdGlvbnMuc2V0RXh0cmFEaXIoZXh0cmFEaXIpOworICAgICAgcmV0dXJuIG91dERpcjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRMb2NhbFdvcmtlcnMoaW50IGxvY2FsV29ya2VycykgewpAQCAtMTAwLDE4ICs5MywyMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE91dERpcihGaWxlIG91dERpcikgewotICAgICAgbGlua09wdGlvbnMuc2V0T3V0RGlyKG91dERpcik7CisgICAgICB0aGlzLm91dERpciA9IG91dERpcjsKICAgICB9CiAgIH0KIAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLmVyci5wcmludGxuKCJXQVJOSU5HOiAnIiArIEdXVENvbXBpbGVyLmNsYXNzLmdldE5hbWUoKQorICAgICAgICArICInIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiIpOworICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNlICciICsgQ29tcGlsZXIuY2xhc3MuZ2V0TmFtZSgpICsgIicgaW5zdGVhZC4iKTsKICAgICAvKgogICAgICAqIE5PVEU6IG1haW4gYWx3YXlzIGV4aXRzIHdpdGggYSBjYWxsIHRvIFN5c3RlbS5leGl0IHRvIHRlcm1pbmF0ZSBhbnkKICAgICAgKiBub24tZGFlbW9uIHRocmVhZHMgdGhhdCB3ZXJlIHN0YXJ0ZWQgaW4gR2VuZXJhdG9ycy4gVHlwaWNhbGx5LCB0aGlzIGlzIHRvCiAgICAgICogc2h1dGRvd24gQVdUIHJlbGF0ZWQgdGhyZWFkcywgc2luY2UgdGhlIGNvbnRyYWN0IGZvciB0aGVpciB0ZXJtaW5hdGlvbiBpcwogICAgICAqIHN0aWxsIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KICAgICAgKi8KLSAgICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9ucyA9IG5ldyBHV1RDb21waWxlck9wdGlvbnNJbXBsKCk7CisgICAgZmluYWwgTGVnYWN5Q29tcGlsZXJPcHRpb25zIG9wdGlvbnMgPSBuZXcgR1dUQ29tcGlsZXJPcHRpb25zSW1wbCgpOwogICAgIGlmIChuZXcgQXJnUHJvY2Vzc29yKG9wdGlvbnMpLnByb2Nlc3NBcmdzKGFyZ3MpKSB7CiAgICAgICBDb21waWxlVGFzayB0YXNrID0gbmV3IENvbXBpbGVUYXNrKCkgewogICAgICAgICBwdWJsaWMgYm9vbGVhbiBydW4oVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKQEAgLTEyOSw1OCArMTI1LDgyIEBACiAKICAgcHJpdmF0ZSBmaW5hbCBHV1RDb21waWxlck9wdGlvbnNJbXBsIG9wdGlvbnM7CiAKLSAgcHVibGljIEdXVENvbXBpbGVyKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CisgIHB1YmxpYyBHV1RDb21waWxlcihMZWdhY3lDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgIHRoaXMub3B0aW9ucyA9IG5ldyBHV1RDb21waWxlck9wdGlvbnNJbXBsKG9wdGlvbnMpOwogICB9CiAKKyAgLyoqCisgICAqIENvbXBpbGVzIHRoZSBzZXQgb2YgbW9kdWxlcyBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMuCisgICAqLwogICBwdWJsaWMgYm9vbGVhbiBydW4oVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKLSAgICBNb2R1bGVEZWYgbW9kdWxlID0gTW9kdWxlRGVmTG9hZGVyLmxvYWRGcm9tQ2xhc3NQYXRoKGxvZ2dlciwKLSAgICAgICAgb3B0aW9ucy5nZXRNb2R1bGVOYW1lKCkpOworICAgIE1vZHVsZURlZltdIG1vZHVsZXMgPSBuZXcgTW9kdWxlRGVmW29wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5zaXplKCldOworICAgIGludCBpID0gMDsKKyAgICBmb3IgKFN0cmluZyBtb2R1bGVOYW1lIDogb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpKSB7CisgICAgICBtb2R1bGVzW2krK10gPSBNb2R1bGVEZWZMb2FkZXIubG9hZEZyb21DbGFzc1BhdGgobG9nZ2VyLCBtb2R1bGVOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJ1bihsb2dnZXIsIG1vZHVsZXMpOworICB9CiAKLSAgICBpZiAob3B0aW9ucy5pc1ZhbGlkYXRlT25seSgpKSB7Ci0gICAgICByZXR1cm4gUHJlY29tcGlsZS52YWxpZGF0ZShsb2dnZXIsIG9wdGlvbnMsIG1vZHVsZSwgb3B0aW9ucy5nZXRHZW5EaXIoKSwKLSAgICAgICAgICBvcHRpb25zLmdldENvbXBpbGVyV29ya0RpcigpKTsKLSAgICB9IGVsc2UgewotICAgICAgUGVyZkxvZ2dlci5zdGFydCgiY29tcGlsZSIpOwotICAgICAgbG9uZyBjb21waWxlU3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgIGxvZ2dlciA9IGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5JTkZPLCAiQ29tcGlsaW5nIG1vZHVsZSAiCi0gICAgICAgICAgKyBvcHRpb25zLmdldE1vZHVsZU5hbWUoKSk7CisgIC8qKgorICAgKiBDb21waWxlcyBhIHNwZWNpZmljIHNldCBvZiBtb2R1bGVzLgorICAgKi8KKyAgcHVibGljIGJvb2xlYW4gcnVuKFRyZWVMb2dnZXIgbG9nZ2VyLCBNb2R1bGVEZWYuLi4gbW9kdWxlcykKKyAgICAgIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICBQZXJmTG9nZ2VyLnN0YXJ0KCJjb21waWxlIik7CisgICAgYm9vbGVhbiB0ZW1wV29ya0RpciA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICBpZiAob3B0aW9ucy5nZXRXb3JrRGlyKCkgPT0gbnVsbCkgeworICAgICAgICBvcHRpb25zLnNldFdvcmtEaXIoVXRpbGl0eS5tYWtlVGVtcG9yYXJ5RGlyZWN0b3J5KG51bGwsICJnd3RjIikpOworICAgICAgICB0ZW1wV29ya0RpciA9IHRydWU7CisgICAgICB9CiAKLSAgICAgIGJvb2xlYW4gdGVtcFdvcmtEaXIgPSBmYWxzZTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmIChvcHRpb25zLmdldFdvcmtEaXIoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgb3B0aW9ucy5zZXRXb3JrRGlyKFV0aWxpdHkubWFrZVRlbXBvcmFyeURpcmVjdG9yeShudWxsLCAiZ3d0YyIpKTsKLSAgICAgICAgICB0ZW1wV29ya0RpciA9IHRydWU7Ci0gICAgICAgIH0KKyAgICAgIGZvciAoTW9kdWxlRGVmIG1vZHVsZSA6IG1vZHVsZXMpIHsKKyAgICAgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSBtb2R1bGUuZ2V0TmFtZSgpOworICAgICAgICBGaWxlIGNvbXBpbGVyV29ya0RpciA9IG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKG1vZHVsZU5hbWUpOwogCi0gICAgICAgIFByZWNvbXBpbGF0aW9uIHByZWNvbXBpbGF0aW9uID0gUHJlY29tcGlsZS5wcmVjb21waWxlKGxvZ2dlciwgb3B0aW9ucywKLSAgICAgICAgICAgIG1vZHVsZSwgb3B0aW9ucy5nZXRHZW5EaXIoKSwgb3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIoKSk7CisgICAgICAgIGlmIChvcHRpb25zLmlzVmFsaWRhdGVPbmx5KCkpIHsKKyAgICAgICAgICBpZiAoIVByZWNvbXBpbGUudmFsaWRhdGUobG9nZ2VyLCBvcHRpb25zLCBtb2R1bGUsCisgICAgICAgICAgICAgIG9wdGlvbnMuZ2V0R2VuRGlyKCksIGNvbXBpbGVyV29ya0RpcikpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9uZyBjb21waWxlU3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICBsb2dnZXIgPSBsb2dnZXIuYnJhbmNoKFRyZWVMb2dnZXIuSU5GTywgIkNvbXBpbGluZyBtb2R1bGUgIgorICAgICAgICAgICAgICArIG1vZHVsZU5hbWUpOwogCi0gICAgICAgIFBlcm11dGF0aW9uW10gYWxsUGVybXMgPSBwcmVjb21waWxhdGlvbi5nZXRQZXJtdXRhdGlvbnMoKTsKLSAgICAgICAgTGlzdDxGaWxlQmFja2VkT2JqZWN0PFBlcm11dGF0aW9uUmVzdWx0Pj4gcmVzdWx0RmlsZXMgPSBDb21waWxlUGVybXMubWFrZVJlc3VsdEZpbGVzKAotICAgICAgICAgICAgb3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIoKSwgYWxsUGVybXMpOwotICAgICAgICBDb21waWxlUGVybXMuY29tcGlsZShsb2dnZXIsIHByZWNvbXBpbGF0aW9uLCBhbGxQZXJtcywKLSAgICAgICAgICAgIG9wdGlvbnMuZ2V0TG9jYWxXb3JrZXJzKCksIHJlc3VsdEZpbGVzKTsKKyAgICAgICAgICBQcmVjb21waWxhdGlvbiBwcmVjb21waWxhdGlvbiA9IFByZWNvbXBpbGUucHJlY29tcGlsZShsb2dnZXIsCisgICAgICAgICAgICAgIG9wdGlvbnMsIG1vZHVsZSwgb3B0aW9ucy5nZXRHZW5EaXIoKSwgY29tcGlsZXJXb3JrRGlyKTsKIAotICAgICAgICBMaW5rLmxpbmsobG9nZ2VyLmJyYW5jaChUcmVlTG9nZ2VyLklORk8sICJMaW5raW5nIGludG8gIgotICAgICAgICAgICAgKyBvcHRpb25zLmdldE91dERpcigpLmdldFBhdGgoKSksIG1vZHVsZSwgcHJlY29tcGlsYXRpb24sCi0gICAgICAgICAgICByZXN1bHRGaWxlcywgb3B0aW9ucy5nZXRPdXREaXIoKSwgb3B0aW9ucy5nZXRFeHRyYURpcigpKTsKKyAgICAgICAgICBpZiAocHJlY29tcGlsYXRpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgICBQZXJtdXRhdGlvbltdIGFsbFBlcm1zID0gcHJlY29tcGlsYXRpb24uZ2V0UGVybXV0YXRpb25zKCk7CisgICAgICAgICAgTGlzdDxGaWxlQmFja2VkT2JqZWN0PFBlcm11dGF0aW9uUmVzdWx0Pj4gcmVzdWx0RmlsZXMgPSBDb21waWxlUGVybXMubWFrZVJlc3VsdEZpbGVzKAorICAgICAgICAgICAgICBvcHRpb25zLmdldENvbXBpbGVyV29ya0Rpcihtb2R1bGVOYW1lKSwgYWxsUGVybXMpOworICAgICAgICAgIENvbXBpbGVQZXJtcy5jb21waWxlKGxvZ2dlciwgcHJlY29tcGlsYXRpb24sIGFsbFBlcm1zLAorICAgICAgICAgICAgICBvcHRpb25zLmdldExvY2FsV29ya2VycygpLCByZXN1bHRGaWxlcyk7CiAKLSAgICAgICAgbG9uZyBjb21waWxlRG9uZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBsb25nIGRlbHRhID0gY29tcGlsZURvbmUgLSBjb21waWxlU3RhcnQ7Ci0gICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5JTkZPLCAiQ29tcGlsYXRpb24gc3VjY2VlZGVkIC0tICIKLSAgICAgICAgICAgICsgU3RyaW5nLmZvcm1hdCgiJS4zZiIsIGRlbHRhIC8gMTAwMGQpICsgInMiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwKLSAgICAgICAgICAgICJVbmFibGUgdG8gY3JlYXRlIGNvbXBpbGVyIHdvcmsgZGlyZWN0b3J5IiwgZSk7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBQZXJmTG9nZ2VyLmVuZCgpOwotICAgICAgICBpZiAodGVtcFdvcmtEaXIpIHsKLSAgICAgICAgICBVdGlsLnJlY3Vyc2l2ZURlbGV0ZShvcHRpb25zLmdldFdvcmtEaXIoKSwgZmFsc2UpOworICAgICAgICAgIExpbmsubGVnYWN5TGluayhsb2dnZXIuYnJhbmNoKFRyZWVMb2dnZXIuSU5GTywgIkxpbmtpbmcgaW50byAiCisgICAgICAgICAgICAgICsgb3B0aW9ucy5nZXRPdXREaXIoKS5nZXRQYXRoKCkpLCBtb2R1bGUsIHByZWNvbXBpbGF0aW9uLAorICAgICAgICAgICAgICByZXN1bHRGaWxlcywgb3B0aW9ucy5nZXRPdXREaXIoKSk7CisKKyAgICAgICAgICBsb25nIGNvbXBpbGVEb25lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgbG9uZyBkZWx0YSA9IGNvbXBpbGVEb25lIC0gY29tcGlsZVN0YXJ0OworICAgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5JTkZPLCAiQ29tcGlsYXRpb24gc3VjY2VlZGVkIC0tICIKKyAgICAgICAgICAgICAgKyBTdHJpbmcuZm9ybWF0KCIlLjNmIiwgZGVsdGEgLyAxMDAwZCkgKyAicyIpOwogICAgICAgICB9CiAgICAgICB9CisKKyAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gY3JlYXRlIGNvbXBpbGVyIHdvcmsgZGlyZWN0b3J5IiwKKyAgICAgICAgICBlKTsKICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgUGVyZkxvZ2dlci5lbmQoKTsKKyAgICAgIGlmICh0ZW1wV29ya0RpcikgeworICAgICAgICBVdGlsLnJlY3Vyc2l2ZURlbGV0ZShvcHRpb25zLmdldFdvcmtEaXIoKSwgZmFsc2UpOworICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RIb3N0ZWQuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUSG9zdGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YmQwZDQuLjAwMDAwMDAKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RIb3N0ZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KLSAqIAotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90Ci0gKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgotICogdGhlIExpY2Vuc2UgYXQKLSAqIAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLSAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQotICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKLSAqIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldjsKLQotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5saW5rZXIuQXJ0aWZhY3RTZXQ7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWY7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWZMb2FkZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkFydGlmYWN0QWNjZXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkdXVFNoZWxsU2VydmxldEZpbHRlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuU2VydmxldENvbnRhaW5lcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuU2VydmxldENvbnRhaW5lckxhdW5jaGVyOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5qZXR0eS5KZXR0eUxhdW5jaGVyOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlBlcmZMb2dnZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwubG9nLlByaW50V3JpdGVyVHJlZUxvZ2dlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJFeHRyYTsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJTdHJpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEubmV0LkJpbmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBUaGUgbWFpbiBleGVjdXRhYmxlIGNsYXNzIGZvciB0aGUgaG9zdGVkIG1vZGUgc2hlbGwuCi0gKi8KLXB1YmxpYyBjbGFzcyBHV1RIb3N0ZWQgZXh0ZW5kcyBHV1RTaGVsbCB7Ci0KLSAgLyoqCi0gICAqIEhhbmRsZXMgdGhlIHNldCBvZiBtb2R1bGVzIHRoYXQgY2FuIGJlIHBhc3NlZCBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kCi0gICAqIGxpbmUuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgQXJnSGFuZGxlck1vZHVsZXNFeHRyYSBleHRlbmRzIEFyZ0hhbmRsZXJFeHRyYSB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBhZGRFeHRyYUFyZyhTdHJpbmcgYXJnKSB7Ci0gICAgICByZXR1cm4gYWRkTW9kdWxlKGNvbnNvbGUsIGFyZyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgcmV0dXJuICJTcGVjaWZpZXMgdGhlIHNldCBvZiBtb2R1bGVzIHRvIGhvc3QiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Im1vZHVsZSJ9OwotICAgIH0KLSAgfQotICAvKioKLSAgICogSGFuZGxlcyB0aGUgLXNlcnZlciBjb21tYW5kIGxpbmUgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBBcmdIYW5kbGVyU2VydmVyIGV4dGVuZHMgQXJnSGFuZGxlclN0cmluZyB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgcmV0dXJuICJQcmV2ZW50cyB0aGUgZW1iZWRkZWQgVG9tY2F0IHNlcnZlciBmcm9tIHJ1bm5pbmcsIGV2ZW4gaWYgYSBwb3J0IGlzIHNwZWNpZmllZCI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICByZXR1cm4gIi1zZXJ2ZXIiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7InNlcnZlckxhdW5jaGVyQ2xhc3MifTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIGFyZykgewotICAgICAgLy8gU3VwZXJjZWRlcyAtbm9zZXJ2ZXIuCi0gICAgICBzZXRSdW5Ub21jYXQodHJ1ZSk7Ci0gICAgICByZXR1cm4gc2V0U2VydmVyKGNvbnNvbGUsIGFyZyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEhhbmRsZXMgYSBzdGFydHVwIHVybCB0aGF0IGNhbiBiZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBBcmdIYW5kbGVyU3RhcnR1cFVSTHMgZXh0ZW5kcyBBcmdIYW5kbGVyU3RyaW5nIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgIHJldHVybiAiQXV0b21hdGljYWxseSBsYXVuY2hlcyB0aGUgc3BlY2lmaWVkIFVSTCI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICByZXR1cm4gIi1zdGFydHVwVXJsIjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJ1cmwifTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIGFyZykgewotICAgICAgYWRkU3RhcnR1cFVSTChhcmcpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgIC8qCi0gICAgICogTk9URTogbWFpbiBhbHdheXMgZXhpdHMgd2l0aCBhIGNhbGwgdG8gU3lzdGVtLmV4aXQgdG8gdGVybWluYXRlIGFueQotICAgICAqIG5vbi1kYWVtb24gdGhyZWFkcyB0aGF0IHdlcmUgc3RhcnRlZCBpbiBHZW5lcmF0b3JzLiBUeXBpY2FsbHksIHRoaXMgaXMgdG8KLSAgICAgKiBzaHV0ZG93biBBV1QgcmVsYXRlZCB0aHJlYWRzLCBzaW5jZSB0aGUgY29udHJhY3QgZm9yIHRoZWlyIHRlcm1pbmF0aW9uIGlzCi0gICAgICogc3RpbGwgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LgotICAgICAqLwotICAgIEdXVEhvc3RlZCBzaGVsbE1haW4gPSBuZXcgR1dUSG9zdGVkKCk7Ci0gICAgaWYgKHNoZWxsTWFpbi5wcm9jZXNzQXJncyhhcmdzKSkgewotICAgICAgc2hlbGxNYWluLnJ1bigpOwotICAgIH0KLSAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBQcmludFdyaXRlclRyZWVMb2dnZXIgY29uc29sZSA9IG5ldyBQcmludFdyaXRlclRyZWVMb2dnZXIoCi0gICAgICBuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLmVyciwgdHJ1ZSkpOwotCi0gIC8qKgotICAgKiBUaGUgc2VydmxldCBsYXVuY2hlciB0byB1c2UgKGRlZmF1bHRzIHRvIGVtYmVkZGVkIEpldHR5KS4KLSAgICovCi0gIHByaXZhdGUgU2VydmxldENvbnRhaW5lckxhdW5jaGVyIGxhdW5jaGVyID0gbmV3IEpldHR5TGF1bmNoZXIoKTsKLQotICAvKioKLSAgICogVGhlIHNldCBvZiBtb2R1bGVzIHRoaXMgaG9zdGVkIG1vZGUgaW5zdGFuY2UgY2FuIHJ1bi4KLSAgICovCi0gIHByaXZhdGUgU2V0PE1vZHVsZURlZj4gbW9kdWxlcyA9IG5ldyBIYXNoU2V0PE1vZHVsZURlZj4oKTsKLQotICAvKioKLSAgICogVGhlIHNlcnZlciB0aGF0IHdhcyBzdGFydGVkLgotICAgKi8KLSAgcHJpdmF0ZSBTZXJ2bGV0Q29udGFpbmVyIHNlcnZlcjsKLQotICAvKioKLSAgICogT3VyIHNlcnZsZXQgZmlsdGVyLCBlbWJlZGRlZCBpbnRvIHRoZSBzZXJ2ZXIsIHdoaWNoIGF1dG9nZW5lcmF0ZXMgR1dUCi0gICAqIG1vZHVsZXMgd2hlbiB0aGUgc2VsZWN0aW9uIHNjcmlwdCBpcyByZXF1ZXN0ZWQuCi0gICAqLwotICBwcml2YXRlIEdXVFNoZWxsU2VydmxldEZpbHRlciBzZXJ2bGV0RmlsdGVyOwotCi0gIHsKLSAgICBjb25zb2xlLnNldE1heERldGFpbChUcmVlTG9nZ2VyLldBUk4pOwotICB9Ci0KLSAgcHVibGljIEdXVEhvc3RlZCgpIHsKLSAgICBzdXBlcihmYWxzZSwgdHJ1ZSk7Ci0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU2VydmVyKCkpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlclN0YXJ0dXBVUkxzKCkpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlck1vZHVsZXNFeHRyYSgpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZE1vZHVsZShUcmVlTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIG1vZHVsZU5hbWUpIHsKLSAgICB0cnkgewotICAgICAgTW9kdWxlRGVmIG1vZHVsZURlZiA9IE1vZHVsZURlZkxvYWRlci5sb2FkRnJvbUNsYXNzUGF0aChsb2dnZXIsCi0gICAgICAgICAgbW9kdWxlTmFtZSk7Ci0gICAgICBtb2R1bGVzLmFkZChtb2R1bGVEZWYpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gbG9hZCBtb2R1bGUgJyIgKyBtb2R1bGVOYW1lICsgIiciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRTZXJ2ZXIoVHJlZUxvZ2dlciBsb2dnZXIsIFN0cmluZyBzZXJ2ZXJDbGFzc05hbWUpIHsKLSAgICBUaHJvd2FibGUgdDsKLSAgICB0cnkgewotICAgICAgQ2xhc3M8Pz4gY2xhenogPSBDbGFzcy5mb3JOYW1lKHNlcnZlckNsYXNzTmFtZSwgdHJ1ZSwKLSAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKLSAgICAgIENsYXNzPD8gZXh0ZW5kcyBTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXI+IHNjbENsYXNzID0gY2xhenouYXNTdWJjbGFzcyhTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIuY2xhc3MpOwotICAgICAgbGF1bmNoZXIgPSBzY2xDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKLSAgICAgIHQgPSBlOwotICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgdCA9IGU7Ci0gICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0ID0gZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgIHQgPSBlOwotICAgIH0KLSAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gbG9hZCBzZXJ2ZXIgY2xhc3MgJyIKLSAgICAgICAgKyBzZXJ2ZXJDbGFzc05hbWUgKyAiJyIsIHQpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgQXJ0aWZhY3RBY2NlcHRvciBkb0NyZWF0ZUFydGlmYWN0QWNjZXB0b3IoZmluYWwgTW9kdWxlRGVmIG1vZHVsZSkgewotICAgIHJldHVybiBuZXcgQXJ0aWZhY3RBY2NlcHRvcigpIHsKLSAgICAgIHB1YmxpYyB2b2lkIGFjY2VwdChUcmVlTG9nZ2VyIGxvZ2dlciwgQXJ0aWZhY3RTZXQgbmV3bHlHZW5lcmF0ZWRBcnRpZmFjdHMpCi0gICAgICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgICAgICBzZXJ2bGV0RmlsdGVyLnJlbGluayhsb2dnZXIsIG1vZHVsZSwgbmV3bHlHZW5lcmF0ZWRBcnRpZmFjdHMpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2h1dERvd24oKSB7Ci0gICAgaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzZXJ2ZXIuc3RvcCgpOwotICAgICAgfSBjYXRjaCAoVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIEFscmVhZHkgbG9nZ2VkLgotICAgICAgfQotICAgICAgc2VydmVyID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIGludCBzdGFydFVwU2VydmVyKCkgewotICAgIFBlcmZMb2dnZXIuc3RhcnQoIkdXVEhvc3RlZC5zdGFydFVwU2VydmVyIik7Ci0gICAgdHJ5IHsKLSAgICAgIFRyZWVMb2dnZXIgc2VydmVyTG9nZ2VyID0gZ2V0VG9wTG9nZ2VyKCkuYnJhbmNoKFRyZWVMb2dnZXIuSU5GTywKLSAgICAgICAgICAiU3RhcnRpbmcgSFRUUCBvbiBwb3J0ICIgKyBnZXRQb3J0KCksIG51bGwpOwotICAgICAgTW9kdWxlRGVmW10gbW9kdWxlQXJyYXkgPSBtb2R1bGVzLnRvQXJyYXkobmV3IE1vZHVsZURlZlttb2R1bGVzLnNpemUoKV0pOwotICAgICAgZm9yIChNb2R1bGVEZWYgbW9kdWxlRGVmIDogbW9kdWxlQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nW10gc2VydmxldFBhdGhzID0gbW9kdWxlRGVmLmdldFNlcnZsZXRQYXRocygpOwotICAgICAgICBpZiAoc2VydmxldFBhdGhzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICBzZXJ2ZXJMb2dnZXIubG9nKFRyZWVMb2dnZXIuV0FSTiwKLSAgICAgICAgICAgICAgIklnbm9yaW5nIGxlZ2FjeSA8c2VydmxldD4gdGFnKHMpIGluIG1vZHVsZSAnIgotICAgICAgICAgICAgICAgICAgKyBtb2R1bGVEZWYuZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICAgICArICInOyBhZGQgc2VydmxldCB0YWdzIHRvIHlvdXIgd2ViLnhtbCBpbnN0ZWFkIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHNlcnZsZXRGaWx0ZXIgPSBuZXcgR1dUU2hlbGxTZXJ2bGV0RmlsdGVyKHNlcnZlckxvZ2dlciwgb3B0aW9ucywKLSAgICAgICAgICBtb2R1bGVBcnJheSk7Ci0gICAgICBzZXJ2ZXIgPSBsYXVuY2hlci5zdGFydChzZXJ2ZXJMb2dnZXIsIGdldFBvcnQoKSwgb3B0aW9ucy5nZXRPdXREaXIoKSwKLSAgICAgICAgICBzZXJ2bGV0RmlsdGVyKTsKLSAgICAgIGFzc2VydCAoc2VydmVyICE9IG51bGwpOwotICAgICAgcmV0dXJuIHNlcnZlci5nZXRQb3J0KCk7Ci0gICAgfSBjYXRjaCAoQmluZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBvcnQgIgotICAgICAgICAgICsgZ2V0UG9ydCgpCi0gICAgICAgICAgKyAiIGlzIGFscmVhZHkgaXMgdXNlOyB5b3UgcHJvYmFibHkgc3RpbGwgaGF2ZSBhbm90aGVyIHNlc3Npb24gYWN0aXZlIik7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5hYmxlIHRvIHN0YXJ0IGVtYmVkZGVkIEhUVFAgc2VydmVyIik7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBQZXJmTG9nZ2VyLmVuZCgpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUTWFpbi5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RNYWluLmphdmEKaW5kZXggMmU4MjFkYi4uNTY1OWVkMiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RNYWluLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RNYWluLmphdmEKQEAgLTE4LDggKzE4LDggQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5VdGlsOwogCiAvKioKLSAqIEV4ZWN1dGFibGUgY2xhc3MgcHJvdmlkZXMgaGVscCB0byB1c2VycyB3aG8gcnVuIHRoZSBqYXIgYnkgaW5kaWNhdGluZwotICogdGhlIGVuY2xvc2VkIGNsYXNzZXMgdGhhdCBhcmUgZXhlY3V0YWJsZS4KKyAqIEV4ZWN1dGFibGUgY2xhc3MgcHJvdmlkZXMgaGVscCB0byB1c2VycyB3aG8gcnVuIHRoZSBqYXIgYnkgaW5kaWNhdGluZyB0aGUKKyAqIGVuY2xvc2VkIGNsYXNzZXMgdGhhdCBhcmUgZXhlY3V0YWJsZS4KICAqLwogcHVibGljIGNsYXNzIEdXVE1haW4gewogCkBAIC0zMSwxMCArMzEsMTAgQEAKICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihBYm91dC5HV1RfVkVSU0lPTik7CiAgICAgfQogICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQXZhaWxhYmxlIG1haW4gY2xhc3NlczoiKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oYWRkU3BhY2VzKEdXVFNoZWxsLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICJydW5zIHRoZSBkZXZlbG9wbWVudCBzaGVsbCIpKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oYWRkU3BhY2VzKEdXVENvbXBpbGVyLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICJjb21waWxlcyBhIEdXVCBtb2R1bGUiKSk7CisgICAgU3lzdGVtLmVyci5wcmludGxuKGFkZFNwYWNlcyhIb3N0ZWRNb2RlLmNsYXNzLmdldE5hbWUoKSwKKyAgICAgICAgInJ1bnMgdGhlIGRldmVsb3BtZW50IHNoZWxsIikpOworICAgIFN5c3RlbS5lcnIucHJpbnRsbihhZGRTcGFjZXMoQ29tcGlsZXIuY2xhc3MuZ2V0TmFtZSgpLAorICAgICAgICAiY29tcGlsZXMgYSBHV1QgbW9kdWxlIikpOwogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFkZFNwYWNlcyhTdHJpbmcgZmlyc3QsIFN0cmluZyBzZWNvbmQpIHsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGwuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGwuamF2YQppbmRleCA3ODVhYjIwLi5kMmUwNWMzIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0dXVFNoZWxsLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RTaGVsbC5qYXZhCkBAIC0xNywyMiArMTcsMTEgQEAKIAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyLlR5cGU7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQubGlua2VyLkFydGlmYWN0U2V0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0Lmxpbmtlci5FbWl0dGVkQXJ0aWZhY3Q7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQudHlwZWluZm8uVHlwZU9yYWNsZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuR1dUQ29tcGlsZXIuR1dUQ29tcGlsZXJPcHRpb25zSW1wbDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuY2ZnLk1vZHVsZURlZjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuY2ZnLk1vZHVsZURlZkxvYWRlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuQXJ0aWZhY3RBY2NlcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuQnJvd3NlcldpZGdldDsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuQnJvd3NlcldpZGdldEhvc3Q7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkJyb3dzZXJXaWRnZXRIb3N0Q2hlY2tlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuTG93TGV2ZWw7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLk1vZHVsZVNwYWNlSG9zdDsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuUGxhdGZvcm1TcGVjaWZpYzsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuU2hlbGxNYWluV2luZG93OwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5TaGVsbE1vZHVsZVNwYWNlSG9zdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuV29ya0RpcnM7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLnRvbWNhdC5FbWJlZGRlZFRvbWNhdFNlcnZlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5VdGlsOwpAQCAtNDMsMTM4ICszMiwzMyBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyR2VuRGlyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyTG9nTGV2ZWw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJPdXREaXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJTY3JpcHRTdHlsZTsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbDsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5sb2cuQWJzdHJhY3RUcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuQXJnSGFuZGxlckV4dHJhOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuQXJnSGFuZGxlckZsYWc7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyU3RyaW5nOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuVG9vbEJhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5DdXJzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIFRoZSBtYWluIGV4ZWN1dGFibGUgY2xhc3MgZm9yIHRoZSBob3N0ZWQgbW9kZSBzaGVsbC4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBIb3N0ZWRNb2RlfSBpbnN0ZWFkCiAgKi8KLXB1YmxpYyBjbGFzcyBHV1RTaGVsbCBleHRlbmRzIFRvb2xCYXNlIHsKLQotICAvKioKLSAgICogSGFuZGxlcyB0aGUgLWJsYWNrbGlzdCBjb21tYW5kIGxpbmUgYXJndW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgQXJnSGFuZGxlckJsYWNrbGlzdCBleHRlbmRzIEFyZ0hhbmRsZXJTdHJpbmcgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ii1ibGFja2xpc3QiLCAiIn07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgcmV0dXJuICJQcmV2ZW50cyB0aGUgdXNlciBicm93c2luZyBVUkxzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCByZWdleGVzIChjb21tYSBvciBzcGFjZSBzZXBhcmF0ZWQpIjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKLSAgICAgIHJldHVybiAiLWJsYWNrbGlzdCI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsiYmxhY2tsaXN0LXN0cmluZyJ9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgYmxhY2tsaXN0U3RyKSB7Ci0gICAgICByZXR1cm4gQnJvd3NlcldpZGdldEhvc3RDaGVja2VyLmJsYWNrbGlzdFJlZ2V4ZXMoYmxhY2tsaXN0U3RyKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGFuZGxlcyB0aGUgLW5vc2VydmVyIGNvbW1hbmQgbGluZSBmbGFnLgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIEFyZ0hhbmRsZXJOb1NlcnZlckZsYWcgZXh0ZW5kcyBBcmdIYW5kbGVyRmxhZyB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgcmV0dXJuICJQcmV2ZW50cyB0aGUgZW1iZWRkZWQgVG9tY2F0IHNlcnZlciBmcm9tIHJ1bm5pbmcsIGV2ZW4gaWYgYSBwb3J0IGlzIHNwZWNpZmllZCI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICByZXR1cm4gIi1ub3NlcnZlciI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2V0RmxhZygpIHsKLSAgICAgIHJ1blRvbWNhdCA9IGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEhhbmRsZXMgdGhlIC1wb3J0IGNvbW1hbmQgbGluZSBmbGFnLgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIEFyZ0hhbmRsZXJQb3J0IGV4dGVuZHMgQXJnSGFuZGxlclN0cmluZyB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsiLXBvcnQiLCAiODg4OCJ9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgIHJldHVybiAiUnVucyBhbiBlbWJlZGRlZCBUb21jYXQgaW5zdGFuY2Ugb24gdGhlIHNwZWNpZmllZCBwb3J0IChkZWZhdWx0cyB0byA4ODg4KSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICByZXR1cm4gIi1wb3J0IjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJwb3J0LW51bWJlciB8IFwiYXV0b1wiIn07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyB2YWx1ZSkgewotICAgICAgaWYgKHZhbHVlLmVxdWFscygiYXV0byIpKSB7Ci0gICAgICAgIHBvcnQgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJBIHBvcnQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIFwiYXV0b1wiIik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KK0BEZXByZWNhdGVkCitwdWJsaWMgY2xhc3MgR1dUU2hlbGwgZXh0ZW5kcyBIb3N0ZWRNb2RlQmFzZSB7CiAKICAgLyoqCiAgICAqIEhhbmRsZXMgdGhlIGxpc3Qgb2Ygc3RhcnR1cCB1cmxzIHRoYXQgY2FuIGJlIHBhc3NlZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgKiBjb21tYW5kIGxpbmUuCiAgICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgQXJnSGFuZGxlclN0YXJ0dXBVUkxzRXh0cmEgZXh0ZW5kcyBBcmdIYW5kbGVyRXh0cmEgeworICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFyZ0hhbmRsZXJTdGFydHVwVVJMc0V4dHJhIGV4dGVuZHMgQXJnSGFuZGxlckV4dHJhIHsKKworICAgIHByaXZhdGUgZmluYWwgT3B0aW9uU3RhcnR1cFVSTHMgb3B0aW9uczsKKworICAgIHB1YmxpYyBBcmdIYW5kbGVyU3RhcnR1cFVSTHNFeHRyYShPcHRpb25TdGFydHVwVVJMcyBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGFkZEV4dHJhQXJnKFN0cmluZyBhcmcpIHsKLSAgICAgIGFkZFN0YXJ0dXBVUkwoYXJnKTsKKyAgICAgIG9wdGlvbnMuYWRkU3RhcnR1cFVSTChhcmcpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTAsNDE1ICs3NCwxMDEgQEAKICAgfQogCiAgIC8qKgotICAgKiBIYW5kbGVzIHRoZSAtd2hpdGVsaXN0IGNvbW1hbmQgbGluZSBmbGFnLgorICAgKiBUaGUgR1dUU2hlbGwgYXJndW1lbnQgcHJvY2Vzc29yLgogICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIEFyZ0hhbmRsZXJXaGl0ZWxpc3QgZXh0ZW5kcyBBcmdIYW5kbGVyU3RyaW5nIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyItd2hpdGVsaXN0IiwgIiJ9OworICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFyZ1Byb2Nlc3NvciBleHRlbmRzIEhvc3RlZE1vZGVCYXNlLkFyZ1Byb2Nlc3NvciB7CisgICAgcHVibGljIEFyZ1Byb2Nlc3NvcihTaGVsbE9wdGlvbnNJbXBsIG9wdGlvbnMsIGJvb2xlYW4gZm9yY2VTZXJ2ZXIsCisgICAgICAgIGJvb2xlYW4gbm9VUkxzKSB7CisgICAgICBzdXBlcihvcHRpb25zLCBmb3JjZVNlcnZlcik7CisgICAgICBpZiAoIW5vVVJMcykgeworICAgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdGFydHVwVVJMc0V4dHJhKG9wdGlvbnMpKTsKKyAgICAgIH0KKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlck91dERpcihvcHRpb25zKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgcmV0dXJuICJBbGxvd3MgdGhlIHVzZXIgdG8gYnJvd3NlIFVSTHMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHJlZ2V4ZXMgKGNvbW1hIG9yIHNwYWNlIHNlcGFyYXRlZCkiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgewotICAgICAgcmV0dXJuICItd2hpdGVsaXN0IjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJ3aGl0ZWxpc3Qtc3RyaW5nIn07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyB3aGl0ZWxpc3RTdHIpIHsKLSAgICAgIHJldHVybiBCcm93c2VyV2lkZ2V0SG9zdENoZWNrZXIud2hpdGVsaXN0UmVnZXhlcyh3aGl0ZWxpc3RTdHIpOworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgIHJldHVybiBHV1RTaGVsbC5jbGFzcy5nZXROYW1lKCk7CiAgICAgfQogICB9CiAKICAgLyoqCi0gICAqIENvbmNyZXRlIGNsYXNzIHRvIGltcGxlbWVudCBhbGwgY29tcGlsZXIgb3B0aW9ucy4KKyAgICogQ29uY3JldGUgY2xhc3MgdG8gaW1wbGVtZW50IGFsbCBzaGVsbCBvcHRpb25zLgogICAgKi8KLSAgc3RhdGljIGNsYXNzIFNoZWxsT3B0aW9uc0ltcGwgZXh0ZW5kcyBHV1RDb21waWxlck9wdGlvbnNJbXBsIGltcGxlbWVudHMKLSAgICAgIFNoZWxsT3B0aW9ucywgV29ya0RpcnMgeworICBzdGF0aWMgY2xhc3MgU2hlbGxPcHRpb25zSW1wbCBleHRlbmRzIEhvc3RlZE1vZGVCYXNlT3B0aW9uc0ltcGwgaW1wbGVtZW50cworICAgICAgSG9zdGVkTW9kZUJhc2VPcHRpb25zLCBXb3JrRGlycywgTGVnYWN5Q29tcGlsZXJPcHRpb25zIHsKKyAgICBwcml2YXRlIGludCBsb2NhbFdvcmtlcnM7CisgICAgcHJpdmF0ZSBGaWxlIG91dERpcjsKKwogICAgIHB1YmxpYyBGaWxlIGdldENvbXBpbGVyT3V0cHV0RGlyKE1vZHVsZURlZiBtb2R1bGVEZWYpIHsKLSAgICAgIHJldHVybiBuZXcgRmlsZShnZXRPdXREaXIoKSwgbW9kdWxlRGVmLmdldERlcGxveVRvKCkpOworICAgICAgcmV0dXJuIG5ldyBGaWxlKGdldE91dERpcigpLCBtb2R1bGVEZWYuZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldExvY2FsV29ya2VycygpIHsKKyAgICAgIHJldHVybiBsb2NhbFdvcmtlcnM7CisgICAgfQorCisgICAgcHVibGljIEZpbGUgZ2V0T3V0RGlyKCkgeworICAgICAgcmV0dXJuIG91dERpcjsKICAgICB9CiAKICAgICBwdWJsaWMgRmlsZSBnZXRTaGVsbFB1YmxpY0dlbkRpcihNb2R1bGVEZWYgbW9kdWxlRGVmKSB7CiAgICAgICByZXR1cm4gbmV3IEZpbGUoZ2V0U2hlbGxCYXNlV29ya0Rpcihtb2R1bGVEZWYpLCAicHVibGljIik7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogVGhlIGJhc2Ugc2hlbGwgd29yayBkaXJlY3RvcnkuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIEZpbGUgZ2V0U2hlbGxCYXNlV29ya0RpcihNb2R1bGVEZWYgbW9kdWxlRGVmKSB7Ci0gICAgICByZXR1cm4gbmV3IEZpbGUobmV3IEZpbGUoZ2V0V29ya0RpcigpLCBtb2R1bGVEZWYuZ2V0TmFtZSgpKSwgInNoZWxsIik7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEZpbGUgZ2V0V29ya0RpcigpIHsKKyAgICAgIHJldHVybiBuZXcgRmlsZShnZXRPdXREaXIoKSwgIi5nd3QtdG1wIik7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogV2hlcmUgZ2VuZXJhdGVkIGZpbGVzIGdvIGJ5IGRlZmF1bHQgdW50aWwgd2UgYXJlIHN1cmUgdGhleSBhcmUgcHVibGljOwotICAgICAqIHRoZW4gdGhleSBhcmUgY29waWVkIGludG8ge0BsaW5rICNnZXRTaGVsbFB1YmxpY0dlbkRpcihNb2R1bGVEZWYpfS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgRmlsZSBnZXRTaGVsbFByaXZhdGVHZW5EaXIoTW9kdWxlRGVmIG1vZHVsZURlZikgewotICAgICAgcmV0dXJuIG5ldyBGaWxlKGdldFNoZWxsQmFzZVdvcmtEaXIobW9kdWxlRGVmKSwgImdlbiIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQnJvd3NlcldpZGdldEhvc3RJbXBsIGltcGxlbWVudHMgQnJvd3NlcldpZGdldEhvc3QgewotICAgIHB1YmxpYyBCcm93c2VyV2lkZ2V0SG9zdEltcGwoKSB7CisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxXb3JrZXJzKGludCBsb2NhbFdvcmtlcnMpIHsKKyAgICAgIHRoaXMubG9jYWxXb3JrZXJzID0gbG9jYWxXb3JrZXJzOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNvbXBpbGUoTW9kdWxlRGVmIG1vZHVsZURlZikgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgICAgR1dUU2hlbGwudGhpcy5jb21waWxlKGdldExvZ2dlcigpLCBtb2R1bGVEZWYpOworICAgIHB1YmxpYyB2b2lkIHNldE91dERpcihGaWxlIG91dERpcikgeworICAgICAgdGhpcy5vdXREaXIgPSBvdXREaXI7CiAgICAgfQotCi0gICAgcHVibGljIHZvaWQgY29tcGlsZShTdHJpbmdbXSBtb2R1bGVOYW1lcykgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb2R1bGVOYW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVzW2ldOwotICAgICAgICBNb2R1bGVEZWYgbW9kdWxlRGVmID0gbG9hZE1vZHVsZShtb2R1bGVOYW1lLCBnZXRMb2dnZXIoKSk7Ci0gICAgICAgIGNvbXBpbGUobW9kdWxlRGVmKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTW9kdWxlU3BhY2VIb3N0IGNyZWF0ZU1vZHVsZVNwYWNlSG9zdChCcm93c2VyV2lkZ2V0IHdpZGdldCwKLSAgICAgICAgZmluYWwgU3RyaW5nIG1vZHVsZU5hbWUpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKLSAgICAgIFRyZWVMb2dnZXIgbG9nZ2VyID0gZ2V0TG9nZ2VyKCk7Ci0KLSAgICAgIC8vIFN3aXRjaCB0byBhIHdhaXQgY3Vyc29yLgotICAgICAgLy8KLSAgICAgIFNoZWxsIHdpZGdldFNoZWxsID0gd2lkZ2V0LmdldFNoZWxsKCk7Ci0gICAgICB0cnkgewotICAgICAgICBDdXJzb3Igd2FpdEN1cnNvciA9IGRpc3BsYXkuZ2V0U3lzdGVtQ3Vyc29yKFNXVC5DVVJTT1JfV0FJVCk7Ci0gICAgICAgIHdpZGdldFNoZWxsLnNldEN1cnNvcih3YWl0Q3Vyc29yKTsKLQotICAgICAgICAvLyBUcnkgdG8gZmluZCBhbiBleGlzdGluZyBsb2FkZWQgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIGRlZi4KLSAgICAgICAgLy8KLSAgICAgICAgTW9kdWxlRGVmIG1vZHVsZURlZiA9IGxvYWRNb2R1bGUobW9kdWxlTmFtZSwgbG9nZ2VyKTsKLSAgICAgICAgYXNzZXJ0IChtb2R1bGVEZWYgIT0gbnVsbCk7Ci0KLSAgICAgICAgVHlwZU9yYWNsZSB0eXBlT3JhY2xlID0gbW9kdWxlRGVmLmdldFR5cGVPcmFjbGUobG9nZ2VyKTsKLSAgICAgICAgU2hlbGxNb2R1bGVTcGFjZUhvc3QgaG9zdCA9IGRvQ3JlYXRlU2hlbGxNb2R1bGVTcGFjZUhvc3QobG9nZ2VyLAotICAgICAgICAgICAgdHlwZU9yYWNsZSwgbW9kdWxlRGVmKTsKLSAgICAgICAgcmV0dXJuIGhvc3Q7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBDdXJzb3Igbm9ybWFsQ3Vyc29yID0gZGlzcGxheS5nZXRTeXN0ZW1DdXJzb3IoU1dULkNVUlNPUl9BUlJPVyk7Ci0gICAgICAgIHdpZGdldFNoZWxsLnNldEN1cnNvcihub3JtYWxDdXJzb3IpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBUcmVlTG9nZ2VyIGdldExvZ2dlcigpIHsKLSAgICAgIHJldHVybiBnZXRUb3BMb2dnZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIG5vcm1hbGl6ZVVSTChTdHJpbmcgd2hhdFRoZVVzZXJUeXBlZCkgewotICAgICAgcmV0dXJuIEdXVFNoZWxsLnRoaXMubm9ybWFsaXplVVJMKHdoYXRUaGVVc2VyVHlwZWQpOwotICAgIH0KLQotICAgIHB1YmxpYyBCcm93c2VyV2lkZ2V0IG9wZW5OZXdCcm93c2VyV2luZG93KCkKLSAgICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgICAgcmV0dXJuIEdXVFNoZWxsLnRoaXMub3Blbk5ld0Jyb3dzZXJXaW5kb3coKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMb2FkIGEgbW9kdWxlLgotICAgICAqIAotICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkCi0gICAgICogQHBhcmFtIGxvZ2dlciBUcmVlTG9nZ2VyIHRvIHVzZQotICAgICAqIEByZXR1cm4gdGhlIGxvYWRlZCBtb2R1bGUKLSAgICAgKiBAdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIE1vZHVsZURlZiBsb2FkTW9kdWxlKFN0cmluZyBtb2R1bGVOYW1lLCBUcmVlTG9nZ2VyIGxvZ2dlcikKLSAgICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgICAgYm9vbGVhbiBhc3N1bWVGcmVzaCA9ICFhbHJlYWR5U2Vlbk1vZHVsZXMuY29udGFpbnMobW9kdWxlTmFtZSk7Ci0gICAgICBNb2R1bGVEZWYgbW9kdWxlRGVmID0gTW9kdWxlRGVmTG9hZGVyLmxvYWRGcm9tQ2xhc3NQYXRoKGxvZ2dlciwKLSAgICAgICAgICBtb2R1bGVOYW1lLCAhYXNzdW1lRnJlc2gpOwotICAgICAgYWxyZWFkeVNlZW5Nb2R1bGVzLmFkZChtb2R1bGVOYW1lKTsKLSAgICAgIGFzc2VydCAobW9kdWxlRGVmICE9IG51bGwpIDogIlJlcXVpcmVkIG1vZHVsZSBzdGF0ZSBpcyBhYnNlbnQiOwotICAgICAgcmV0dXJuIG1vZHVsZURlZjsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBJbWFnZVtdIGljb25zOwotCi0gIHN0YXRpYyB7Ci0gICAgLy8gQ29ycmVjdCBtZW51IG9uIE1hYyBPUyBYCi0gICAgRGlzcGxheS5zZXRBcHBOYW1lKCJHV1QiKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNoZWNrSG9zdChTdHJpbmcgaG9zdFVuZGVyQ29uc2lkZXJhdGlvbiwKLSAgICAgIFNldDxTdHJpbmc+IGhvc3RzKSB7Ci0gICAgaG9zdFVuZGVyQ29uc2lkZXJhdGlvbiA9IGhvc3RVbmRlckNvbnNpZGVyYXRpb24udG9Mb3dlckNhc2UoKTsKLSAgICBmb3IgKFN0cmluZyBydWxlIDogaG9zdHMpIHsKLSAgICAgIC8vIG1hdGNoIG9uIGxvd2VyY2FzZWQgcmVnZXgKLSAgICAgIGlmIChob3N0VW5kZXJDb25zaWRlcmF0aW9uLm1hdGNoZXMoIi4qIiArIHJ1bGUgKyAiLioiKSkgewotICAgICAgICByZXR1cm4gcnVsZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb21wdXRlSG9zdFJlZ2V4KFN0cmluZyB1cmwpIHsKLSAgICAvLyB0aGUgZW50aXJlIFVSTCB1cCB0byB0aGUgZmlyc3Qgc2xhc2ggbm90IHByZWZpeGVkIGJ5IGEgc2xhc2ggb3IgY29sb24uCi0gICAgU3RyaW5nIHJhdyA9IHVybC5zcGxpdCgiKD88IVs6L10pLyIpWzBdOwotICAgIC8vIGVzY2FwZSB0aGUgZG90cyBhbmQgcHV0IGEgYmVnaW4gbGluZSBzcGVjaWZpZXIgb24gdGhlIHJlc3VsdAotICAgIHJldHVybiAiXiIgKyByYXcucmVwbGFjZUFsbCgiWy5dIiwgIlsuXSIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0UnVsZXMoU2V0PFN0cmluZz4gaW52YWxpZEh0dHBIb3N0cykgewotICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChTdHJpbmcgcnVsZSA6IGludmFsaWRIdHRwSG9zdHMpIHsKLSAgICAgIG91dC5hcHBlbmQocnVsZSk7Ci0gICAgICBvdXQuYXBwZW5kKCIgIik7Ci0gICAgfQotICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBXZWxsLWtub3duIHBsYWNlIHRvIGdldCB0aGUgR1dUIGljb25zLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbWFnZVtdIGdldEljb25zKCkgewotICAgIC8vIE1ha2Ugc3VyZSBpY29uIGltYWdlcyBhcmUgbG9hZGVkLgotICAgIC8vCi0gICAgaWYgKGljb25zID09IG51bGwpIHsKLSAgICAgIGljb25zID0gbmV3IEltYWdlW10gewotICAgICAgICAgIExvd0xldmVsLmxvYWRJbWFnZSgiaWNvbjE2LnBuZyIpLCBMb3dMZXZlbC5sb2FkSW1hZ2UoImljb24yNC5wbmciKSwKLSAgICAgICAgICBMb3dMZXZlbC5sb2FkSW1hZ2UoImljb24zMi5wbmciKSwgTG93TGV2ZWwubG9hZEltYWdlKCJpY29uNDgucG5nIiksCi0gICAgICAgICAgTG93TGV2ZWwubG9hZEltYWdlKCJpY29uMTI4LnBuZyIpfTsKLSAgICB9Ci0gICAgcmV0dXJuIGljb25zOwogICB9CiAKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV0FSTklORzogJyIgKyBHV1RTaGVsbC5jbGFzcy5nZXROYW1lKCkKKyAgICAgICAgKyAiJyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4iKTsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzZSAnIiArIEhvc3RlZE1vZGUuY2xhc3MuZ2V0TmFtZSgpICsgIicgaW5zdGVhZC4iKTsKICAgICAvKgogICAgICAqIE5PVEU6IG1haW4gYWx3YXlzIGV4aXRzIHdpdGggYSBjYWxsIHRvIFN5c3RlbS5leGl0IHRvIHRlcm1pbmF0ZSBhbnkKICAgICAgKiBub24tZGFlbW9uIHRocmVhZHMgdGhhdCB3ZXJlIHN0YXJ0ZWQgaW4gR2VuZXJhdG9ycy4gVHlwaWNhbGx5LCB0aGlzIGlzIHRvCiAgICAgICogc2h1dGRvd24gQVdUIHJlbGF0ZWQgdGhyZWFkcywgc2luY2UgdGhlIGNvbnRyYWN0IGZvciB0aGVpciB0ZXJtaW5hdGlvbiBpcwogICAgICAqIHN0aWxsIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KICAgICAgKi8KLSAgICBHV1RTaGVsbCBzaGVsbE1haW4gPSBuZXcgR1dUU2hlbGwoKTsKLSAgICBpZiAoc2hlbGxNYWluLnByb2Nlc3NBcmdzKGFyZ3MpKSB7Ci0gICAgICBzaGVsbE1haW4ucnVuKCk7CisgICAgR1dUU2hlbGwgZ3d0U2hlbGwgPSBuZXcgR1dUU2hlbGwoKTsKKyAgICBBcmdQcm9jZXNzb3IgYXJnUHJvY2Vzc29yID0gbmV3IEFyZ1Byb2Nlc3Nvcihnd3RTaGVsbC5vcHRpb25zLCBmYWxzZSwgZmFsc2UpOworICAgIGlmIChhcmdQcm9jZXNzb3IucHJvY2Vzc0FyZ3MoYXJncykpIHsKKyAgICAgIGd3dFNoZWxsLnJ1bigpOworICAgICAgLy8gRXhpdCB3LyBzdWNjZXNzIGNvZGUuCisgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICB9Ci0gICAgU3lzdGVtLmV4aXQoMCk7CisgICAgLy8gRXhpdCB3LyBub24tc3VjY2VzcyBjb2RlLgorICAgIFN5c3RlbS5leGl0KC0xKTsKICAgfQogCiAgIC8qKgotICAgKiBVc2UgdGhlIGRlZmF1bHQgZGlzcGxheTsgY29uc3RydWN0aW5nIGEgbmV3IG9uZSB3b3VsZCBtYWtlIGluc3RhbnRpYXRpbmcKLSAgICogbXVsdGlwbGUgR1dUU2hlbGxzIGZhaWwgd2l0aCBhIG15c3RlcmlvdXMgZXhjZXB0aW9uLgorICAgKiBIaWRpbmcgc3VwZXIgZmllbGQgYmVjYXVzZSBpdCdzIGFjdHVhbGx5IHRoZSBzYW1lIG9iamVjdCwganVzdCB3aXRoIGEKKyAgICogc3Ryb25nZXIgdHlwZS4KICAgICovCi0gIHByb3RlY3RlZCBmaW5hbCBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKKyAgQFN1cHByZXNzV2FybmluZ3MoImhpZGluZyIpCisgIHByb3RlY3RlZCBmaW5hbCBTaGVsbE9wdGlvbnNJbXBsIG9wdGlvbnMgPSAoU2hlbGxPcHRpb25zSW1wbCkgc3VwZXIub3B0aW9uczsKIAotICBwcm90ZWN0ZWQgZmluYWwgU2hlbGxPcHRpb25zSW1wbCBvcHRpb25zID0gbmV3IFNoZWxsT3B0aW9uc0ltcGwoKTsKLQotICAvKioKLSAgICogQ2hlYXQgb24gdGhlIGZpcnN0IGxvYWQncyByZWZyZXNoIGJ5IGFzc3VtaW5nIHRoZSBtb2R1bGUgbG9hZGVkIGJ5Ci0gICAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuR1dUU2hlbGxTZXJ2bGV0fSBpcyBzdGlsbCBmcmVzaC4gVGhpcwotICAgKiBwcmV2ZW50cyBhIGRvdWJsZS1yZWZyZXNoIG9uIHN0YXJ0dXAuIFN1YnNlcXVlbnQgcmVmcmVzaGVzIHdpbGwgdHJpZ2dlciBhCi0gICAqIHJlYWwgcmVmcmVzaC4KLSAgICovCi0gIHByaXZhdGUgU2V0PFN0cmluZz4gYWxyZWFkeVNlZW5Nb2R1bGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gIHByaXZhdGUgQnJvd3NlcldpZGdldEhvc3RJbXBsIGJyb3dzZXJIb3N0ID0gbmV3IEJyb3dzZXJXaWRnZXRIb3N0SW1wbCgpOwotCi0gIHByaXZhdGUgZmluYWwgTGlzdDxTaGVsbD4gYnJvd3NlclNoZWxscyA9IG5ldyBBcnJheUxpc3Q8U2hlbGw+KCk7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGhlYWRsZXNzTW9kZSA9IGZhbHNlOwotCi0gIHByaXZhdGUgU2hlbGxNYWluV2luZG93IG1haW5XbmQ7Ci0KLSAgcHJpdmF0ZSBpbnQgcG9ydDsKLQotICBwcml2YXRlIGJvb2xlYW4gcnVuVG9tY2F0ID0gdHJ1ZTsKLQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRlZDsKLQotICBwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiBzdGFydHVwVXJscyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCi0gIHB1YmxpYyBHV1RTaGVsbCgpIHsKLSAgICB0aGlzKGZhbHNlLCBmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgR1dUU2hlbGwoYm9vbGVhbiBmb3JjZVNlcnZlciwgYm9vbGVhbiBub1VSTHMpIHsKLSAgICAvLyBTZXQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHN5c3RlbSBwcm9wZXJ0aWVzLgotICAgIEJvb3RTdHJhcFBsYXRmb3JtLmluaXRIb3N0ZWRNb2RlKCk7Ci0gICAgQm9vdFN0cmFwUGxhdGZvcm0uYXBwbHlQbGF0Zm9ybUhhY2tzKCk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIoZ2V0QXJnSGFuZGxlclBvcnQoKSk7Ci0KLSAgICBpZiAoIWZvcmNlU2VydmVyKSB7Ci0gICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJOb1NlcnZlckZsYWcoKSk7Ci0gICAgfQotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV2hpdGVsaXN0KCkpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckJsYWNrbGlzdCgpKTsKLQotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckxvZ0xldmVsKG9wdGlvbnMpKTsKLQotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckdlbkRpcihvcHRpb25zKSk7Ci0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV29ya0Rpck9wdGlvbmFsKG9wdGlvbnMpKTsKLQotICAgIGlmICghbm9VUkxzKSB7Ci0gICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdGFydHVwVVJMc0V4dHJhKCkpOwotICAgIH0KLQotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckV4dHJhRGlyKG9wdGlvbnMpKTsKLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJPdXREaXIob3B0aW9ucykpOwotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU2NyaXB0U3R5bGUob3B0aW9ucykpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckVuYWJsZUFzc2VydGlvbnMob3B0aW9ucykpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckRpc2FibGVBZ2dyZXNzaXZlT3B0aW1pemF0aW9uKG9wdGlvbnMpKTsKLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJEaXNhYmxlUnVuQXN5bmMob3B0aW9ucykpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkU3RhcnR1cFVSTChTdHJpbmcgdXJsKSB7Ci0gICAgc3RhcnR1cFVybHMuYWRkKHVybCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZUFsbEJyb3dzZXJXaW5kb3dzKCkgewotICAgIHdoaWxlICghYnJvd3NlclNoZWxscy5pc0VtcHR5KCkpIHsKLSAgICAgIGJyb3dzZXJTaGVsbHMuZ2V0KDApLmRpc3Bvc2UoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29tcGlsZXJPcHRpb25zIGdldENvbXBpbGVyT3B0aW9ucygpIHsKKyAgcHVibGljIExlZ2FjeUNvbXBpbGVyT3B0aW9ucyBnZXRDb21waWxlck9wdGlvbnMoKSB7CiAgICAgcmV0dXJuIG5ldyBHV1RDb21waWxlck9wdGlvbnNJbXBsKG9wdGlvbnMpOwogICB9CiAKLSAgcHVibGljIGludCBnZXRQb3J0KCkgewotICAgIHJldHVybiBwb3J0OwotICB9Ci0KLSAgcHVibGljIFRyZWVMb2dnZXIgZ2V0VG9wTG9nZ2VyKCkgewotICAgIHJldHVybiBtYWluV25kLmdldExvZ2dlcigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaGFzQnJvd3NlcldpbmRvd3NPcGVuKCkgewotICAgIGlmIChicm93c2VyU2hlbGxzLmlzRW1wdHkoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTGF1bmNoIHRoZSBhcmd1bWVudHMgYXMgVXJscyBpbiBzZXBhcmF0ZSB3aW5kb3dzLgotICAgKi8KLSAgcHVibGljIHZvaWQgbGF1bmNoU3RhcnR1cFVybHMoZmluYWwgVHJlZUxvZ2dlciBsb2dnZXIpIHsKLSAgICBpZiAoc3RhcnR1cFVybHMgIT0gbnVsbCkgewotICAgICAgLy8gTGF1bmNoIGEgYnJvd3NlciB3aW5kb3cgZm9yIGVhY2ggc3RhcnR1cCB1cmwuCi0gICAgICAvLwotICAgICAgU3RyaW5nIHN0YXJ0dXBVUkwgPSAiIjsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGZvciAoU3RyaW5nIHByZW5vcm1hbGl6ZWQgOiBzdGFydHVwVXJscykgewotICAgICAgICAgIHN0YXJ0dXBVUkwgPSBub3JtYWxpemVVUkwocHJlbm9ybWFsaXplZCk7Ci0gICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlRSQUNFLCAiU3RhcnRpbmcgVVJMOiAiICsgc3RhcnR1cFVSTCwgbnVsbCk7Ci0gICAgICAgICAgQnJvd3NlcldpZGdldCBidyA9IG9wZW5OZXdCcm93c2VyV2luZG93KCk7Ci0gICAgICAgICAgYncuZ28oc3RhcnR1cFVSTCk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gZSkgewotICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsCi0gICAgICAgICAgICAiVW5hYmxlIHRvIG9wZW4gbmV3IHdpbmRvdyBmb3Igc3RhcnR1cCBVUkw6ICIgKyBzdGFydHVwVVJMLCBudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIG5vcm1hbGl6ZVVSTChTdHJpbmcgdW5rbm93blVybFRleHQpIHsKLSAgICBpZiAodW5rbm93blVybFRleHQuaW5kZXhPZigiOiIpICE9IC0xKSB7Ci0gICAgICAvLyBBc3N1bWUgaXQncyBhIGZ1bGwgdXJsLgotICAgICAgcmV0dXJuIHVua25vd25VcmxUZXh0OwotICAgIH0KLQotICAgIC8vIEFzc3VtZSBpdCdzIGEgdHJhaWxpbmcgdXJsIHBhdGguCi0gICAgLy8KLSAgICBpZiAodW5rbm93blVybFRleHQubGVuZ3RoKCkgPiAwICYmIHVua25vd25VcmxUZXh0LmNoYXJBdCgwKSA9PSAnLycpIHsKLSAgICAgIHVua25vd25VcmxUZXh0ID0gdW5rbm93blVybFRleHQuc3Vic3RyaW5nKDEpOwotICAgIH0KLQotICAgIGludCBwcnQgPSBnZXRQb3J0KCk7Ci0gICAgaWYgKHBydCAhPSA4MCAmJiBwcnQgIT0gMCkgewotICAgICAgLy8gQ0hFQ0tTVFlMRV9PRkY6IE5vdCByZWFsbHkgYW4gYXNzZW1ibGVkIGVycm9yIG1lc3NhZ2UsIHNvIG5vIHNwYWNlCi0gICAgICAvLyBhZnRlciAnOicuCi0gICAgICByZXR1cm4gImh0dHA6Ly9sb2NhbGhvc3Q6IiArIHBydCArICIvIiArIHVua25vd25VcmxUZXh0OwotICAgICAgLy8gQ0hFQ0tTVFlMRV9PTgotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gImh0dHA6Ly9sb2NhbGhvc3QvIiArIHVua25vd25VcmxUZXh0OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxsZWQgZGlyZWN0bHkgYnkgU2hlbGxNYWluV2luZG93IGFuZCBpbmRpcmVjdGx5IHZpYSBCcm93c2VyV2lkZ2V0SG9zdC4KLSAgICovCi0gIHB1YmxpYyBCcm93c2VyV2lkZ2V0IG9wZW5OZXdCcm93c2VyV2luZG93KCkgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgIGJvb2xlYW4gc3VjY2VlZGVkID0gZmFsc2U7Ci0gICAgU2hlbGwgcyA9IGNyZWF0ZVRyYWNrZWRCcm93c2VyU2hlbGwoKTsKLSAgICB0cnkgewotICAgICAgQnJvd3NlcldpZGdldCBidyA9IFBsYXRmb3JtU3BlY2lmaWMuY3JlYXRlQnJvd3NlcldpZGdldChnZXRUb3BMb2dnZXIoKSwKLSAgICAgICAgICBzLCBicm93c2VySG9zdCk7Ci0KLSAgICAgIGlmIChtYWluV25kICE9IG51bGwpIHsKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBtYWluV25kLmdldFNoZWxsKCkuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGludCBuID0gYnJvd3NlclNoZWxscy5zaXplKCkgKyAxOwotICAgICAgICBzLnNldEJvdW5kcyhyLnggKyBuICogNTAsIHIueSArIG4gKiA1MCwgODAwLCA2MDApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcy5zZXRTaXplKDgwMCwgNjAwKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFpc0hlYWRsZXNzKCkpIHsKLSAgICAgICAgcy5vcGVuKCk7Ci0gICAgICB9Ci0KLSAgICAgIGJ3Lm9uRmlyc3RTaG93bigpOwotICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgIHJldHVybiBidzsKLSAgICB9IGZpbmFsbHkgewotICAgICAgaWYgKCFzdWNjZWVkZWQpIHsKLSAgICAgICAgcy5kaXNwb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdXAgYWxsIHRoZSBtYWpvciBhc3BlY3RzIG9mIHJ1bm5pbmcgdGhlIHNoZWxsIGdyYXBoaWNhbGx5LCBpbmNsdWRpbmcKLSAgICogY3JlYXRpbmcgdGhlIG1haW4gd2luZG93IGFuZCBvcHRpb25hbGx5IHN0YXJ0aW5nIHRoZSBlbWJlZGRlZCBUb21jYXQKLSAgICogc2VydmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuKCkgewotICAgIHRyeSB7Ci0gICAgICBpZiAoIXN0YXJ0VXAoKSkgewotICAgICAgICAvLyBGYWlsZWQgdG8gaW5pdGlhbGl6ZS4KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBQZXJmb3JtIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBoYWNrcyB0byBpbml0aWFsaXplIHRoZSBHVUkuCi0gICAgICBCb290U3RyYXBQbGF0Zm9ybS5pbml0R3VpKCk7Ci0KLSAgICAgIC8vIFRvbWNhdCdzIHJ1bm5pbmcgbm93LCBzbyBsYXVuY2ggYnJvd3NlcnMgZm9yIHN0YXJ0dXAgdXJscyBub3cuCi0gICAgICBsYXVuY2hTdGFydHVwVXJscyhnZXRUb3BMb2dnZXIoKSk7Ci0KLSAgICAgIHB1bXBFdmVudExvb3AoKTsKLQotICAgICAgc2h1dERvd24oKTsKLQotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCiAgIHB1YmxpYyB2b2lkIHNldENvbXBpbGVyT3B0aW9ucyhDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgIHRoaXMub3B0aW9ucy5jb3B5RnJvbShvcHRpb25zKTsKICAgfQogCi0gIHB1YmxpYyB2b2lkIHNldFBvcnQoaW50IHBvcnQpIHsKLSAgICB0aGlzLnBvcnQgPSBwb3J0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UnVuVG9tY2F0KGJvb2xlYW4gcnVuKSB7Ci0gICAgcnVuVG9tY2F0ID0gcnVuOworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgY29tcGlsZShUcmVlTG9nZ2VyIGxvZ2dlcikgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICB9CiAKICAgLyoqCkBAIC02MDYsMTMgKzE3NiwxOSBAQAogICAgKiBkZWYgcHJvZ3JhbW1hdGljYWxseSBpbiBzb21lIGNhc2VzICh0aGlzIGlzIG5lZWRlZCBmb3IgSlVuaXQgc3VwcG9ydCwgZm9yCiAgICAqIGV4YW1wbGUpLgogICAgKi8KKyAgQE92ZXJyaWRlCiAgIHByb3RlY3RlZCB2b2lkIGNvbXBpbGUoVHJlZUxvZ2dlciBsb2dnZXIsIE1vZHVsZURlZiBtb2R1bGVEZWYpCiAgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0gICAgQ29tcGlsZXJPcHRpb25zIG5ld09wdGlvbnMgPSBuZXcgR1dUQ29tcGlsZXJPcHRpb25zSW1wbChvcHRpb25zKTsKLSAgICBuZXdPcHRpb25zLnNldE1vZHVsZU5hbWUobW9kdWxlRGVmLmdldE5hbWUoKSk7Ci0gICAgbmV3IEdXVENvbXBpbGVyKG5ld09wdGlvbnMpLnJ1bihsb2dnZXIpOworICAgIExlZ2FjeUNvbXBpbGVyT3B0aW9ucyBuZXdPcHRpb25zID0gbmV3IEdXVENvbXBpbGVyT3B0aW9uc0ltcGwob3B0aW9ucyk7CisgICAgbmV3IEdXVENvbXBpbGVyKG5ld09wdGlvbnMpLnJ1bihsb2dnZXIsIG1vZHVsZURlZik7CiAgIH0KIAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIEhvc3RlZE1vZGVCYXNlT3B0aW9ucyBjcmVhdGVPcHRpb25zKCkgeworICAgIHJldHVybiBuZXcgU2hlbGxPcHRpb25zSW1wbCgpOworICB9CisKKyAgQE92ZXJyaWRlCiAgIHByb3RlY3RlZCBBcnRpZmFjdEFjY2VwdG9yIGRvQ3JlYXRlQXJ0aWZhY3RBY2NlcHRvcihmaW5hbCBNb2R1bGVEZWYgbW9kdWxlKSB7CiAgICAgcmV0dXJuIG5ldyBBcnRpZmFjdEFjY2VwdG9yKCkgewogICAgICAgcHVibGljIHZvaWQgYWNjZXB0KFRyZWVMb2dnZXIgbG9nZ2VyLCBBcnRpZmFjdFNldCBhcnRpZmFjdHMpCkBAIC02MzMsMTQ4ICsyMDksMTUgQEAKICAgICB9OwogICB9CiAKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU2hlbGxNb2R1bGVTcGFjZUhvc3QgKG9yIGEgZGVyaXZlZCBjbGFzcykgdXNpbmcgdGhlCi0gICAqIHNwZWNpZmllZCBjb25zdGl0dWVudCBwYXJ0cy4gVGhpcyBtZXRob2QgaXMgbWFkZSB0byBiZSBvdmVycmlkZGVuIGZvcgotICAgKiBzdWJjbGFzc2VzIHRoYXQgbmVlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIFNoZWxsTW9kdWxlU3BhY2VIb3N0LgotICAgKiAKLSAgICogQHBhcmFtIGxvZ2dlciBUcmVlTG9nZ2VyIHRvIHVzZQotICAgKiBAcGFyYW0gdHlwZU9yYWNsZQotICAgKiBAcGFyYW0gbW9kdWxlRGVmCi0gICAqIEBwYXJhbSBnZW5EaXIKLSAgICogQHJldHVybiBTaGVsbE1vZHVsZVNwYWNlSG9zdCBpbnN0YW5jZQotICAgKi8KLSAgcHJvdGVjdGVkIFNoZWxsTW9kdWxlU3BhY2VIb3N0IGRvQ3JlYXRlU2hlbGxNb2R1bGVTcGFjZUhvc3QoCi0gICAgICBUcmVlTG9nZ2VyIGxvZ2dlciwgVHlwZU9yYWNsZSB0eXBlT3JhY2xlLCBNb2R1bGVEZWYgbW9kdWxlRGVmKSB7Ci0gICAgLy8gQ2xlYXIgb3V0IHRoZSBzaGVsbCB0ZW1wIGRpcmVjdG9yeS4KLSAgICBVdGlsLnJlY3Vyc2l2ZURlbGV0ZShvcHRpb25zLmdldFNoZWxsQmFzZVdvcmtEaXIobW9kdWxlRGVmKSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG5ldyBTaGVsbE1vZHVsZVNwYWNlSG9zdChsb2dnZXIsIHR5cGVPcmFjbGUsIG1vZHVsZURlZiwKLSAgICAgICAgb3B0aW9ucy5nZXRHZW5EaXIoKSwgb3B0aW9ucy5nZXRTaGVsbFByaXZhdGVHZW5EaXIobW9kdWxlRGVmKSwKLSAgICAgICAgZG9DcmVhdGVBcnRpZmFjdEFjY2VwdG9yKG1vZHVsZURlZikpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbiBiZSBvdmVycmlkZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgbG9nIGxldmVsIGluIHN1YmNsYXNzZXMuIEpVbml0IGRvZXMKLSAgICogdGhpcyBmb3IgZXhhbXBsZS4KLSAgICovCi0gIHByb3RlY3RlZCBUeXBlIGRvR2V0RGVmYXVsdExvZ0xldmVsKCkgewotICAgIHJldHVybiBUeXBlLklORk87Ci0gIH0KLQotICAvKioKLSAgICogRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSB0byBwcmV2ZW50IGF1dG9tYXRpYyB1cGRhdGUgY2hlY2tpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBkb1Nob3VsZENoZWNrRm9yVXBkYXRlcygpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHRvIHNldCBhIGRlZmF1bHQgcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBBcmdIYW5kbGVyUG9ydCBnZXRBcmdIYW5kbGVyUG9ydCgpIHsKLSAgICByZXR1cm4gbmV3IEFyZ0hhbmRsZXJQb3J0KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQnJvd3NlcldpZGdldEhvc3QgZ2V0QnJvd3Nlckhvc3QoKSB7Ci0gICAgcmV0dXJuIGJyb3dzZXJIb3N0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUxvZ2dlcigpIHsKLSAgICBmaW5hbCBBYnN0cmFjdFRyZWVMb2dnZXIgbG9nZ2VyID0gbWFpblduZC5nZXRMb2dnZXIoKTsKLSAgICBsb2dnZXIuc2V0TWF4RGV0YWlsKG9wdGlvbnMuZ2V0TG9nTGV2ZWwoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQnkgZGVmYXVsdCB3ZSB3aWxsIG9wZW4gdGhlIGFwcGxpY2F0aW9uIHdpbmRvdy4KLSAgICogCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBoZWFkbGVzcyBtb2RlCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0hlYWRsZXNzKCkgewotICAgIHJldHVybiBoZWFkbGVzc01vZGU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBub3REb25lKCkgewotICAgIGlmICghbWFpblduZC5pc0Rpc3Bvc2VkKCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoIWJyb3dzZXJTaGVsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHVtcEV2ZW50TG9vcCgpIHsKLSAgICBUcmVlTG9nZ2VyIGxvZ2dlciA9IGdldFRvcExvZ2dlcigpOwotCi0gICAgLy8gUnVuIHRoZSBldmVudCBsb29wLiBXaGVuIHRoZXJlIGFyZSBubyBvcGVuIHNoZWxscywgcXVpdC4KLSAgICAvLwotICAgIHdoaWxlIChub3REb25lKCkpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgewotICAgICAgICAgIHNsZWVwKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7Ci0gICAgICAgIFN0cmluZyBtc2cgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgbXNnID0gKG1zZyAhPSBudWxsID8gbXNnIDogZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgbXNnLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBzZXRIZWFkbGVzcyhib29sZWFuIGhlYWRsZXNzTW9kZSkgewotICAgIHRoaXMuaGVhZGxlc3NNb2RlID0gaGVhZGxlc3NNb2RlOwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2h1dERvd24oKSB7Ci0gICAgaWYgKCFydW5Ub21jYXQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGRvU2h1dERvd25TZXJ2ZXIoKSB7CiAgICAgLy8gU3RvcCB0aGUgSFRUUCBzZXJ2ZXIuCiAgICAgLy8KICAgICBFbWJlZGRlZFRvbWNhdFNlcnZlci5zdG9wKCk7CiAgIH0KIAotICBwcm90ZWN0ZWQgdm9pZCBzbGVlcCgpIHsKLSAgICBkaXNwbGF5LnNsZWVwKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdGFydFVwKCkgewotICAgIGlmIChzdGFydGVkKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTdGFydHVwIGNvZGUgaGFzIGFscmVhZHkgYmVlbiBydW4iKTsKLSAgICB9Ci0KLSAgICBzdGFydGVkID0gdHJ1ZTsKLQotICAgIGxvYWRSZXF1aXJlZE5hdGl2ZUxpYnMoKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgbWFpbiBhcHAgd2luZG93LgotICAgIC8vIFdoZW4gaXQgaXMgdXAgYW5kIHJ1bm5pbmcsIGl0IHdpbGwgc3RhcnQgdGhlIFRvbWNhdCBzZXJ2ZXIgaWYgZGVzaXJlZC4KLSAgICAvLwotICAgIG9wZW5BcHBXaW5kb3coKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGxvZ2dlci4KLSAgICAvLwotICAgIGluaXRpYWxpemVMb2dnZXIoKTsKLQotICAgIGlmIChydW5Ub21jYXQpIHsKLSAgICAgIGludCByZXN1bHRQb3J0ID0gc3RhcnRVcFNlcnZlcigpOwotICAgICAgaWYgKHJlc3VsdFBvcnQgPCAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHBvcnQgPSByZXN1bHRQb3J0OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGludCBzdGFydFVwU2VydmVyKCkgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGludCBkb1N0YXJ0VXBTZXJ2ZXIoKSB7CiAgICAgLy8gVE9ETyhicnVjZSk6IG1ha2UgdG9tY2F0IHdvcmsgaW4gdGVybXMgb2YgdGhlIG1vZHVsYXIgbGF1bmNoZXIKICAgICBTdHJpbmcgd2h5RmFpbGVkID0gRW1iZWRkZWRUb21jYXRTZXJ2ZXIuc3RhcnQoZ2V0VG9wTG9nZ2VyKCksIGdldFBvcnQoKSwKICAgICAgICAgb3B0aW9ucyk7CkBAIC03ODgsNTggKzIzMSwxNCBAQAogICAgIHJldHVybiBFbWJlZGRlZFRvbWNhdFNlcnZlci5nZXRQb3J0KCk7CiAgIH0KIAotICBwcml2YXRlIFNoZWxsIGNyZWF0ZVRyYWNrZWRCcm93c2VyU2hlbGwoKSB7Ci0gICAgZmluYWwgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7Ci0gICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKLSAgICBmaWxsTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBmaWxsTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgc2hlbGwuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOwotICAgIGJyb3dzZXJTaGVsbHMuYWRkKHNoZWxsKTsKLSAgICBzaGVsbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKERpc3Bvc2VFdmVudCBlKSB7Ci0gICAgICAgIGlmIChlLndpZGdldCA9PSBzaGVsbCkgewotICAgICAgICAgIGJyb3dzZXJTaGVsbHMucmVtb3ZlKHNoZWxsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotCi0gICAgc2hlbGwuc2V0SW1hZ2VzKGdldEljb25zKCkpOwotCi0gICAgcmV0dXJuIHNoZWxsOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWRSZXF1aXJlZE5hdGl2ZUxpYnMoKSB7Ci0gICAgU3RyaW5nIGxpYk5hbWUgPSBudWxsOwotICAgIHRyeSB7Ci0gICAgICBsaWJOYW1lID0gInN3dCI7Ci0gICAgICBMaWJyYXJ5LmxvYWRMaWJyYXJ5KGxpYk5hbWUpOwotICAgIH0gY2F0Y2ggKFVuc2F0aXNmaWVkTGlua0Vycm9yIGUpIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHNiLmFwcGVuZCgiVW5hYmxlIHRvIGxvYWQgcmVxdWlyZWQgbmF0aXZlIGxpYnJhcnkgJyIgKyBsaWJOYW1lICsgIiciKTsKLSAgICAgIHNiLmFwcGVuZCgiXG5cdFBsZWFzZSBzcGVjaWZ5IHRoZSBKVk0gc3RhcnR1cCBhcmd1bWVudCAiKTsKLSAgICAgIHNiLmFwcGVuZCgiXCItRGphdmEubGlicmFyeS5wYXRoXCIiKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNiLnRvU3RyaW5nKCksIGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBvcGVuQXBwV2luZG93KCkgewotICAgIGZpbmFsIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOwotCi0gICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKLSAgICBmaWxsTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBmaWxsTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgc2hlbGwuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOwotCi0gICAgc2hlbGwuc2V0SW1hZ2VzKGdldEljb25zKCkpOwotCi0gICAgYm9vbGVhbiBjaGVja0ZvclVwZGF0ZXMgPSBkb1Nob3VsZENoZWNrRm9yVXBkYXRlcygpOwotCi0gICAgbWFpblduZCA9IG5ldyBTaGVsbE1haW5XaW5kb3codGhpcywgc2hlbGwsIHJ1blRvbWNhdCA/IGdldFBvcnQoKSA6IDAsCi0gICAgICAgIGNoZWNrRm9yVXBkYXRlcyk7Ci0KLSAgICBzaGVsbC5zZXRTaXplKDcwMCwgNjAwKTsKLSAgICBpZiAoIWlzSGVhZGxlc3MoKSkgewotICAgICAgc2hlbGwub3BlbigpOwotICAgIH0KKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBib29sZWFuIGluaXRNb2R1bGUoU3RyaW5nIG1vZHVsZU5hbWUpIHsKKyAgICAvKgorICAgICAqIE5vdCB1c2VkIGluIGxlZ2FjeSBtb2RlIGR1ZSB0byBHV1RTaGVsbFNlcnZsZXQgcGxheWluZyB0aGlzIHJvbGUuCisgICAgICogCisgICAgICogVE9ETzogc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZSBhbmQgYWN0dWFsbHkgbWFrZSBHV1RTaGVsbFNlcnZsZXQgbGVzcworICAgICAqIG1hZ2ljPworICAgICAqLworICAgIHJldHVybiBmYWxzZTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Ib3N0ZWRNb2RlLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0hvc3RlZE1vZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJkYTIyCi0tLSAvZGV2L251bGwKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Ib3N0ZWRNb2RlLmphdmEKQEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QuZGV2OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuU2VydmxldENvbnRhaW5lcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5TZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVHJlZUxvZ2dlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5VbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0Lmxpbmtlci5BcnRpZmFjdFNldDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5saW5rZXIuaW1wbC5TdGFuZGFyZExpbmtlckNvbnRleHQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LkNvbXBpbGVyLkNvbXBpbGVyT3B0aW9uc0ltcGw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWY7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkFydGlmYWN0QWNjZXB0b3I7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLmpldHR5LkpldHR5TGF1bmNoZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuVXRpbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlckV4dHJhRGlyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyTG9jYWxXb3JrZXJzOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyTW9kdWxlTmFtZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlcldhckRpcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5sb2cuUHJpbnRXcml0ZXJUcmVlTG9nZ2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuQXJnSGFuZGxlclN0cmluZzsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLlV0aWxpdHk7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEubmV0LkJpbmRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworLyoqCisgKiBUaGUgbWFpbiBleGVjdXRhYmxlIGNsYXNzIGZvciB0aGUgaG9zdGVkIG1vZGUgc2hlbGwuIE5PVEU6IHRoZSBwdWJsaWMgQVBJIGZvcgorICogdGhpcyBjbGFzcyBpcyB0byBiZSBkZXRlcm1pbmVkLiBDb25zaWRlciB0aGlzIGNsYXNzIGFzIGhhdmluZyA8Yj5ubzwvYj4KKyAqIHB1YmxpYyBBUEkgb3RoZXIgdGhhbiB7QGxpbmsgI21haW4oU3RyaW5nW10pfS4KKyAqLworcHVibGljIGNsYXNzIEhvc3RlZE1vZGUgZXh0ZW5kcyBIb3N0ZWRNb2RlQmFzZSB7CisKKyAgLyoqCisgICAqIEhhbmRsZXMgdGhlIC1zZXJ2ZXIgY29tbWFuZCBsaW5lIGZsYWcuCisgICAqLworICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFyZ0hhbmRsZXJTZXJ2ZXIgZXh0ZW5kcyBBcmdIYW5kbGVyU3RyaW5nIHsKKyAgICBwcml2YXRlIEhvc3RlZE1vZGVPcHRpb25zIG9wdGlvbnM7CisKKyAgICBwdWJsaWMgQXJnSGFuZGxlclNlcnZlcihIb3N0ZWRNb2RlT3B0aW9ucyBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKKyAgICAgIGlmIChvcHRpb25zLmlzTm9TZXJ2ZXIoKSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10ge2dldFRhZygpLCBKZXR0eUxhdW5jaGVyLmNsYXNzLmdldE5hbWUoKX07CisgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgeworICAgICAgcmV0dXJuICJQcmV2ZW50cyB0aGUgZW1iZWRkZWQgVG9tY2F0IHNlcnZlciBmcm9tIHJ1bm5pbmcsIGV2ZW4gaWYgYSBwb3J0IGlzIHNwZWNpZmllZCI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7CisgICAgICByZXR1cm4gIi1zZXJ2ZXIiOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgeworICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7InNlcnZsZXRDb250YWluZXJMYXVuY2hlciJ9OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgc2NsQ2xhc3NOYW1lKSB7CisgICAgICAvLyBTdXBlcmNlZGVzIC1ub3NlcnZlci4KKyAgICAgIG9wdGlvbnMuc2V0Tm9TZXJ2ZXIoZmFsc2UpOworICAgICAgVGhyb3dhYmxlIHQ7CisgICAgICB0cnkgeworICAgICAgICBDbGFzczw/PiBjbGF6eiA9IENsYXNzLmZvck5hbWUoc2NsQ2xhc3NOYW1lLCB0cnVlLAorICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIENsYXNzPD8gZXh0ZW5kcyBTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXI+IHNjbENsYXNzID0gY2xhenouYXNTdWJjbGFzcyhTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIuY2xhc3MpOworICAgICAgICBvcHRpb25zLnNldFNlcnZsZXRDb250YWluZXJMYXVuY2hlcihzY2xDbGFzcy5uZXdJbnN0YW5jZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICB0ID0gZTsKKyAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICB0ID0gZTsKKyAgICAgIH0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICB0ID0gZTsKKyAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICB0ID0gZTsKKyAgICAgIH0KKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5hYmxlIHRvIGxvYWQgc2VydmVyIGNsYXNzICciICsgc2NsQ2xhc3NOYW1lICsgIiciKTsKKyAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIEhhbmRsZXMgYSBzdGFydHVwIHVybCB0aGF0IGNhbiBiZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICovCisgIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQXJnSGFuZGxlclN0YXJ0dXBVUkxzIGV4dGVuZHMgQXJnSGFuZGxlclN0cmluZyB7CisgICAgcHJpdmF0ZSBmaW5hbCBPcHRpb25TdGFydHVwVVJMcyBvcHRpb25zOworCisgICAgcHVibGljIEFyZ0hhbmRsZXJTdGFydHVwVVJMcyhPcHRpb25TdGFydHVwVVJMcyBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKKyAgICAgIHJldHVybiAiQXV0b21hdGljYWxseSBsYXVuY2hlcyB0aGUgc3BlY2lmaWVkIFVSTCI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7CisgICAgICByZXR1cm4gIi1zdGFydHVwVXJsIjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKKyAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJ1cmwifTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIGFyZykgeworICAgICAgb3B0aW9ucy5hZGRTdGFydHVwVVJMKGFyZyk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgY2xhc3MgQXJnUHJvY2Vzc29yIGV4dGVuZHMgSG9zdGVkTW9kZUJhc2UuQXJnUHJvY2Vzc29yIHsKKyAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKEhvc3RlZE1vZGVPcHRpb25zIG9wdGlvbnMpIHsKKyAgICAgIHN1cGVyKG9wdGlvbnMsIGZhbHNlKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlclNlcnZlcihvcHRpb25zKSk7CisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdGFydHVwVVJMcyhvcHRpb25zKSk7CisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJXYXJEaXIob3B0aW9ucykpOworICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyRXh0cmFEaXIob3B0aW9ucykpOworICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV29ya0Rpck9wdGlvbmFsKG9wdGlvbnMpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckxvY2FsV29ya2VycyhvcHRpb25zKSk7CisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJNb2R1bGVOYW1lKG9wdGlvbnMpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICByZXR1cm4gSG9zdGVkTW9kZS5jbGFzcy5nZXROYW1lKCk7CisgICAgfQorICB9CisKKyAgaW50ZXJmYWNlIEhvc3RlZE1vZGVPcHRpb25zIGV4dGVuZHMgSG9zdGVkTW9kZUJhc2VPcHRpb25zLCBDb21waWxlck9wdGlvbnMgeworICAgIFNlcnZsZXRDb250YWluZXJMYXVuY2hlciBnZXRTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIoKTsKKworICAgIHZvaWQgc2V0U2VydmxldENvbnRhaW5lckxhdW5jaGVyKFNlcnZsZXRDb250YWluZXJMYXVuY2hlciBzY2wpOworICB9CisKKyAgLyoqCisgICAqIENvbmNyZXRlIGNsYXNzIHRvIGltcGxlbWVudCBhbGwgaG9zdGVkIG1vZGUgb3B0aW9ucy4KKyAgICovCisgIHN0YXRpYyBjbGFzcyBIb3N0ZWRNb2RlT3B0aW9uc0ltcGwgZXh0ZW5kcyBIb3N0ZWRNb2RlQmFzZU9wdGlvbnNJbXBsCisgICAgICBpbXBsZW1lbnRzIEhvc3RlZE1vZGVPcHRpb25zIHsKKyAgICBwcml2YXRlIEZpbGUgZXh0cmFEaXI7CisgICAgcHJpdmF0ZSBpbnQgbG9jYWxXb3JrZXJzOworICAgIHByaXZhdGUgU2VydmxldENvbnRhaW5lckxhdW5jaGVyIHNjbDsKKyAgICBwcml2YXRlIEZpbGUgd2FyRGlyOworCisgICAgcHVibGljIEZpbGUgZ2V0RXh0cmFEaXIoKSB7CisgICAgICByZXR1cm4gZXh0cmFEaXI7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRMb2NhbFdvcmtlcnMoKSB7CisgICAgICByZXR1cm4gbG9jYWxXb3JrZXJzOworICAgIH0KKworICAgIHB1YmxpYyBTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIgZ2V0U2VydmxldENvbnRhaW5lckxhdW5jaGVyKCkgeworICAgICAgcmV0dXJuIHNjbDsKKyAgICB9CisKKyAgICBwdWJsaWMgRmlsZSBnZXRTaGVsbEJhc2VXb3JrRGlyKE1vZHVsZURlZiBtb2R1bGVEZWYpIHsKKyAgICAgIHJldHVybiBuZXcgRmlsZShuZXcgRmlsZShnZXRXb3JrRGlyKCksIG1vZHVsZURlZi5nZXROYW1lKCkpLCAic2hlbGwiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgRmlsZSBnZXRTaGVsbFB1YmxpY0dlbkRpcihNb2R1bGVEZWYgbW9kdWxlRGVmKSB7CisgICAgICByZXR1cm4gbmV3IEZpbGUoZ2V0U2hlbGxCYXNlV29ya0Rpcihtb2R1bGVEZWYpLCAicHVibGljIik7CisgICAgfQorCisgICAgcHVibGljIEZpbGUgZ2V0V2FyRGlyKCkgeworICAgICAgcmV0dXJuIHdhckRpcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRFeHRyYURpcihGaWxlIGV4dHJhRGlyKSB7CisgICAgICB0aGlzLmV4dHJhRGlyID0gZXh0cmFEaXI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxXb3JrZXJzKGludCBsb2NhbFdvcmtlcnMpIHsKKyAgICAgIHRoaXMubG9jYWxXb3JrZXJzID0gbG9jYWxXb3JrZXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFNlcnZsZXRDb250YWluZXJMYXVuY2hlcihTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIgc2NsKSB7CisgICAgICB0aGlzLnNjbCA9IHNjbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRXYXJEaXIoRmlsZSB3YXJEaXIpIHsKKyAgICAgIHRoaXMud2FyRGlyID0gd2FyRGlyOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAvKgorICAgICAqIE5PVEU6IG1haW4gYWx3YXlzIGV4aXRzIHdpdGggYSBjYWxsIHRvIFN5c3RlbS5leGl0IHRvIHRlcm1pbmF0ZSBhbnkKKyAgICAgKiBub24tZGFlbW9uIHRocmVhZHMgdGhhdCB3ZXJlIHN0YXJ0ZWQgaW4gR2VuZXJhdG9ycy4gVHlwaWNhbGx5LCB0aGlzIGlzIHRvCisgICAgICogc2h1dGRvd24gQVdUIHJlbGF0ZWQgdGhyZWFkcywgc2luY2UgdGhlIGNvbnRyYWN0IGZvciB0aGVpciB0ZXJtaW5hdGlvbiBpcworICAgICAqIHN0aWxsIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KKyAgICAgKi8KKyAgICBIb3N0ZWRNb2RlIGhvc3RlZE1vZGUgPSBuZXcgSG9zdGVkTW9kZSgpOworICAgIGlmIChuZXcgQXJnUHJvY2Vzc29yKGhvc3RlZE1vZGUub3B0aW9ucykucHJvY2Vzc0FyZ3MoYXJncykpIHsKKyAgICAgIGhvc3RlZE1vZGUucnVuKCk7CisgICAgICAvLyBFeGl0IHcvIHN1Y2Nlc3MgY29kZS4KKyAgICAgIFN5c3RlbS5leGl0KDApOworICAgIH0KKyAgICAvLyBFeGl0IHcvIG5vbi1zdWNjZXNzIGNvZGUuCisgICAgU3lzdGVtLmV4aXQoLTEpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIFByaW50V3JpdGVyVHJlZUxvZ2dlciBjb25zb2xlID0gbmV3IFByaW50V3JpdGVyVHJlZUxvZ2dlcigKKyAgICAgIG5ldyBQcmludFdyaXRlcihTeXN0ZW0uZXJyLCB0cnVlKSk7CisKKyAgLyoqCisgICAqIEhpZGluZyBzdXBlciBmaWVsZCBiZWNhdXNlIGl0J3MgYWN0dWFsbHkgdGhlIHNhbWUgb2JqZWN0LCBqdXN0IHdpdGggYQorICAgKiBzdHJvbmdlciB0eXBlLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImhpZGluZyIpCisgIHByb3RlY3RlZCBmaW5hbCBIb3N0ZWRNb2RlT3B0aW9uc0ltcGwgb3B0aW9ucyA9IChIb3N0ZWRNb2RlT3B0aW9uc0ltcGwpIHN1cGVyLm9wdGlvbnM7CisKKyAgLyoqCisgICAqIE1hcHMgZWFjaCBhY3RpdmUgbGlua2VyIHN0YWNrIGJ5IG1vZHVsZS4KKyAgICovCisgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgU3RhbmRhcmRMaW5rZXJDb250ZXh0PiBsaW5rZXJTdGFja3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0YW5kYXJkTGlua2VyQ29udGV4dD4oKTsKKworICAvKioKKyAgICogVGhlIHNldCBvZiBzcGVjaWZpZWQgbW9kdWxlcyBieSBuYW1lOyB0aGUga2V5cyByZXByZXNlbnQgdGhlIHJlbmFtZWQgbmFtZQorICAgKiBvZiBlYWNoIG1vZHVsZSByYXRoZXIgdGhhbiB0aGUgY2Fub25pY2FsIG5hbWUuCisgICAqLworICBwcml2YXRlIE1hcDxTdHJpbmcsIE1vZHVsZURlZj4gbW9kdWxlc0J5TmFtZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgTW9kdWxlRGVmPigpOworCisgIC8qKgorICAgKiBUaGUgc2VydmVyIHRoYXQgd2FzIHN0YXJ0ZWQuCisgICAqLworICBwcml2YXRlIFNlcnZsZXRDb250YWluZXIgc2VydmVyOworCisgIC8qKgorICAgKiBUcmFja3Mgd2hldGhlciB3ZSBjcmVhdGVkIGEgdGVtcCB3b3JrZGlyIHRoYXQgd2UgbmVlZCB0byBkZXN0cm95LgorICAgKi8KKyAgcHJpdmF0ZSBib29sZWFuIHRlbXBXb3JrRGlyID0gZmFsc2U7CisKKyAgeworICAgIGNvbnNvbGUuc2V0TWF4RGV0YWlsKFRyZWVMb2dnZXIuV0FSTik7CisgIH0KKworICAvKioKKyAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGVzdGluZzsgbm8gcHVibGljIEFQSSB5ZXQuCisgICAqLworICBIb3N0ZWRNb2RlKCkgeworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGNvbXBpbGUoVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICBDb21waWxlck9wdGlvbnMgbmV3T3B0aW9ucyA9IG5ldyBDb21waWxlck9wdGlvbnNJbXBsKG9wdGlvbnMpOworICAgIG5ldyBDb21waWxlcihuZXdPcHRpb25zKS5ydW4obG9nZ2VyKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGNvbXBpbGUoVHJlZUxvZ2dlciBsb2dnZXIsIE1vZHVsZURlZiBtb2R1bGVEZWYpCisgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIEhvc3RlZE1vZGVCYXNlT3B0aW9ucyBjcmVhdGVPcHRpb25zKCkgeworICAgIHJldHVybiBuZXcgSG9zdGVkTW9kZU9wdGlvbnNJbXBsKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIEFydGlmYWN0QWNjZXB0b3IgZG9DcmVhdGVBcnRpZmFjdEFjY2VwdG9yKGZpbmFsIE1vZHVsZURlZiBtb2R1bGUpIHsKKyAgICByZXR1cm4gbmV3IEFydGlmYWN0QWNjZXB0b3IoKSB7CisgICAgICBwdWJsaWMgdm9pZCBhY2NlcHQoVHJlZUxvZ2dlciBsb2dnZXIsIEFydGlmYWN0U2V0IG5ld2x5R2VuZXJhdGVkQXJ0aWZhY3RzKQorICAgICAgICAgIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICAgICAgcmVsaW5rKGxvZ2dlciwgbW9kdWxlLCBuZXdseUdlbmVyYXRlZEFydGlmYWN0cyk7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb1NodXREb3duU2VydmVyKCkgeworICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgc2VydmVyLnN0b3AoKTsKKyAgICAgIH0gY2F0Y2ggKFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gZSkgeworICAgICAgICAvLyBBbHJlYWR5IGxvZ2dlZC4KKyAgICAgIH0KKyAgICAgIHNlcnZlciA9IG51bGw7CisgICAgfQorCisgICAgaWYgKHRlbXBXb3JrRGlyKSB7CisgICAgICBVdGlsLnJlY3Vyc2l2ZURlbGV0ZShvcHRpb25zLmdldFdvcmtEaXIoKSwgZmFsc2UpOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBkb1N0YXJ0dXAoKSB7CisgICAgaWYgKCFzdXBlci5kb1N0YXJ0dXAoKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB0ZW1wV29ya0RpciA9IG9wdGlvbnMuZ2V0V29ya0RpcigpID09IG51bGw7CisgICAgaWYgKHRlbXBXb3JrRGlyKSB7CisgICAgICB0cnkgeworICAgICAgICBvcHRpb25zLnNldFdvcmtEaXIoVXRpbGl0eS5tYWtlVGVtcG9yYXJ5RGlyZWN0b3J5KG51bGwsICJnd3RjIikpOworICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgaG9zdGVkIG1vZGUgd29yayBkaXJlY3RvcnkiKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGZvciAoU3RyaW5nIG1vZHVsZU5hbWUgOiBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkpIHsKKyAgICAgIFRyZWVMb2dnZXIgbG9hZExvZ2dlciA9IGdldFRvcExvZ2dlcigpLmJyYW5jaChUcmVlTG9nZ2VyLkRFQlVHLAorICAgICAgICAgICJMb2FkaW5nIG1vZHVsZSAiICsgbW9kdWxlTmFtZSk7CisgICAgICB0cnkgeworICAgICAgICBNb2R1bGVEZWYgbW9kdWxlID0gbG9hZE1vZHVsZShsb2FkTG9nZ2VyLCBtb2R1bGVOYW1lLCBmYWxzZSk7CisKKyAgICAgICAgLy8gVE9ETzogVmFsaWRhdGUgc2VydmxldCB0YWdzLgorICAgICAgICBTdHJpbmdbXSBzZXJ2bGV0UGF0aHMgPSBtb2R1bGUuZ2V0U2VydmxldFBhdGhzKCk7CisgICAgICAgIGlmIChzZXJ2bGV0UGF0aHMubGVuZ3RoID4gMCkgeworICAgICAgICAgIGxvYWRMb2dnZXIubG9nKFRyZWVMb2dnZXIuV0FSTiwKKyAgICAgICAgICAgICAgIklnbm9yaW5nIGxlZ2FjeSA8c2VydmxldD4gdGFnKHMpIGluIG1vZHVsZSAnIiArIG1vZHVsZU5hbWUKKyAgICAgICAgICAgICAgICAgICsgIic7IGFkZCBzZXJ2bGV0IHRhZ3MgdG8geW91ciB3ZWIueG1sIGluc3RlYWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmsobG9hZExvZ2dlciwgbW9kdWxlLCBmYWxzZSk7CisgICAgICB9IGNhdGNoIChVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgLy8gQWxyZWFkeSBsb2dnZWQuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGludCBkb1N0YXJ0VXBTZXJ2ZXIoKSB7CisgICAgdHJ5IHsKKyAgICAgIFRyZWVMb2dnZXIgc2VydmVyTG9nZ2VyID0gZ2V0VG9wTG9nZ2VyKCkuYnJhbmNoKFRyZWVMb2dnZXIuSU5GTywKKyAgICAgICAgICAiU3RhcnRpbmcgSFRUUCBvbiBwb3J0ICIgKyBnZXRQb3J0KCksIG51bGwpOworICAgICAgc2VydmVyID0gb3B0aW9ucy5nZXRTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIoKS5zdGFydChzZXJ2ZXJMb2dnZXIsCisgICAgICAgICAgZ2V0UG9ydCgpLCBvcHRpb25zLmdldFdhckRpcigpKTsKKyAgICAgIGFzc2VydCAoc2VydmVyICE9IG51bGwpOworICAgICAgcmV0dXJuIHNlcnZlci5nZXRQb3J0KCk7CisgICAgfSBjYXRjaCAoQmluZEV4Y2VwdGlvbiBlKSB7CisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBvcnQgIgorICAgICAgICAgICsgZ2V0UG9ydCgpCisgICAgICAgICAgKyAiIGlzIGFscmVhZHkgaXMgdXNlOyB5b3UgcHJvYmFibHkgc3RpbGwgaGF2ZSBhbm90aGVyIHNlc3Npb24gYWN0aXZlIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5hYmxlIHRvIHN0YXJ0IGVtYmVkZGVkIEhUVFAgc2VydmVyIik7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICByZXR1cm4gLTE7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRIb3N0KCkgeworICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgcmV0dXJuIHNlcnZlci5nZXRIb3N0KCk7CisgICAgfQorICAgIHJldHVybiBzdXBlci5nZXRIb3N0KCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGJvb2xlYW4gaW5pdE1vZHVsZShTdHJpbmcgbW9kdWxlTmFtZSkgeworICAgIE1vZHVsZURlZiBtb2R1bGUgPSBtb2R1bGVzQnlOYW1lLmdldChtb2R1bGVOYW1lKTsKKyAgICBpZiAobW9kdWxlID09IG51bGwpIHsKKyAgICAgIGdldFRvcExvZ2dlcigpLmxvZygKKyAgICAgICAgICBUcmVlTG9nZ2VyLldBUk4sCisgICAgICAgICAgIlVua25vd24gbW9kdWxlIHJlcXVlc3RlZCAnIgorICAgICAgICAgICAgICArIG1vZHVsZU5hbWUKKyAgICAgICAgICAgICAgKyAiJzsgYWxsIGFjdGl2ZSBHV1QgbW9kdWxlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB0cnkgeworICAgICAgYm9vbGVhbiBzaG91bGRSZWZyZXNoUGFnZSA9IGZhbHNlOworICAgICAgaWYgKG1vZHVsZS5pc0d3dFhtbEZpbGVTdGFsZSgpKSB7CisgICAgICAgIHNob3VsZFJlZnJlc2hQYWdlID0gdHJ1ZTsKKyAgICAgICAgbW9kdWxlID0gbG9hZE1vZHVsZShnZXRUb3BMb2dnZXIoKSwgbW9kdWxlLmdldENhbm9uaWNhbE5hbWUoKSwgZmFsc2UpOworICAgICAgfQorICAgICAgbGluayhnZXRUb3BMb2dnZXIoKSwgbW9kdWxlLCB0cnVlKTsKKyAgICAgIHJldHVybiBzaG91bGRSZWZyZXNoUGFnZTsKKyAgICB9IGNhdGNoIChVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgIC8vIEFscmVhZHkgbG9nZ2VkLgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIC8qCisgICAqIE92ZXJyaWRkZW4gdG8ga2VlcCBvdXIgbWFwIHVwIHRvIGRhdGUuCisgICAqLworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIE1vZHVsZURlZiBsb2FkTW9kdWxlKFRyZWVMb2dnZXIgbG9nZ2VyLCBTdHJpbmcgbW9kdWxlTmFtZSwKKyAgICAgIGJvb2xlYW4gcmVmcmVzaCkgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIE1vZHVsZURlZiBtb2R1bGUgPSBzdXBlci5sb2FkTW9kdWxlKGxvZ2dlciwgbW9kdWxlTmFtZSwgcmVmcmVzaCk7CisgICAgbW9kdWxlc0J5TmFtZS5wdXQobW9kdWxlLmdldE5hbWUoKSwgbW9kdWxlKTsKKyAgICByZXR1cm4gbW9kdWxlOworICB9CisKKyAgLyoqCisgICAqIFBlcmZvcm0gYW4gaW5pdGlhbCBob3N0ZWQgbW9kZSBsaW5rLCB3aXRob3V0IG92ZXJ3cml0aW5nIG5ld2VyIG9yCisgICAqIHVubW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCBmb2xkZXIuCisgICAqIAorICAgKiBAcGFyYW0gbG9nZ2VyIHRoZSBsb2dnZXIgdG8gdXNlCisgICAqIEBwYXJhbSBtb2R1bGUgdGhlIG1vZHVsZSB0byBsaW5rCisgICAqIEBwYXJhbSBpbmNsdWRlUHVibGljRmlsZXMgaWYgPGNvZGU+dHJ1ZTwvY29kZT4sIGluY2x1ZGUgcHVibGljIGZpbGVzIGluCisgICAqICAgICAgICAgIHRoZSBsaW5rLCBvdGhlcndpc2UgZG8gbm90IGluY2x1ZGUgdGhlbQorICAgKiBAdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24KKyAgICovCisgIHByaXZhdGUgdm9pZCBsaW5rKFRyZWVMb2dnZXIgbG9nZ2VyLCBNb2R1bGVEZWYgbW9kdWxlLAorICAgICAgYm9vbGVhbiBpbmNsdWRlUHVibGljRmlsZXMpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICAvLyBUT0RPOiBtb3ZlIHRoZSBtb2R1bGUtc3BlY2lmaWMgY29tcHV0YXRpb25zIHRvIGEgaGVscGVyIGZ1bmN0aW9uLgorICAgIEZpbGUgbW9kdWxlT3V0RGlyID0gbmV3IEZpbGUob3B0aW9ucy5nZXRXYXJEaXIoKSwgbW9kdWxlLmdldE5hbWUoKSk7CisgICAgRmlsZSBtb2R1bGVFeHRyYURpciA9IChvcHRpb25zLmdldEV4dHJhRGlyKCkgPT0gbnVsbCkgPyBudWxsIDogbmV3IEZpbGUoCisgICAgICAgIG9wdGlvbnMuZ2V0RXh0cmFEaXIoKSwgbW9kdWxlLmdldE5hbWUoKSk7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgYWN0aXZlIGxpbmtlciBzdGFjayBmb3IgdGhlIGZyZXNoIGxpbmsuCisgICAgU3RhbmRhcmRMaW5rZXJDb250ZXh0IGxpbmtlclN0YWNrID0gbmV3IFN0YW5kYXJkTGlua2VyQ29udGV4dChsb2dnZXIsCisgICAgICAgIG1vZHVsZSwgb3B0aW9ucyk7CisgICAgbGlua2VyU3RhY2tzLnB1dChtb2R1bGUuZ2V0TmFtZSgpLCBsaW5rZXJTdGFjayk7CisKKyAgICBpZiAoIWluY2x1ZGVQdWJsaWNGaWxlcykgeworICAgICAgbGlua2VyU3RhY2suZ2V0QXJ0aWZhY3RzKCkuY2xlYXIoKTsKKyAgICB9CisKKyAgICBBcnRpZmFjdFNldCBhcnRpZmFjdHMgPSBsaW5rZXJTdGFjay5pbnZva2VMaW5rKGxvZ2dlcik7CisgICAgbGlua2VyU3RhY2sucHJvZHVjZU91dHB1dERpcmVjdG9yeShsb2dnZXIsIGFydGlmYWN0cywgbW9kdWxlT3V0RGlyLAorICAgICAgICBtb2R1bGVFeHRyYURpcik7CisgIH0KKworICAvKioKKyAgICogUGVyZm9ybSBob3N0ZWQgbW9kZSByZWxpbmsgd2hlbiBuZXcgYXJ0aWZhY3RzIGFyZSBnZW5lcmF0ZWQsIHdpdGhvdXQKKyAgICogb3ZlcndyaXRpbmcgbmV3ZXIgb3IgdW5tb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IGZvbGRlci4KKyAgICogCisgICAqIEBwYXJhbSBsb2dnZXIgdGhlIGxvZ2dlciB0byB1c2UKKyAgICogQHBhcmFtIG1vZHVsZSB0aGUgbW9kdWxlIHRvIGxpbmsKKyAgICogQHBhcmFtIG5ld2x5R2VuZXJhdGVkQXJ0aWZhY3RzIHRoZSBzZXQgb2YgbmV3IGFydGlmYWN0cworICAgKiBAdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24KKyAgICovCisgIHByaXZhdGUgdm9pZCByZWxpbmsoVHJlZUxvZ2dlciBsb2dnZXIsIE1vZHVsZURlZiBtb2R1bGUsCisgICAgICBBcnRpZmFjdFNldCBuZXdseUdlbmVyYXRlZEFydGlmYWN0cykgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIC8vIFRPRE86IG1vdmUgdGhlIG1vZHVsZS1zcGVjaWZpYyBjb21wdXRhdGlvbnMgdG8gYSBoZWxwZXIgZnVuY3Rpb24uCisgICAgRmlsZSBtb2R1bGVPdXREaXIgPSBuZXcgRmlsZShvcHRpb25zLmdldFdhckRpcigpLCBtb2R1bGUuZ2V0TmFtZSgpKTsKKyAgICBGaWxlIG1vZHVsZUV4dHJhRGlyID0gKG9wdGlvbnMuZ2V0RXh0cmFEaXIoKSA9PSBudWxsKSA/IG51bGwgOiBuZXcgRmlsZSgKKyAgICAgICAgb3B0aW9ucy5nZXRFeHRyYURpcigpLCBtb2R1bGUuZ2V0TmFtZSgpKTsKKworICAgIC8vIEZpbmQgdGhlIGV4aXN0aW5nIGxpbmtlciBzdGFjay4KKyAgICBTdGFuZGFyZExpbmtlckNvbnRleHQgbGlua2VyU3RhY2sgPSBsaW5rZXJTdGFja3MuZ2V0KG1vZHVsZS5nZXROYW1lKCkpOworICAgIGFzc2VydCBsaW5rZXJTdGFjayAhPSBudWxsOworCisgICAgQXJ0aWZhY3RTZXQgYXJ0aWZhY3RzID0gbGlua2VyU3RhY2suaW52b2tlUmVsaW5rKGxvZ2dlciwKKyAgICAgICAgbmV3bHlHZW5lcmF0ZWRBcnRpZmFjdHMpOworICAgIGxpbmtlclN0YWNrLnByb2R1Y2VPdXRwdXREaXJlY3RvcnkobG9nZ2VyLCBhcnRpZmFjdHMsIG1vZHVsZU91dERpciwKKyAgICAgICAgbW9kdWxlRXh0cmFEaXIpOworICB9Cit9CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0hvc3RlZE1vZGVCYXNlLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0hvc3RlZE1vZGVCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0MTgxZAotLS0gL2Rldi9udWxsCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvSG9zdGVkTW9kZUJhc2UuamF2YQpAQCAtMCwwICsxLDc3MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5kZXY7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQudHlwZWluZm8uVHlwZU9yYWNsZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuUHJlY29tcGlsZS5QcmVjb21waWxlT3B0aW9uc0ltcGw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWY7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWZMb2FkZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2Lmpqcy5KSlNPcHRpb25zOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5BcnRpZmFjdEFjY2VwdG9yOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5Ccm93c2VyV2lkZ2V0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5Ccm93c2VyV2lkZ2V0SG9zdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuQnJvd3NlcldpZGdldEhvc3RDaGVja2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5Ccm93c2VyV2luZG93Q29udHJvbGxlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuTW9kdWxlU3BhY2VIb3N0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5QbGF0Zm9ybVNwZWNpZmljOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5TaGVsbE1haW5XaW5kb3c7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLlNoZWxsTW9kdWxlU3BhY2VIb3N0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlV0aWw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJEaXNhYmxlQWdncmVzc2l2ZU9wdGltaXphdGlvbjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlckVuYWJsZUFzc2VydGlvbnM7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJHZW5EaXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJMb2dMZXZlbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlclNjcmlwdFN0eWxlOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5PcHRpb25HZW5EaXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLk9wdGlvbkxvZ0xldmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmxvZy5BYnN0cmFjdFRyZWVMb2dnZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyRmxhZzsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJTdHJpbmc7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5Ub29sQmFzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkN1cnNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5pbnRlcm5hbC5MaWJyYXJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogVGhlIG1haW4gZXhlY3V0YWJsZSBjbGFzcyBmb3IgdGhlIGhvc3RlZCBtb2RlIHNoZWxsLgorICovCithYnN0cmFjdCBjbGFzcyBIb3N0ZWRNb2RlQmFzZSBpbXBsZW1lbnRzIEJyb3dzZXJXaW5kb3dDb250cm9sbGVyIHsKKworICAvKioKKyAgICogSGFuZGxlcyB0aGUgLWJsYWNrbGlzdCBjb21tYW5kIGxpbmUgYXJndW1lbnQuCisgICAqLworICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFyZ0hhbmRsZXJCbGFja2xpc3QgZXh0ZW5kcyBBcmdIYW5kbGVyU3RyaW5nIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICByZXR1cm4gIlByZXZlbnRzIHRoZSB1c2VyIGJyb3dzaW5nIFVSTHMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHJlZ2V4ZXMgKGNvbW1hIG9yIHNwYWNlIHNlcGFyYXRlZCkiOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgcmV0dXJuICItYmxhY2tsaXN0IjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKKyAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJibGFja2xpc3Qtc3RyaW5nIn07CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBibGFja2xpc3RTdHIpIHsKKyAgICAgIHJldHVybiBCcm93c2VyV2lkZ2V0SG9zdENoZWNrZXIuYmxhY2tsaXN0UmVnZXhlcyhibGFja2xpc3RTdHIpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBIYW5kbGVzIHRoZSAtbm9zZXJ2ZXIgY29tbWFuZCBsaW5lIGZsYWcuCisgICAqLworICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFyZ0hhbmRsZXJOb1NlcnZlckZsYWcgZXh0ZW5kcyBBcmdIYW5kbGVyRmxhZyB7CisgICAgcHJpdmF0ZSBmaW5hbCBPcHRpb25Ob1NlcnZlciBvcHRpb25zOworCisgICAgcHVibGljIEFyZ0hhbmRsZXJOb1NlcnZlckZsYWcoT3B0aW9uTm9TZXJ2ZXIgb3B0aW9ucykgeworICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICByZXR1cm4gIlByZXZlbnRzIHRoZSBlbWJlZGRlZCBUb21jYXQgc2VydmVyIGZyb20gcnVubmluZywgZXZlbiBpZiBhIHBvcnQgaXMgc3BlY2lmaWVkIjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgIHJldHVybiAiLW5vc2VydmVyIjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRGbGFnKCkgeworICAgICAgb3B0aW9ucy5zZXROb1NlcnZlcih0cnVlKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBIYW5kbGVzIHRoZSAtcG9ydCBjb21tYW5kIGxpbmUgZmxhZy4KKyAgICovCisgIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQXJnSGFuZGxlclBvcnQgZXh0ZW5kcyBBcmdIYW5kbGVyU3RyaW5nIHsKKworICAgIHByaXZhdGUgZmluYWwgT3B0aW9uUG9ydCBvcHRpb25zOworCisgICAgcHVibGljIEFyZ0hhbmRsZXJQb3J0KE9wdGlvblBvcnQgb3B0aW9ucykgeworICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7CisgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHtnZXRUYWcoKSwgIjg4ODgifTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICByZXR1cm4gIlJ1bnMgYW4gZW1iZWRkZWQgVG9tY2F0IGluc3RhbmNlIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCAoZGVmYXVsdHMgdG8gODg4OCkiOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgcmV0dXJuICItcG9ydCI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CisgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsicG9ydC1udW1iZXIgfCBcImF1dG9cIiJ9OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgdmFsdWUpIHsKKyAgICAgIGlmICh2YWx1ZS5lcXVhbHMoImF1dG8iKSkgeworICAgICAgICBvcHRpb25zLnNldFBvcnQoMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0cnkgeworICAgICAgICAgIG9wdGlvbnMuc2V0UG9ydChJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKSk7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJBIHBvcnQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIFwiYXV0b1wiIik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogSGFuZGxlcyB0aGUgLXdoaXRlbGlzdCBjb21tYW5kIGxpbmUgZmxhZy4KKyAgICovCisgIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQXJnSGFuZGxlcldoaXRlbGlzdCBleHRlbmRzIEFyZ0hhbmRsZXJTdHJpbmcgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKKyAgICAgIHJldHVybiAiQWxsb3dzIHRoZSB1c2VyIHRvIGJyb3dzZSBVUkxzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCByZWdleGVzIChjb21tYSBvciBzcGFjZSBzZXBhcmF0ZWQpIjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgIHJldHVybiAiLXdoaXRlbGlzdCI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CisgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsid2hpdGVsaXN0LXN0cmluZyJ9OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgd2hpdGVsaXN0U3RyKSB7CisgICAgICByZXR1cm4gQnJvd3NlcldpZGdldEhvc3RDaGVja2VyLndoaXRlbGlzdFJlZ2V4ZXMod2hpdGVsaXN0U3RyKTsKKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgaW50ZXJmYWNlIEhvc3RlZE1vZGVCYXNlT3B0aW9ucyBleHRlbmRzIEpKU09wdGlvbnMsIE9wdGlvbkxvZ0xldmVsLAorICAgICAgT3B0aW9uR2VuRGlyLCBPcHRpb25Ob1NlcnZlciwgT3B0aW9uUG9ydCwgT3B0aW9uU3RhcnR1cFVSTHMgeworCisgICAgLyoqCisgICAgICogVGhlIGJhc2Ugc2hlbGwgd29yayBkaXJlY3RvcnkuCisgICAgICovCisgICAgRmlsZSBnZXRTaGVsbEJhc2VXb3JrRGlyKE1vZHVsZURlZiBtb2R1bGVEZWYpOworICB9CisKKyAgLyoqCisgICAqIENvbmNyZXRlIGNsYXNzIHRvIGltcGxlbWVudCBhbGwgaG9zdGVkIG1vZGUgYmFzZSBvcHRpb25zLgorICAgKi8KKyAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBIb3N0ZWRNb2RlQmFzZU9wdGlvbnNJbXBsIGV4dGVuZHMKKyAgICAgIFByZWNvbXBpbGVPcHRpb25zSW1wbCBpbXBsZW1lbnRzIEhvc3RlZE1vZGVCYXNlT3B0aW9ucyB7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNOb1NlcnZlcjsKKyAgICBwcml2YXRlIGludCBwb3J0OworICAgIHByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IHN0YXJ0dXBVUkxzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKyAgICBwdWJsaWMgdm9pZCBhZGRTdGFydHVwVVJMKFN0cmluZyB1cmwpIHsKKyAgICAgIHN0YXJ0dXBVUkxzLmFkZCh1cmwpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0UG9ydCgpIHsKKyAgICAgIHJldHVybiBwb3J0OworICAgIH0KKworICAgIHB1YmxpYyBGaWxlIGdldFNoZWxsQmFzZVdvcmtEaXIoTW9kdWxlRGVmIG1vZHVsZURlZikgeworICAgICAgcmV0dXJuIG5ldyBGaWxlKG5ldyBGaWxlKGdldFdvcmtEaXIoKSwgbW9kdWxlRGVmLmdldE5hbWUoKSksICJzaGVsbCIpOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0U3RhcnR1cFVSTHMoKSB7CisgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChzdGFydHVwVVJMcyk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNOb1NlcnZlcigpIHsKKyAgICAgIHJldHVybiBpc05vU2VydmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE5vU2VydmVyKGJvb2xlYW4gaXNOb1NlcnZlcikgeworICAgICAgdGhpcy5pc05vU2VydmVyID0gaXNOb1NlcnZlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQb3J0KGludCBwb3J0KSB7CisgICAgICB0aGlzLnBvcnQgPSBwb3J0OworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDb250cm9scyB3aGV0aGVyIHRvIHJ1biBhIHNlcnZlciBvciBub3QuCisgICAqIAorICAgKi8KKyAgcHJvdGVjdGVkIGludGVyZmFjZSBPcHRpb25Ob1NlcnZlciB7CisgICAgYm9vbGVhbiBpc05vU2VydmVyKCk7CisKKyAgICB2b2lkIHNldE5vU2VydmVyKGJvb2xlYW4gaXNOb1NlcnZlcik7CisgIH0KKworICAvKioKKyAgICogQ29udHJvbHMgd2hhdCBwb3J0IHRvIHVzZS4KKyAgICogCisgICAqLworICBwcm90ZWN0ZWQgaW50ZXJmYWNlIE9wdGlvblBvcnQgeworICAgIGludCBnZXRQb3J0KCk7CisKKyAgICB2b2lkIHNldFBvcnQoaW50IHBvcnQpOworICB9CisKKyAgLyoqCisgICAqIENvbnRyb2xzIHRoZSBzdGFydHVwIFVSTHMuCisgICAqLworICBwcm90ZWN0ZWQgaW50ZXJmYWNlIE9wdGlvblN0YXJ0dXBVUkxzIHsKKyAgICB2b2lkIGFkZFN0YXJ0dXBVUkwoU3RyaW5nIHVybCk7CisKKyAgICBMaXN0PFN0cmluZz4gZ2V0U3RhcnR1cFVSTHMoKTsKKyAgfQorCisgIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBBcmdQcm9jZXNzb3IgZXh0ZW5kcyBBcmdQcm9jZXNzb3JCYXNlIHsKKyAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKEhvc3RlZE1vZGVCYXNlT3B0aW9ucyBvcHRpb25zLCBib29sZWFuIGZvcmNlU2VydmVyKSB7CisgICAgICBpZiAoIWZvcmNlU2VydmVyKSB7CisgICAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlck5vU2VydmVyRmxhZyhvcHRpb25zKSk7CisgICAgICB9CisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJQb3J0KG9wdGlvbnMpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlcldoaXRlbGlzdCgpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckJsYWNrbGlzdCgpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckxvZ0xldmVsKG9wdGlvbnMpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckdlbkRpcihvcHRpb25zKSk7CisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTY3JpcHRTdHlsZShvcHRpb25zKSk7CisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJFbmFibGVBc3NlcnRpb25zKG9wdGlvbnMpKTsKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckRpc2FibGVBZ2dyZXNzaXZlT3B0aW1pemF0aW9uKG9wdGlvbnMpKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGNsYXNzIEJyb3dzZXJXaWRnZXRIb3N0SW1wbCBpbXBsZW1lbnRzIEJyb3dzZXJXaWRnZXRIb3N0IHsKKworICAgIHB1YmxpYyB2b2lkIGNvbXBpbGUoKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgICBpZiAoaXNMZWdhY3lNb2RlKCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBIb3N0ZWRNb2RlQmFzZS50aGlzLmNvbXBpbGUoZ2V0TG9nZ2VyKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNvbXBpbGUoU3RyaW5nW10gbW9kdWxlTmFtZXMpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICAgIGlmICghaXNMZWdhY3lNb2RlKCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vZHVsZU5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIFN0cmluZyBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZXNbaV07CisgICAgICAgIE1vZHVsZURlZiBtb2R1bGVEZWYgPSBsb2FkTW9kdWxlKGdldExvZ2dlcigpLCBtb2R1bGVOYW1lLCB0cnVlKTsKKyAgICAgICAgSG9zdGVkTW9kZUJhc2UudGhpcy5jb21waWxlKGdldExvZ2dlcigpLCBtb2R1bGVEZWYpOworICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBNb2R1bGVTcGFjZUhvc3QgY3JlYXRlTW9kdWxlU3BhY2VIb3N0KEJyb3dzZXJXaWRnZXQgd2lkZ2V0LAorICAgICAgICBmaW5hbCBTdHJpbmcgbW9kdWxlTmFtZSkgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgICAgVHJlZUxvZ2dlciBsb2dnZXIgPSBnZXRMb2dnZXIoKTsKKworICAgICAgLy8gU3dpdGNoIHRvIGEgd2FpdCBjdXJzb3IuCisgICAgICAvLworICAgICAgU2hlbGwgd2lkZ2V0U2hlbGwgPSB3aWRnZXQuZ2V0U2hlbGwoKTsKKyAgICAgIHRyeSB7CisgICAgICAgIEN1cnNvciB3YWl0Q3Vyc29yID0gZGlzcGxheS5nZXRTeXN0ZW1DdXJzb3IoU1dULkNVUlNPUl9XQUlUKTsKKyAgICAgICAgd2lkZ2V0U2hlbGwuc2V0Q3Vyc29yKHdhaXRDdXJzb3IpOworCisgICAgICAgIC8vIFRyeSB0byBmaW5kIGFuIGV4aXN0aW5nIGxvYWRlZCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgZGVmLgorICAgICAgICAvLworICAgICAgICBNb2R1bGVEZWYgbW9kdWxlRGVmID0gbG9hZE1vZHVsZShsb2dnZXIsIG1vZHVsZU5hbWUsIHRydWUpOworICAgICAgICBhc3NlcnQgKG1vZHVsZURlZiAhPSBudWxsKTsKKworICAgICAgICBUeXBlT3JhY2xlIHR5cGVPcmFjbGUgPSBtb2R1bGVEZWYuZ2V0VHlwZU9yYWNsZShsb2dnZXIpOworICAgICAgICBTaGVsbE1vZHVsZVNwYWNlSG9zdCBob3N0ID0gZG9DcmVhdGVTaGVsbE1vZHVsZVNwYWNlSG9zdChsb2dnZXIsCisgICAgICAgICAgICB0eXBlT3JhY2xlLCBtb2R1bGVEZWYpOworICAgICAgICByZXR1cm4gaG9zdDsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIEN1cnNvciBub3JtYWxDdXJzb3IgPSBkaXNwbGF5LmdldFN5c3RlbUN1cnNvcihTV1QuQ1VSU09SX0FSUk9XKTsKKyAgICAgICAgd2lkZ2V0U2hlbGwuc2V0Q3Vyc29yKG5vcm1hbEN1cnNvcik7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFRyZWVMb2dnZXIgZ2V0TG9nZ2VyKCkgeworICAgICAgcmV0dXJuIGdldFRvcExvZ2dlcigpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGluaXRNb2R1bGUoU3RyaW5nIG1vZHVsZU5hbWUpIHsKKyAgICAgIHJldHVybiBIb3N0ZWRNb2RlQmFzZS50aGlzLmluaXRNb2R1bGUobW9kdWxlTmFtZSk7CisgICAgfQorCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0xlZ2FjeU1vZGUoKSB7CisgICAgICByZXR1cm4gSG9zdGVkTW9kZUJhc2UudGhpcyBpbnN0YW5jZW9mIEdXVFNoZWxsOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgbm9ybWFsaXplVVJMKFN0cmluZyB3aGF0VGhlVXNlclR5cGVkKSB7CisgICAgICByZXR1cm4gSG9zdGVkTW9kZUJhc2UudGhpcy5ub3JtYWxpemVVUkwod2hhdFRoZVVzZXJUeXBlZCk7CisgICAgfQorCisgICAgcHVibGljIEJyb3dzZXJXaWRnZXQgb3Blbk5ld0Jyb3dzZXJXaW5kb3coKQorICAgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgICByZXR1cm4gSG9zdGVkTW9kZUJhc2UudGhpcy5vcGVuTmV3QnJvd3NlcldpbmRvdygpOworICAgIH0KKyAgfQorCisgIHN0YXRpYyB7CisgICAgLy8gRm9yY2UgVG9vbEJhc2UgdG8gY2xpbml0LCB3aGljaCBjYXVzZXMgU1dUIHN0dWZmIHRvIGhhcHBlbi4KKyAgICBuZXcgVG9vbEJhc2UoKSB7CisgICAgfTsKKyAgICAvLyBDb3JyZWN0IG1lbnUgb24gTWFjIE9TIFgKKyAgICBEaXNwbGF5LnNldEFwcE5hbWUoIkdXVCIpOworICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIEhvc3RlZE1vZGVCYXNlT3B0aW9ucyBvcHRpb25zOworCisgIC8qKgorICAgKiBDaGVhdCBvbiB0aGUgZmlyc3QgbG9hZCdzIHJlZnJlc2ggYnkgYXNzdW1pbmcgdGhlIG1vZHVsZSBsb2FkZWQgYnkKKyAgICoge0BsaW5rIGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5HV1RTaGVsbFNlcnZsZXR9IGlzIHN0aWxsIGZyZXNoLiBUaGlzCisgICAqIHByZXZlbnRzIGEgZG91YmxlLXJlZnJlc2ggb24gc3RhcnR1cC4gU3Vic2VxdWVudCByZWZyZXNoZXMgd2lsbCB0cmlnZ2VyIGEKKyAgICogcmVhbCByZWZyZXNoLgorICAgKi8KKyAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBhbHJlYWR5U2Vlbk1vZHVsZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKKyAgcHJpdmF0ZSBCcm93c2VyV2lkZ2V0SG9zdEltcGwgYnJvd3Nlckhvc3QgPSBuZXcgQnJvd3NlcldpZGdldEhvc3RJbXBsKCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBMaXN0PFNoZWxsPiBicm93c2VyU2hlbGxzID0gbmV3IEFycmF5TGlzdDxTaGVsbD4oKTsKKworICAvKioKKyAgICogVXNlIHRoZSBkZWZhdWx0IGRpc3BsYXk7IGNvbnN0cnVjdGluZyBhIG5ldyBvbmUgd291bGQgbWFrZSBpbnN0YW50aWF0aW5nCisgICAqIG11bHRpcGxlIEdXVFNoZWxscyBmYWlsIHdpdGggYSBteXN0ZXJpb3VzIGV4Y2VwdGlvbi4KKyAgICovCisgIHByaXZhdGUgZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisKKyAgcHJpdmF0ZSBib29sZWFuIGhlYWRsZXNzTW9kZSA9IGZhbHNlOworCisgIHByaXZhdGUgU2hlbGxNYWluV2luZG93IG1haW5XbmQ7CisKKyAgcHJpdmF0ZSBib29sZWFuIHN0YXJ0ZWQ7CisKKyAgcHVibGljIEhvc3RlZE1vZGVCYXNlKCkgeworICAgIC8vIFNldCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgc3lzdGVtIHByb3BlcnRpZXMuCisgICAgQm9vdFN0cmFwUGxhdGZvcm0uaW5pdEhvc3RlZE1vZGUoKTsKKyAgICBCb290U3RyYXBQbGF0Zm9ybS5hcHBseVBsYXRmb3JtSGFja3MoKTsKKyAgICBvcHRpb25zID0gY3JlYXRlT3B0aW9ucygpOworICB9CisKKyAgcHVibGljIGZpbmFsIHZvaWQgYWRkU3RhcnR1cFVSTChTdHJpbmcgdXJsKSB7CisgICAgb3B0aW9ucy5hZGRTdGFydHVwVVJMKHVybCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBjbG9zZUFsbEJyb3dzZXJXaW5kb3dzKCkgeworICAgIHdoaWxlICghYnJvd3NlclNoZWxscy5pc0VtcHR5KCkpIHsKKyAgICAgIGJyb3dzZXJTaGVsbHMuZ2V0KDApLmRpc3Bvc2UoKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgZmluYWwgaW50IGdldFBvcnQoKSB7CisgICAgcmV0dXJuIG9wdGlvbnMuZ2V0UG9ydCgpOworICB9CisKKyAgcHVibGljIFRyZWVMb2dnZXIgZ2V0VG9wTG9nZ2VyKCkgeworICAgIHJldHVybiBtYWluV25kLmdldExvZ2dlcigpOworICB9CisKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzQnJvd3NlcldpbmRvd3NPcGVuKCkgeworICAgIGlmIChicm93c2VyU2hlbGxzLmlzRW1wdHkoKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogTGF1bmNoIHRoZSBhcmd1bWVudHMgYXMgVXJscyBpbiBzZXBhcmF0ZSB3aW5kb3dzLgorICAgKi8KKyAgcHVibGljIHZvaWQgbGF1bmNoU3RhcnR1cFVybHMoZmluYWwgVHJlZUxvZ2dlciBsb2dnZXIpIHsKKyAgICAvLyBMYXVuY2ggYSBicm93c2VyIHdpbmRvdyBmb3IgZWFjaCBzdGFydHVwIHVybC4KKyAgICBTdHJpbmcgc3RhcnR1cFVSTCA9ICIiOworICAgIHRyeSB7CisgICAgICBmb3IgKFN0cmluZyBwcmVub3JtYWxpemVkIDogb3B0aW9ucy5nZXRTdGFydHVwVVJMcygpKSB7CisgICAgICAgIHN0YXJ0dXBVUkwgPSBub3JtYWxpemVVUkwocHJlbm9ybWFsaXplZCk7CisgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5UUkFDRSwgIlN0YXJ0aW5nIFVSTDogIiArIHN0YXJ0dXBVUkwsIG51bGwpOworICAgICAgICBCcm93c2VyV2lkZ2V0IGJ3ID0gb3Blbk5ld0Jyb3dzZXJXaW5kb3coKTsKKyAgICAgICAgYncuZ28oc3RhcnR1cFVSTCk7CisgICAgICB9CisgICAgfSBjYXRjaCAoVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsCisgICAgICAgICAgIlVuYWJsZSB0byBvcGVuIG5ldyB3aW5kb3cgZm9yIHN0YXJ0dXAgVVJMOiAiICsgc3RhcnR1cFVSTCwgbnVsbCk7CisgICAgfQorICB9CisKKyAgcHVibGljIGZpbmFsIFN0cmluZyBub3JtYWxpemVVUkwoU3RyaW5nIHVua25vd25VcmxUZXh0KSB7CisgICAgaWYgKHVua25vd25VcmxUZXh0LmluZGV4T2YoIjoiKSAhPSAtMSkgeworICAgICAgLy8gQXNzdW1lIGl0J3MgYSBmdWxsIHVybC4KKyAgICAgIHJldHVybiB1bmtub3duVXJsVGV4dDsKKyAgICB9CisKKyAgICAvLyBBc3N1bWUgaXQncyBhIHRyYWlsaW5nIHVybCBwYXRoLgorICAgIGlmICh1bmtub3duVXJsVGV4dC5sZW5ndGgoKSA+IDAgJiYgdW5rbm93blVybFRleHQuY2hhckF0KDApID09ICcvJykgeworICAgICAgdW5rbm93blVybFRleHQgPSB1bmtub3duVXJsVGV4dC5zdWJzdHJpbmcoMSk7CisgICAgfQorCisgICAgaW50IHBvcnQgPSBnZXRQb3J0KCk7CisgICAgU3RyaW5nIGhvc3QgPSBnZXRIb3N0KCk7CisgICAgaWYgKHBvcnQgIT0gODApIHsKKyAgICAgIC8vIENIRUNLU1RZTEVfT0ZGOiBOb3QgcmVhbGx5IGFuIGFzc2VtYmxlZCBlcnJvciBtZXNzYWdlLCBzbyBubyBzcGFjZQorICAgICAgLy8gYWZ0ZXIgJzonLgorICAgICAgcmV0dXJuICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgIi8iICsgdW5rbm93blVybFRleHQ7CisgICAgICAvLyBDSEVDS1NUWUxFX09OCisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAiaHR0cDovLyIgKyBob3N0ICsgIi8iICsgdW5rbm93blVybFRleHQ7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIENhbGxlZCBkaXJlY3RseSBieSBTaGVsbE1haW5XaW5kb3cgYW5kIGluZGlyZWN0bHkgdmlhIEJyb3dzZXJXaWRnZXRIb3N0LgorICAgKi8KKyAgcHVibGljIGZpbmFsIEJyb3dzZXJXaWRnZXQgb3Blbk5ld0Jyb3dzZXJXaW5kb3coKQorICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIGJvb2xlYW4gc3VjY2VlZGVkID0gZmFsc2U7CisgICAgU2hlbGwgcyA9IGNyZWF0ZVRyYWNrZWRCcm93c2VyU2hlbGwoKTsKKyAgICB0cnkgeworICAgICAgQnJvd3NlcldpZGdldCBidyA9IFBsYXRmb3JtU3BlY2lmaWMuY3JlYXRlQnJvd3NlcldpZGdldChnZXRUb3BMb2dnZXIoKSwKKyAgICAgICAgICBzLCBicm93c2VySG9zdCk7CisKKyAgICAgIGlmIChtYWluV25kICE9IG51bGwpIHsKKyAgICAgICAgUmVjdGFuZ2xlIHIgPSBtYWluV25kLmdldFNoZWxsKCkuZ2V0Qm91bmRzKCk7CisgICAgICAgIGludCBuID0gYnJvd3NlclNoZWxscy5zaXplKCkgKyAxOworICAgICAgICBzLnNldEJvdW5kcyhyLnggKyBuICogNTAsIHIueSArIG4gKiA1MCwgODAwLCA2MDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcy5zZXRTaXplKDgwMCwgNjAwKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFpc0hlYWRsZXNzKCkpIHsKKyAgICAgICAgcy5vcGVuKCk7CisgICAgICB9CisKKyAgICAgIGJ3Lm9uRmlyc3RTaG93bigpOworICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKKyAgICAgIHJldHVybiBidzsKKyAgICB9IGZpbmFsbHkgeworICAgICAgaWYgKCFzdWNjZWVkZWQpIHsKKyAgICAgICAgcy5kaXNwb3NlKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIFNldHMgdXAgYWxsIHRoZSBtYWpvciBhc3BlY3RzIG9mIHJ1bm5pbmcgdGhlIHNoZWxsIGdyYXBoaWNhbGx5LCBpbmNsdWRpbmcKKyAgICogY3JlYXRpbmcgdGhlIG1haW4gd2luZG93IGFuZCBvcHRpb25hbGx5IHN0YXJ0aW5nIHRoZSBlbWJlZGRlZCBUb21jYXQKKyAgICogc2VydmVyLgorICAgKi8KKyAgcHVibGljIGZpbmFsIHZvaWQgcnVuKCkgeworICAgIHRyeSB7CisgICAgICBpZiAoIXN0YXJ0VXAoKSkgeworICAgICAgICAvLyBGYWlsZWQgdG8gaW5pdGFsaXplLgorICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIC8vIEVhZ2VyIEFXVCBpbml0aWFsaXphdGlvbiBmb3IgT1MgWCB0byBlbnN1cmUgc2FmZSBjb2V4aXN0ZW5jZSB3aXRoIFNXVC4KKyAgICAgIEJvb3RTdHJhcFBsYXRmb3JtLmluaXRHdWkoKTsKKworICAgICAgLy8gVG9tY2F0J3MgcnVubmluZyBub3csIHNvIGxhdW5jaCBicm93c2VycyBmb3Igc3RhcnR1cCB1cmxzIG5vdy4KKyAgICAgIGxhdW5jaFN0YXJ0dXBVcmxzKGdldFRvcExvZ2dlcigpKTsKKworICAgICAgcHVtcEV2ZW50TG9vcCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICBzaHV0RG93bigpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBvcnQoaW50IHBvcnQpIHsKKyAgICBvcHRpb25zLnNldFBvcnQocG9ydCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgdm9pZCBzZXRSdW5Ub21jYXQoYm9vbGVhbiBydW4pIHsKKyAgICBvcHRpb25zLnNldE5vU2VydmVyKCFydW4pOworICB9CisKKyAgLyoqCisgICAqIENvbXBpbGVzIGFsbCBtb2R1bGVzLgorICAgKi8KKyAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY29tcGlsZShUcmVlTG9nZ2VyIGxvZ2dlcikKKyAgICAgIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOworCisgIC8qKgorICAgKiBDb21waWxlcyBhIG1vZHVsZSAobGVnYWN5IG9ubHkpLgorICAgKi8KKyAgQERlcHJlY2F0ZWQKKyAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY29tcGlsZShUcmVlTG9nZ2VyIGxvZ2dlciwgTW9kdWxlRGVmIG1vZHVsZURlZikKKyAgICAgIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOworCisgIHByb3RlY3RlZCBhYnN0cmFjdCBIb3N0ZWRNb2RlQmFzZU9wdGlvbnMgY3JlYXRlT3B0aW9ucygpOworCisgIHByb3RlY3RlZCBhYnN0cmFjdCBBcnRpZmFjdEFjY2VwdG9yIGRvQ3JlYXRlQXJ0aWZhY3RBY2NlcHRvcihNb2R1bGVEZWYgbW9kdWxlKTsKKworICAvKioKKyAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTaGVsbE1vZHVsZVNwYWNlSG9zdCAob3IgYSBkZXJpdmVkIGNsYXNzKSB1c2luZyB0aGUKKyAgICogc3BlY2lmaWVkIGNvbnN0aXR1ZW50IHBhcnRzLiBUaGlzIG1ldGhvZCBpcyBtYWRlIHRvIGJlIG92ZXJyaWRkZW4gZm9yCisgICAqIHN1YmNsYXNzZXMgdGhhdCBuZWVkIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgU2hlbGxNb2R1bGVTcGFjZUhvc3QuCisgICAqIAorICAgKiBAcGFyYW0gbG9nZ2VyIFRyZWVMb2dnZXIgdG8gdXNlCisgICAqIEBwYXJhbSB0eXBlT3JhY2xlCisgICAqIEBwYXJhbSBtb2R1bGVEZWYKKyAgICogQHBhcmFtIGdlbkRpcgorICAgKiBAcmV0dXJuIFNoZWxsTW9kdWxlU3BhY2VIb3N0IGluc3RhbmNlCisgICAqLworICBwcm90ZWN0ZWQgZmluYWwgU2hlbGxNb2R1bGVTcGFjZUhvc3QgZG9DcmVhdGVTaGVsbE1vZHVsZVNwYWNlSG9zdCgKKyAgICAgIFRyZWVMb2dnZXIgbG9nZ2VyLCBUeXBlT3JhY2xlIHR5cGVPcmFjbGUsIE1vZHVsZURlZiBtb2R1bGVEZWYpIHsKKyAgICAvLyBDbGVhciBvdXQgdGhlIHNoZWxsIHRlbXAgZGlyZWN0b3J5LgorICAgIFV0aWwucmVjdXJzaXZlRGVsZXRlKG9wdGlvbnMuZ2V0U2hlbGxCYXNlV29ya0Rpcihtb2R1bGVEZWYpLCB0cnVlKTsKKyAgICByZXR1cm4gbmV3IFNoZWxsTW9kdWxlU3BhY2VIb3N0KGxvZ2dlciwgdHlwZU9yYWNsZSwgbW9kdWxlRGVmLAorICAgICAgICBvcHRpb25zLmdldEdlbkRpcigpLCBuZXcgRmlsZShvcHRpb25zLmdldFNoZWxsQmFzZVdvcmtEaXIobW9kdWxlRGVmKSwKKyAgICAgICAgICAgICJnZW4iKSwgZG9DcmVhdGVBcnRpZmFjdEFjY2VwdG9yKG1vZHVsZURlZikpOworICB9CisKKyAgLyoqCisgICAqIERlcml2ZWQgY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdG8gcHJldmVudCBhdXRvbWF0aWMgdXBkYXRlIGNoZWNraW5nLgorICAgKi8KKyAgcHJvdGVjdGVkIGJvb2xlYW4gZG9TaG91bGRDaGVja0ZvclVwZGF0ZXMoKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBkb1NodXREb3duU2VydmVyKCk7CisKKyAgcHJvdGVjdGVkIGJvb2xlYW4gZG9TdGFydHVwKCkgeworICAgIGxvYWRSZXF1aXJlZE5hdGl2ZUxpYnMoKTsKKworICAgIC8vIENyZWF0ZSB0aGUgbWFpbiBhcHAgd2luZG93LgorICAgIG9wZW5BcHBXaW5kb3coKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGxvZ2dlci4KKyAgICAvLworICAgIGluaXRpYWxpemVMb2dnZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgZG9TdGFydFVwU2VydmVyKCk7CisKKyAgcHJvdGVjdGVkIGZpbmFsIEJyb3dzZXJXaWRnZXRIb3N0IGdldEJyb3dzZXJIb3N0KCkgeworICAgIHJldHVybiBicm93c2VySG9zdDsKKyAgfQorCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0SG9zdCgpIHsKKyAgICByZXR1cm4gImxvY2FsaG9zdCI7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplTG9nZ2VyKCkgeworICAgIGZpbmFsIEFic3RyYWN0VHJlZUxvZ2dlciBsb2dnZXIgPSBtYWluV25kLmdldExvZ2dlcigpOworICAgIGxvZ2dlci5zZXRNYXhEZXRhaWwob3B0aW9ucy5nZXRMb2dMZXZlbCgpKTsKKyAgfQorCisgIC8qKgorICAgKiBDYWxsZWQgZnJvbSBhIHNlbGVjdGlvbiBzY3JpcHQgYXMgaXQgYmVnaW5zIHRvIGxvYWQgaW4gaG9zdGVkIG1vZGUuIFRoaXMKKyAgICogdHJpZ2dlcnMgYSBob3N0ZWQgbW9kZSBsaW5rLCB3aGljaCBtaWdodCBhY3R1YWxseSB1cGRhdGUgdGhlIHJ1bm5pbmcKKyAgICogc2VsZWN0aW9uIHNjcmlwdC4KKyAgICogCisgICAqIEBwYXJhbSBtb2R1bGVOYW1lIHRoZSBtb2R1bGUgdG8gbGluaworICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZWxlY3Rpb24gc2NyaXB0IHdhcyBvdmVyd3JpdHRlbjsgdGhpcworICAgKiAgICAgICAgIHdpbGwgdHJpZ2dlciBhIGZ1bGwtcGFnZSByZWZyZXNoIGJ5IHRoZSBjYWxsaW5nIChvdXQgb2YgZGF0ZSkKKyAgICogICAgICAgICBzZWxlY3Rpb24gc2NyaXB0CisgICAqLworICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpbml0TW9kdWxlKFN0cmluZyBtb2R1bGVOYW1lKTsKKworICAvKioKKyAgICogQnkgZGVmYXVsdCB3ZSB3aWxsIG9wZW4gdGhlIGFwcGxpY2F0aW9uIHdpbmRvdy4KKyAgICogCisgICAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBoZWFkbGVzcyBtb2RlCisgICAqLworICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBpc0hlYWRsZXNzKCkgeworICAgIHJldHVybiBoZWFkbGVzc01vZGU7CisgIH0KKworICAvKioKKyAgICogTG9hZCBhIG1vZHVsZS4KKyAgICogCisgICAqIEBwYXJhbSBtb2R1bGVOYW1lIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkCisgICAqIEBwYXJhbSBsb2dnZXIgVHJlZUxvZ2dlciB0byB1c2UKKyAgICogQHBhcmFtIHJlZnJlc2ggaWYgPGNvZGU+dHJ1ZTwvY29kZT4sIHJlZnJlc2ggdGhlIG1vZHVsZSBmcm9tIGRpc2sKKyAgICogQHJldHVybiB0aGUgbG9hZGVkIG1vZHVsZQorICAgKiBAdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24KKyAgICovCisgIHByb3RlY3RlZCBNb2R1bGVEZWYgbG9hZE1vZHVsZShUcmVlTG9nZ2VyIGxvZ2dlciwgU3RyaW5nIG1vZHVsZU5hbWUsCisgICAgICBib29sZWFuIHJlZnJlc2gpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICByZWZyZXNoICY9IGFscmVhZHlTZWVuTW9kdWxlcy5jb250YWlucyhtb2R1bGVOYW1lKTsKKyAgICBNb2R1bGVEZWYgbW9kdWxlRGVmID0gTW9kdWxlRGVmTG9hZGVyLmxvYWRGcm9tQ2xhc3NQYXRoKGxvZ2dlciwgbW9kdWxlTmFtZSwKKyAgICAgICAgcmVmcmVzaCk7CisgICAgYWxyZWFkeVNlZW5Nb2R1bGVzLmFkZChtb2R1bGVOYW1lKTsKKyAgICBhc3NlcnQgKG1vZHVsZURlZiAhPSBudWxsKSA6ICJSZXF1aXJlZCBtb2R1bGUgc3RhdGUgaXMgYWJzZW50IjsKKyAgICByZXR1cm4gbW9kdWxlRGVmOworICB9CisKKyAgcHJvdGVjdGVkIGJvb2xlYW4gbm90RG9uZSgpIHsKKyAgICBpZiAoIW1haW5XbmQuaXNEaXNwb3NlZCgpKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFicm93c2VyU2hlbGxzLmlzRW1wdHkoKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHB1bXBFdmVudExvb3AoKSB7CisgICAgVHJlZUxvZ2dlciBsb2dnZXIgPSBnZXRUb3BMb2dnZXIoKTsKKworICAgIC8vIFJ1biB0aGUgZXZlbnQgbG9vcC4gV2hlbiB0aGVyZSBhcmUgbm8gb3BlbiBzaGVsbHMsIHF1aXQuCisgICAgLy8KKyAgICB3aGlsZSAobm90RG9uZSgpKSB7CisgICAgICB0cnkgeworICAgICAgICBpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIHsKKyAgICAgICAgICBzbGVlcCgpOworICAgICAgICB9CisgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICBTdHJpbmcgbXNnID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICAgIG1zZyA9IChtc2cgIT0gbnVsbCA/IG1zZyA6IGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsIG1zZywgZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0SGVhZGxlc3MoYm9vbGVhbiBoZWFkbGVzc01vZGUpIHsKKyAgICB0aGlzLmhlYWRsZXNzTW9kZSA9IGhlYWRsZXNzTW9kZTsKKyAgfQorCisgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNodXREb3duKCkgeworICAgIGlmIChvcHRpb25zLmlzTm9TZXJ2ZXIoKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkb1NodXREb3duU2VydmVyKCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBzbGVlcCgpIHsKKyAgICBkaXNwbGF5LnNsZWVwKCk7CisgIH0KKworICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBzdGFydFVwKCkgeworICAgIGlmIChzdGFydGVkKSB7CisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTdGFydHVwIGNvZGUgaGFzIGFscmVhZHkgYmVlbiBydW4iKTsKKyAgICB9CisKKyAgICBzdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghZG9TdGFydHVwKCkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGFydHVwSG9vaygpOworCisgICAgaWYgKCFvcHRpb25zLmlzTm9TZXJ2ZXIoKSkgeworICAgICAgaW50IHJlc3VsdFBvcnQgPSBkb1N0YXJ0VXBTZXJ2ZXIoKTsKKyAgICAgIGlmIChyZXN1bHRQb3J0IDwgMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBvcHRpb25zLnNldFBvcnQocmVzdWx0UG9ydCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvKioKKyAgICogSG9vayBmb3Igc3ViY2xhc3NlcyB0byBpbml0aWFsaXplIHRoaW5ncyBhZnRlciB0aGUgd2luZG93IGFuZCBsb2dnZXIgYXJlCisgICAqIGluaXRpYWxpemVkIGJ1dCBiZWZvcmUgdGhlIGVtYmVkZGVkIHNlcnZlciBpcyBzdGFydGVkLgorICAgKi8KKyAgcHJvdGVjdGVkIHZvaWQgc3RhcnR1cEhvb2soKSB7CisgIH0KKworICBwcml2YXRlIFNoZWxsIGNyZWF0ZVRyYWNrZWRCcm93c2VyU2hlbGwoKSB7CisgICAgZmluYWwgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CisgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKyAgICBmaWxsTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKyAgICBmaWxsTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisgICAgc2hlbGwuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworICAgIGJyb3dzZXJTaGVsbHMuYWRkKHNoZWxsKTsKKyAgICBzaGVsbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKERpc3Bvc2VFdmVudCBlKSB7CisgICAgICAgIGlmIChlLndpZGdldCA9PSBzaGVsbCkgeworICAgICAgICAgIGJyb3dzZXJTaGVsbHMucmVtb3ZlKHNoZWxsKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgc2hlbGwuc2V0SW1hZ2VzKFNoZWxsTWFpbldpbmRvdy5nZXRJY29ucygpKTsKKworICAgIHJldHVybiBzaGVsbDsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBsb2FkUmVxdWlyZWROYXRpdmVMaWJzKCkgeworICAgIFN0cmluZyBsaWJOYW1lID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgbGliTmFtZSA9ICJzd3QiOworICAgICAgTGlicmFyeS5sb2FkTGlicmFyeShsaWJOYW1lKTsKKyAgICB9IGNhdGNoIChVbnNhdGlzZmllZExpbmtFcnJvciBlKSB7CisgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICBzYi5hcHBlbmQoIlVuYWJsZSB0byBsb2FkIHJlcXVpcmVkIG5hdGl2ZSBsaWJyYXJ5ICciICsgbGliTmFtZSArICInIik7CisgICAgICBzYi5hcHBlbmQoIlxuXHRQbGVhc2Ugc3BlY2lmeSB0aGUgSlZNIHN0YXJ0dXAgYXJndW1lbnQgIik7CisgICAgICBzYi5hcHBlbmQoIlwiLURqYXZhLmxpYnJhcnkucGF0aFwiIik7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzYi50b1N0cmluZygpLCBlKTsKKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBvcGVuQXBwV2luZG93KCkgeworICAgIGZpbmFsIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCisgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKyAgICBmaWxsTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKyAgICBmaWxsTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisgICAgc2hlbGwuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworCisgICAgc2hlbGwuc2V0SW1hZ2VzKFNoZWxsTWFpbldpbmRvdy5nZXRJY29ucygpKTsKKworICAgIGJvb2xlYW4gY2hlY2tGb3JVcGRhdGVzID0gZG9TaG91bGRDaGVja0ZvclVwZGF0ZXMoKTsKKworICAgIG1haW5XbmQgPSBuZXcgU2hlbGxNYWluV2luZG93KHRoaXMsIHNoZWxsLCBvcHRpb25zLmlzTm9TZXJ2ZXIoKSA/IDAKKyAgICAgICAgOiBnZXRQb3J0KCksIGNoZWNrRm9yVXBkYXRlcyk7CisKKyAgICBzaGVsbC5zZXRTaXplKDcwMCwgNjAwKTsKKyAgICBpZiAoIWlzSGVhZGxlc3MoKSkgeworICAgICAgc2hlbGwub3BlbigpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9TaGVsbE9wdGlvbnMuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvSG9zdGVkTW9kZU9wdGlvbnMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1NoZWxsT3B0aW9ucy5qYXZhCnJlbmFtZSB0byBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0hvc3RlZE1vZGVPcHRpb25zLmphdmEKaW5kZXggNzFlYTRlOC4uNTNlZDYwOCAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9TaGVsbE9wdGlvbnMuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0hvc3RlZE1vZGVPcHRpb25zLmphdmEKQEAgLTE5LDExICsxOSwxMSBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5PcHRpb25FeHRyYURpcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uR2VuRGlyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5PcHRpb25Mb2dMZXZlbDsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uT3V0RGlyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5PcHRpb25XYXJEaXI7CiAKIC8qKgogICogVGhlIGNvbXBsZXRlIHNldCBvZiBvcHRpb25zIGZvciB0aGUgR1dUIGNvbXBpbGVyLgogICovCi1wdWJsaWMgaW50ZXJmYWNlIFNoZWxsT3B0aW9ucyBleHRlbmRzIEpKU09wdGlvbnMsIE9wdGlvbkxvZ0xldmVsLCBPcHRpb25PdXREaXIsCi0gICAgT3B0aW9uR2VuRGlyLCBPcHRpb25FeHRyYURpciB7CitwdWJsaWMgaW50ZXJmYWNlIEhvc3RlZE1vZGVPcHRpb25zIGV4dGVuZHMgSkpTT3B0aW9ucywgT3B0aW9uTG9nTGV2ZWwsCisgICAgT3B0aW9uRXh0cmFEaXIsIE9wdGlvbldhckRpciwgT3B0aW9uR2VuRGlyIHsKIH0KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvU2hlbGxPcHRpb25zLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0xlZ2FjeUNvbXBpbGVyT3B0aW9ucy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1NoZWxsT3B0aW9ucy5qYXZhCmNvcHkgdG8gZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9MZWdhY3lDb21waWxlck9wdGlvbnMuamF2YQppbmRleCA3MWVhNGU4Li5jNzJiY2MxIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1NoZWxsT3B0aW9ucy5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvTGVnYWN5Q29tcGlsZXJPcHRpb25zLmphdmEKQEAgLTE1LDE1ICsxNSwxMyBAQAogICovCiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldjsKIAotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5qanMuSkpTT3B0aW9uczsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uRXh0cmFEaXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLk9wdGlvbkdlbkRpcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uTG9nTGV2ZWw7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLk9wdGlvbk91dERpcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuTGluay5MZWdhY3lMaW5rT3B0aW9uczsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuUHJlY29tcGlsZS5QcmVjb21waWxlT3B0aW9uczsKIAogLyoqCiAgKiBUaGUgY29tcGxldGUgc2V0IG9mIG9wdGlvbnMgZm9yIHRoZSBHV1QgY29tcGlsZXIuCiAgKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2hlbGxPcHRpb25zIGV4dGVuZHMgSkpTT3B0aW9ucywgT3B0aW9uTG9nTGV2ZWwsIE9wdGlvbk91dERpciwKLSAgICBPcHRpb25HZW5EaXIsIE9wdGlvbkV4dHJhRGlyIHsKK3B1YmxpYyBpbnRlcmZhY2UgTGVnYWN5Q29tcGlsZXJPcHRpb25zIGV4dGVuZHMgUHJlY29tcGlsZU9wdGlvbnMsIExlZ2FjeUxpbmtPcHRpb25zLAorICAgIE9wdGlvbkxvY2FsV29ya2VycyB7CiB9CisgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9MaW5rLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0xpbmsuamF2YQppbmRleCA5OWQyMjUyLi5lMWE5MTFlIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0xpbmsuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L0xpbmsuamF2YQpAQCAtMjksOSArMjksMTAgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5GaWxlQmFja2VkT2JqZWN0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlV0aWw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJFeHRyYURpcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlck91dERpcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlcldhckRpcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uRXh0cmFEaXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLk9wdGlvbk91dERpcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuT3B0aW9uV2FyRGlyOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC00NiwxNSArNDcsMjEgQEAKICAgLyoqCiAgICAqIE9wdGlvbnMgZm9yIExpbmsuCiAgICAqLworICBwdWJsaWMgaW50ZXJmYWNlIExlZ2FjeUxpbmtPcHRpb25zIGV4dGVuZHMgQ29tcGlsZVRhc2tPcHRpb25zLCBPcHRpb25PdXREaXIgeworICB9CisKKyAgLyoqCisgICAqIE9wdGlvbnMgZm9yIExpbmsuCisgICAqLwogICBwdWJsaWMgaW50ZXJmYWNlIExpbmtPcHRpb25zIGV4dGVuZHMgQ29tcGlsZVRhc2tPcHRpb25zLCBPcHRpb25FeHRyYURpciwKLSAgICAgIE9wdGlvbk91dERpciB7CisgICAgICBPcHRpb25XYXJEaXIgewogICB9CiAKICAgc3RhdGljIGNsYXNzIEFyZ1Byb2Nlc3NvciBleHRlbmRzIENvbXBpbGVBcmdQcm9jZXNzb3IgewogICAgIHB1YmxpYyBBcmdQcm9jZXNzb3IoTGlua09wdGlvbnMgb3B0aW9ucykgewogICAgICAgc3VwZXIob3B0aW9ucyk7CiAgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJFeHRyYURpcihvcHRpb25zKSk7Ci0gICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJPdXREaXIob3B0aW9ucykpOworICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyV2FyRGlyKG9wdGlvbnMpKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTcwLDcgKzc3LDcgQEAKICAgICAgIExpbmtPcHRpb25zIHsKIAogICAgIHByaXZhdGUgRmlsZSBleHRyYURpcjsKLSAgICBwcml2YXRlIEZpbGUgb3V0RGlyOworICAgIHByaXZhdGUgRmlsZSB3YXJEaXI7CiAKICAgICBwdWJsaWMgTGlua09wdGlvbnNJbXBsKCkgewogICAgIH0KQEAgLTgyLDI2ICs4OSwzNyBAQAogICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKExpbmtPcHRpb25zIG90aGVyKSB7CiAgICAgICBzdXBlci5jb3B5RnJvbShvdGhlcik7CiAgICAgICBzZXRFeHRyYURpcihvdGhlci5nZXRFeHRyYURpcigpKTsKLSAgICAgIHNldE91dERpcihvdGhlci5nZXRPdXREaXIoKSk7CisgICAgICBzZXRXYXJEaXIob3RoZXIuZ2V0V2FyRGlyKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBGaWxlIGdldEV4dHJhRGlyKCkgewogICAgICAgcmV0dXJuIGV4dHJhRGlyOwogICAgIH0KIAotICAgIHB1YmxpYyBGaWxlIGdldE91dERpcigpIHsKLSAgICAgIHJldHVybiBvdXREaXI7CisgICAgcHVibGljIEZpbGUgZ2V0V2FyRGlyKCkgeworICAgICAgcmV0dXJuIHdhckRpcjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFeHRyYURpcihGaWxlIGV4dHJhRGlyKSB7CiAgICAgICB0aGlzLmV4dHJhRGlyID0gZXh0cmFEaXI7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0T3V0RGlyKEZpbGUgb3V0RGlyKSB7Ci0gICAgICB0aGlzLm91dERpciA9IG91dERpcjsKKyAgICBwdWJsaWMgdm9pZCBzZXRXYXJEaXIoRmlsZSB3YXJEaXIpIHsKKyAgICAgIHRoaXMud2FyRGlyID0gd2FyRGlyOwogICAgIH0KICAgfQogCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBsZWdhY3lMaW5rKFRyZWVMb2dnZXIgbG9nZ2VyLCBNb2R1bGVEZWYgbW9kdWxlLAorICAgICAgUHJlY29tcGlsYXRpb24gcHJlY29tcGlsYXRpb24sCisgICAgICBMaXN0PEZpbGVCYWNrZWRPYmplY3Q8UGVybXV0YXRpb25SZXN1bHQ+PiByZXN1bHRGaWxlcywgRmlsZSBvdXREaXIpCisgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgU3RhbmRhcmRMaW5rZXJDb250ZXh0IGxpbmtlckNvbnRleHQgPSBuZXcgU3RhbmRhcmRMaW5rZXJDb250ZXh0KGxvZ2dlciwKKyAgICAgICAgbW9kdWxlLCBwcmVjb21waWxhdGlvbi5nZXRVbmlmaWVkQXN0KCkuZ2V0T3B0aW9ucygpKTsKKyAgICBBcnRpZmFjdFNldCBhcnRpZmFjdHMgPSBkb0xpbmsobG9nZ2VyLCBsaW5rZXJDb250ZXh0LCBwcmVjb21waWxhdGlvbiwKKyAgICAgICAgcmVzdWx0RmlsZXMpOworICAgIGRvUHJvZHVjZUxlZ2FjeU91dHB1dChsb2dnZXIsIGFydGlmYWN0cywgbGlua2VyQ29udGV4dCwgbW9kdWxlLCBvdXREaXIpOworICB9CisKICAgcHVibGljIHN0YXRpYyBBcnRpZmFjdFNldCBsaW5rKFRyZWVMb2dnZXIgbG9nZ2VyLCBNb2R1bGVEZWYgbW9kdWxlLAogICAgICAgUHJlY29tcGlsYXRpb24gcHJlY29tcGlsYXRpb24sCiAgICAgICBMaXN0PEZpbGVCYWNrZWRPYmplY3Q8UGVybXV0YXRpb25SZXN1bHQ+PiByZXN1bHRGaWxlcykKQEAgLTE2Myw0NSArMTgxLDMxIEBACiAgICAgcmV0dXJuIGxpbmtlckNvbnRleHQuaW52b2tlTGluayhsb2dnZXIpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Byb2R1Y2VPdXRwdXQoVHJlZUxvZ2dlciBsb2dnZXIsIEFydGlmYWN0U2V0IGFydGlmYWN0cywKLSAgICAgIFN0YW5kYXJkTGlua2VyQ29udGV4dCBsaW5rZXJDb250ZXh0LCBNb2R1bGVEZWYgbW9kdWxlLCBGaWxlIG91dERpciwKLSAgICAgIEZpbGUgZXh0cmFEaXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKLSAgICBib29sZWFuIHdhcm5PbkV4dHJhID0gZmFsc2U7Ci0gICAgRmlsZSBtb2R1bGVFeHRyYURpcjsKLSAgICBpZiAoZXh0cmFEaXIgPT0gbnVsbCkgewotICAgICAgLyoKLSAgICAgICAqIExlZ2FjeSBiZWhhdmlvciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IGlmIHRoZSBleHRyYSBkaXJlY3RvcnkgaXMKLSAgICAgICAqIG5vdCBzcGVjaWZpZWQsIG1ha2UgaXQgYSBzaWJsaW5nIHRvIHRoZSBkZXBsb3kgZGlyZWN0b3J5LCB3aXRoIC1hdXguCi0gICAgICAgKi8KLSAgICAgIFN0cmluZyBkZXBsb3lEaXIgPSBtb2R1bGUuZ2V0RGVwbG95VG8oKTsKLSAgICAgIGRlcGxveURpciA9IGRlcGxveURpci5zdWJzdHJpbmcoMCwgZGVwbG95RGlyLmxlbmd0aCgpIC0gMSkgKyAiLWF1eCI7Ci0gICAgICBtb2R1bGVFeHRyYURpciA9IG5ldyBGaWxlKG91dERpciwgZGVwbG95RGlyKTsKLQotICAgICAgLyoKLSAgICAgICAqIE9ubHkgd2FybiB3aGVuIHdlIGNyZWF0ZSBhIG5ldyBsZWdhY3kgZXh0cmEgZGlyLgotICAgICAgICovCi0gICAgICB3YXJuT25FeHRyYSA9ICFtb2R1bGVFeHRyYURpci5leGlzdHMoKTsKLSAgICB9IGVsc2UgewotICAgICAgbW9kdWxlRXh0cmFEaXIgPSBuZXcgRmlsZShleHRyYURpciwgbW9kdWxlLmdldERlcGxveVRvKCkpOwotICAgIH0KLQotICAgIEZpbGUgbW9kdWxlT3V0RGlyID0gbmV3IEZpbGUob3V0RGlyLCBtb2R1bGUuZ2V0RGVwbG95VG8oKSk7CisgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9Qcm9kdWNlTGVnYWN5T3V0cHV0KFRyZWVMb2dnZXIgbG9nZ2VyLAorICAgICAgQXJ0aWZhY3RTZXQgYXJ0aWZhY3RzLCBTdGFuZGFyZExpbmtlckNvbnRleHQgbGlua2VyQ29udGV4dCwKKyAgICAgIE1vZHVsZURlZiBtb2R1bGUsIEZpbGUgb3V0RGlyKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgRmlsZSBtb2R1bGVPdXREaXIgPSBuZXcgRmlsZShvdXREaXIsIG1vZHVsZS5nZXROYW1lKCkpOworICAgIEZpbGUgbW9kdWxlRXh0cmFEaXIgPSBuZXcgRmlsZShvdXREaXIsIG1vZHVsZS5nZXROYW1lKCkgKyAiLWF1eCIpOwogICAgIFV0aWwucmVjdXJzaXZlRGVsZXRlKG1vZHVsZU91dERpciwgdHJ1ZSk7CiAgICAgVXRpbC5yZWN1cnNpdmVEZWxldGUobW9kdWxlRXh0cmFEaXIsIHRydWUpOwogICAgIGxpbmtlckNvbnRleHQucHJvZHVjZU91dHB1dERpcmVjdG9yeShsb2dnZXIsIGFydGlmYWN0cywgbW9kdWxlT3V0RGlyLAogICAgICAgICBtb2R1bGVFeHRyYURpcik7CisgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLklORk8sICJMaW5rIHN1Y2NlZWRlZCIpOworICB9CiAKLSAgICAvKgotICAgICAqIFdhcm4gb24gbGVnYWN5IGV4dHJhIGRpcmVjdG9yeSwgYnV0IG9ubHkgaWY6IDEpIEl0IGRpZG4ndCBleGlzdCBiZWZvcmUuCi0gICAgICogMikgV2UganVzdCBjcmVhdGVkIGl0LgotICAgICAqLwotICAgIGlmICh3YXJuT25FeHRyYSAmJiBtb2R1bGVFeHRyYURpci5leGlzdHMoKSkgewotICAgICAgbG9nZ2VyLmxvZygKLSAgICAgICAgICBUcmVlTG9nZ2VyLldBUk4sCi0gICAgICAgICAgIk5vbi1wdWJsaWMgYXJ0aWZpY2F0cyB3ZXJlIHByb2R1Y2VkIGluICciCi0gICAgICAgICAgICAgICsgbW9kdWxlRXh0cmFEaXIuZ2V0QWJzb2x1dGVQYXRoKCkKLSAgICAgICAgICAgICAgKyAiJyB3aXRoaW4gdGhlIHB1YmxpYyBvdXRwdXQgZm9sZGVyOyB1c2UgLWV4dHJhIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIGxvY2F0aW9uIik7CisgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9Qcm9kdWNlT3V0cHV0KFRyZWVMb2dnZXIgbG9nZ2VyLCBBcnRpZmFjdFNldCBhcnRpZmFjdHMsCisgICAgICBTdGFuZGFyZExpbmtlckNvbnRleHQgbGlua2VyQ29udGV4dCwgTW9kdWxlRGVmIG1vZHVsZSwgRmlsZSBvdXREaXIsCisgICAgICBGaWxlIGV4dHJhRGlyKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgLy8gVE9ETzogbW92ZSB0aGUgbW9kdWxlLXNwZWNpZmljIGNvbXB1dGF0aW9ucyB0byBhIGhlbHBlciBmdW5jdGlvbi4KKyAgICBGaWxlIG1vZHVsZU91dERpciA9IG5ldyBGaWxlKG91dERpciwgbW9kdWxlLmdldE5hbWUoKSk7CisgICAgRmlsZSBtb2R1bGVFeHRyYURpciA9IChleHRyYURpciA9PSBudWxsKSA/IG51bGwgOiBuZXcgRmlsZShleHRyYURpciwKKyAgICAgICAgbW9kdWxlLmdldE5hbWUoKSk7CisgICAgVXRpbC5yZWN1cnNpdmVEZWxldGUobW9kdWxlT3V0RGlyLCB0cnVlKTsKKyAgICBpZiAobW9kdWxlRXh0cmFEaXIgIT0gbnVsbCkgeworICAgICAgVXRpbC5yZWN1cnNpdmVEZWxldGUobW9kdWxlRXh0cmFEaXIsIHRydWUpOwogICAgIH0KKyAgICBsaW5rZXJDb250ZXh0LnByb2R1Y2VPdXRwdXREaXJlY3RvcnkobG9nZ2VyLCBhcnRpZmFjdHMsIG1vZHVsZU91dERpciwKKyAgICAgICAgbW9kdWxlRXh0cmFEaXIpOwogICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5JTkZPLCAiTGluayBzdWNjZWVkZWQiKTsKICAgfQogCkBAIC0yMzAsOCArMjM0LDYgQEAKICAgICB9CiAgIH0KIAotICBwcml2YXRlIE1vZHVsZURlZiBtb2R1bGU7Ci0KICAgcHJpdmF0ZSBmaW5hbCBMaW5rT3B0aW9uc0ltcGwgb3B0aW9uczsKIAogICBwdWJsaWMgTGluayhMaW5rT3B0aW9ucyBvcHRpb25zKSB7CkBAIC0yMzksOSArMjQxLDExIEBACiAgIH0KIAogICBwdWJsaWMgYm9vbGVhbiBydW4oVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKLSAgICBtb2R1bGUgPSBNb2R1bGVEZWZMb2FkZXIubG9hZEZyb21DbGFzc1BhdGgobG9nZ2VyLCBvcHRpb25zLmdldE1vZHVsZU5hbWUoKSk7CisgICAgZm9yIChTdHJpbmcgbW9kdWxlTmFtZSA6IG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKSkgeworICAgICAgRmlsZSBjb21waWxlcldvcmtEaXIgPSBvcHRpb25zLmdldENvbXBpbGVyV29ya0Rpcihtb2R1bGVOYW1lKTsKKyAgICAgIE1vZHVsZURlZiBtb2R1bGUgPSBNb2R1bGVEZWZMb2FkZXIubG9hZEZyb21DbGFzc1BhdGgobG9nZ2VyLCBtb2R1bGVOYW1lKTsKIAotICAgIEZpbGUgcHJlY29tcGlsYXRpb25GaWxlID0gbmV3IEZpbGUob3B0aW9ucy5nZXRDb21waWxlcldvcmtEaXIoKSwKKyAgICBGaWxlIHByZWNvbXBpbGF0aW9uRmlsZSA9IG5ldyBGaWxlKG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKG1vZHVsZU5hbWUpLAogICAgICAgICBQcmVjb21waWxlLlBSRUNPTVBJTEFUSU9OX0ZJTEVOQU1FKTsKICAgICBpZiAoIXByZWNvbXBpbGF0aW9uRmlsZS5leGlzdHMoKSkgewogICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiRmlsZSBub3QgZm91bmQgJyIKQEAgLTI1MSw0MCArMjU1LDQwIEBACiAgICAgfQogCiAgICAgUHJlY29tcGlsYXRpb24gcHJlY29tcGlsYXRpb247Ci0gICAgdHJ5IHsKLSAgICAgIHByZWNvbXBpbGF0aW9uID0gVXRpbC5yZWFkRmlsZUFzT2JqZWN0KHByZWNvbXBpbGF0aW9uRmlsZSwKLSAgICAgICAgICBQcmVjb21waWxhdGlvbi5jbGFzcyk7Ci0gICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gZGVzZXJpYWxpemUgJyIKLSAgICAgICAgICArIHByZWNvbXBpbGF0aW9uRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICInIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFBlcm11dGF0aW9uW10gcGVybXMgPSBwcmVjb21waWxhdGlvbi5nZXRQZXJtdXRhdGlvbnMoKTsKLQotICAgIExpc3Q8RmlsZUJhY2tlZE9iamVjdDxQZXJtdXRhdGlvblJlc3VsdD4+IHJlc3VsdEZpbGVzID0gbmV3IEFycmF5TGlzdDxGaWxlQmFja2VkT2JqZWN0PFBlcm11dGF0aW9uUmVzdWx0Pj4oCi0gICAgICAgIHBlcm1zLmxlbmd0aCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwZXJtcy5sZW5ndGg7ICsraSkgewotICAgICAgRmlsZSBwZXJtRmlsZSA9IENvbXBpbGVQZXJtcy5tYWtlUGVybUZpbGVuYW1lKAotICAgICAgICAgIG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKCksIGkpOwotICAgICAgaWYgKCFwZXJtRmlsZS5leGlzdHMoKSkgewotICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJGaWxlIG5vdCBmb3VuZCAnIgotICAgICAgICAgICAgKyBwcmVjb21waWxhdGlvbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkKLSAgICAgICAgICAgICsgIic7IHBsZWFzZSBjb21waWxlIGFsbCBwZXJtdXRhdGlvbnMiKTsKKyAgICAgIHRyeSB7CisgICAgICAgIHByZWNvbXBpbGF0aW9uID0gVXRpbC5yZWFkRmlsZUFzT2JqZWN0KHByZWNvbXBpbGF0aW9uRmlsZSwKKyAgICAgICAgICAgIFByZWNvbXBpbGF0aW9uLmNsYXNzKTsKKyAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gZGVzZXJpYWxpemUgJyIKKyAgICAgICAgICAgICsgcHJlY29tcGlsYXRpb25GaWxlLmdldEFic29sdXRlUGF0aCgpICsgIiciLCBlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgcmVzdWx0RmlsZXMuYWRkKG5ldyBGaWxlQmFja2VkT2JqZWN0PFBlcm11dGF0aW9uUmVzdWx0PigKLSAgICAgICAgICBQZXJtdXRhdGlvblJlc3VsdC5jbGFzcywgcGVybUZpbGUpKTsKKyAgICAgIFBlcm11dGF0aW9uW10gcGVybXMgPSBwcmVjb21waWxhdGlvbi5nZXRQZXJtdXRhdGlvbnMoKTsKKworICAgICAgTGlzdDxGaWxlQmFja2VkT2JqZWN0PFBlcm11dGF0aW9uUmVzdWx0Pj4gcmVzdWx0RmlsZXMgPSBuZXcgQXJyYXlMaXN0PEZpbGVCYWNrZWRPYmplY3Q8UGVybXV0YXRpb25SZXN1bHQ+PigKKyAgICAgICAgICBwZXJtcy5sZW5ndGgpOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwZXJtcy5sZW5ndGg7ICsraSkgeworICAgICAgICBGaWxlIGYgPSBDb21waWxlUGVybXMubWFrZVBlcm1GaWxlbmFtZShjb21waWxlcldvcmtEaXIsIHBlcm1zW2ldLmdldElkKCkpOworICAgICAgICBpZiAoIWYuZXhpc3RzKCkpIHsKKyAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJGaWxlIG5vdCBmb3VuZCAnIgorICAgICAgICAgICAgICArIHByZWNvbXBpbGF0aW9uRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKQorICAgICAgICAgICAgICArICInOyBwbGVhc2UgY29tcGlsZSBhbGwgcGVybXV0YXRpb25zIik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdEZpbGVzLmFkZChuZXcgRmlsZUJhY2tlZE9iamVjdDxQZXJtdXRhdGlvblJlc3VsdD4oCisgICAgICAgICAgICBQZXJtdXRhdGlvblJlc3VsdC5jbGFzcywgZikpOworICAgICAgfQorCisgICAgICBUcmVlTG9nZ2VyIGJyYW5jaCA9IGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5JTkZPLCAiTGlua2luZyBtb2R1bGUgIgorICAgICAgICAgICsgbW9kdWxlLmdldE5hbWUoKSk7CisgICAgICBTdGFuZGFyZExpbmtlckNvbnRleHQgbGlua2VyQ29udGV4dCA9IG5ldyBTdGFuZGFyZExpbmtlckNvbnRleHQoYnJhbmNoLAorICAgICAgICAgIG1vZHVsZSwgcHJlY29tcGlsYXRpb24uZ2V0VW5pZmllZEFzdCgpLmdldE9wdGlvbnMoKSk7CisgICAgICBBcnRpZmFjdFNldCBhcnRpZmFjdHMgPSBkb0xpbmsoYnJhbmNoLCBsaW5rZXJDb250ZXh0LCBwcmVjb21waWxhdGlvbiwKKyAgICAgICAgICByZXN1bHRGaWxlcyk7CisKKyAgICAgIGRvUHJvZHVjZU91dHB1dChicmFuY2gsIGFydGlmYWN0cywgbGlua2VyQ29udGV4dCwgbW9kdWxlLAorICAgICAgICAgIG9wdGlvbnMuZ2V0V2FyRGlyKCksIG9wdGlvbnMuZ2V0RXh0cmFEaXIoKSk7CiAgICAgfQotCi0gICAgVHJlZUxvZ2dlciBicmFuY2ggPSBsb2dnZXIuYnJhbmNoKFRyZWVMb2dnZXIuSU5GTywgIkxpbmtpbmcgbW9kdWxlICIKLSAgICAgICAgKyBtb2R1bGUuZ2V0TmFtZSgpKTsKLSAgICBTdGFuZGFyZExpbmtlckNvbnRleHQgbGlua2VyQ29udGV4dCA9IG5ldyBTdGFuZGFyZExpbmtlckNvbnRleHQoYnJhbmNoLAotICAgICAgICBtb2R1bGUsIHByZWNvbXBpbGF0aW9uLmdldFVuaWZpZWRBc3QoKS5nZXRPcHRpb25zKCkpOwotICAgIEFydGlmYWN0U2V0IGFydGlmYWN0cyA9IGRvTGluayhicmFuY2gsIGxpbmtlckNvbnRleHQsIHByZWNvbXBpbGF0aW9uLAotICAgICAgICByZXN1bHRGaWxlcyk7Ci0KLSAgICBkb1Byb2R1Y2VPdXRwdXQoYnJhbmNoLCBhcnRpZmFjdHMsIGxpbmtlckNvbnRleHQsIG1vZHVsZSwKLSAgICAgICAgb3B0aW9ucy5nZXRPdXREaXIoKSwgb3B0aW9ucy5nZXRFeHRyYURpcigpKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9QZXJtdXRhdGlvbi5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9QZXJtdXRhdGlvbi5qYXZhCmluZGV4IDNlYmEzZjIuLjI4YmFjZjcgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvUGVybXV0YXRpb24uamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1Blcm11dGF0aW9uLmphdmEKQEAgLTMyLDYgKzMyLDE4IEBACiAgIHByaXZhdGUgZmluYWwgTGlzdDxTdGF0aWNQcm9wZXJ0eU9yYWNsZT4gcHJvcGVydHlPcmFjbGVzID0gbmV3IEFycmF5TGlzdDxTdGF0aWNQcm9wZXJ0eU9yYWNsZT4oKTsKICAgcHJpdmF0ZSBmaW5hbCBTb3J0ZWRNYXA8U3RyaW5nLCBTdHJpbmc+IHJlYmluZEFuc3dlcnMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIFN0cmluZz4oKTsKIAorICAvKioKKyAgICogQ2xvbmVzIGFuIGV4aXN0aW5nIHBlcm11dGF0aW9uLCBidXQgd2l0aCBhIG5ldyBpZC4KKyAgICogIAorICAgKiBAcGFyYW0gaWQgbmV3IHBlcm11dGF0aW9uIGlkCisgICAqIEBwYXJhbSBvdGhlciBQZXJtdXRhdGlvbiB0byBjb3B5CisgICAqLworICBwdWJsaWMgUGVybXV0YXRpb24oaW50IGlkLCBQZXJtdXRhdGlvbiBvdGhlcikgeworICAgIHRoaXMuaWQgPSBpZDsKKyAgICB0aGlzLnByb3BlcnR5T3JhY2xlcy5hZGRBbGwob3RoZXIucHJvcGVydHlPcmFjbGVzKTsKKyAgICB0aGlzLnJlYmluZEFuc3dlcnMucHV0QWxsKG90aGVyLnJlYmluZEFuc3dlcnMpOworICB9CisKICAgcHVibGljIFBlcm11dGF0aW9uKGludCBpZCwgU3RhdGljUHJvcGVydHlPcmFjbGUgcHJvcGVydHlPcmFjbGUpIHsKICAgICB0aGlzLmlkID0gaWQ7CiAgICAgdGhpcy5wcm9wZXJ0eU9yYWNsZXMuYWRkKHByb3BlcnR5T3JhY2xlKTsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvUHJlY29tcGlsYXRpb24uamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvUHJlY29tcGlsYXRpb24uamF2YQppbmRleCA4ZWI3NDM4Li40YzBmYTMyIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1ByZWNvbXBpbGF0aW9uLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9QcmVjb21waWxhdGlvbi5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2Lmpqcy5VbmlmaWVkQXN0OwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiAKIC8qKgogICogVGhlIHJlc3VsdCBvZiBjb21waWxhdGlvbiBwaGFzZSAxLCBpbmNsdWRlcyBhIHVuaWZpZWQgQVNUIGFuZCBtZXRhZGF0YQpAQCAtMzUsMTcgKzM2LDI0IEBACiAgIHByaXZhdGUgZmluYWwgVW5pZmllZEFzdCB1bmlmaWVkQXN0OwogCiAgIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHByZWNvbXBpbGF0aW9uLgorICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHByZWNvbXBpbGF0aW9uLiAgV2UgY3JlYXRlIG5ldyBQZXJtdXRhdGlvbnMgd2l0aAorICAgKiBhIG5ldyBpZCBzbyB0aGF0IHRoZSBpZHMgYXJlIGNvbnNlY3V0aXZlIGFuZCBjb3JyZXNwb25kIHRvIHRoZSBpbmRleAorICAgKiBpbiB0aGUgYXJyYXkuCiAgICAqIAogICAgKiBAcGFyYW0gdW5pZmllZEFzdCB0aGUgdW5pZmllZCBBU1QgdXNlZCBieQogICAgKiAgICAgICAgICB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZGV2Lmpqcy5KYXZhVG9KYXZhU2NyaXB0Q29tcGlsZXJ9CiAgICAqIEBwYXJhbSBwZXJtdXRhdGlvbnMgdGhlIHNldCBvZiBwZXJtdXRhdGlvbnMgdGhhdCBjYW4gYmUgcnVuCiAgICAqIEBwYXJhbSBnZW5lcmF0ZWRBcnRpZmFjdHMgdGhlIHNldCBvZiBhcnRpZmFjdHMgY3JlYXRlZCBieSBnZW5lcmF0b3JzCiAgICAqLwotICBwdWJsaWMgUHJlY29tcGlsYXRpb24oVW5pZmllZEFzdCB1bmlmaWVkQXN0LCBQZXJtdXRhdGlvbltdIHBlcm11dGF0aW9ucywKLSAgICAgIEFydGlmYWN0U2V0IGdlbmVyYXRlZEFydGlmYWN0cykgeworICBwdWJsaWMgUHJlY29tcGlsYXRpb24oVW5pZmllZEFzdCB1bmlmaWVkQXN0LAorICAgICAgQ29sbGVjdGlvbjxQZXJtdXRhdGlvbj4gcGVybXV0YXRpb25zLCBBcnRpZmFjdFNldCBnZW5lcmF0ZWRBcnRpZmFjdHMpIHsKICAgICB0aGlzLnVuaWZpZWRBc3QgPSB1bmlmaWVkQXN0OwotICAgIHRoaXMucGVybXV0YXRpb25zID0gcGVybXV0YXRpb25zOworICAgIHRoaXMucGVybXV0YXRpb25zID0gbmV3IFBlcm11dGF0aW9uW3Blcm11dGF0aW9ucy5zaXplKCldOworICAgIGludCBpID0gMDsKKyAgICBmb3IgKFBlcm11dGF0aW9uIHBlcm11dGF0aW9uIDogcGVybXV0YXRpb25zKSB7CisgICAgICB0aGlzLnBlcm11dGF0aW9uc1tpXSA9IG5ldyBQZXJtdXRhdGlvbihpLCBwZXJtdXRhdGlvbik7CisgICAgICArK2k7CisgICAgfQogICAgIHRoaXMuZ2VuZXJhdGVkQXJ0aWZhY3RzID0gZ2VuZXJhdGVkQXJ0aWZhY3RzOwogICB9CiAKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvUHJlY29tcGlsZS5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9QcmVjb21waWxlLmphdmEKaW5kZXggMGU1NWMzOS4uY2I5NWQ2YyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9QcmVjb21waWxlLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9QcmVjb21waWxlLmphdmEKQEAgLTMxMSw4ICszMTEsOCBAQAogICAgICAgICAgIG1lcmdlZC5wdXQocmViaW5kUmVzdWx0c1N0cmluZywgcGVybXV0YXRpb24pOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBwZXJtdXRhdGlvbnMgPSBtZXJnZWQudmFsdWVzKCkudG9BcnJheShuZXcgUGVybXV0YXRpb25bbWVyZ2VkLnNpemUoKV0pOwotICAgICAgcmV0dXJuIG5ldyBQcmVjb21waWxhdGlvbih1bmlmaWVkQXN0LCBwZXJtdXRhdGlvbnMsIGdlbmVyYXRlZEFydGlmYWN0cyk7CisgICAgICByZXR1cm4gbmV3IFByZWNvbXBpbGF0aW9uKHVuaWZpZWRBc3QsIG1lcmdlZC52YWx1ZXMoKSwKKyAgICAgICAgICBnZW5lcmF0ZWRBcnRpZmFjdHMpOwogICAgIH0gY2F0Y2ggKFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gZSkgewogICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCBwYXNzIGluIHRoZSBleGNlcHRpb24gaGVyZSBzaW5jZSB0aGUgcmVhbAogICAgICAgLy8gY2F1c2UgaGFzIGJlZW4gbG9nZ2VkLgpAQCAtMzc0LDUwICszNzQsNDQgQEAKICAgfQogCiAgIHB1YmxpYyBib29sZWFuIHJ1bihUcmVlTG9nZ2VyIGxvZ2dlcikgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgIGlmIChvcHRpb25zLmlzVmFsaWRhdGVPbmx5KCkpIHsKLSAgICAgIGluaXQobG9nZ2VyKTsKLSAgICAgIFRyZWVMb2dnZXIgYnJhbmNoID0gbG9nZ2VyLmJyYW5jaChUcmVlTG9nZ2VyLklORk8sCi0gICAgICAgICAgIlZhbGlkYXRpbmcgY29tcGlsYXRpb24gIiArIG1vZHVsZS5nZXROYW1lKCkpOwotICAgICAgaWYgKHZhbGlkYXRlKGJyYW5jaCwgb3B0aW9ucywgbW9kdWxlLCBvcHRpb25zLmdldEdlbkRpcigpLAotICAgICAgICAgIG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKCkpKSB7CisgICAgZm9yIChTdHJpbmcgbW9kdWxlTmFtZSA6IG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKSkgeworICAgICAgRmlsZSBjb21waWxlcldvcmtEaXIgPSBvcHRpb25zLmdldENvbXBpbGVyV29ya0Rpcihtb2R1bGVOYW1lKTsKKyAgICAgIFV0aWwucmVjdXJzaXZlRGVsZXRlKGNvbXBpbGVyV29ya0RpciwgdHJ1ZSk7CisgICAgICBjb21waWxlcldvcmtEaXIubWtkaXJzKCk7CisKKyAgICAgIHRoaXMubW9kdWxlID0gTW9kdWxlRGVmTG9hZGVyLmxvYWRGcm9tQ2xhc3NQYXRoKGxvZ2dlciwgbW9kdWxlTmFtZSk7CisKKyAgICAgIC8vIFRPRE86IEFsbCBKRFQgY2hlY2tzIG5vdyBiZWZvcmUgZXZlbiBidWlsZGluZyBUeXBlT3JhY2xlPworICAgICAgbW9kdWxlLmdldENvbXBpbGF0aW9uU3RhdGUobG9nZ2VyKTsKKworICAgICAgaWYgKG9wdGlvbnMuaXNWYWxpZGF0ZU9ubHkoKSkgeworICAgICAgICBUcmVlTG9nZ2VyIGJyYW5jaCA9IGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5JTkZPLAorICAgICAgICAgICAgIlZhbGlkYXRpbmcgY29tcGlsYXRpb24gIiArIG1vZHVsZS5nZXROYW1lKCkpOworICAgICAgICBpZiAoIXZhbGlkYXRlKGJyYW5jaCwgb3B0aW9ucywgbW9kdWxlLCBvcHRpb25zLmdldEdlbkRpcigpLAorICAgICAgICAgICAgY29tcGlsZXJXb3JrRGlyKSkgeworICAgICAgICAgIGJyYW5jaC5sb2coVHJlZUxvZ2dlci5FUlJPUiwgIlZhbGlkYXRpb24gZmFpbGVkIik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGJyYW5jaC5sb2coVHJlZUxvZ2dlci5JTkZPLCAiVmFsaWRhdGlvbiBzdWNjZWVkZWQiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9IGVsc2UgewotICAgICAgICBicmFuY2gubG9nKFRyZWVMb2dnZXIuRVJST1IsICJWYWxpZGF0aW9uIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGluaXQobG9nZ2VyKTsKLSAgICAgIFRyZWVMb2dnZXIgYnJhbmNoID0gbG9nZ2VyLmJyYW5jaChUcmVlTG9nZ2VyLklORk8sICJQcmVjb21waWxpbmcgbW9kdWxlICIKLSAgICAgICAgICArIG1vZHVsZS5nZXROYW1lKCkpOwotICAgICAgUHJlY29tcGlsYXRpb24gcHJlY29tcGlsYXRpb24gPSBwcmVjb21waWxlKGJyYW5jaCwgb3B0aW9ucywgbW9kdWxlLAotICAgICAgICAgIG9wdGlvbnMuZ2V0R2VuRGlyKCksIG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKCkpOwotICAgICAgaWYgKHByZWNvbXBpbGF0aW9uICE9IG51bGwpIHsKLSAgICAgICAgVXRpbC53cml0ZU9iamVjdEFzRmlsZShicmFuY2gsIG5ldyBGaWxlKG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKCksCisgICAgICAgIFRyZWVMb2dnZXIgYnJhbmNoID0gbG9nZ2VyLmJyYW5jaChUcmVlTG9nZ2VyLklORk8sCisgICAgICAgICAgICAiUHJlY29tcGlsaW5nIG1vZHVsZSAiICsgbW9kdWxlLmdldE5hbWUoKSk7CisgICAgICAgIFByZWNvbXBpbGF0aW9uIHByZWNvbXBpbGF0aW9uID0gcHJlY29tcGlsZShicmFuY2gsIG9wdGlvbnMsIG1vZHVsZSwKKyAgICAgICAgICAgIG9wdGlvbnMuZ2V0R2VuRGlyKCksIGNvbXBpbGVyV29ya0Rpcik7CisgICAgICAgIGlmIChwcmVjb21waWxhdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgYnJhbmNoLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiUHJlY29tcGlsYXRpb24gZmFpbGVkIik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIFV0aWwud3JpdGVPYmplY3RBc0ZpbGUoYnJhbmNoLCBuZXcgRmlsZShjb21waWxlcldvcmtEaXIsCiAgICAgICAgICAgICBQUkVDT01QSUxBVElPTl9GSUxFTkFNRSksIHByZWNvbXBpbGF0aW9uKTsKLSAgICAgICAgVXRpbC53cml0ZVN0cmluZ0FzRmlsZShicmFuY2gsIG5ldyBGaWxlKG9wdGlvbnMuZ2V0Q29tcGlsZXJXb3JrRGlyKCksCisgICAgICAgIFV0aWwud3JpdGVTdHJpbmdBc0ZpbGUoYnJhbmNoLCBuZXcgRmlsZShjb21waWxlcldvcmtEaXIsCiAgICAgICAgICAgICBQRVJNX0NPVU5UX0ZJTEVOQU1FKSwKICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHByZWNvbXBpbGF0aW9uLmdldFBlcm11dGF0aW9ucygpLmxlbmd0aCkpOwogICAgICAgICBicmFuY2gubG9nKFRyZWVMb2dnZXIuSU5GTywKICAgICAgICAgICAgICJQcmVjb21waWxhdGlvbiBzdWNjZWVkZWQsIG51bWJlciBvZiBwZXJtdXRhdGlvbnM6ICIKICAgICAgICAgICAgICAgICArIHByZWNvbXBpbGF0aW9uLmdldFBlcm11dGF0aW9ucygpLmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQotICAgICAgYnJhbmNoLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiUHJlY29tcGlsYXRpb24gZmFpbGVkIik7Ci0gICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXQoVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKLSAgICAvLyBDbGVhbiBvdXQgdGhlIHdvcmsgZGlyIGFuZC9vciBjcmVhdGUgaXQuCi0gICAgRmlsZSBjb21waWxlcldvcmtEaXIgPSBvcHRpb25zLmdldENvbXBpbGVyV29ya0RpcigpOwotICAgIFV0aWwucmVjdXJzaXZlRGVsZXRlKGNvbXBpbGVyV29ya0RpciwgdHJ1ZSk7Ci0gICAgY29tcGlsZXJXb3JrRGlyLm1rZGlycygpOwotCi0gICAgdGhpcy5tb2R1bGUgPSBNb2R1bGVEZWZMb2FkZXIubG9hZEZyb21DbGFzc1BhdGgobG9nZ2VyLAotICAgICAgICBvcHRpb25zLmdldE1vZHVsZU5hbWUoKSk7Ci0KLSAgICAvLyBUT0RPOiBBbGwgSkRUIGNoZWNrcyBub3cgYmVmb3JlIGV2ZW4gYnVpbGRpbmcgVHlwZU9yYWNsZT8KLSAgICBtb2R1bGUuZ2V0Q29tcGlsYXRpb25TdGF0ZShsb2dnZXIpOworICAgIHJldHVybiB0cnVlOwogICB9CiB9CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2NmZy9Nb2R1bGVEZWYuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvY2ZnL01vZHVsZURlZi5qYXZhCmluZGV4IGNiYzNlMzkuLjZhYjRhOGYgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvY2ZnL01vZHVsZURlZi5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvY2ZnL01vZHVsZURlZi5qYXZhCkBAIC00Miw3ICs0Miw2IEBACiBpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtODUsOCArODQsNiBAQAogCiAgIHByaXZhdGUgQ2xhc3M8PyBleHRlbmRzIExpbmtlcj4gYWN0aXZlUHJpbWFyeUxpbmtlcjsKIAotICBwcml2YXRlIFN0cmluZyBkZXBsb3lUbzsKLQogICBwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiBlbnRyeVBvaW50VHlwZU5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAKICAgcHJpdmF0ZSBmaW5hbCBTZXQ8RmlsZT4gZ3d0WG1sRmlsZXMgPSBuZXcgSGFzaFNldDxGaWxlPigpOwpAQCAtMjY5LDE3ICsyNjYsNiBAQAogICAgIHJldHVybiBsYXp5Q29tcGlsYXRpb25TdGF0ZTsKICAgfQogCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBkZXNpcmVkIGRlcGxveW1lbnQgcGF0aCB3aXRoaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkuIFRoZQotICAgKiByZXR1cm5lZCB2YWx1ZSB3aWxsIHN0YXJ0IGFuZCBlbmQgd2l0aCBhIDxjb2RlPicvJzwvY29kZT4gY2hhcmFjdGVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXBsb3lUbygpIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gKGRlcGxveVRvID09IG51bGwpID8gKCcvJyArIGdldE5hbWUoKSArICcvJykgOiBkZXBsb3lUbzsKLSAgICBhc3NlcnQgcmVzdWx0LnN0YXJ0c1dpdGgoIi8iKTsKLSAgICBhc3NlcnQgcmVzdWx0LmVuZHNXaXRoKCIvIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCiAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgU3RyaW5nW10gZ2V0RW50cnlQb2ludFR5cGVOYW1lcygpIHsKICAgICBmaW5hbCBpbnQgbiA9IGVudHJ5UG9pbnRUeXBlTmFtZXMuc2l6ZSgpOwogICAgIHJldHVybiBlbnRyeVBvaW50VHlwZU5hbWVzLnRvQXJyYXkobmV3IFN0cmluZ1tuXSk7CkBAIC0zNjQsMTQgKzM1MCwxNyBAQAogICB9CiAKICAgcHVibGljIGJvb2xlYW4gaXNHd3RYbWxGaWxlU3RhbGUoKSB7Ci0gICAgZm9yIChJdGVyYXRvcjxGaWxlPiBpdGVyID0gZ3d0WG1sRmlsZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gICAgICBGaWxlIHhtbEZpbGUgPSBpdGVyLm5leHQoKTsKLSAgICAgIGlmICgoIXhtbEZpbGUuZXhpc3RzKCkpCi0gICAgICAgICAgfHwgKHhtbEZpbGUubGFzdE1vZGlmaWVkKCkgPiBtb2R1bGVEZWZDcmVhdGlvblRpbWUpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBsYXN0TW9kaWZpZWQoKSA+IG1vZHVsZURlZkNyZWF0aW9uVGltZTsKKyAgfQorCisgIHB1YmxpYyBsb25nIGxhc3RNb2RpZmllZCgpIHsKKyAgICBsb25nIGxhc3RNb2RpZmllZCA9IDA7CisgICAgZm9yIChGaWxlIHhtbEZpbGUgOiBnd3RYbWxGaWxlcykgeworICAgICAgaWYgKHhtbEZpbGUuZXhpc3RzKCkpIHsKKyAgICAgICAgbGFzdE1vZGlmaWVkID0gTWF0aC5tYXgobGFzdE1vZGlmaWVkLCB4bWxGaWxlLmxhc3RNb2RpZmllZCgpKTsKICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBsYXN0TW9kaWZpZWQgPiAwID8gbGFzdE1vZGlmaWVkIDogbW9kdWxlRGVmQ3JlYXRpb25UaW1lOwogICB9CiAKICAgLyoqCkBAIC00MDcsMjYgKzM5Niw2IEBACiAgIH0KIAogICAvKioKLSAgICogU2V0IHRoZSBkZXBsb3ltZW50IHBhdGggZm9yIHRoaXMgbW9kdWxlLiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8KLSAgICogPGNvZGU+bnVsbDwvY29kZT4gb3IgdGhlIGVtcHR5IHN0cmluZyB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZAotICAgKiBtb2R1bGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlcGxveVRvKFN0cmluZyBkZXBsb3lUbykgewotICAgIGlmIChkZXBsb3lUbyAhPSBudWxsICYmIGRlcGxveVRvLmxlbmd0aCgpID09IDApIHsKLSAgICAgIGRlcGxveVRvID0gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgYXNzZXJ0IGRlcGxveVRvLnN0YXJ0c1dpdGgoIi8iKTsKLSAgICAgIC8vIEVuc3VyZSBlbmRzIHdpdGggdHJhaWxpbmcgc2xhc2guCi0gICAgICBpZiAoIWRlcGxveVRvLmVuZHNXaXRoKCIvIikpIHsKLSAgICAgICAgZGVwbG95VG8gKz0gJy8nOwotICAgICAgfQotICAgICAgYXNzZXJ0IGRlcGxveVRvLmVuZHNXaXRoKCIvIik7Ci0gICAgfQotCi0gICAgdGhpcy5kZXBsb3lUbyA9IGRlcGxveVRvOwotICB9Ci0KLSAgLyoqCiAgICAqIE92ZXJyaWRlIHRoZSBtb2R1bGUncyBhcHBhcmVudCBuYW1lLiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8KICAgICogPGNvZGU+bnVsbDxjb2RlPiB3aWxsIGRpc2FibGUgdGhlIG5hbWUgb3ZlcnJpZGUuCiAgICAqLwpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9jZmcvTW9kdWxlRGVmU2NoZW1hLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2NmZy9Nb2R1bGVEZWZTY2hlbWEuamF2YQppbmRleCA1ZjEyODdiLi5lYmRlNjlkIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2NmZy9Nb2R1bGVEZWZTY2hlbWEuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2NmZy9Nb2R1bGVEZWZTY2hlbWEuamF2YQpAQCAtOTIxLDcgKzkyMSw2IEBACiAgIH0KIAogICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9fbW9kdWxlXzFfcmVuYW1lX3RvID0gIiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX19tb2R1bGVfMl9kZXBsb3lfdG8gPSAiIjsKIAogICBwcml2YXRlIGZpbmFsIFByb3BlcnR5QXR0ckN2dCBiaW5kaW5nUHJvcEF0dHJDdnQgPSBuZXcgUHJvcGVydHlBdHRyQ3Z0KAogICAgICAgQmluZGluZ1Byb3BlcnR5LmNsYXNzKTsKQEAgLTk2OCwyMSArOTY3LDExIEBACiAgICAgcmVnaXN0ZXJBdHRyaWJ1dGVDb252ZXJ0ZXIoQ2xhc3MuY2xhc3MsIGNsYXNzQXR0ckN2dCk7CiAgIH0KIAotICBwcm90ZWN0ZWQgU2NoZW1hIF9fbW9kdWxlX2JlZ2luKE51bGxhYmxlTmFtZSByZW5hbWVUbywgU3RyaW5nIGRlcGxveVRvKQotICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotCi0gICAgaWYgKGRlcGxveVRvICE9IG51bGwgJiYgZGVwbG95VG8ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAvLyBPbmx5IGFic29sdXRlIHBhdGhzLCBhbHRob3VnaCBpdCBpcyBva2F5IHRvIGhhdmUgbXVsdGlwbGUgc2xhc2hlcy4KLSAgICAgIGlmICghZGVwbG95VG8uc3RhcnRzV2l0aCgiLyIpKSB7Ci0gICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5FUlJPUiwgImRlcGxveS10byAnIiArIGRlcGxveVRvCi0gICAgICAgICAgICArICInIG11c3QgYmVnaW4gd2l0aCBmb3J3YXJkIHNsYXNoIChlLmcuICcvZm9vJykiKTsKLSAgICAgICAgdGhyb3cgbmV3IFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9CisgIHByb3RlY3RlZCBTY2hlbWEgX19tb2R1bGVfYmVnaW4oTnVsbGFibGVOYW1lIHJlbmFtZVRvKSB7CiAgICAgcmV0dXJuIGJvZHlTY2hlbWE7CiAgIH0KIAotICBwcm90ZWN0ZWQgdm9pZCBfX21vZHVsZV9lbmQoTnVsbGFibGVOYW1lIHJlbmFtZVRvLCBTdHJpbmcgZGVwbG95VG8pIHsKKyAgcHJvdGVjdGVkIHZvaWQgX19tb2R1bGVfZW5kKE51bGxhYmxlTmFtZSByZW5hbWVUbykgewogICAgIC8vIE1heWJlIGluZmVyIHNvdXJjZSBhbmQgcHVibGljLgogICAgIC8vCiAgICAgaWYgKCFmb3VuZEV4cGxpY2l0U291cmNlT3JTdXBlclNvdXJjZSkgewpAQCAtOTk3LDcgKzk4Niw2IEBACiAKICAgICAvLyBXZSBkbyB0aGlzIGluIF9fbW9kdWxlX2VuZCBzbyB0aGlzIHZhbHVlIGlzIG5ldmVyIGluaGVyaXRlZAogICAgIG1vZHVsZURlZi5zZXROYW1lT3ZlcnJpZGUocmVuYW1lVG8udG9rZW4pOwotICAgIG1vZHVsZURlZi5zZXREZXBsb3lUbyhkZXBsb3lUbyk7CiAgIH0KIAogICAvKioKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvamF2YWMvSmR0Q29tcGlsZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvamF2YWMvSmR0Q29tcGlsZXIuamF2YQppbmRleCA4Y2E5ZmQ4Li42YmI1ODc1IDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2phdmFjL0pkdENvbXBpbGVyLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9qYXZhYy9KZHRDb21waWxlci5qYXZhCkBAIC0xMDMsNyArMTAzLDkgQEAKICAgICAgIENvbXBpbGF0aW9uVW5pdEFkYXB0ZXIgYWRhcHRlciA9IChDb21waWxhdGlvblVuaXRBZGFwdGVyKSBpY3U7CiAgICAgICBDb21waWxhdGlvblVuaXQgdW5pdCA9IGFkYXB0ZXIuZ2V0VW5pdCgpOwogICAgICAgdW5pdC5zZXRKZHRDdWQoY3VkKTsKLSAgICAgIHJlY29yZEJpbmFyeVR5cGVzKHVuaXQuZ2V0Q29tcGlsZWRDbGFzc2VzKCkpOworICAgICAgaWYgKCFjdWQuY29tcGlsYXRpb25SZXN1bHQoKS5oYXNFcnJvcnMoKSkgeworICAgICAgICByZWNvcmRCaW5hcnlUeXBlcyh1bml0LmdldENvbXBpbGVkQ2xhc3NlcygpKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIApkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9qYXZhYy9Mb25nRnJvbUpTTklDaGVja2VyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2phdmFjL0xvbmdGcm9tSlNOSUNoZWNrZXIuamF2YQppbmRleCBmYTQ5ZmQ2Li43ZTY5OWFiIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2phdmFjL0xvbmdGcm9tSlNOSUNoZWNrZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L2phdmFjL0xvbmdGcm9tSlNOSUNoZWNrZXIuamF2YQpAQCAtMTg5LDEwICsxODksMTEgQEAKIAogICAgICAgaWYgKGJpbmRpbmcgaW5zdGFuY2VvZiBQcm9ibGVtUmVmZXJlbmNlQmluZGluZykgewogICAgICAgICBQcm9ibGVtUmVmZXJlbmNlQmluZGluZyBwcmIgPSAoUHJvYmxlbVJlZmVyZW5jZUJpbmRpbmcpIGJpbmRpbmc7Ci0gICAgICAgIGlmIChwcmIucHJvYmxlbUlkKCkgPT0gUHJvYmxlbVJlYXNvbnMuTm90VmlzaWJsZSkgeworICAgICAgICBpZiAocHJiLnByb2JsZW1JZCgpID09IFByb2JsZW1SZWFzb25zLk5vdFZpc2libGUKKyAgICAgICAgICAgICYmIHByYi5jbG9zZXN0TWF0Y2goKSBpbnN0YW5jZW9mIFJlZmVyZW5jZUJpbmRpbmcpIHsKICAgICAgICAgICAvLyBJdCdzIGp1c3QgYSB2aXNpYmlsaXR5IHByb2JsZW0sIHNvIHRyeSBkcmlsbGluZwogICAgICAgICAgIC8vIGRvd24gbWFudWFsbHkKLSAgICAgICAgICBSZWZlcmVuY2VCaW5kaW5nIGRyaWxsaW5nID0gcHJiLmNsb3Nlc3RNYXRjaCgpOworICAgICAgICAgIFJlZmVyZW5jZUJpbmRpbmcgZHJpbGxpbmcgPSAoUmVmZXJlbmNlQmluZGluZykgcHJiLmNsb3Nlc3RNYXRjaCgpOwogICAgICAgICAgIGZvciAoaW50IGkgPSBwcmIuY29tcG91bmROYW1lLmxlbmd0aDsgaSA8IGNvbXBvdW5kTmFtZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgZHJpbGxpbmcgPSBkcmlsbGluZy5nZXRNZW1iZXJUeXBlKGNvbXBvdW5kTmFtZVtpXSk7CiAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9Ccm93c2VyV2lkZ2V0LmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0Jyb3dzZXJXaWRnZXQuamF2YQppbmRleCA3ZDRiNzg4Li44YWMwMmYxIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0Jyb3dzZXJXaWRnZXQuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0Jyb3dzZXJXaWRnZXQuamF2YQpAQCAtOTMsNyArOTMsMTggQEAKICAgICAgIG9wZW5XZWJNb2RlQnV0dG9uID0gbmV3SXRlbSgibmV3LXdlYi1tb2RlLXdpbmRvdy5naWYiLCAiJkNvbXBpbGUvQnJvd3NlIiwKICAgICAgICAgICAiQ29tcGlsZXMgYW5kIG9wZW5zIHRoZSBjdXJyZW50IFVSTCBpbiB0aGUgc3lzdGVtIGJyb3dzZXIiKTsKICAgICAgIG9wZW5XZWJNb2RlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgICAgb3BlbldlYk1vZGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICB1cGRhdGVXZWJNb2RlKCk7CisgICAgfQorCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVXZWJNb2RlKCkgeworICAgICAgaWYgKCFvcGVuV2ViTW9kZUJ1dHRvbi5pc0Rpc3Bvc2VkKCkpIHsKKyAgICAgICAgaWYgKGdldEhvc3QoKS5pc0xlZ2FjeU1vZGUoKSkgeworICAgICAgICAgIG9wZW5XZWJNb2RlQnV0dG9uLnNldEVuYWJsZWQoIWxvYWRlZE1vZHVsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBvcGVuV2ViTW9kZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKQEAgLTExNCwyMiArMTI1LDI2IEBACiAgICAgICAgIGJyb3dzZXIuc3RvcCgpOwogICAgICAgfSBlbHNlIGlmIChldnQud2lkZ2V0ID09IG9wZW5XZWJNb2RlQnV0dG9uKSB7CiAgICAgICAgIC8vIGZpcnN0LCBjb21waWxlCi0gICAgICAgIFNldDxTdHJpbmc+IGtleVNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLSAgICAgICAgZm9yIChNYXAuRW50cnk8PywgTW9kdWxlU3BhY2U+IGVudHJ5IDogbG9hZGVkTW9kdWxlcy5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgTW9kdWxlU3BhY2UgbW9kdWxlID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICBrZXlTZXQuYWRkKG1vZHVsZS5nZXRNb2R1bGVOYW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZ1tdIG1vZHVsZU5hbWVzID0gVXRpbC50b1N0cmluZ0FycmF5KGtleVNldCk7Ci0gICAgICAgIGlmIChtb2R1bGVOYW1lcy5sZW5ndGggPT0gMCkgewotICAgICAgICAgIC8vIEEgbGF0ZW50IHByb2JsZW0gd2l0aCBhIG1vZHVsZS4KLSAgICAgICAgICAvLwotICAgICAgICAgIG9wZW5XZWJNb2RlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgIEN1cnNvciB3YWl0Q3Vyc29yID0gZ2V0RGlzcGxheSgpLmdldFN5c3RlbUN1cnNvcihTV1QuQ1VSU09SX1dBSVQpOwogICAgICAgICAgIGdldFNoZWxsKCkuc2V0Q3Vyc29yKHdhaXRDdXJzb3IpOwotICAgICAgICAgIGdldEhvc3QoKS5jb21waWxlKG1vZHVsZU5hbWVzKTsKKyAgICAgICAgICBpZiAoZ2V0SG9zdCgpLmlzTGVnYWN5TW9kZSgpKSB7CisgICAgICAgICAgICBTZXQ8U3RyaW5nPiBrZXlTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTw/LCBNb2R1bGVTcGFjZT4gZW50cnkgOiBsb2FkZWRNb2R1bGVzLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgTW9kdWxlU3BhY2UgbW9kdWxlID0gZW50cnkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgICAga2V5U2V0LmFkZChtb2R1bGUuZ2V0TW9kdWxlTmFtZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZ1tdIG1vZHVsZU5hbWVzID0gVXRpbC50b1N0cmluZ0FycmF5KGtleVNldCk7CisgICAgICAgICAgICBpZiAobW9kdWxlTmFtZXMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgLy8gQSBsYXRlbnQgcHJvYmxlbSB3aXRoIGEgbW9kdWxlLgorICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICBvcGVuV2ViTW9kZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2V0SG9zdCgpLmNvbXBpbGUobW9kdWxlTmFtZXMpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZXRIb3N0KCkuY29tcGlsZSgpOworICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgLy8gQWxyZWFkeSBsb2dnZWQgYnkgY2FsbGVlLgogICAgICAgICAgIC8vCkBAIC0xNTQsOSArMTY5LDEwIEBACiAgIH0KIAogICAvKioKLSAgICogVGhlIHZlcnNpb24gbnVtYmVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIGd3dE9uTG9hZC4KKyAgICogVGhlIHZlcnNpb24gbnVtYmVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIGd3dE9uTG9hZC4gTXVzdCBtYXRjaCB0aGUKKyAgICogdmVyc2lvbiBpbiBob3N0ZWQuaHRtbC4KICAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9HV1RfT05MT0FEX1ZFUlNJT04gPSAiMS41IjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX0dXVF9PTkxPQURfVkVSU0lPTiA9ICIxLjYiOwogCiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBsYXVuY2hFeHRlcm5hbEJyb3dzZXIoVHJlZUxvZ2dlciBsb2dnZXIsIFN0cmluZyBsb2NhdGlvbikgewogICAgIC8vIGNoZWNrIEdXVF9FWFRFUk5BTF9CUk9XU0VSIGZpcnN0LCBpdCBvdmVycmlkZXMgZXZlcnl0aGluZyBlbHNlCkBAIC0zMzAsNyArMzQ2LDcgQEAKIAogICAgIC8vIEVuYWJsZSB0aGUgY29tcGlsZSBidXR0b24gc2luY2Ugd2Ugc3VjY2Vzc2Z1bGx5IGxvYWRlZC4KICAgICAvLwotICAgIHRvb2xiYXIub3BlbldlYk1vZGVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICB0b29sYmFyLnVwZGF0ZVdlYk1vZGUoKTsKICAgfQogCiAgIC8qKgpAQCAtMzU2LDI3ICszNzIsMTkgQEAKICAgICAgICAgbG9hZGVkTW9kdWxlcy5yZW1vdmUoa2V5KTsKICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGxvYWRlZE1vZHVsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICBpZiAoIXRvb2xiYXIub3BlbldlYk1vZGVCdXR0b24uaXNEaXNwb3NlZCgpKSB7Ci0gICAgICAgIC8vIERpc2FibGUgdGhlIGNvbXBpbGUgYnV0dG9uLgotICAgICAgICAvLwotICAgICAgICB0b29sYmFyLm9wZW5XZWJNb2RlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgfQotICAgIH0KKyAgICB0b29sYmFyLnVwZGF0ZVdlYk1vZGUoKTsKICAgfQogCiAgIC8qKgotICAgKiBSZXBvcnQgdGhhdCBnd3RPbkxvYWQgd2FzIGNhbGxlZCB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YKKyAgICogUmVwb3J0IHRoYXQgYW4gZXh0ZXJuYWwgbWV0aG9kIHdhcyBjYWxsZWQgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mCiAgICAqIGFyZ3VtZW50cy4KLSAgICogCi0gICAqIEBwYXJhbSBudW1BcmdzIG51bWJlciBvZiBhcmd1bWVudHMgc3VwcGxpZWQKICAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlcG9ydEluY29ycmVjdEd3dE9uTG9hZEludm9jYXRpb24oaW50IG51bUFyZ3MpIHsKKyAgcHJvdGVjdGVkIHZvaWQgcmVwb3J0SW5jb3JyZWN0SW52b2NhdGlvbihTdHJpbmcgbmFtZSwgaW50IGV4cGVjdGVkQXJncywKKyAgICAgIGludCBhY3R1YWxBcmdzKSB7CiAgICAgZ2V0SG9zdCgpLmdldExvZ2dlcigpLmxvZygKICAgICAgICAgVHJlZUxvZ2dlci5FUlJPUiwKLSAgICAgICAgIk5vdCBlbm91Z2ggYXJndW1lbnRzICgiCi0gICAgICAgICsgbnVtQXJncwotICAgICAgICAgICAgKyAiKSBwYXNzZWQgdG8gZXh0ZXJuYWwuZ3d0T25Mb2FkKCksIGV4cGVjdGVkICgzKTsgIgorICAgICAgICAiTm90IGVub3VnaCBhcmd1bWVudHMgKCIgKyBhY3R1YWxBcmdzICsgIikgcGFzc2VkIHRvIGV4dGVybmFsLiIgKyBuYW1lCisgICAgICAgICAgICArICIoKSwgZXhwZWN0ZWQgKCIgKyBleHBlY3RlZEFyZ3MgKyAiKTsgIgogICAgICAgICAgICAgKyAieW91ciBob3N0ZWQgbW9kZSBib290c3RyYXAgZmlsZSBtYXkgYmUgb3V0IG9mIGRhdGU7ICIKICAgICAgICAgICAgICsgImlmIHlvdSBhcmUgdXNpbmcgLW5vc2VydmVyIHRyeSByZWNvbXBpbGluZyBhbmQgcmVkZXBsb3lpbmcgIgogICAgICAgICAgICAgKyAieW91ciBhcHAiKTsKQEAgLTM5OCw4ICs0MDYsOCBAQAogICAvKioKICAgICogVmFsaWRhdGUgdGhhdCB0aGUgc3VwcGxpZWQgaG9zdGVkLmh0bWwgdmVyc2lvbiBtYXRjaGVzLgogICAgKiAKLSAgICogVGhpcyBpcyB0byBkZXRlY3QgY2FzZXMgd2hlcmUgdXNlcnMgdXBncmFkZSB0byBhIG5ldyB2ZXJzaW9uCi0gICAqIGJ1dCBmb3JnZXQgdG8gdXBkYXRlIHRoZSBnZW5lcmF0ZWQgaG9zdGVkLmh0bWwgZmlsZS4KKyAgICogVGhpcyBpcyB0byBkZXRlY3QgY2FzZXMgd2hlcmUgdXNlcnMgdXBncmFkZSB0byBhIG5ldyB2ZXJzaW9uIGJ1dCBmb3JnZXQgdG8KKyAgICogdXBkYXRlIHRoZSBnZW5lcmF0ZWQgaG9zdGVkLmh0bWwgZmlsZS4KICAgICogCiAgICAqIEBwYXJhbSB2ZXJzaW9uIHZlcnNpb24gc3VwcGxpZWQgYnkgaG9zdGVkLmh0bWwgZmlsZQogICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZlcnNpb24gaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQpAQCAtNDA4LDggKzQxNiw3IEBACiAgICAgaWYgKCFFWFBFQ1RFRF9HV1RfT05MT0FEX1ZFUlNJT04uZXF1YWxzKHZlcnNpb24pKSB7CiAgICAgICBnZXRIb3N0KCkuZ2V0TG9nZ2VyKCkubG9nKAogICAgICAgICAgIFRyZWVMb2dnZXIuRVJST1IsCi0gICAgICAgICAgIkludmFsaWQgdmVyc2lvbiBudW1iZXIgXCIiCi0gICAgICAgICAgICAgICsgdmVyc2lvbgorICAgICAgICAgICJJbnZhbGlkIHZlcnNpb24gbnVtYmVyIFwiIiArIHZlcnNpb24KICAgICAgICAgICAgICAgKyAiXCIgcGFzc2VkIHRvIGV4dGVybmFsLmd3dE9uTG9hZCgpLCBleHBlY3RlZCBcIiIKICAgICAgICAgICAgICAgKyBFWFBFQ1RFRF9HV1RfT05MT0FEX1ZFUlNJT04KICAgICAgICAgICAgICAgKyAiXCI7IHlvdXIgaG9zdGVkIG1vZGUgYm9vdHN0cmFwIGZpbGUgbWF5IGJlIG91dCBvZiBkYXRlOyAiCmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0Jyb3dzZXJXaWRnZXRIb3N0LmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0Jyb3dzZXJXaWRnZXRIb3N0LmphdmEKaW5kZXggOGM1NTdlMC4uNzRjMjE3NSAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9Ccm93c2VyV2lkZ2V0SG9zdC5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvQnJvd3NlcldpZGdldEhvc3QuamF2YQpAQCAtMTcsMTYgKzE3LDI5IEBACiAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWY7CiAKIC8qKgogICogSW50ZXJmYWNlIHRoYXQgdW5pZmllcyBhY2Nlc3MgdG8gdGhlIDxjb2RlPkJyb3dzZXJXaWRnZXQ8L2NvZGU+LAogICogPGNvZGU+TW9kdWxlU3BhY2VIb3N0PC9jb2RlPiwgYW5kIHRoZSBjb21waWxlci4KICAqLwogcHVibGljIGludGVyZmFjZSBCcm93c2VyV2lkZ2V0SG9zdCB7Ci0gIHZvaWQgY29tcGlsZShTdHJpbmdbXSBtb2R1bGVzKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKKyAgLyoqCisgICAqIFBlcmZvcm0gYSB3ZWItbW9kZSBjb21waWxlIG9uIHRoZSB1c2VyLXNwZWNpZmllZCBzZXQgb2YgbW9kdWxlcy4gVXNlZCBpbgorICAgKiBub24tbGVnYWN5IG1vZGUuCisgICAqIAorICAgKiBAdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24KKyAgICovCisgIHZvaWQgY29tcGlsZSgpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOwogCi0gIHZvaWQgY29tcGlsZShNb2R1bGVEZWYgbW9kdWxlKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKKyAgLyoqCisgICAqIENvbXBpbGUgdGhlIHNwZWNpZmllZCBzZXQgb2YgbW9kdWxlcywgdXNlZCBpbiBsZWdhY3kgbW9kZS4KKyAgICogCisgICAqIEBwYXJhbSBtb2R1bGVzIHRoZSBuYW1lcyBvZiB0aGUgbW9kdWxlcyB0byBjb21waWxlCisgICAqIEB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbgorICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBsZWdhY3kgc2hlbGwgbW9kZSBpcyByZW1vdmVkCisgICAqLworICBARGVwcmVjYXRlZAorICB2b2lkIGNvbXBpbGUoU3RyaW5nW10gbW9kdWxlcykgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CiAKICAgLy8gRmFjdG9yIHRoaXMgb3V0IGlmIEJyb3dzZXJXaWRnZXQgYmVjb21lcyBkZWNvdXBsZWQgZnJvbSBob3N0ZWQgbW9kZQogICBNb2R1bGVTcGFjZUhvc3QgY3JlYXRlTW9kdWxlU3BhY2VIb3N0KEJyb3dzZXJXaWRnZXQgd2lkZ2V0LCBTdHJpbmcgbW9kdWxlTmFtZSkKQEAgLTM0LDYgKzQ3LDI2IEBACiAKICAgVHJlZUxvZ2dlciBnZXRMb2dnZXIoKTsKIAorICAvKioKKyAgICogQ2FsbGVkIGZyb20gYSBzZWxlY3Rpb24gc2NyaXB0IGFzIGl0IGJlZ2lucyB0byBsb2FkIGluIGhvc3RlZCBtb2RlLiBUaGlzCisgICAqIHRyaWdnZXJzIGEgaG9zdGVkIG1vZGUgbGluaywgd2hpY2ggbWlnaHQgYWN0dWFsbHkgdXBkYXRlIHRoZSBydW5uaW5nCisgICAqIHNlbGVjdGlvbiBzY3JpcHQuCisgICAqIAorICAgKiBAcGFyYW0gbW9kdWxlTmFtZSB0aGUgbW9kdWxlIHRvIGxpbmsKKyAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc2VsZWN0aW9uIHNjcmlwdCB3YXMgb3ZlcndyaXR0ZW47IHRoaXMKKyAgICogICAgICAgICB3aWxsIHRyaWdnZXIgYSBmdWxsLXBhZ2UgcmVmcmVzaCBieSB0aGUgY2FsbGluZyAob3V0IG9mIGRhdGUpCisgICAqICAgICAgICAgc2VsZWN0aW9uIHNjcmlwdAorICAgKi8KKyAgYm9vbGVhbiBpbml0TW9kdWxlKFN0cmluZyBtb2R1bGVOYW1lKTsKKworICAvKioKKyAgICogUmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiBydW5uaW5nIGluIGxlZ2FjeSBtb2RlLgorICAgKiAKKyAgICogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIHdoZW4gbGVnYWN5IHNoZWxsIG1vZGUgaXMgcmVtb3ZlZAorICAgKi8KKyAgQERlcHJlY2F0ZWQKKyAgYm9vbGVhbiBpc0xlZ2FjeU1vZGUoKTsKKwogICBTdHJpbmcgbm9ybWFsaXplVVJMKFN0cmluZyB3aGF0VGhlVXNlclR5cGVkKTsKIAogICBCcm93c2VyV2lkZ2V0IG9wZW5OZXdCcm93c2VyV2luZG93KCkgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEKY29weSB0byBkZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLmphdmEKaW5kZXggOTA2MjU4Yi4uZTJiYjg4NCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9Ccm93c2VyV2luZG93Q29udHJvbGxlci5qYXZhCkBAIC0xLDMyICsxLDMxIEBACi0vKg0KLSAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuDQotICogDQotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90DQotICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YNCi0gKiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUDQotICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlDQotICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXINCi0gKiB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZDsNCi0NCi0vKioNCi0gKiANCi0gKiBDaGFyYWN0ZXJpc3RpYyBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGF0IHRoZSBnaXZlbiB3aWRnZXQgZmlyZXMgZXZlbnRzIHZpYSBhDQotICoge0BsaW5rIEhhbmRsZXJNYW5hZ2VyfS4NCi0gKiANCi0gKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJNYW5hZ2VyIHsNCi0gIC8qKg0KLSAgICogR2V0cyB0aGlzIHdpZGdldCdzIGhhbmRsZXIgbWFuYWdlci4NCi0gICAqIA0KLSAgICogQHJldHVybiB0aGUgbWFuYWdlcg0KLSAgICovDQotICBIYW5kbGVyTWFuYWdlciBnZXRIYW5kbGVyTWFuYWdlcigpOw0KLX0NCisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbDsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CisKKy8qKgorICogSW50ZXJmYWNlIHRvIHRoZSBicm93c2VyIHdpbmRvdyBjb250cm9sbGVyLgorICovCitwdWJsaWMgaW50ZXJmYWNlIEJyb3dzZXJXaW5kb3dDb250cm9sbGVyIHsKKyAgdm9pZCBjbG9zZUFsbEJyb3dzZXJXaW5kb3dzKCk7CisKKyAgYm9vbGVhbiBoYXNCcm93c2VyV2luZG93c09wZW4oKTsKKworICBTdHJpbmcgbm9ybWFsaXplVVJMKFN0cmluZyBzdHJpbmcpOworCisgIEJyb3dzZXJXaWRnZXQgb3Blbk5ld0Jyb3dzZXJXaW5kb3coKSB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0NvbXBpbGluZ0NsYXNzTG9hZGVyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0NvbXBpbGluZ0NsYXNzTG9hZGVyLmphdmEKaW5kZXggMmE4NWZkOS4uNTk1Y2YxMCAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9Db21waWxpbmdDbGFzc0xvYWRlci5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvQ29tcGlsaW5nQ2xhc3NMb2FkZXIuamF2YQpAQCAtMzUyLDEzICszNTIsMTUgQEAKIAogICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NfRFVNUF9QQVRIID0gInJld3JpdHRlbi1jbGFzc2VzIjsKIAorICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVtbWFJc0F2YWlsYWJsZSA9IGZhbHNlOworCisgIHByaXZhdGUgc3RhdGljIEVtbWFTdHJhdGVneSBlbW1hU3RyYXRlZ3k7CisKICAgLyoqCiAgICAqIENhY2hlcyB0aGUgYnl0ZSBjb2RlIGZvciB7QGxpbmsgSmF2YVNjcmlwdEhvc3R9LgogICAgKi8KICAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIGphdmFTY3JpcHRIb3N0Qnl0ZXM7CiAKLSAgcHJpdmF0ZSBzdGF0aWMgRW1tYVN0cmF0ZWd5IGVtbWFTdHJhdGVneTsKLQogICBzdGF0aWMgewogICAgIGZvciAoQ2xhc3M8Pz4gYyA6IEJSSURHRV9DTEFTU0VTKSB7CiAgICAgICBCUklER0VfQ0xBU1NfTkFNRVMucHV0KGMuZ2V0TmFtZSgpLCBjKTsKQEAgLTM2Niw4ICszNjgsMTAgQEAKICAgICAvKgogICAgICAqIFNwZWNpZmljIHN1cHBvcnQgZm9yIGJyaWRnaW5nIHRvIEVtbWEgc2luY2UgdGhlIHVzZXIgY2xhc3Nsb2FkZXIgaXMKICAgICAgKiBnZW5lcmFsbHkgY29tcGxldGVseSBpc29sYXRlZC4KKyAgICAgKiAKKyAgICAgKiBXZSBhcmUgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBlbW1hIGNsYXNzICJjb20udmxhZGl1bS5lbW1hLnJ0LlJUIi4gSWYKKyAgICAgKiB0aGF0IGNoYW5nZXMgaW4gdGhlIGZ1dHVyZSwgdGhpcyBjb2RlIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsLgogICAgICAqLwotICAgIGJvb2xlYW4gZW1tYUlzQXZhaWxhYmxlID0gZmFsc2U7CiAgICAgdHJ5IHsKICAgICAgIENsYXNzPD8+IGVtbWFCcmlkZ2UgPSBDbGFzcy5mb3JOYW1lKEVtbWFTdHJhdGVneS5FTU1BX1JUX0NMQVNTTkFNRSwKICAgICAgICAgICBmYWxzZSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7CkBAIC03MTMsMjcgKzcxNyw1MiBAQAogCiAgICAgQ29tcGlsZWRDbGFzcyBjb21waWxlZENsYXNzID0gY29tcGlsYXRpb25TdGF0ZS5nZXRDbGFzc0ZpbGVNYXAoKS5nZXQoCiAgICAgICAgIGxvb2t1cENsYXNzTmFtZSk7CisKKyAgICBieXRlIGNsYXNzQnl0ZXNbXSA9IG51bGw7CiAgICAgaWYgKGNvbXBpbGVkQ2xhc3MgIT0gbnVsbCkgewotICAgICAgYnl0ZVtdIGNsYXNzQnl0ZXMgPSBjb21waWxlZENsYXNzLmdldEJ5dGVzKCk7CisKKyAgICAgIGluamVjdEpzbmlGb3IoY29tcGlsZWRDbGFzcyk7CisgICAgICBjbGFzc0J5dGVzID0gY29tcGlsZWRDbGFzcy5nZXRCeXRlcygpOwogICAgICAgaWYgKCFjb21waWxlZENsYXNzLmdldFVuaXQoKS5pc1N1cGVyU291cmNlKCkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSXQgaXMgb2theSBpZiBFbW1hIHRocm93cyBhd2F5IHRoZSBvbGQgY2xhc3NCeXRlcyBzaW5jZSB0aGUgYWN0dWFsCisgICAgICAgICAqIGpzbmkgaW5qZWN0aW9uIGhhcHBlbnMgaW4gdGhlIHJld3JpdGVyLiBUaGUgaW5qZWN0SnNuaUZvciBtZXRob2QKKyAgICAgICAgICogYWJvdmUgc2ltcGx5IGRlZmluZXMgdGhlIG5hdGl2ZSBtZXRob2RzIGluIHRoZSBicm93c2VyLgorICAgICAgICAgKi8KICAgICAgICAgY2xhc3NCeXRlcyA9IGVtbWFTdHJhdGVneS5nZXRFbW1hQ2xhc3NCeXRlcyhjbGFzc0J5dGVzLAogICAgICAgICAgICAgbG9va3VwQ2xhc3NOYW1lLCBjb21waWxlZENsYXNzLmdldFVuaXQoKS5nZXRMYXN0TW9kaWZpZWQoKSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuU1BBTSwgIm5vIGVtbWEgaW5zdHJ1bWVudGF0aW9uIGZvciAiCiAgICAgICAgICAgICArIGxvb2t1cENsYXNzTmFtZSArICIgYmVjYXVzZSBpdCBpcyBmcm9tIHN1cGVyLXNvdXJjZSIpOwogICAgICAgfQotICAgICAgaWYgKGNsYXNzUmV3cml0ZXIgIT0gbnVsbCkgewotICAgICAgICBieXRlW10gbmV3Qnl0ZXMgPSBjbGFzc1Jld3JpdGVyLnJld3JpdGUoY2xhc3NOYW1lLCBjbGFzc0J5dGVzKTsKLSAgICAgICAgaWYgKENMQVNTX0RVTVApIHsKLSAgICAgICAgICBpZiAoIUFycmF5cy5lcXVhbHMoY2xhc3NCeXRlcywgbmV3Qnl0ZXMpKSB7Ci0gICAgICAgICAgICBjbGFzc0R1bXAoY2xhc3NOYW1lLCBuZXdCeXRlcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNsYXNzQnl0ZXMgPSBuZXdCeXRlczsKKyAgICB9IGVsc2UgaWYgKGVtbWFJc0F2YWlsYWJsZSkgeworICAgICAgLyoKKyAgICAgICAqIFR5cGVPcmFjbGUgZG9lcyBub3Qga25vdyBhYm91dCB0aGlzIGNsYXNzLiBNb3N0IHByb2JhYmx5LCB0aGlzIGNsYXNzCisgICAgICAgKiB3YXMgcmVmZXJlbmNlZCBpbiBvbmUgb2YgdGhlIGNsYXNzZXMgbG9hZGVkIGZyb20gZGlzay4gQ2hlY2sgaWYgd2UgY2FuCisgICAgICAgKiBmaW5kIGl0IG9uIGRpc2suIFR5cGljYWxseSB0aGlzIGlzIGEgc3ludGhldGljIGNsYXNzIGFkZGVkIGJ5IHRoZQorICAgICAgICogY29tcGlsZXIuIElmIHRoZSBzeW50aGV0aWMgY2xhc3MgY29udGFpbnMgbmF0aXZlIG1ldGhvZHMsIGl0IHdpbGwgZmFpbAorICAgICAgICogbGF0ZXIuCisgICAgICAgKi8KKyAgICAgIGlmIChpc1N5bnRoZXRpYyhjbGFzc05hbWUpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG1vZGlmaWNhdGlvbiB0aW1lID0gMCBlbnN1cmVzIHRoYXQgd2hhdGV2ZXIgaXMgb24gdGhlIGRpc2sgaXMgYWx3YXlzCisgICAgICAgICAqIGxvYWRlZC4KKyAgICAgICAgICovCisgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5TUEFNLCAiRW1tYVN0cmF0ZWd5OiBsb2FkaW5nICIgKyBsb29rdXBDbGFzc05hbWUKKyAgICAgICAgICAgICsgIiBmcm9tIGRpc2sgZXZlbiB0aG91Z2ggVHlwZU9yYWNsZSBkb2VzIG5vdCBrbm93IGFib3V0IGl0Iik7CisgICAgICAgIGNsYXNzQnl0ZXMgPSBlbW1hU3RyYXRlZ3kuZ2V0RW1tYUNsYXNzQnl0ZXMobnVsbCwgbG9va3VwQ2xhc3NOYW1lLCAwKTsKICAgICAgIH0KLSAgICAgIHJldHVybiBjbGFzc0J5dGVzOwogICAgIH0KLSAgICByZXR1cm4gbnVsbDsKKyAgICBpZiAoY2xhc3NCeXRlcyAhPSBudWxsICYmIGNsYXNzUmV3cml0ZXIgIT0gbnVsbCkgeworICAgICAgYnl0ZVtdIG5ld0J5dGVzID0gY2xhc3NSZXdyaXRlci5yZXdyaXRlKGNsYXNzTmFtZSwgY2xhc3NCeXRlcyk7CisgICAgICBpZiAoQ0xBU1NfRFVNUCkgeworICAgICAgICBpZiAoIUFycmF5cy5lcXVhbHMoY2xhc3NCeXRlcywgbmV3Qnl0ZXMpKSB7CisgICAgICAgICAgY2xhc3NEdW1wKGNsYXNzTmFtZSwgbmV3Qnl0ZXMpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjbGFzc0J5dGVzID0gbmV3Qnl0ZXM7CisgICAgfQorICAgIHJldHVybiBjbGFzc0J5dGVzOwogICB9CiAKICAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmluYXJ5TmFtZShKQ2xhc3NUeXBlIHR5cGUpIHsKQEAgLTc2NCw2ICs3OTMsMzAgQEAKICAgfQogCiAgIC8qKgorICAgKiBGb3Igc2FmZXR5LCB3ZSBvbmx5IGFsbG93IHN5bnRoZXRpYyBjbGFzc2VzIHRvIGJlIGxvYWRlZCB0aGlzIHdheS4gQWNjZXB0cworICAgKiBhbnkgY2xhc3NlcyB3aG9zZSBuYW1lcyBtYXRjaCAuKyRcZCsKKyAgICogPHA+CisgICAqIElmIG5ldyBjb21waWxlcnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgZm9yIHN5bnRoZXRpYyBjbGFzc2VzLCB0aGlzCisgICAqIGNvZGUgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAgICogPC9wPgorICAgKiAKKyAgICogQHBhcmFtIGNsYXNzTmFtZSBjbGFzcyB0byBiZSBsb2FkZWQgZnJvbSBkaXNrLgorICAgKiBAcmV0dXJuIHRydWUgaWZmIGNsYXNzIHNob3VsZCBiZSBsb2FkZWQgZnJvbSBkaXNrCisgICAqLworICBwcml2YXRlIGJvb2xlYW4gaXNTeW50aGV0aWMoU3RyaW5nIGNsYXNzTmFtZSkgeworICAgIGludCBpbmRleCA9IGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiJCIpOworICAgIGlmIChpbmRleCA8PSAwIHx8IGluZGV4ID09IGNsYXNzTmFtZS5sZW5ndGgoKSAtIDEpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IGluZGV4ICsgMTsgaSA8IGNsYXNzTmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICBpZiAoIUNoYXJhY3Rlci5pc0RpZ2l0KGNsYXNzTmFtZS5jaGFyQXQoaSkpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvKioKICAgICogVHJpY2t5IG9uZSwgdGhpcy4gUmVhY2hlcyBvdmVyIGludG8gdGhpcyBtb2R1bGVzJ3MgSmF2YVNjcmlwdEhvc3QgY2xhc3MgYW5kCiAgICAqIHNldHMgaXRzIHN0YXRpYyAnaG9zdCcgZmllbGQgdG8gb3VyIG1vZHVsZSBzcGFjZS4KICAgICogCmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL0RpYWxvZ0Jhc2UuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvRGlhbG9nQmFzZS5qYXZhCmluZGV4IDg2NDI0ODYuLjM1OGFiZGMgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvRGlhbG9nQmFzZS5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvRGlhbG9nQmFzZS5qYXZhCkBAIC0xNSw4ICsxNSw2IEBACiAgKi8KIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsOwogCi1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LkdXVFNoZWxsOwotCiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKQEAgLTEzNiw3ICsxMzQsNyBAQAogICAgIFNoZWxsIHBhcmVudCA9IGdldFBhcmVudCgpOwogICAgIHNoZWxsID0gbmV3IFNoZWxsKHBhcmVudCwgU1dULkRJQUxPR19UUklNIHwgU1dULkFQUExJQ0FUSU9OX01PREFMCiAgICAgICAgIHwgU1dULlJFU0laRSk7Ci0gICAgc2hlbGwuc2V0SW1hZ2VzKEdXVFNoZWxsLmdldEljb25zKCkpOworICAgIHNoZWxsLnNldEltYWdlcyhTaGVsbE1haW5XaW5kb3cuZ2V0SWNvbnMoKSk7CiAgICAgc2hlbGwuc2V0VGV4dChnZXRUZXh0KCkpOwogICAgIHNoZWxsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKIApkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9HV1RTaGVsbFNlcnZsZXRGaWx0ZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvR1dUU2hlbGxTZXJ2bGV0RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNWM2YTYuLjAwMDAwMDAKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9HV1RTaGVsbFNlcnZsZXRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KLSAqIAotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90Ci0gKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgotICogdGhlIExpY2Vuc2UgYXQKLSAqIAotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLSAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQotICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKLSAqIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbDsKLQotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5saW5rZXIuQXJ0aWZhY3RTZXQ7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQubGlua2VyLmltcGwuU3RhbmRhcmRMaW5rZXJDb250ZXh0OwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5TaGVsbE9wdGlvbnM7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmNmZy5Nb2R1bGVEZWY7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMubWFwLkFic3RyYWN0UmVmZXJlbmNlTWFwOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuUmVmZXJlbmNlSWRlbnRpdHlNYXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5GaWx0ZXI7Ci1pbXBvcnQgamF2YXguc2VydmxldC5GaWx0ZXJDaGFpbjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LkZpbHRlckNvbmZpZzsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXNwb25zZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi0vKioKLSAqIEJ1aWx0LWluIHNlcnZsZXQgZm9yIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBwdWJsaWMgcGF0aCBvZiBhIHNwZWNpZmllZAotICogbW9kdWxlLgotICovCi1wdWJsaWMgY2xhc3MgR1dUU2hlbGxTZXJ2bGV0RmlsdGVyIGltcGxlbWVudHMgRmlsdGVyIHsKLQotICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE1vZHVsZURlZj4gYXV0b2dlblNjcmlwdHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1vZHVsZURlZj4oKTsKLSAgLyoqCi0gICAqIE1haW50YWlucyBhIHBlcnNpc3RlbnQgbWFwIG9mIGxpbmtlciBjb250ZXh0cyBmb3IgZWFjaCBtb2R1bGUsIGZvcgotICAgKiBpbmNyZW1lbnRhbCByZS1saW5rIHdpdGggbmV3IGdlbmVyYXRlZCBhcnRpZmFjdHMuCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHJpdmF0ZSBmaW5hbCBNYXA8TW9kdWxlRGVmLCBTdGFuZGFyZExpbmtlckNvbnRleHQ+IGxpbmtlckNvbnRleHRzQnlNb2R1bGUgPSBuZXcgUmVmZXJlbmNlSWRlbnRpdHlNYXAoCi0gICAgICBBYnN0cmFjdFJlZmVyZW5jZU1hcC5XRUFLLCBBYnN0cmFjdFJlZmVyZW5jZU1hcC5IQVJELCB0cnVlKTsKLQotICBwcml2YXRlIFRyZWVMb2dnZXIgbG9nZ2VyOwotCi0gIHByaXZhdGUgZmluYWwgU2hlbGxPcHRpb25zIG9wdGlvbnM7Ci0KLSAgcHVibGljIEdXVFNoZWxsU2VydmxldEZpbHRlcihUcmVlTG9nZ2VyIGxvZ2dlciwgU2hlbGxPcHRpb25zIG9wdGlvbnMsCi0gICAgICBNb2R1bGVEZWZbXSBtb2R1bGVEZWZzKSB7Ci0gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgICBmb3IgKE1vZHVsZURlZiBtb2R1bGVEZWYgOiBtb2R1bGVEZWZzKSB7Ci0gICAgICBTdHJpbmcgc2NyaXB0TmFtZSA9IG1vZHVsZURlZi5nZXREZXBsb3lUbygpICsgbW9kdWxlRGVmLmdldE5hbWUoKQotICAgICAgICAgICsgIi5ub2NhY2hlLmpzIjsKLSAgICAgIGF1dG9nZW5TY3JpcHRzLnB1dChzY3JpcHROYW1lLCBtb2R1bGVEZWYpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXNwLAotICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0KLSAgICBpZiAocmVxIGluc3RhbmNlb2YgSHR0cFNlcnZsZXRSZXF1ZXN0KSB7Ci0gICAgICBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IChIdHRwU2VydmxldFJlcXVlc3QpIHJlcTsKLSAgICAgIFN0cmluZyBwYXRoSW5mbyA9IHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpOwotICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlRSQUNFLCAiUmVxdWVzdCBmb3I6ICIgKyBwYXRoSW5mbyk7Ci0gICAgICBNb2R1bGVEZWYgbW9kdWxlRGVmID0gYXV0b2dlblNjcmlwdHMuZ2V0KHBhdGhJbmZvKTsKLSAgICAgIGlmIChtb2R1bGVEZWYgIT0gbnVsbCkgewotICAgICAgICAvKgotICAgICAgICAgKiBJZiB0aGUgJz9jb21waWxlZCcgcmVxdWVzdCBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQsIGRvbid0Ci0gICAgICAgICAqIGF1dG8tZ2VuZXJhdGUuCi0gICAgICAgICAqIAotICAgICAgICAgKiBUT0RPKHNjb3R0Yik6IGRvZXMgdGhpcyBldmVuIGRvIGFueXRoaW5nIGFueW1vcmU/Ci0gICAgICAgICAqIAotICAgICAgICAgKiBUT0RPKHNjb3R0Yik6IGhvdyBkbyB3ZSBhdm9pZCBjbG9iYmVyaW5nIGEgY29tcGlsZWQgc2VsZWN0aW9uIHNjcmlwdD8KLSAgICAgICAgICovCi0gICAgICAgIGlmIChyZXEuZ2V0UGFyYW1ldGVyKCJjb21waWxlZCIpID09IG51bGwpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gUnVuIHRoZSBsaW5rZXJzIGZvciBob3N0ZWQgbW9kZS4KLSAgICAgICAgICAgIGhvc3RlZE1vZGVMaW5rKGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5UUkFDRSwgIlJlcXVlc3QgZm9yICciCi0gICAgICAgICAgICAgICAgKyBwYXRoSW5mbyArICInIG1hcHMgdG8gc2NyaXB0IGdlbmVyYXRvciBmb3IgbW9kdWxlICciCi0gICAgICAgICAgICAgICAgKyBtb2R1bGVEZWYuZ2V0TmFtZSgpICsgIiciKSwgbW9kdWxlRGVmKTsKLSAgICAgICAgICB9IGNhdGNoIChVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGUgZXJyb3Igd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuIENvbnRpbnVlLCBzaW5jZSB0aGlzCi0gICAgICAgICAgICAgKiBjb3VsZCBhY3R1YWxseSBiZSBhIHJlcXVlc3QgZm9yIGEgc3RhdGljIGZpbGUgdGhhdCBoYXBwZW5zIHRvCi0gICAgICAgICAgICAgKiBoYXZlIGFuIHVuZm9ydHVuYXRlbHkgY29uZnVzaW5nIG5hbWUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEbyBub3JtYWwgaGFuZGxpbmcsIGtub3dpbmcgdGhhdCB0aGUgbGlua2VycyBtYXkgaGF2ZSBydW4gZWFybGllciB0bwotICAgIC8vIHByb2R1Y2UgZmlsZXMgd2UgYXJlIGp1c3QgYWJvdXQgdG8gc2VydmUuCi0gICAgY2hhaW4uZG9GaWx0ZXIocmVxLCByZXNwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxlZCB3aGVuIG5ldyBnZW5lcmF0ZWQgYXJ0aWZhY3RzIGFyZSBwcm9kdWNlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGluayhUcmVlTG9nZ2VyIGxvZ2dlciwgTW9kdWxlRGVmIG1vZHVsZURlZiwKLSAgICAgIEFydGlmYWN0U2V0IG5ld0FydGlmYWN0cykgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgIFN0YW5kYXJkTGlua2VyQ29udGV4dCBjb250ZXh0ID0gbGlua2VyQ29udGV4dHNCeU1vZHVsZS5nZXQobW9kdWxlRGVmKTsKLSAgICBhc3NlcnQgY29udGV4dCAhPSBudWxsOwotCi0gICAgQXJ0aWZhY3RTZXQgYXJ0aWZhY3RzID0gY29udGV4dC5pbnZva2VSZWxpbmsobG9nZ2VyLCBuZXdBcnRpZmFjdHMpOwotICAgIGR1bXBBcnRpZmFjdHMobG9nZ2VyLCBtb2R1bGVEZWYsIGNvbnRleHQsIGFydGlmYWN0cyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZHVtcEFydGlmYWN0cyhUcmVlTG9nZ2VyIGxvZ2dlciwgTW9kdWxlRGVmIG1vZHVsZURlZiwKLSAgICAgIFN0YW5kYXJkTGlua2VyQ29udGV4dCBjb250ZXh0LCBBcnRpZmFjdFNldCBhcnRpZmFjdHMpCi0gICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0gICAgRmlsZSBvdXRwdXRQYXRoID0gbmV3IEZpbGUob3B0aW9ucy5nZXRPdXREaXIoKSwgbW9kdWxlRGVmLmdldERlcGxveVRvKCkpOwotICAgIEZpbGUgZXh0cmFQYXRoID0gbnVsbDsKLSAgICBpZiAob3B0aW9ucy5nZXRFeHRyYURpcigpICE9IG51bGwpIHsKLSAgICAgIGV4dHJhUGF0aCA9IG5ldyBGaWxlKG9wdGlvbnMuZ2V0RXh0cmFEaXIoKSwgbW9kdWxlRGVmLmdldERlcGxveVRvKCkpOwotICAgIH0KLSAgICBjb250ZXh0LnByb2R1Y2VPdXRwdXREaXJlY3RvcnkobG9nZ2VyLCBhcnRpZmFjdHMsIG91dHB1dFBhdGgsIGV4dHJhUGF0aCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaG9zdGVkTW9kZUxpbmsoVHJlZUxvZ2dlciBsb2dnZXIsIE1vZHVsZURlZiBtb2R1bGVEZWYpCi0gICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIG1vZHVsZU5hbWUgPSBtb2R1bGVEZWYuZ2V0TmFtZSgpOwotICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5UUkFDRSwgIlJ1bm5pbmcgbGlua2VycyBmb3IgbW9kdWxlICIgKyBtb2R1bGVOYW1lKTsKLQotICAgIC8vIFRPRE86IGJsb3cgYXdheSBhcnRpZmFjdHMgZnJvbSBhIHByZXZpb3VzIGxpbmsuCi0KLSAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGxpbmsuCi0gICAgU3RhbmRhcmRMaW5rZXJDb250ZXh0IGNvbnRleHQgPSBuZXcgU3RhbmRhcmRMaW5rZXJDb250ZXh0KGxvZ2dlciwKLSAgICAgICAgbW9kdWxlRGVmLCBvcHRpb25zKTsKLSAgICBBcnRpZmFjdFNldCBhcnRpZmFjdHMgPSBjb250ZXh0Lmludm9rZUxpbmsobG9nZ2VyKTsKLSAgICBkdW1wQXJ0aWZhY3RzKGxvZ2dlciwgbW9kdWxlRGVmLCBjb250ZXh0LCBhcnRpZmFjdHMpOwotCi0gICAgLy8gU2F2ZSBvZmYgYSBuZXcgYWN0aXZlIGxpbmsgc3RhdGUgKHdoaWNoIG1heSBvdmVyd3JpdGUgYW4gb2xkIG9uZSkuCi0gICAgbGlua2VyQ29udGV4dHNCeU1vZHVsZS5wdXQobW9kdWxlRGVmLCBjb250ZXh0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TaGVsbE1haW5XaW5kb3cuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvU2hlbGxNYWluV2luZG93LmphdmEKaW5kZXggMWU0NjA2OS4uMDMxY2M0NCAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TaGVsbE1haW5XaW5kb3cuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL1NoZWxsTWFpbldpbmRvdy5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LkdXVFNoZWxsOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlV0aWw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwubG9nLkFic3RyYWN0VHJlZUxvZ2dlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5sb2cuVHJlZUxvZ2dlcldpZGdldDsKQEAgLTMwLDYgKzI5LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNoZWxsRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TaGVsbExpc3RlbmVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwpAQCAtNDYsNyArNDYsNiBAQAogICBwcml2YXRlIGNsYXNzIFRvb2xiYXIgZXh0ZW5kcyBIZWFkZXJCYXJCYXNlIHsKIAogICAgIHByaXZhdGUgVG9vbEl0ZW0gYWJvdXQ7Ci0KICAgICBwcml2YXRlIFRvb2xJdGVtIGNsZWFyTG9nOwogICAgIHByaXZhdGUgVG9vbEl0ZW0gY29sbGFwc2VBbGw7CiAgICAgcHJpdmF0ZSBUb29sSXRlbSBleHBhbmRBbGw7CkBAIC02MCw5ICs1OSw5IEBACiAgICAgICBuZXdXaW5kb3cuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICAgIFN0cmluZyBzdGFydHVwVXJsID0gc2VydmVyV2luZG93Lm5vcm1hbGl6ZVVSTCgiLyIpOworICAgICAgICAgIFN0cmluZyBzdGFydHVwVXJsID0gYnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubm9ybWFsaXplVVJMKCIvIik7CiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyb3dzZXJXaWRnZXQgYncgPSBzZXJ2ZXJXaW5kb3cub3Blbk5ld0Jyb3dzZXJXaW5kb3coKTsKKyAgICAgICAgICAgIEJyb3dzZXJXaWRnZXQgYncgPSBicm93c2VyV2luZG93Q29udHJvbGxlci5vcGVuTmV3QnJvd3NlcldpbmRvdygpOwogICAgICAgICAgICAgYncuZ28oc3RhcnR1cFVybCk7CiAgICAgICAgICAgfSBjYXRjaCAoVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBnZXRMb2dnZXIoKS5sb2coVHJlZUxvZ2dlci5FUlJPUiwKQEAgLTEzNyw2ICsxMzYsMjMgQEAKICAgICB9CiAgIH0KIAorICBwcml2YXRlIHN0YXRpYyBJbWFnZVtdIGljb25zOworCisgIC8qKgorICAgKiBXZWxsLWtub3duIHBsYWNlIHRvIGdldCB0aGUgR1dUIGljb25zLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBJbWFnZVtdIGdldEljb25zKCkgeworICAgIC8vIE1ha2Ugc3VyZSBpY29uIGltYWdlcyBhcmUgbG9hZGVkLgorICAgIC8vCisgICAgaWYgKGljb25zID09IG51bGwpIHsKKyAgICAgIGljb25zID0gbmV3IEltYWdlW10geworICAgICAgICAgIExvd0xldmVsLmxvYWRJbWFnZSgiaWNvbjE2LnBuZyIpLCBMb3dMZXZlbC5sb2FkSW1hZ2UoImljb24yNC5wbmciKSwKKyAgICAgICAgICBMb3dMZXZlbC5sb2FkSW1hZ2UoImljb24zMi5wbmciKSwgTG93TGV2ZWwubG9hZEltYWdlKCJpY29uNDgucG5nIiksCisgICAgICAgICAgTG93TGV2ZWwubG9hZEltYWdlKCJpY29uMTI4LnBuZyIpfTsKKyAgICB9CisgICAgcmV0dXJuIGljb25zOworICB9CisKICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHZlcmlmeShTdHJpbmcgaGFzaCkgewogICAgIGNoYXJbXSBpbiA9IGhhc2gudG9DaGFyQXJyYXkoKTsKICAgICBjaGFyW10gb3UgPSBuZXcgY2hhcltpbi5sZW5ndGhdOwpAQCAtMTU2LDE5ICsxNzIsMTkgQEAKICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2Yob3UpOwogICB9CiAKKyAgcHJpdmF0ZSBCcm93c2VyV2luZG93Q29udHJvbGxlciBicm93c2VyV2luZG93Q29udHJvbGxlcjsKKwogICBwcml2YXRlIENvbG9yIGNvbG9yV2hpdGU7CiAKICAgcHJpdmF0ZSBUcmVlTG9nZ2VyV2lkZ2V0IGxvZ1BhbmU7CiAKLSAgcHJpdmF0ZSBHV1RTaGVsbCBzZXJ2ZXJXaW5kb3c7Ci0KICAgcHJpdmF0ZSBUb29sYmFyIHRvb2xiYXI7CiAKLSAgcHVibGljIFNoZWxsTWFpbldpbmRvdyhHV1RTaGVsbCBzZXJ2ZXJXaW5kb3csIGZpbmFsIFNoZWxsIHBhcmVudCwKLSAgICAgIGludCBzZXJ2ZXJQb3J0LCBib29sZWFuIGNoZWNrRm9yVXBkYXRlcykgeworICBwdWJsaWMgU2hlbGxNYWluV2luZG93KEJyb3dzZXJXaW5kb3dDb250cm9sbGVyIGJyb3dzZXJXaW5kb3dDb250cm9sbGVyLAorICAgICAgZmluYWwgU2hlbGwgcGFyZW50LCBpbnQgc2VydmVyUG9ydCwgYm9vbGVhbiBjaGVja0ZvclVwZGF0ZXMpIHsKICAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKIAotICAgIHRoaXMuc2VydmVyV2luZG93ID0gc2VydmVyV2luZG93OworICAgIHRoaXMuYnJvd3NlcldpbmRvd0NvbnRyb2xsZXIgPSBicm93c2VyV2luZG93Q29udHJvbGxlcjsKIAogICAgIGNvbG9yV2hpdGUgPSBuZXcgQ29sb3IobnVsbCwgMjU1LCAyNTUsIDI1NSk7CiAKQEAgLTI1Niw3ICsyNzIsNyBAQAogICB9CiAKICAgcHVibGljIHZvaWQgc2hlbGxDbG9zZWQoU2hlbGxFdmVudCBlKSB7Ci0gICAgaWYgKHNlcnZlcldpbmRvdy5oYXNCcm93c2VyV2luZG93c09wZW4oKSkgeworICAgIGlmIChicm93c2VyV2luZG93Q29udHJvbGxlci5oYXNCcm93c2VyV2luZG93c09wZW4oKSkgewogICAgICAgYm9vbGVhbiBjbG9zZVdpbmRvd3MgPSB0cnVlOwogICAgICAgaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgiZ3d0LnNoZWxsLmVuZHF1aWNrIikgPT0gbnVsbCkgewogICAgICAgICBjbG9zZVdpbmRvd3MgPSBEaWFsb2dCYXNlLmNvbmZpcm1BY3Rpb24oKFNoZWxsKSBlLndpZGdldCwKQEAgLTI2NSw3ICsyODEsNyBAQAogICAgICAgfQogCiAgICAgICBpZiAoY2xvc2VXaW5kb3dzKSB7Ci0gICAgICAgIHNlcnZlcldpbmRvdy5jbG9zZUFsbEJyb3dzZXJXaW5kb3dzKCk7CisgICAgICAgIGJyb3dzZXJXaW5kb3dDb250cm9sbGVyLmNsb3NlQWxsQnJvd3NlcldpbmRvd3MoKTsKICAgICAgICAgZS5kb2l0ID0gdHJ1ZTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGUuZG9pdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TdGFuZGFyZEdlbmVyYXRvckNvbnRleHQuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvU3RhbmRhcmRHZW5lcmF0b3JDb250ZXh0LmphdmEKaW5kZXggNjQzMzA0NS4uNmFjZTkzYyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9TdGFuZGFyZEdlbmVyYXRvckNvbnRleHQuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL1N0YW5kYXJkR2VuZXJhdG9yQ29udGV4dC5qYXZhCkBAIC0zNyw3ICszNyw2IEBACiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuSWRlbnRpdHlIYXNoTWFwOwpAQCAtMjUzLDI2ICsyNTIsMjAgQEAKICAgICAgIHBlbmRpbmdSZXNvdXJjZS5jb21taXQobG9nZ2VyKTsKIAogICAgICAgLy8gQWRkIHRoZSBHZW5lcmF0ZWRSZXNvdXJjZSB0byB0aGUgQXJ0aWZhY3RTZXQKLSAgICAgIEdlbmVyYXRlZFJlc291cmNlIHRvUmV0dXJuOwotICAgICAgdHJ5IHsKLSAgICAgICAgdG9SZXR1cm4gPSBuZXcgU3RhbmRhcmRHZW5lcmF0ZWRSZXNvdXJjZShjdXJyZW50R2VuZXJhdG9yLAotICAgICAgICAgICAgcGVuZGluZ1Jlc291cmNlLmdldFBhcnRpYWxQYXRoKCksIHBlbmRpbmdSZXNvdXJjZS5nZXRGaWxlKCkudG9VUkwoKSk7Ci0gICAgICAgIGNvbW1pdEFydGlmYWN0KGxvZ2dlciwgdG9SZXR1cm4pOworICAgICAgR2VuZXJhdGVkUmVzb3VyY2UgdG9SZXR1cm4gPSBuZXcgU3RhbmRhcmRHZW5lcmF0ZWRSZXNvdXJjZSgKKyAgICAgICAgICBjdXJyZW50R2VuZXJhdG9yLCBwZW5kaW5nUmVzb3VyY2UuZ2V0UGFydGlhbFBhdGgoKSwKKyAgICAgICAgICBwZW5kaW5nUmVzb3VyY2UuZ2V0RmlsZSgpKTsKKyAgICAgIGNvbW1pdEFydGlmYWN0KGxvZ2dlciwgdG9SZXR1cm4pOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSByZXNvdXJjZSBpcyBub3cgbm8gbG9uZ2VyIHBlbmRpbmcsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAuIElmCi0gICAgICAgICAqIHRoZSBjb21taXQgYWJvdmUgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgaXQncyBva2F5IHRvIGxlYXZlIHRoZSBlbnRyeSBpbgotICAgICAgICAgKiB0aGUgbWFwIGJlY2F1c2UgaXQgd2lsbCBiZSByZXBvcnRlZCBsYXRlciBhcyBub3QgaGF2aW5nIGJlZW4KLSAgICAgICAgICogY29tbWl0dGVkLCB3aGljaCBpcyBhY2N1cmF0ZS4KLSAgICAgICAgICovCi0gICAgICAgIHBlbmRpbmdSZXNvdXJjZXNCeU91dHB1dFN0cmVhbS5yZW1vdmUob3MpOworICAgICAgLyoKKyAgICAgICAqIFRoZSByZXNvdXJjZSBpcyBub3cgbm8gbG9uZ2VyIHBlbmRpbmcsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAuIElmCisgICAgICAgKiB0aGUgY29tbWl0IGFib3ZlIHRocm93cyBhbiBleGNlcHRpb24sIGl0J3Mgb2theSB0byBsZWF2ZSB0aGUgZW50cnkgaW4KKyAgICAgICAqIHRoZSBtYXAgYmVjYXVzZSBpdCB3aWxsIGJlIHJlcG9ydGVkIGxhdGVyIGFzIG5vdCBoYXZpbmcgYmVlbiBjb21taXR0ZWQsCisgICAgICAgKiB3aGljaCBpcyBhY2N1cmF0ZS4KKyAgICAgICAqLworICAgICAgcGVuZGluZ1Jlc291cmNlc0J5T3V0cHV0U3RyZWFtLnJlbW92ZShvcyk7CiAKLSAgICAgICAgcmV0dXJuIHRvUmV0dXJuOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB2ZXJ5IHVubGlrZWx5LCBzaW5jZSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cwotICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gY29tbWl0IGFydGlmYWN0IiwgZSk7Ci0gICAgICAgIHRocm93IG5ldyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uKCk7Ci0gICAgICB9CisgICAgICByZXR1cm4gdG9SZXR1cm47CiAgICAgfSBlbHNlIHsKICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5XQVJOLAogICAgICAgICAgICJHZW5lcmF0b3IgYXR0ZW1wdGVkIHRvIGNvbW1pdCBhbiB1bmtub3duIE91dHB1dFN0cmVhbSIsIG51bGwpOwpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9qZXR0eS9KZXR0eUxhdW5jaGVyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL2pldHR5L0pldHR5TGF1bmNoZXIuamF2YQppbmRleCA4MzIzMTFkLi41OGVkNTIxIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL2pldHR5L0pldHR5TGF1bmNoZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL2pldHR5L0pldHR5TGF1bmNoZXIuamF2YQpAQCAtMTUsMjggKzE1LDI0IEBACiAgKi8KIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLmpldHR5OwogCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuU2VydmxldENvbnRhaW5lcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5TZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVHJlZUxvZ2dlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5VbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXIuVHlwZTsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuU2VydmxldENvbnRhaW5lcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuU2VydmxldENvbnRhaW5lckxhdW5jaGVyOwogCi1pbXBvcnQgb3JnLm1vcnRiYXkuamV0dHkuSGFuZGxlcjsKIGltcG9ydCBvcmcubW9ydGJheS5qZXR0eS5TZXJ2ZXI7CiBpbXBvcnQgb3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3I7Ci1pbXBvcnQgb3JnLm1vcnRiYXkuamV0dHkuc2VydmxldC5GaWx0ZXJIb2xkZXI7CiBpbXBvcnQgb3JnLm1vcnRiYXkuamV0dHkud2ViYXBwLldlYkFwcENvbnRleHQ7CiBpbXBvcnQgb3JnLm1vcnRiYXkubG9nLkxvZzsKIGltcG9ydCBvcmcubW9ydGJheS5sb2cuTG9nZ2VyOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogCi1pbXBvcnQgamF2YXguc2VydmxldC5GaWx0ZXI7Ci0KIC8qKgogICogQSBsYXVuY2hlciBmb3IgYW4gZW1iZWRkZWQgSmV0dHkgc2VydmVyLgogICovCi1wdWJsaWMgY2xhc3MgSmV0dHlMYXVuY2hlciBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJMYXVuY2hlciB7CitwdWJsaWMgY2xhc3MgSmV0dHlMYXVuY2hlciBleHRlbmRzIFNlcnZsZXRDb250YWluZXJMYXVuY2hlciB7CiAKICAgLyoqCiAgICAqIEFuIGFkYXB0ZXIgZm9yIHRoZSBKZXR0eSBsb2dnaW5nIHN5c3RlbSB0byBHV1QncyBUcmVlTG9nZ2VyLiBUaGlzCkBAIC0xMzYsMTYgKzEzMiwxOCBAQAogICAgIH0KICAgfQogCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEpldHR5U2VydmxldENvbnRhaW5lciBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXIgeworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBKZXR0eVNlcnZsZXRDb250YWluZXIgZXh0ZW5kcyBTZXJ2bGV0Q29udGFpbmVyIHsKIAogICAgIHByaXZhdGUgZmluYWwgaW50IGFjdHVhbFBvcnQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBGaWxlIGFwcFJvb3REaXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBUcmVlTG9nZ2VyIGxvZ2dlcjsKICAgICBwcml2YXRlIGZpbmFsIFdlYkFwcENvbnRleHQgd2FjOworICAgIHByaXZhdGUgZmluYWwgU2VydmVyIHNlcnZlcjsKIAotICAgIHB1YmxpYyBKZXR0eVNlcnZsZXRDb250YWluZXIoVHJlZUxvZ2dlciBsb2dnZXIsIFdlYkFwcENvbnRleHQgd2FjLAotICAgICAgICBpbnQgYWN0dWFsUG9ydCwgRmlsZSBhcHBSb290RGlyKSB7CisgICAgcHVibGljIEpldHR5U2VydmxldENvbnRhaW5lcihUcmVlTG9nZ2VyIGxvZ2dlciwgU2VydmVyIHNlcnZlciwKKyAgICAgICAgV2ViQXBwQ29udGV4dCB3YWMsIGludCBhY3R1YWxQb3J0LCBGaWxlIGFwcFJvb3REaXIpIHsKICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyOworICAgICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7CiAgICAgICB0aGlzLndhYyA9IHdhYzsKICAgICAgIHRoaXMuYWN0dWFsUG9ydCA9IGFjdHVhbFBvcnQ7CiAgICAgICB0aGlzLmFwcFJvb3REaXIgPSBhcHBSb290RGlyOwpAQCAtMTgwLDcgKzE3OCw4IEBACiAgICAgICBUcmVlTG9nZ2VyIGJyYW5jaCA9IGxvZ2dlci5icmFuY2goVHJlZUxvZ2dlci5JTkZPLAogICAgICAgICAgICJTdG9wcGluZyBKZXR0eSBzZXJ2ZXIiKTsKICAgICAgIHRyeSB7Ci0gICAgICAgIHdhYy5zdG9wKCk7CisgICAgICAgIHNlcnZlci5zdG9wKCk7CisgICAgICAgIHNlcnZlci5zZXRTdG9wQXRTaHV0ZG93bihmYWxzZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBicmFuY2gubG9nKFRyZWVMb2dnZXIuRVJST1IsICJVbmFibGUgdG8gc3RvcCBlbWJlZGRlZCBKZXR0eSBzZXJ2ZXIiLCBlKTsKICAgICAgICAgdGhyb3cgbmV3IFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24oKTsKQEAgLTE5MCw1MCArMTg5LDUwIEBACiAgIH0KIAogICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIFNlcnZsZXRDb250YWluZXIgc3RhcnQoVHJlZUxvZ2dlciBsb2dnZXIsIGludCBwb3J0LCBGaWxlIGFwcFJvb3REaXIsCi0gICAgICBGaWx0ZXIgc2hlbGxTZXJ2bGV0RmlsdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgcHVibGljIFNlcnZsZXRDb250YWluZXIgc3RhcnQoVHJlZUxvZ2dlciBsb2dnZXIsIGludCBwb3J0LCBGaWxlIGFwcFJvb3REaXIpCisgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBjaGVja1N0YXJ0UGFyYW1zKGxvZ2dlciwgcG9ydCwgYXBwUm9vdERpcik7CiAKLSAgICAvLyBUaGUgZGFuY2Ugd2UgZG8gd2l0aCBKZXR0eSdzIGxvZ2dpbmcgc3lzdGVtLgotICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiVkVSQk9TRSIsICJ0cnVlIik7Ci0gICAgSmV0dHlUcmVlTG9nZ2VyLnNldERlZmF1bHRDb25zdHJ1Y3Rpb24obG9nZ2VyLCBUcmVlTG9nZ2VyLklORk8pOwotICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgib3JnLm1vcnRiYXkubG9nLmNsYXNzIiwgSmV0dHlUcmVlTG9nZ2VyLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgLy8gRm9yY2UgaW5pdGlhbGl6YXRpb24uCi0gICAgTG9nLmlzRGVidWdFbmFibGVkKCk7Ci0gICAgaWYgKEpldHR5VHJlZUxvZ2dlci5pc0RlZmF1bHRDb25zdHJ1Y3Rpb25SZWFkeSgpKSB7Ci0gICAgICAvLyBUaGUgbG9nIHN5c3RlbSB3YXMgYWxyZWFkeSBpbml0aWFsaXplZCBhbmQgZGlkIG5vdCB1c2Ugb3VyCi0gICAgICAvLyBuZXdseS1jb25zdHJ1Y3RlZCBsb2dnZXIsIHNldCBpdCBleHBsaWNpdGx5IG5vdy4KLSAgICAgIExvZy5zZXRMb2cobmV3IEpldHR5VHJlZUxvZ2dlcigpKTsKKyAgICAvLyBUaGUgZGFuY2Ugd2UgZG8gd2l0aCBKZXR0eSdzIGxvZ2dpbmcgc3lzdGVtIC0tIGRpc2FibGVkLCBsb2cgdG8gY29uc29sZS4KKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiVkVSQk9TRSIsICJ0cnVlIik7CisgICAgICBKZXR0eVRyZWVMb2dnZXIuc2V0RGVmYXVsdENvbnN0cnVjdGlvbihsb2dnZXIsIFRyZWVMb2dnZXIuSU5GTyk7CisgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoIm9yZy5tb3J0YmF5LmxvZy5jbGFzcyIsCisgICAgICAgICAgSmV0dHlUcmVlTG9nZ2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAvLyBGb3JjZSBpbml0aWFsaXphdGlvbi4KKyAgICAgIExvZy5pc0RlYnVnRW5hYmxlZCgpOworICAgICAgaWYgKEpldHR5VHJlZUxvZ2dlci5pc0RlZmF1bHRDb25zdHJ1Y3Rpb25SZWFkeSgpKSB7CisgICAgICAgIC8vIFRoZSBsb2cgc3lzdGVtIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCBkaWQgbm90IHVzZSBvdXIKKyAgICAgICAgLy8gbmV3bHktY29uc3RydWN0ZWQgbG9nZ2VyLCBzZXQgaXQgZXhwbGljaXRseSBub3cuCisgICAgICAgIExvZy5zZXRMb2cobmV3IEpldHR5VHJlZUxvZ2dlcigpKTsKKyAgICAgIH0KICAgICB9CiAKLSAgICBTZXJ2ZXIgc2VydmVyID0gbmV3IFNlcnZlcigpOwogICAgIFNlbGVjdENoYW5uZWxDb25uZWN0b3IgY29ubmVjdG9yID0gbmV3IFNlbGVjdENoYW5uZWxDb25uZWN0b3IoKTsKICAgICBjb25uZWN0b3Iuc2V0UG9ydChwb3J0KTsKLSAgICBjb25uZWN0b3Iuc2V0SG9zdCgiMTI3LjAuMC4xIik7Ci0gICAgLy8gRG9uJ3Qgc3RlYWwgcG9ydHMgZnJvbSBhbiBleGlzdGluZyBwcm9jLgorCisgICAgLy8gRG9uJ3Qgc2hhcmUgcG9ydHMgd2l0aCBhbiBleGlzdGluZyBwcm9jZXNzLgogICAgIGNvbm5lY3Rvci5zZXRSZXVzZUFkZHJlc3MoZmFsc2UpOwogCisgICAgLy8gTGludXgga2VlcHMgdGhlIHBvcnQgYmxvY2tlZCBhZnRlciBzaHV0ZG93biBpZiB3ZSBkb24ndCBkaXNhYmxlIHRoaXMuCisgICAgY29ubmVjdG9yLnNldFNvTGluZ2VyVGltZSgwKTsKKworICAgIFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCk7CiAgICAgc2VydmVyLmFkZENvbm5lY3Rvcihjb25uZWN0b3IpOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IHdlYiBhcHAgaW4gdGhlIHdhciBkaXJlY3RvcnkuCiAgICAgV2ViQXBwQ29udGV4dCB3YWMgPSBuZXcgV2ViQXBwQ29udGV4dChhcHBSb290RGlyLmdldEFic29sdXRlUGF0aCgpLCAiLyIpOwogCi0gICAgLy8gUHJldmVudCBmaWxlIGxvY2tpbmcgb24gd2luZG93czsgcGljayB1cCBmaWxlIGNoYW5nZXMuCisgICAgLy8gUHJldmVudCBmaWxlIGxvY2tpbmcgb24gV2luZG93czsgcGljayB1cCBmaWxlIGNoYW5nZXMuCiAgICAgd2FjLmdldEluaXRQYXJhbXMoKS5wdXQoCiAgICAgICAgICJvcmcubW9ydGJheS5qZXR0eS5zZXJ2bGV0LkRlZmF1bHQudXNlRmlsZU1hcHBlZEJ1ZmZlciIsICJmYWxzZSIpOwogCi0gICAgLy8gU2V0dXAgdGhlIHNoZWxsIHNlcnZsZXQgZmlsdGVyIHRvIGdlbmVyYXRlIG5vY2FjaGUuanMgZmlsZXMgKGFuZCBydW4KLSAgICAvLyB0aGUgaG9zdGVkIG1vZGUgbGlua2VyIHN0YWNrLgotICAgIEZpbHRlckhvbGRlciBmaWx0ZXJIb2xkZXIgPSBuZXcgRmlsdGVySG9sZGVyKCk7Ci0gICAgZmlsdGVySG9sZGVyLnNldEZpbHRlcihzaGVsbFNlcnZsZXRGaWx0ZXIpOwotICAgIHdhYy5hZGRGaWx0ZXIoZmlsdGVySG9sZGVyLCAiLyoiLCBIYW5kbGVyLkFMTCk7Ci0KICAgICBzZXJ2ZXIuc2V0SGFuZGxlcih3YWMpOwotICAgIHNlcnZlci5zZXRTdG9wQXRTaHV0ZG93bih0cnVlKTsKICAgICBzZXJ2ZXIuc3RhcnQoKTsKKyAgICBzZXJ2ZXIuc2V0U3RvcEF0U2h1dGRvd24odHJ1ZSk7CiAKLSAgICByZXR1cm4gbmV3IEpldHR5U2VydmxldENvbnRhaW5lcihsb2dnZXIsIHdhYywgY29ubmVjdG9yLmdldExvY2FsUG9ydCgpLAotICAgICAgICBhcHBSb290RGlyKTsKKyAgICByZXR1cm4gbmV3IEpldHR5U2VydmxldENvbnRhaW5lcihsb2dnZXIsIHNlcnZlciwgd2FjLAorICAgICAgICBjb25uZWN0b3IuZ2V0TG9jYWxQb3J0KCksIGFwcFJvb3REaXIpOwogICB9CiAKICAgcHJpdmF0ZSB2b2lkIGNoZWNrU3RhcnRQYXJhbXMoVHJlZUxvZ2dlciBsb2dnZXIsIGludCBwb3J0LCBGaWxlIGFwcFJvb3REaXIpIHsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlckxvZ0xldmVsLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJMb2dMZXZlbC5qYXZhCmluZGV4IGYyYmY3MTAuLmE4N2U4Y2EgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlckxvZ0xldmVsLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyTG9nTGV2ZWwuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBBcmd1bWVudCBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIHRoZSBsb2cgbGV2ZWwgZmxhZy4KICAqLwotcHVibGljIGZpbmFsIGNsYXNzIEFyZ0hhbmRsZXJMb2dMZXZlbCBleHRlbmRzIEFyZ0hhbmRsZXIgeworcHVibGljIGNsYXNzIEFyZ0hhbmRsZXJMb2dMZXZlbCBleHRlbmRzIEFyZ0hhbmRsZXIgewogCiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPUFRJT05TX1NUUklORyA9IGNvbXB1dGVPcHRpb25zU3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlck1vZHVsZU5hbWUuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlck1vZHVsZU5hbWUuamF2YQppbmRleCAzZGFiMDkyLi40YjAxMGVkIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJNb2R1bGVOYW1lLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyTW9kdWxlTmFtZS5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAgQE92ZXJyaWRlCiAgIHB1YmxpYyBib29sZWFuIGFkZEV4dHJhQXJnKFN0cmluZyBhcmcpIHsKLSAgICBvcHRpb24uc2V0TW9kdWxlTmFtZShhcmcpOworICAgIG9wdGlvbi5hZGRNb2R1bGVOYW1lKGFyZyk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyT3V0RGlyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJPdXREaXIuamF2YQppbmRleCBiZjVhNWIxLi5hMzE4NDA5IDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJPdXREaXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJPdXREaXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICB9CiAKICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgIHJldHVybiBuZXcgU3RyaW5nW10geyItb3V0IiwgU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpfTsKKyAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHtnZXRUYWcoKSwgU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpfTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlclNjcmlwdFN0eWxlLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJTY3JpcHRTdHlsZS5qYXZhCmluZGV4IDNjOWI1YzAuLmY5OGYwYzggMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlclNjcmlwdFN0eWxlLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyU2NyaXB0U3R5bGUuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICB9CiAKICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgIHJldHVybiBuZXcgU3RyaW5nW10geyItc3R5bGUiLCAib2JmdXNjYXRlIn07CisgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Z2V0VGFnKCksICJvYmZ1c2NhdGUifTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlcldhckRpci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyV2FyRGlyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiZDdjYgotLS0gL2Rldi9udWxsCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlcldhckRpci5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyRGlyOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCisvKioKKyAqIEFyZ3VtZW50IGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgdGhlIG91dHB1dCBkaXJlY3RvcnkgZmxhZy4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEFyZ0hhbmRsZXJXYXJEaXIgZXh0ZW5kcyBBcmdIYW5kbGVyRGlyIHsKKworICBwcml2YXRlIGZpbmFsIE9wdGlvbldhckRpciBvcHRpb247CisKKyAgcHVibGljIEFyZ0hhbmRsZXJXYXJEaXIoT3B0aW9uV2FyRGlyIG9wdGlvbikgeworICAgIHRoaXMub3B0aW9uID0gb3B0aW9uOworICB9CisKKyAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgeworICAgIHJldHVybiBuZXcgU3RyaW5nW10ge2dldFRhZygpLCAid2FyIn07CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgcmV0dXJuICJUaGUgd2FyIGRpcmVjdG9yeSB0byB3cml0ZSBvdXRwdXQgZmlsZXMgaW50byAoZGVmYXVsdHMgdG8gd2FyKSI7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICByZXR1cm4gIi13YXIiOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHNldERpcihGaWxlIGRpcikgeworICAgIG9wdGlvbi5zZXRXYXJEaXIoZGlyKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL0FyZ0hhbmRsZXJXb3JrRGlyT3B0aW9uYWwuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbC5qYXZhCmluZGV4IGZjOTIzZmQuLjgwYzhmMzIgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbC5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAvKioKICAqIEFyZ3VtZW50IGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgYW4gb3B0aW9uYWwgd29ya2luZyBkaXJlY3RvcnkuCiAgKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBcmdIYW5kbGVyV29ya0Rpck9wdGlvbmFsIGV4dGVuZHMgQXJnSGFuZGxlckRpciB7CitwdWJsaWMgY2xhc3MgQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbCBleHRlbmRzIEFyZ0hhbmRsZXJEaXIgewogCiAgIHByaXZhdGUgZmluYWwgT3B0aW9uV29ya0RpciBvcHRpb247CiAKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvQXJnSGFuZGxlcldvcmtEaXJSZXF1aXJlZC5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyV29ya0RpclJlcXVpcmVkLmphdmEKaW5kZXggNjQxM2YzNS4uMGY4NjY4MyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyV29ya0RpclJlcXVpcmVkLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9BcmdIYW5kbGVyV29ya0RpclJlcXVpcmVkLmphdmEKQEAgLTE1LDM3ICsxNSwyMSBAQAogICovCiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZzsKIAotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuQXJnSGFuZGxlckRpcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQogLyoqCiAgKiBBcmd1bWVudCBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIGEgcmVxdWlyZWQgd29yayBkaXJlY3RvcnkuCiAgKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBcmdIYW5kbGVyV29ya0RpclJlcXVpcmVkIGV4dGVuZHMgQXJnSGFuZGxlckRpciB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBPcHRpb25Xb3JrRGlyIG9wdGlvbjsKK3B1YmxpYyBjbGFzcyBBcmdIYW5kbGVyV29ya0RpclJlcXVpcmVkIGV4dGVuZHMgQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbCB7CiAKICAgcHVibGljIEFyZ0hhbmRsZXJXb3JrRGlyUmVxdWlyZWQoT3B0aW9uV29ya0RpciBvcHRpb24pIHsKLSAgICB0aGlzLm9wdGlvbiA9IG9wdGlvbjsKKyAgICBzdXBlcihvcHRpb24pOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewogICAgIHJldHVybiAiVGhlIGNvbXBpbGVyIHdvcmsgZGlyZWN0b3J5IChtdXN0IGJlIHdyaXRlYWJsZSkiOwogICB9CiAKLSAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgcmV0dXJuICItd29ya0RpciI7Ci0gIH0KLQogICBAT3ZlcnJpZGUKICAgcHVibGljIGJvb2xlYW4gaXNSZXF1aXJlZCgpIHsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZXREaXIoRmlsZSBkaXIpIHsKLSAgICBvcHRpb24uc2V0V29ya0RpcihkaXIpOwotICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvT3B0aW9uRXh0cmFEaXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvT3B0aW9uRXh0cmFEaXIuamF2YQppbmRleCA1ODZmNDFmLi5iMmVjYzIyIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL09wdGlvbkV4dHJhRGlyLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25FeHRyYURpci5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiAgIC8qKgogICAgKiBTZXRzIHRoZSBleHRyYSByZXNvdXJjZSBkaXJlY3RvcnkuCiAgICAqLwotICB2b2lkIHNldEV4dHJhRGlyKEZpbGUgZGlyKTsKKyAgdm9pZCBzZXRFeHRyYURpcihGaWxlIGV4dHJhRGlyKTsKIH0KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvT3B0aW9uTW9kdWxlTmFtZS5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25Nb2R1bGVOYW1lLmphdmEKaW5kZXggNjg4NDA2ZS4uNzQ5YjU2MyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25Nb2R1bGVOYW1lLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25Nb2R1bGVOYW1lLmphdmEKQEAgLTE1LDE4ICsxNSwyNSBAQAogICovCiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZzsKIAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCiAvKioKICAqIE9wdGlvbiB0byBzZXQgdGhlIG1vZHVsZSBuYW1lLgogICovCiBwdWJsaWMgaW50ZXJmYWNlIE9wdGlvbk1vZHVsZU5hbWUgewogCiAgIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgbW9kdWxlIG5hbWVzLgogICAgKi8KLSAgU3RyaW5nIGdldE1vZHVsZU5hbWUoKTsKKyAgTGlzdDxTdHJpbmc+IGdldE1vZHVsZU5hbWVzKCk7CiAKICAgLyoqCiAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgICovCi0gIHZvaWQgc2V0TW9kdWxlTmFtZShTdHJpbmcgbW9kdWxlTmFtZSk7CisgIHZvaWQgYWRkTW9kdWxlTmFtZShTdHJpbmcgbW9kdWxlTmFtZSk7CisKKyAgLyoqCisgICAqIFNldHMgdGhlIGxpc3Qgb2YgbW9kdWxlIG5hbWVzLgorICAgKi8KKyAgdm9pZCBzZXRNb2R1bGVOYW1lcyhMaXN0PFN0cmluZz4gbW9kdWxlTmFtZXMpOwogfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25PdXREaXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvT3B0aW9uT3V0RGlyLmphdmEKaW5kZXggMjViMmIxMi4uYzlmNzE0ZiAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25PdXREaXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL09wdGlvbk91dERpci5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiAgIC8qKgogICAgKiBTZXRzIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgogICAgKi8KLSAgdm9pZCBzZXRPdXREaXIoRmlsZSBkaXIpOworICB2b2lkIHNldE91dERpcihGaWxlIG91dERpcik7CiB9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvdXRpbC9hcmcvT3B0aW9uV2FyRGlyLmphdmEKc2ltaWxhcml0eSBpbmRleCA2NiUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L3NoYXJlZC9IYXNIYW5kbGVyTWFuYWdlci5qYXZhCmNvcHkgdG8gZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL2FyZy9PcHRpb25XYXJEaXIuamF2YQppbmRleCA5MDYyNThiLi4wODM5ZTk1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwvYXJnL09wdGlvbldhckRpci5qYXZhCkBAIC0xLDMyICsxLDM0IEBACi0vKg0KLSAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuDQotICogDQotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90DQotICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YNCi0gKiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUDQotICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlDQotICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXINCi0gKiB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZDsNCi0NCi0vKioNCi0gKiANCi0gKiBDaGFyYWN0ZXJpc3RpYyBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGF0IHRoZSBnaXZlbiB3aWRnZXQgZmlyZXMgZXZlbnRzIHZpYSBhDQotICoge0BsaW5rIEhhbmRsZXJNYW5hZ2VyfS4NCi0gKiANCi0gKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJNYW5hZ2VyIHsNCi0gIC8qKg0KLSAgICogR2V0cyB0aGlzIHdpZGdldCdzIGhhbmRsZXIgbWFuYWdlci4NCi0gICAqIA0KLSAgICogQHJldHVybiB0aGUgbWFuYWdlcg0KLSAgICovDQotICBIYW5kbGVyTWFuYWdlciBnZXRIYW5kbGVyTWFuYWdlcigpOw0KLX0NCisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZzsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiBPcHRpb24gdG8gc2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorICovCitwdWJsaWMgaW50ZXJmYWNlIE9wdGlvbldhckRpciB7CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIG91dHB1dCBkaXJlY3RvcnkuCisgICAqLworICBGaWxlIGdldFdhckRpcigpOworCisgIC8qKgorICAgKiBTZXRzIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorICAgKi8KKyAgdm9pZCBzZXRXYXJEaXIoRmlsZSBkaXIpOworfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi91dGlsL3htbC9SZWZsZWN0aXZlUGFyc2VyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwveG1sL1JlZmxlY3RpdmVQYXJzZXIuamF2YQppbmRleCAxYjUzNzYwLi44MWE2ZmZhIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwveG1sL1JlZmxlY3RpdmVQYXJzZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3V0aWwveG1sL1JlZmxlY3RpdmVQYXJzZXIuamF2YQpAQCAtNTEsOSArNTEsOSBAQAogCiAgICAgcHJpdmF0ZSBSZWFkZXIgcmVhZGVyOwogCi0gICAgcHJpdmF0ZSBTdGFjayBzY2hlbWFMZXZlbHMgPSBuZXcgU3RhY2soKTsKKyAgICBwcml2YXRlIFN0YWNrPFNjaGVtYT4gc2NoZW1hTGV2ZWxzID0gbmV3IFN0YWNrPFNjaGVtYT4oKTsKIAotICAgIHByaXZhdGUgU3RhY2sgYXJnU3RhY2sgPSBuZXcgU3RhY2soKTsKKyAgICBwcml2YXRlIFN0YWNrPE9iamVjdFtdPiBhcmdTdGFjayA9IG5ldyBTdGFjazxPYmplY3RbXT4oKTsKIAogICAgIHByaXZhdGUgU2NoZW1hIGRlZmF1bHRTY2hlbWE7CiAKQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgIH0KICAgICAgIC8vIEZpbmQgdGhlIHByZWNvbXB1dGVkIGhhbmRsZXIgY2xhc3MgaW5mby4KICAgICAgIC8vCi0gICAgICBDbGFzcyBzbGMgPSBzY2hlbWFMZXZlbC5nZXRDbGFzcygpOworICAgICAgQ2xhc3M8PyBleHRlbmRzIFNjaGVtYT4gc2xjID0gc2NoZW1hTGV2ZWwuZ2V0Q2xhc3MoKTsKICAgICAgIEhhbmRsZXJDbGFzc0luZm8gY2xhc3NJbmZvID0gSGFuZGxlckNsYXNzSW5mby5nZXRDbGFzc0luZm8oc2xjKTsKICAgICAgIGFzc2VydCAoY2xhc3NJbmZvICE9IG51bGwpOyAvLyB3b3VsZCd2ZSB0aHJvd24gaWYgdW5yZWdpc3RlcmVkCiAgICAgICBIYW5kbGVyTWV0aG9kIG1ldGhvZCA9IGNsYXNzSW5mby5nZXRUZXh0TWV0aG9kKCk7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAogICAgICAgLy8gRmluZCB0aGUgcHJlY29tcHV0ZWQgaGFuZGxlciBjbGFzcyBpbmZvLgogICAgICAgLy8KLSAgICAgIENsYXNzIHNsYyA9IHNjaGVtYUxldmVsLmdldENsYXNzKCk7CisgICAgICBDbGFzczw/IGV4dGVuZHMgU2NoZW1hPiBzbGMgPSBzY2hlbWFMZXZlbC5nZXRDbGFzcygpOwogICAgICAgSGFuZGxlckNsYXNzSW5mbyBjbGFzc0luZm8gPSBIYW5kbGVyQ2xhc3NJbmZvLmdldENsYXNzSW5mbyhzbGMpOwogICAgICAgYXNzZXJ0IChjbGFzc0luZm8gIT0gbnVsbCk7IC8vIHdvdWxkJ3ZlIHRocm93biBpZiB1bnJlZ2lzdGVyZWQKICAgICAgIEhhbmRsZXJNZXRob2QgbWV0aG9kID0gY2xhc3NJbmZvLmdldEVuZE1ldGhvZChlbGVtKTsKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiAgICAgICAvLyBGaW5kIHRoZSBwcmVjb21wdXRlZCBoYW5kbGVyIGNsYXNzIGluZm8uCiAgICAgICAvLwotICAgICAgQ2xhc3Mgc2xjID0gc2NoZW1hTGV2ZWwuZ2V0Q2xhc3MoKTsKKyAgICAgIENsYXNzPD8gZXh0ZW5kcyBTY2hlbWE+IHNsYyA9IHNjaGVtYUxldmVsLmdldENsYXNzKCk7CiAgICAgICBIYW5kbGVyQ2xhc3NJbmZvIGNsYXNzSW5mbyA9IEhhbmRsZXJDbGFzc0luZm8uZ2V0Q2xhc3NJbmZvKHNsYyk7CiAgICAgICBIYW5kbGVyTWV0aG9kIG1ldGhvZCA9IGNsYXNzSW5mby5nZXRTdGFydE1ldGhvZChlbGVtTmFtZSk7CiAKQEAgLTI2OCwxNSArMjY4LDE1IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBPYmplY3RbXSBnZXRDdXJyZW50QXJncygpIHsKLSAgICAgIHJldHVybiAoT2JqZWN0W10pIGFyZ1N0YWNrLnBlZWsoKTsKKyAgICAgIHJldHVybiBhcmdTdGFjay5wZWVrKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBTY2hlbWEgZ2V0TmV4dFRvVG9wU2NoZW1hTGV2ZWwoKSB7Ci0gICAgICByZXR1cm4gKFNjaGVtYSkgc2NoZW1hTGV2ZWxzLmdldChzY2hlbWFMZXZlbHMuc2l6ZSgpIC0gMik7CisgICAgICByZXR1cm4gc2NoZW1hTGV2ZWxzLmdldChzY2hlbWFMZXZlbHMuc2l6ZSgpIC0gMik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBTY2hlbWEgZ2V0VG9wU2NoZW1hTGV2ZWwoKSB7Ci0gICAgICByZXR1cm4gKFNjaGVtYSkgc2NoZW1hTGV2ZWxzLnBlZWsoKTsKKyAgICAgIHJldHVybiBzY2hlbWFMZXZlbHMucGVlaygpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwYXJzZShUcmVlTG9nZ2VyIGxvZ2dlciwgU2NoZW1hIHRvcFNjaGVtYSwgUmVhZGVyIHJlYWRlcikKQEAgLTMwMyw3ICszMDMsMTEgQEAKICAgICAgIFRocm93YWJsZSBjYXVnaHQgPSBudWxsOwogICAgICAgdHJ5IHsKICAgICAgICAgdGhpcy5yZWFkZXIgPSByZWFkZXI7Ci0gICAgICAgIFNBWFBhcnNlciBwYXJzZXIgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3U0FYUGFyc2VyKCk7CisgICAgICAgIFNBWFBhcnNlckZhY3RvcnkgZmFjdG9yeSA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgZmFjdG9yeS5zZXRGZWF0dXJlKAorICAgICAgICAgICAgImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ub252YWxpZGF0aW5nL2xvYWQtZXh0ZXJuYWwtZHRkIiwKKyAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgU0FYUGFyc2VyIHBhcnNlciA9IGZhY3RvcnkubmV3U0FYUGFyc2VyKCk7CiAgICAgICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHRoaXMucmVhZGVyKTsKICAgICAgICAgWE1MUmVhZGVyIHhtbFJlYWRlciA9IHBhcnNlci5nZXRYTUxSZWFkZXIoKTsKICAgICAgICAgeG1sUmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKHRoaXMpOwpAQCAtMzUxLDcgKzM1NSw3IEBACiAgICAgICAgIC8vCiAgICAgICAgIFNjaGVtYSBtYXliZVBhcmVudCA9IG51bGw7CiAgICAgICAgIGZvciAoaW50IGkgPSBzY2hlbWFMZXZlbHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICBtYXliZVBhcmVudCA9IChTY2hlbWEpIHNjaGVtYUxldmVscy5nZXQoaSk7CisgICAgICAgICAgbWF5YmVQYXJlbnQgPSBzY2hlbWFMZXZlbHMuZ2V0KGkpOwogICAgICAgICAgIGlmIChtYXliZVBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0zODQsMTYgKzM4OCwxNiBAQAogICAvKioKICAgICogQ2FuIHNhZmVseSByZWdpc3RlciB0aGUgc2FtZSBjbGFzcyByZWN1cnNpdmVseS4KICAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZWdpc3RlclNjaGVtYUxldmVsKENsYXNzIHNjaGVtYUxldmVsQ2xhc3MpIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU2NoZW1hTGV2ZWwoQ2xhc3M8PyBleHRlbmRzIFNjaGVtYT4gc2NoZW1hTGV2ZWxDbGFzcykgewogICAgIEhhbmRsZXJDbGFzc0luZm8ucmVnaXN0ZXJDbGFzcyhzY2hlbWFMZXZlbENsYXNzKTsKIAogICAgIC8vIFRyeSB0byByZWdpc3RlciBuZXN0ZWQgY2xhc3Nlcy4KICAgICAvLwotICAgIENsYXNzW10gbmVzdGVkID0gc2NoZW1hTGV2ZWxDbGFzcy5nZXREZWNsYXJlZENsYXNzZXMoKTsKKyAgICBDbGFzczw/PltdIG5lc3RlZCA9IHNjaGVtYUxldmVsQ2xhc3MuZ2V0RGVjbGFyZWRDbGFzc2VzKCk7CiAgICAgZm9yIChpbnQgaSA9IDAsIG4gPSBuZXN0ZWQubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICBDbGFzcyBuZXN0ZWRDbGFzcyA9IG5lc3RlZFtpXTsKKyAgICAgIENsYXNzPD8+IG5lc3RlZENsYXNzID0gbmVzdGVkW2ldOwogICAgICAgaWYgKFNjaGVtYS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKG5lc3RlZENsYXNzKSkgewotICAgICAgICByZWdpc3RlclNjaGVtYUxldmVsKG5lc3RlZENsYXNzKTsKKyAgICAgICAgcmVnaXN0ZXJTY2hlbWFMZXZlbChuZXN0ZWRDbGFzcy5hc1N1YmNsYXNzKFNjaGVtYS5jbGFzcykpOwogICAgICAgfQogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlci5qYXZhCmluZGV4IDdkY2FjZjguLjgxZjdlYTEgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVyLmphdmEKQEAgLTIwLDcgKzIwLDkgQEAKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFyZ0hhbmRsZXIgewogCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpOworICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KIAogICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFB1cnBvc2UoKTsKIApkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckRpci5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckRpci5qYXZhCmluZGV4IDk2OGU2MjIuLjUxMjNjYjkgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJEaXIuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVyRGlyLmphdmEKQEAgLTIyLDEwICsyMiw2IEBACiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBcmdIYW5kbGVyRGlyIGV4dGVuZHMgQXJnSGFuZGxlciB7CiAKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQdXJwb3NlKCk7CiAKICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUYWcoKTsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJFeHRyYS5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckV4dHJhLmphdmEKaW5kZXggZGJlMTk4NC4uNjVlNzU4NyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckV4dHJhLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckV4dHJhLmphdmEKQEAgLTIyLDEwICsyMiw2IEBACiAKICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gYWRkRXh0cmFBcmcoU3RyaW5nIGFyZyk7CiAKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUYWcoKSB7CiAgICAgcmV0dXJuIG51bGw7CiAgIH0KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJGbGFnLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVyRmxhZy5qYXZhCmluZGV4IDFjODZiMTIuLjEwZGNkYjIgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJGbGFnLmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckZsYWcuamF2YQpAQCAtMjIsMTAgKzIyLDYgQEAKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFyZ0hhbmRsZXJGbGFnIGV4dGVuZHMgQXJnSGFuZGxlciB7CiAKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQdXJwb3NlKCk7CiAKICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUYWcoKTsKZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJJbnQuamF2YSBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJJbnQuamF2YQppbmRleCBiNjljOGVkLi44OWYwNjlhIDEwMDY0NAotLS0gYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVySW50LmphdmEKKysrIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlckludC5qYXZhCkBAIC0yMCwxMCArMjAsNiBAQAogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXJnSGFuZGxlckludCBleHRlbmRzIEFyZ0hhbmRsZXIgewogCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCiAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHVycG9zZSgpOwogCiAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VGFnKCk7CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVyT3V0RGlyLmphdmEgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVyT3V0RGlyLmphdmEKaW5kZXggZWE0ZjdhOS4uMmE1N2MwYyAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlck91dERpci5qYXZhCisrKyBiL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJPdXREaXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogcHVibGljIGFic3RyYWN0IGNsYXNzIEFyZ0hhbmRsZXJPdXREaXIgZXh0ZW5kcyBBcmdIYW5kbGVyRGlyIHsKIAogICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ii1vdXQiLCBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIil9OworICAgIHJldHVybiBuZXcgU3RyaW5nW10ge2dldFRhZygpLCBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIil9OwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlclN0cmluZy5qYXZhIGIvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L3V0aWwvdG9vbHMvQXJnSGFuZGxlclN0cmluZy5qYXZhCmluZGV4IGI2ZjU2YmQuLmY5NDdlMjEgMTAwNjQ0Ci0tLSBhL2Rldi9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC91dGlsL3Rvb2xzL0FyZ0hhbmRsZXJTdHJpbmcuamF2YQorKysgYi9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvdXRpbC90b29scy9BcmdIYW5kbGVyU3RyaW5nLmphdmEKQEAgLTIwLDEwICsyMCw2IEBACiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBcmdIYW5kbGVyU3RyaW5nIGV4dGVuZHMgQXJnSGFuZGxlciB7CiAKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KICAgcHVibGljIGludCBoYW5kbGUoU3RyaW5nW10gYXJncywgaW50IHN0YXJ0SW5kZXgpIHsKICAgICBpZiAoc3RhcnRJbmRleCArIDEgPCBhcmdzLmxlbmd0aCkgewogICAgICAgaWYgKCFzZXRTdHJpbmcoYXJnc1tzdGFydEluZGV4ICsgMV0pKSB7CmRpZmYgLS1naXQgYS9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9BcmdQcm9jZXNzb3JUZXN0QmFzZS5qYXZhIGIvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvQXJnUHJvY2Vzc29yVGVzdEJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmFmZjBkCi0tLSAvZGV2L251bGwKKysrIGIvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvQXJnUHJvY2Vzc29yVGVzdEJhc2UuamF2YQpAQCAtMCwwICsxLDc2IEBACitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuVXRpbGl0eTsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKKworLyoqCisgKiBCYXNlIGNsYXNzIGZvciBhcmd1bWVudCBwcm9jZXNzb3IgdGVzdGluZy4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEFyZ1Byb2Nlc3NvclRlc3RCYXNlIGV4dGVuZHMgVGVzdENhc2UgeworCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0geworICAgIHByaXZhdGUgYm9vbGVhbiBpc0VtcHR5ID0gdHJ1ZTsKKworICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKSB7CisgICAgICByZXR1cm4gaXNFbXB0eTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgIGlzRW1wdHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgIGlzRW1wdHkgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICAvKgorICAgKiBUaGUgImNvbXB1dGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSIgZGFuY2UuCisgICAqLworICBzdGF0aWMgeworICAgIFN0cmluZyBvbGRWYWx1ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZ3d0LmRldmphciIpOworICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiZ3d0LmRldmphciIsICJnd3QtZGV2LXdpbmRvd3MuamFyIik7CisgICAgVXRpbGl0eS5nZXRJbnN0YWxsUGF0aCgpOworICAgIGlmIChvbGRWYWx1ZSA9PSBudWxsKSB7CisgICAgICBTeXN0ZW0uZ2V0UHJvcGVydGllcygpLnJlbW92ZSgiZ3d0LmRldmphciIpOworICAgIH0gZWxzZSB7CisgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoImd3dC5kZXZqYXIiLCBvbGRWYWx1ZSk7CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGFzc2VydFByb2Nlc3NGYWlsdXJlKEFyZ1Byb2Nlc3NvckJhc2UgYXJnUHJvY2Vzc29yLAorICAgICAgU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICBQcmludFN0cmVhbSBvbGRFcnJTdHJlYW0gPSBTeXN0ZW0uZXJyOworICAgIE1vY2tPdXRwdXRTdHJlYW0gbXlFcnJTdHJlYW0gPSBuZXcgTW9ja091dHB1dFN0cmVhbSgpOworICAgIHRyeSB7CisgICAgICBTeXN0ZW0uc2V0RXJyKG5ldyBQcmludFN0cmVhbShteUVyclN0cmVhbSwgdHJ1ZSkpOworICAgICAgYXNzZXJ0RmFsc2UoYXJnUHJvY2Vzc29yLnByb2Nlc3NBcmdzKGFyZ3MpKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgU3lzdGVtLnNldEVycihvbGRFcnJTdHJlYW0pOworICAgIH0KKyAgICBhc3NlcnRGYWxzZShteUVyclN0cmVhbS5pc0VtcHR5KCkpOworICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGFzc2VydFByb2Nlc3NTdWNjZXNzKEFyZ1Byb2Nlc3NvckJhc2UgYXJnUHJvY2Vzc29yLAorICAgICAgU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICBQcmludFN0cmVhbSBvbGRFcnJTdHJlYW0gPSBTeXN0ZW0uZXJyOworICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBteUVyclN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICB0cnkgeworICAgICAgU3lzdGVtLnNldEVycihuZXcgUHJpbnRTdHJlYW0obXlFcnJTdHJlYW0sIHRydWUpKTsKKyAgICAgIGlmICghYXJnUHJvY2Vzc29yLnByb2Nlc3NBcmdzKGFyZ3MpKSB7CisgICAgICAgIGZhaWwobmV3IFN0cmluZyhteUVyclN0cmVhbS50b0J5dGVBcnJheSgpKSk7CisgICAgICB9CisgICAgICBhc3NlcnRFcXVhbHMoMCwgbXlFcnJTdHJlYW0uc2l6ZSgpKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgU3lzdGVtLnNldEVycihvbGRFcnJTdHJlYW0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZXJUZXN0LmphdmEgYi9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9Db21waWxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE1NGUzCi0tLSAvZGV2L251bGwKKysrIGIvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZXJUZXN0LmphdmEKQEAgLTAsMCArMSw2OCBAQAorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5kZXY7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5Db21waWxlci5Db21waWxlck9wdGlvbnNJbXBsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5qanMuSnNPdXRwdXRPcHRpb247CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKKy8qKgorICogVGVzdCBmb3Ige0BsaW5rIENvbXBpbGVyfS4KKyAqLworcHVibGljIGNsYXNzIENvbXBpbGVyVGVzdCBleHRlbmRzIEFyZ1Byb2Nlc3NvclRlc3RCYXNlIHsKKworICBwcml2YXRlIGZpbmFsIENvbXBpbGVyLkFyZ1Byb2Nlc3NvciBhcmdQcm9jZXNzb3I7CisgIHByaXZhdGUgZmluYWwgQ29tcGlsZXJPcHRpb25zSW1wbCBvcHRpb25zID0gbmV3IENvbXBpbGVyT3B0aW9uc0ltcGwoKTsKKworICBwdWJsaWMgQ29tcGlsZXJUZXN0KCkgeworICAgIGFyZ1Byb2Nlc3NvciA9IG5ldyBDb21waWxlci5BcmdQcm9jZXNzb3Iob3B0aW9ucyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWxsVmFsaWRBcmdzKCkgeworICAgIGFzc2VydFByb2Nlc3NTdWNjZXNzKGFyZ1Byb2Nlc3NvciwgIi1sb2dMZXZlbCIsICJERUJVRyIsICItc3R5bGUiLAorICAgICAgICAiUFJFVFRZIiwgIi1lYSIsICItWGRpc2FibGVBZ2dyZXNzaXZlT3B0aW1pemF0aW9uIiwgIi1nZW4iLCAibXlHZW4iLAorICAgICAgICAiLXdhciIsICJteVdhciIsICItd29ya0RpciIsICJteVdvcmsiLCAiLWV4dHJhIiwgIm15RXh0cmEiLAorICAgICAgICAiLWxvY2FsV29ya2VycyIsICIyIiwgImMuZy5nLmguSCIsICJteS5Nb2R1bGUiKTsKKworICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgibXlHZW4iKS5nZXRBYnNvbHV0ZUZpbGUoKSwKKyAgICAgICAgb3B0aW9ucy5nZXRHZW5EaXIoKS5nZXRBYnNvbHV0ZUZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKCJteVdhciIpLCBvcHRpb25zLmdldFdhckRpcigpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IEZpbGUoIm15V29yayIpLCBvcHRpb25zLmdldFdvcmtEaXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKCJteUV4dHJhIiksIG9wdGlvbnMuZ2V0RXh0cmFEaXIoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMiwgb3B0aW9ucy5nZXRMb2NhbFdvcmtlcnMoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoVHJlZUxvZ2dlci5ERUJVRywgb3B0aW9ucy5nZXRMb2dMZXZlbCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoSnNPdXRwdXRPcHRpb24uUFJFVFRZLCBvcHRpb25zLmdldE91dHB1dCgpKTsKKyAgICBhc3NlcnRUcnVlKG9wdGlvbnMuaXNFbmFibGVBc3NlcnRpb25zKCkpOworICAgIGFzc2VydEZhbHNlKG9wdGlvbnMuaXNBZ2dyZXNzaXZlbHlPcHRpbWl6ZSgpKTsKKworICAgIGFzc2VydEVxdWFscygyLCBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkuc2l6ZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImMuZy5nLmguSCIsIG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5nZXQoMCkpOworICAgIGFzc2VydEVxdWFscygibXkuTW9kdWxlIiwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLmdldCgxKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdEFyZ3MoKSB7CisgICAgYXNzZXJ0UHJvY2Vzc1N1Y2Nlc3MoYXJnUHJvY2Vzc29yLCAiYy5nLmcuaC5IIik7CisKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgb3B0aW9ucy5nZXRHZW5EaXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKCJ3YXIiKS5nZXRBYnNvbHV0ZUZpbGUoKSwKKyAgICAgICAgb3B0aW9ucy5nZXRXYXJEaXIoKS5nZXRBYnNvbHV0ZUZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG51bGwsIG9wdGlvbnMuZ2V0V29ya0RpcigpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgb3B0aW9ucy5nZXRFeHRyYURpcigpKTsKKworICAgIGFzc2VydEVxdWFscyhUcmVlTG9nZ2VyLklORk8sIG9wdGlvbnMuZ2V0TG9nTGV2ZWwoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEpzT3V0cHV0T3B0aW9uLk9CRlVTQ0FURUQsIG9wdGlvbnMuZ2V0T3V0cHV0KCkpOworICAgIGFzc2VydEZhbHNlKG9wdGlvbnMuaXNFbmFibGVBc3NlcnRpb25zKCkpOworICAgIGFzc2VydFRydWUob3B0aW9ucy5pc0FnZ3Jlc3NpdmVseU9wdGltaXplKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDEsIG9wdGlvbnMuZ2V0TG9jYWxXb3JrZXJzKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDEsIG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5zaXplKCkpOworICAgIGFzc2VydEVxdWFscygiYy5nLmcuaC5IIiwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLmdldCgwKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yYmlkZGVuQXJncygpIHsKKyAgICBhc3NlcnRQcm9jZXNzRmFpbHVyZShhcmdQcm9jZXNzb3IsICItb3V0IiwgInd3dyIpOworICB9Cit9CmRpZmYgLS1naXQgYS9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RDb21waWxlclRlc3QuamF2YSBiL2Rldi9jb3JlL3Rlc3QvY29tL2dvb2dsZS9nd3QvZGV2L0dXVENvbXBpbGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNGUwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RDb21waWxlclRlc3QuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LkdXVENvbXBpbGVyLkdXVENvbXBpbGVyT3B0aW9uc0ltcGw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2Lmpqcy5Kc091dHB1dE9wdGlvbjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiBUZXN0IGZvciBkZXByZWNhdGVkIHtAbGluayBHV1RTaGVsbH0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCitwdWJsaWMgY2xhc3MgR1dUQ29tcGlsZXJUZXN0IGV4dGVuZHMgQXJnUHJvY2Vzc29yVGVzdEJhc2UgeworCisgIHByaXZhdGUgZmluYWwgR1dUQ29tcGlsZXIuQXJnUHJvY2Vzc29yIGFyZ1Byb2Nlc3NvcjsKKyAgcHJpdmF0ZSBmaW5hbCBHV1RDb21waWxlck9wdGlvbnNJbXBsIG9wdGlvbnMgPSBuZXcgR1dUQ29tcGlsZXJPcHRpb25zSW1wbCgpOworCisgIHB1YmxpYyBHV1RDb21waWxlclRlc3QoKSB7CisgICAgYXJnUHJvY2Vzc29yID0gbmV3IEdXVENvbXBpbGVyLkFyZ1Byb2Nlc3NvcihvcHRpb25zKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGxWYWxpZEFyZ3MoKSB7CisgICAgYXNzZXJ0UHJvY2Vzc1N1Y2Nlc3MoYXJnUHJvY2Vzc29yLCAiLWxvZ0xldmVsIiwgIkRFQlVHIiwgIi1zdHlsZSIsCisgICAgICAgICJQUkVUVFkiLCAiLWVhIiwgIi1YZGlzYWJsZUFnZ3Jlc3NpdmVPcHRpbWl6YXRpb24iLCAiLW91dCIsICJteVd3dyIsCisgICAgICAgICItZ2VuIiwgIm15R2VuIiwgImMuZy5nLmguSCIsICJteS5Nb2R1bGUiKTsKKworICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgibXlHZW4iKS5nZXRBYnNvbHV0ZUZpbGUoKSwKKyAgICAgICAgb3B0aW9ucy5nZXRHZW5EaXIoKS5nZXRBYnNvbHV0ZUZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKCJteVd3dyIpLCBvcHRpb25zLmdldE91dERpcigpKTsKKworICAgIGFzc2VydEVxdWFscyhUcmVlTG9nZ2VyLkRFQlVHLCBvcHRpb25zLmdldExvZ0xldmVsKCkpOworICAgIGFzc2VydEVxdWFscyhKc091dHB1dE9wdGlvbi5QUkVUVFksIG9wdGlvbnMuZ2V0T3V0cHV0KCkpOworICAgIGFzc2VydFRydWUob3B0aW9ucy5pc0VuYWJsZUFzc2VydGlvbnMoKSk7CisgICAgYXNzZXJ0RmFsc2Uob3B0aW9ucy5pc0FnZ3Jlc3NpdmVseU9wdGltaXplKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDIsIG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5zaXplKCkpOworICAgIGFzc2VydEVxdWFscygiYy5nLmcuaC5IIiwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLmdldCgwKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJteS5Nb2R1bGUiLCBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkuZ2V0KDEpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0QXJncygpIHsKKyAgICBhc3NlcnRQcm9jZXNzU3VjY2VzcyhhcmdQcm9jZXNzb3IsICJjLmcuZy5oLkgiKTsKKworICAgIGFzc2VydEVxdWFscyhudWxsLCBvcHRpb25zLmdldEdlbkRpcigpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IEZpbGUoIiIpLmdldEFic29sdXRlRmlsZSgpLAorICAgICAgICBvcHRpb25zLmdldE91dERpcigpLmdldEFic29sdXRlRmlsZSgpKTsKKworICAgIGFzc2VydEVxdWFscyhUcmVlTG9nZ2VyLklORk8sIG9wdGlvbnMuZ2V0TG9nTGV2ZWwoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEpzT3V0cHV0T3B0aW9uLk9CRlVTQ0FURUQsIG9wdGlvbnMuZ2V0T3V0cHV0KCkpOworICAgIGFzc2VydEZhbHNlKG9wdGlvbnMuaXNFbmFibGVBc3NlcnRpb25zKCkpOworICAgIGFzc2VydFRydWUob3B0aW9ucy5pc0FnZ3Jlc3NpdmVseU9wdGltaXplKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDEsIG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5zaXplKCkpOworICAgIGFzc2VydEVxdWFscygiYy5nLmcuaC5IIiwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLmdldCgwKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yYmlkZGVuQXJncygpIHsKKyAgICBhc3NlcnRQcm9jZXNzRmFpbHVyZShhcmdQcm9jZXNzb3IsICItbG9jYWxXb3JrZXJzIiwgIjIiKTsKKyAgICBhc3NlcnRQcm9jZXNzRmFpbHVyZShhcmdQcm9jZXNzb3IsICItZXh0cmEiLCAiZXh0cmEiKTsKKyAgICBhc3NlcnRQcm9jZXNzRmFpbHVyZShhcmdQcm9jZXNzb3IsICItd2FyIiwgIndhciIpOworICAgIGFzc2VydFByb2Nlc3NGYWlsdXJlKGFyZ1Byb2Nlc3NvciwgIi13b3JrIiwgIndvcmsiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGxUZXN0LmphdmEgYi9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9HV1RTaGVsbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjc2ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGxUZXN0LmphdmEKQEAgLTAsMCArMSw3MyBAQAorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5kZXY7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5HV1RTaGVsbC5TaGVsbE9wdGlvbnNJbXBsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5Ib3N0ZWRNb2RlVGVzdC5NeVNDTDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuampzLkpzT3V0cHV0T3B0aW9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5Ccm93c2VyV2lkZ2V0SG9zdENoZWNrZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKKy8qKgorICogVGVzdCBmb3IgZGVwcmVjYXRlZCB7QGxpbmsgR1dUU2hlbGx9LgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorcHVibGljIGNsYXNzIEdXVFNoZWxsVGVzdCBleHRlbmRzIEFyZ1Byb2Nlc3NvclRlc3RCYXNlIHsKKworICBwcml2YXRlIGZpbmFsIEdXVFNoZWxsLkFyZ1Byb2Nlc3NvciBhcmdQcm9jZXNzb3I7CisgIHByaXZhdGUgZmluYWwgU2hlbGxPcHRpb25zSW1wbCBvcHRpb25zID0gbmV3IFNoZWxsT3B0aW9uc0ltcGwoKTsKKworICBwdWJsaWMgR1dUU2hlbGxUZXN0KCkgeworICAgIGFyZ1Byb2Nlc3NvciA9IG5ldyBHV1RTaGVsbC5BcmdQcm9jZXNzb3Iob3B0aW9ucywgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGxWYWxpZEFyZ3MoKSB7CisgICAgYXNzZXJ0UHJvY2Vzc1N1Y2Nlc3MoYXJnUHJvY2Vzc29yLCAiLXBvcnQiLCAiODA4MCIsICItd2hpdGVsaXN0IiwgIndoaXRlIiwKKyAgICAgICAgIi1ibGFja2xpc3QiLCAiYmxhY2siLCAiLWxvZ0xldmVsIiwgIkRFQlVHIiwgIi1zdHlsZSIsICJQUkVUVFkiLCAiLWVhIiwKKyAgICAgICAgIi1YZGlzYWJsZUFnZ3Jlc3NpdmVPcHRpbWl6YXRpb24iLCAiLW5vc2VydmVyIiwgIi1vdXQiLCAibXlXd3ciLAorICAgICAgICAiLWdlbiIsICJteUdlbiIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgImZvbyIpOworCisgICAgYXNzZXJ0Tm90TnVsbChCcm93c2VyV2lkZ2V0SG9zdENoZWNrZXIubWF0Y2hXaGl0ZWxpc3RlZCgid2hpdGUiKSk7CisgICAgYXNzZXJ0Tm90TnVsbChCcm93c2VyV2lkZ2V0SG9zdENoZWNrZXIubWF0Y2hCbGFja2xpc3RlZCgiYmxhY2siKSk7CisKKyAgICBhc3NlcnRFcXVhbHMobmV3IEZpbGUoIm15R2VuIikuZ2V0QWJzb2x1dGVGaWxlKCksCisgICAgICAgIG9wdGlvbnMuZ2V0R2VuRGlyKCkuZ2V0QWJzb2x1dGVGaWxlKCkpOworICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgibXlXd3ciKSwgb3B0aW9ucy5nZXRPdXREaXIoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoVHJlZUxvZ2dlci5ERUJVRywgb3B0aW9ucy5nZXRMb2dMZXZlbCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoSnNPdXRwdXRPcHRpb24uUFJFVFRZLCBvcHRpb25zLmdldE91dHB1dCgpKTsKKyAgICBhc3NlcnRUcnVlKG9wdGlvbnMuaXNFbmFibGVBc3NlcnRpb25zKCkpOworICAgIGFzc2VydEZhbHNlKG9wdGlvbnMuaXNBZ2dyZXNzaXZlbHlPcHRpbWl6ZSgpKTsKKworICAgIGFzc2VydEVxdWFscyg4MDgwLCBvcHRpb25zLmdldFBvcnQoKSk7CisgICAgYXNzZXJ0VHJ1ZShvcHRpb25zLmlzTm9TZXJ2ZXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIG9wdGlvbnMuZ2V0U3RhcnR1cFVSTHMoKS5zaXplKCkpOworICAgIGFzc2VydEVxdWFscygiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIG9wdGlvbnMuZ2V0U3RhcnR1cFVSTHMoKS5nZXQoMCkpOworICAgIGFzc2VydEVxdWFscygiZm9vIiwgb3B0aW9ucy5nZXRTdGFydHVwVVJMcygpLmdldCgxKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdEFyZ3MoKSB7CisgICAgYXNzZXJ0UHJvY2Vzc1N1Y2Nlc3MoYXJnUHJvY2Vzc29yKTsKKworICAgIGFzc2VydEVxdWFscyhudWxsLCBvcHRpb25zLmdldEdlbkRpcigpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IEZpbGUoIiIpLmdldEFic29sdXRlRmlsZSgpLAorICAgICAgICBvcHRpb25zLmdldE91dERpcigpLmdldEFic29sdXRlRmlsZSgpKTsKKworICAgIGFzc2VydEVxdWFscyhUcmVlTG9nZ2VyLklORk8sIG9wdGlvbnMuZ2V0TG9nTGV2ZWwoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEpzT3V0cHV0T3B0aW9uLk9CRlVTQ0FURUQsIG9wdGlvbnMuZ2V0T3V0cHV0KCkpOworICAgIGFzc2VydEZhbHNlKG9wdGlvbnMuaXNFbmFibGVBc3NlcnRpb25zKCkpOworICAgIGFzc2VydFRydWUob3B0aW9ucy5pc0FnZ3Jlc3NpdmVseU9wdGltaXplKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDg4ODgsIG9wdGlvbnMuZ2V0UG9ydCgpKTsKKyAgICBhc3NlcnRGYWxzZShvcHRpb25zLmlzTm9TZXJ2ZXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIG9wdGlvbnMuZ2V0U3RhcnR1cFVSTHMoKS5zaXplKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcmJpZGRlbkFyZ3MoKSB7CisgICAgYXNzZXJ0UHJvY2Vzc0ZhaWx1cmUoYXJnUHJvY2Vzc29yLCAiLWxvY2FsV29ya2VycyIsICIyIik7CisgICAgYXNzZXJ0UHJvY2Vzc0ZhaWx1cmUoYXJnUHJvY2Vzc29yLCAiLWV4dHJhIiwgImV4dHJhIik7CisgICAgYXNzZXJ0UHJvY2Vzc0ZhaWx1cmUoYXJnUHJvY2Vzc29yLCAiLXdhciIsICJ3YXIiKTsKKyAgICBhc3NlcnRQcm9jZXNzRmFpbHVyZShhcmdQcm9jZXNzb3IsICItd29yayIsICJ3b3JrIik7CisgICAgYXNzZXJ0UHJvY2Vzc0ZhaWx1cmUoYXJnUHJvY2Vzc29yLCAiLXNlcnZlciIsIE15U0NMLmNsYXNzLmdldE5hbWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3Rlc3QvY29tL2dvb2dsZS9nd3QvZGV2L0hvc3RlZE1vZGVUZXN0LmphdmEgYi9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9Ib3N0ZWRNb2RlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kZXYvY29yZS90ZXN0L2NvbS9nb29nbGUvZ3d0L2Rldi9Ib3N0ZWRNb2RlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIxIEBACitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmRldjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlNlcnZsZXRDb250YWluZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQuU2VydmxldENvbnRhaW5lckxhdW5jaGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlRyZWVMb2dnZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2Lkhvc3RlZE1vZGUuSG9zdGVkTW9kZU9wdGlvbnNJbXBsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5qanMuSnNPdXRwdXRPcHRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkJyb3dzZXJXaWRnZXRIb3N0Q2hlY2tlcjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5ldC5CaW5kRXhjZXB0aW9uOworCisvKioKKyAqIFRlc3QgZm9yIHtAbGluayBIb3N0ZWRNb2RlfS4KKyAqLworcHVibGljIGNsYXNzIEhvc3RlZE1vZGVUZXN0IGV4dGVuZHMgQXJnUHJvY2Vzc29yVGVzdEJhc2UgeworCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTXlTQ0wgZXh0ZW5kcyBTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIgeworICAgIHB1YmxpYyBTZXJ2bGV0Q29udGFpbmVyIHN0YXJ0KFRyZWVMb2dnZXIgbG9nZ2VyLCBpbnQgcG9ydCwgRmlsZSBhcHBSb290RGlyKQorICAgICAgICB0aHJvd3MgQmluZEV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKKyAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgSG9zdGVkTW9kZS5BcmdQcm9jZXNzb3IgYXJnUHJvY2Vzc29yOworICBwcml2YXRlIGZpbmFsIEhvc3RlZE1vZGVPcHRpb25zSW1wbCBvcHRpb25zID0gbmV3IEhvc3RlZE1vZGVPcHRpb25zSW1wbCgpOworCisgIHB1YmxpYyBIb3N0ZWRNb2RlVGVzdCgpIHsKKyAgICBhcmdQcm9jZXNzb3IgPSBuZXcgSG9zdGVkTW9kZS5BcmdQcm9jZXNzb3Iob3B0aW9ucyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWxsVmFsaWRBcmdzKCkgeworICAgIGFzc2VydFByb2Nlc3NTdWNjZXNzKGFyZ1Byb2Nlc3NvciwgIi1wb3J0IiwgIjgwODAiLCAiLXdoaXRlbGlzdCIsICJ3aGl0ZSIsCisgICAgICAgICItYmxhY2tsaXN0IiwgImJsYWNrIiwgIi1sb2dMZXZlbCIsICJERUJVRyIsICItc3R5bGUiLCAiUFJFVFRZIiwgIi1lYSIsCisgICAgICAgICItWGRpc2FibGVBZ2dyZXNzaXZlT3B0aW1pemF0aW9uIiwgIi1ub3NlcnZlciIsICItc2VydmVyIiwKKyAgICAgICAgTXlTQ0wuY2xhc3MuZ2V0TmFtZSgpLCAiLWdlbiIsICJteUdlbiIsICItd2FyIiwgIm15V2FyIiwgIi13b3JrRGlyIiwKKyAgICAgICAgIm15V29yayIsICItZXh0cmEiLCAibXlFeHRyYSIsICItbG9jYWxXb3JrZXJzIiwgIjIiLCAiLXN0YXJ0dXBVcmwiLAorICAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsICItc3RhcnR1cFVybCIsICJmb28iLCAiYy5nLmcuaC5IIiwKKyAgICAgICAgIm15Lk1vZHVsZSIpOworCisgICAgYXNzZXJ0Tm90TnVsbChCcm93c2VyV2lkZ2V0SG9zdENoZWNrZXIubWF0Y2hXaGl0ZWxpc3RlZCgid2hpdGUiKSk7CisgICAgYXNzZXJ0Tm90TnVsbChCcm93c2VyV2lkZ2V0SG9zdENoZWNrZXIubWF0Y2hCbGFja2xpc3RlZCgiYmxhY2siKSk7CisKKyAgICBhc3NlcnRFcXVhbHMobmV3IEZpbGUoIm15R2VuIikuZ2V0QWJzb2x1dGVGaWxlKCksCisgICAgICAgIG9wdGlvbnMuZ2V0R2VuRGlyKCkuZ2V0QWJzb2x1dGVGaWxlKCkpOworICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgibXlXYXIiKSwgb3B0aW9ucy5nZXRXYXJEaXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKCJteVdvcmsiKSwgb3B0aW9ucy5nZXRXb3JrRGlyKCkpOworICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgibXlFeHRyYSIpLCBvcHRpb25zLmdldEV4dHJhRGlyKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKFRyZWVMb2dnZXIuREVCVUcsIG9wdGlvbnMuZ2V0TG9nTGV2ZWwoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEpzT3V0cHV0T3B0aW9uLlBSRVRUWSwgb3B0aW9ucy5nZXRPdXRwdXQoKSk7CisgICAgYXNzZXJ0VHJ1ZShvcHRpb25zLmlzRW5hYmxlQXNzZXJ0aW9ucygpKTsKKyAgICBhc3NlcnRGYWxzZShvcHRpb25zLmlzQWdncmVzc2l2ZWx5T3B0aW1pemUoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMiwgb3B0aW9ucy5nZXRMb2NhbFdvcmtlcnMoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoODA4MCwgb3B0aW9ucy5nZXRQb3J0KCkpOworICAgIC8vIEZhbHNlIGJlY2F1c2UgLXNlcnZlciBvdmVycmlkZXMgLW5vc2VydmVyLgorICAgIGFzc2VydEZhbHNlKG9wdGlvbnMuaXNOb1NlcnZlcigpKTsKKyAgICBhc3NlcnRTYW1lKE15U0NMLmNsYXNzLCBvcHRpb25zLmdldFNlcnZsZXRDb250YWluZXJMYXVuY2hlcigpLmdldENsYXNzKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDIsIG9wdGlvbnMuZ2V0U3RhcnR1cFVSTHMoKS5zaXplKCkpOworICAgIGFzc2VydEVxdWFscygiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIG9wdGlvbnMuZ2V0U3RhcnR1cFVSTHMoKS5nZXQoMCkpOworICAgIGFzc2VydEVxdWFscygiZm9vIiwgb3B0aW9ucy5nZXRTdGFydHVwVVJMcygpLmdldCgxKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMiwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLnNpemUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJjLmcuZy5oLkgiLCBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkuZ2V0KDApKTsKKyAgICBhc3NlcnRFcXVhbHMoIm15Lk1vZHVsZSIsIG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5nZXQoMSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vU2VydmVyKCkgeworICAgIGFzc2VydFByb2Nlc3NTdWNjZXNzKGFyZ1Byb2Nlc3NvciwgIi1ub3NlcnZlciIsICJjLmcuZy5oLkgiKTsKKworICAgIGFzc2VydFRydWUob3B0aW9ucy5pc05vU2VydmVyKCkpOworICAgIGFzc2VydE51bGwob3B0aW9ucy5nZXRTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMSwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLnNpemUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJjLmcuZy5oLkgiLCBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkuZ2V0KDApKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1NlcnZlck92ZXJyaWRlc1NlcnZlcigpIHsKKyAgICBhc3NlcnRQcm9jZXNzU3VjY2VzcyhhcmdQcm9jZXNzb3IsICItc2VydmVyIiwgTXlTQ0wuY2xhc3MuZ2V0TmFtZSgpLAorICAgICAgICAiLW5vc2VydmVyIiwgImMuZy5nLmguSCIpOworCisgICAgYXNzZXJ0VHJ1ZShvcHRpb25zLmlzTm9TZXJ2ZXIoKSk7CisgICAgYXNzZXJ0U2FtZShNeVNDTC5jbGFzcywgb3B0aW9ucy5nZXRTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIoKS5nZXRDbGFzcygpKTsKKworICAgIGFzc2VydEVxdWFscygxLCBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkuc2l6ZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImMuZy5nLmguSCIsIG9wdGlvbnMuZ2V0TW9kdWxlTmFtZXMoKS5nZXQoMCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRBcmdzKCkgeworICAgIGFzc2VydFByb2Nlc3NTdWNjZXNzKGFyZ1Byb2Nlc3NvciwgImMuZy5nLmguSCIpOworCisgICAgYXNzZXJ0RXF1YWxzKG51bGwsIG9wdGlvbnMuZ2V0R2VuRGlyKCkpOworICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgid2FyIikuZ2V0QWJzb2x1dGVGaWxlKCksCisgICAgICAgIG9wdGlvbnMuZ2V0V2FyRGlyKCkuZ2V0QWJzb2x1dGVGaWxlKCkpOworICAgIGFzc2VydEVxdWFscyhudWxsLCBvcHRpb25zLmdldFdvcmtEaXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG51bGwsIG9wdGlvbnMuZ2V0RXh0cmFEaXIoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoVHJlZUxvZ2dlci5JTkZPLCBvcHRpb25zLmdldExvZ0xldmVsKCkpOworICAgIGFzc2VydEVxdWFscyhKc091dHB1dE9wdGlvbi5PQkZVU0NBVEVELCBvcHRpb25zLmdldE91dHB1dCgpKTsKKyAgICBhc3NlcnRGYWxzZShvcHRpb25zLmlzRW5hYmxlQXNzZXJ0aW9ucygpKTsKKyAgICBhc3NlcnRUcnVlKG9wdGlvbnMuaXNBZ2dyZXNzaXZlbHlPcHRpbWl6ZSgpKTsKKworICAgIGFzc2VydEVxdWFscygxLCBvcHRpb25zLmdldExvY2FsV29ya2VycygpKTsKKworICAgIGFzc2VydEVxdWFscyg4ODg4LCBvcHRpb25zLmdldFBvcnQoKSk7CisgICAgYXNzZXJ0RmFsc2Uob3B0aW9ucy5pc05vU2VydmVyKCkpOworICAgIGFzc2VydE5vdE51bGwob3B0aW9ucy5nZXRTZXJ2bGV0Q29udGFpbmVyTGF1bmNoZXIoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMCwgb3B0aW9ucy5nZXRTdGFydHVwVVJMcygpLnNpemUoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMSwgb3B0aW9ucy5nZXRNb2R1bGVOYW1lcygpLnNpemUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJjLmcuZy5oLkgiLCBvcHRpb25zLmdldE1vZHVsZU5hbWVzKCkuZ2V0KDApKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JiaWRkZW5BcmdzKCkgeworICAgIGFzc2VydFByb2Nlc3NGYWlsdXJlKGFyZ1Byb2Nlc3NvciwgIi1vdXQiLCAid3d3Iik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2Rldi9jb3JlL3Rlc3QvY29tL2dvb2dsZS9nd3QvZGV2L2phdmFjL0JpbmFyeVR5cGVSZWZlcmVuY2VSZXN0cmljdGlvbnNDaGVja2VyVGVzdC5qYXZhIGIvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvamF2YWMvQmluYXJ5VHlwZVJlZmVyZW5jZVJlc3RyaWN0aW9uc0NoZWNrZXJUZXN0LmphdmEKaW5kZXggMTZiN2U5MC4uZTNhYjQwNSAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvamF2YWMvQmluYXJ5VHlwZVJlZmVyZW5jZVJlc3RyaWN0aW9uc0NoZWNrZXJUZXN0LmphdmEKKysrIGIvZGV2L2NvcmUvdGVzdC9jb20vZ29vZ2xlL2d3dC9kZXYvamF2YWMvQmluYXJ5VHlwZVJlZmVyZW5jZVJlc3RyaWN0aW9uc0NoZWNrZXJUZXN0LmphdmEKQEAgLTkyLDYgKzkyLDEwIEBACiAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKKyAgICBwdWJsaWMgY2hhcltdW11bXSBnZXRNaXNzaW5nVHlwZU5hbWVzKCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCiAgICAgcHVibGljIGludCBnZXRNb2RpZmllcnMoKSB7CiAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNjksNyArMTczLDggQEAKIAogICAgIFR5cGVEZWNsYXJhdGlvbiB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGNvbXBpbGF0aW9uUmVzdWx0KTsKICAgICB0eXBlRGVjbGFyYXRpb24uc2NvcGUgPSBuZXcgQ2xhc3NTY29wZShjdWQuc2NvcGUsIG51bGwpOwotICAgIHR5cGVEZWNsYXJhdGlvbi5zdGF0aWNJbml0aWFsaXplclNjb3BlID0gbmV3IE1ldGhvZFNjb3BlKHR5cGVEZWNsYXJhdGlvbi5zY29wZSwgbnVsbCwgZmFsc2UpOworICAgIHR5cGVEZWNsYXJhdGlvbi5zdGF0aWNJbml0aWFsaXplclNjb3BlID0gbmV3IE1ldGhvZFNjb3BlKAorICAgICAgICB0eXBlRGVjbGFyYXRpb24uc2NvcGUsIG51bGwsIGZhbHNlKTsKICAgICBjdWQudHlwZXMgPSBuZXcgVHlwZURlY2xhcmF0aW9uW10ge3R5cGVEZWNsYXJhdGlvbn07CiAKICAgICBCaW5hcnlUeXBlQmluZGluZyBiaW5hcnlUeXBlQmluZGluZyA9IG5ldyBCaW5hcnlUeXBlQmluZGluZyhudWxsLApAQCAtMjA1LDggKzIxMCwxMCBAQAogICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEV4cHJlc3Npb25zLmxlbmd0aCwgYmluYXJ5VHlwZVJlZmVyZW5jZVNpdGVzLnNpemUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5hcnlUeXBlUmVmZXJlbmNlU2l0ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgIEJpbmFyeVR5cGVSZWZlcmVuY2VTaXRlIGJpbmFyeVR5cGVSZWZlcmVuY2VTaXRlID0gYmluYXJ5VHlwZVJlZmVyZW5jZVNpdGVzLmdldChpKTsKLSAgICAgIGFzc2VydFNhbWUoYmluYXJ5VHlwZUJpbmRpbmcsIGJpbmFyeVR5cGVSZWZlcmVuY2VTaXRlLmdldEJpbmFyeVR5cGVCaW5kaW5nKCkpOwotICAgICAgYXNzZXJ0U2FtZShleHBlY3RlZEV4cHJlc3Npb25zW2ldLCBiaW5hcnlUeXBlUmVmZXJlbmNlU2l0ZS5nZXRFeHByZXNzaW9uKCkpOworICAgICAgYXNzZXJ0U2FtZShiaW5hcnlUeXBlQmluZGluZywKKyAgICAgICAgICBiaW5hcnlUeXBlUmVmZXJlbmNlU2l0ZS5nZXRCaW5hcnlUeXBlQmluZGluZygpKTsKKyAgICAgIGFzc2VydFNhbWUoZXhwZWN0ZWRFeHByZXNzaW9uc1tpXSwKKyAgICAgICAgICBiaW5hcnlUeXBlUmVmZXJlbmNlU2l0ZS5nZXRFeHByZXNzaW9uKCkpOwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9kZXYvbGludXgvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9tb3ovQnJvd3NlcldpZGdldE1vei5qYXZhIGIvZGV2L2xpbnV4L3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvbW96L0Jyb3dzZXJXaWRnZXRNb3ouamF2YQppbmRleCBmMGNiZThjLi5lMWY4YWVmIDEwMDY0NAotLS0gYS9kZXYvbGludXgvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9tb3ovQnJvd3NlcldpZGdldE1vei5qYXZhCisrKyBiL2Rldi9saW51eC9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL21vei9Ccm93c2VyV2lkZ2V0TW96LmphdmEKQEAgLTcwLDYgKzcwLDE3IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ2F1c2VzIGEgbGluayB0byBvY2N1ciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCisgICAgICogCisgICAgICogQHBhcmFtIG1vZHVsZU5hbWUgdGhlIG1vZHVsZSBuYW1lIHRvIGxpbmsKKyAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbW9kdWxlIGlzIHN0YWxlIGFuZCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgIHJlbG9hZGVkCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaW5pdE1vZHVsZShTdHJpbmcgbW9kdWxlTmFtZSkgeworICAgICAgcmV0dXJuIGdldEhvc3QoKS5pbml0TW9kdWxlKG1vZHVsZU5hbWUpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFVubG9hZCBvbmUgb3IgbW9yZSBtb2R1bGVzLgogICAgICAqIAogICAgICAqIEBwYXJhbSBzY3JpcHRPYmplY3Qgd2luZG93IHRvIHVubG9hZCwgMCBpZiBhbGwKZGlmZiAtLWdpdCBhL2Rldi9saW51eC9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL21vei9Mb3dMZXZlbE1vei5qYXZhIGIvZGV2L2xpbnV4L3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvbW96L0xvd0xldmVsTW96LmphdmEKaW5kZXggMTYwNmY3OC4uMmI4OWMyZSAxMDA2NDQKLS0tIGEvZGV2L2xpbnV4L3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvbW96L0xvd0xldmVsTW96LmphdmEKKysrIGIvZGV2L2xpbnV4L3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvbW96L0xvd0xldmVsTW96LmphdmEKQEAgLTc1LDYgKzc1LDggQEAKICAgICogU2FmYXJpLgogICAgKi8KICAgaW50ZXJmYWNlIEV4dGVybmFsT2JqZWN0IHsKKyAgICBib29sZWFuIGluaXRNb2R1bGUoU3RyaW5nIG1vZHVsZU5hbWUpOworCiAgICAgYm9vbGVhbiBnd3RPbkxvYWQoaW50IHNjcmlwdEdsb2JhbE9iamVjdCwgU3RyaW5nIG1vZHVsZU5hbWUsIFN0cmluZyB2ZXJzaW9uKTsKICAgfQogCmRpZmYgLS1naXQgYS9kZXYvbWFjL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvc2hlbGwvbWFjL0Jyb3dzZXJXaWRnZXRTYWYuamF2YSBiL2Rldi9tYWMvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9tYWMvQnJvd3NlcldpZGdldFNhZi5qYXZhCmluZGV4IDQzOWNhZTcuLjNkMGZlMWEgMTAwNjQ0Ci0tLSBhL2Rldi9tYWMvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9tYWMvQnJvd3NlcldpZGdldFNhZi5qYXZhCisrKyBiL2Rldi9tYWMvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9tYWMvQnJvd3NlcldpZGdldFNhZi5qYXZhCkBAIC0zOSw2ICszOSw5IEBACiAgICAgICBpZiAoImd3dG9ubG9hZCIuZXF1YWxzSWdub3JlQ2FzZShuYW1lKSkgewogICAgICAgICByZXR1cm4gTG93TGV2ZWxTYWYud3JhcERpc3BhdGNoTWV0aG9kKGpzQ29udGV4dCwgImd3dE9ubG9hZCIsCiAgICAgICAgICAgICBuZXcgR3d0T25Mb2FkKCkpOworICAgICAgfSBlbHNlIGlmICgiaW5pdG1vZHVsZSIuZXF1YWxzSWdub3JlQ2FzZShuYW1lKSkgeworICAgICAgICByZXR1cm4gTG93TGV2ZWxTYWYud3JhcERpc3BhdGNoTWV0aG9kKGpzQ29udGV4dCwgImluaXRNb2R1bGUiLAorICAgICAgICAgICAgbmV3IEluaXRNb2R1bGUoKSk7CiAgICAgICB9CiAgICAgICAvLyBOYXRpdmUgY29kZSBlYXRzIHRoZSBzYW1lIHJlZiBpdCBnYXZlIHVzLgogICAgICAgcmV0dXJuIExvd0xldmVsU2FmLmdldEpzVW5kZWZpbmVkKGpzQ29udGV4dCk7CkBAIC04OCw2ICs5MSwxNyBAQAogICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIENhdXNlcyBhIGxpbmsgdG8gb2NjdXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorICAgICAqIAorICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIHRoZSBtb2R1bGUgbmFtZSB0byBsaW5rCisgICAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIG1vZHVsZSBpcyBzdGFsZSBhbmQgc2hvdWxkIGJlCisgICAgICogICAgICAgICByZWxvYWRlZAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGluaXRNb2R1bGUoU3RyaW5nIG1vZHVsZU5hbWUpIHsKKyAgICAgIHJldHVybiBnZXRIb3N0KCkuaW5pdE1vZHVsZShtb2R1bGVOYW1lKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRGaWVsZChpbnQganNDb250ZXh0LCBTdHJpbmcgbmFtZSwgaW50IHZhbHVlKSB7CiAgICAgICB0cnkgewogICAgICAgICAvLyBUT0RPIChrbm9ydG9uKTogVGhpcyBzaG91bGQgcHJvZHVjZSBhbiBlcnJvci4gVGhlIFNldFByb3BlcnR5CkBAIC0xMjcsOCArMTQxLDggQEAKICAgICAgICAgICByZXR1cm4ganNGYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChqc2FyZ3MubGVuZ3RoIDwgMikgewotICAgICAgICAgIHJlcG9ydEluY29ycmVjdEd3dE9uTG9hZEludm9jYXRpb24oanNhcmdzLmxlbmd0aCk7CisgICAgICAgIGlmIChqc2FyZ3MubGVuZ3RoIDwgMykgeworICAgICAgICAgIHJlcG9ydEluY29ycmVjdEludm9jYXRpb24oImd3dE9uTG9hZCIsIDMsIGpzYXJncy5sZW5ndGgpOwogICAgICAgICAgIHJldHVybiBqc0ZhbHNlOwogICAgICAgICB9CiAKQEAgLTE0MSwxNiArMTU1LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSBMb3dMZXZlbFNhZi50b1N0cmluZyhqc0NvbnRleHQsIGpzYXJnc1sxXSk7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogZ3d0T25Mb2FkIG1heSBvciBtYXkgbm90IGJlIGNhbGxlZCB3aXRoIGEgdGhpcmQgYXJndW1lbnQgaW5kaWNhdGluZwotICAgICAgICAgKiB3aGljaCB2ZXJzaW9uIG9mIEdXVCB0aGUgSmF2YVNjcmlwdCBib290c3RyYXAgc2VxdWVuY2UgYXNzdW1lcyB0aGF0Ci0gICAgICAgICAqIGl0cyB0YWxraW5nIHRvLgotICAgICAgICAgKi8KLSAgICAgICAgU3RyaW5nIHZlcnNpb24gPSBudWxsOwotICAgICAgICBpZiAoanNhcmdzLmxlbmd0aCA9PSAzICYmICFMb3dMZXZlbFNhZi5pc0pzTnVsbChqc0NvbnRleHQsIGpzYXJnc1syXSkKLSAgICAgICAgICAgICYmIExvd0xldmVsU2FmLmlzSnNTdHJpbmcoanNDb250ZXh0LCBqc2FyZ3NbMl0pKSB7Ci0gICAgICAgICAgdmVyc2lvbiA9IExvd0xldmVsU2FmLnRvU3RyaW5nKGpzQ29udGV4dCwganNhcmdzWzJdKTsKKyAgICAgICAgaWYgKCFMb3dMZXZlbFNhZi5pc0pzU3RyaW5nKGpzQ29udGV4dCwganNhcmdzWzJdKSkgeworICAgICAgICAgIHJldHVybiBqc0ZhbHNlOwogICAgICAgICB9CisgICAgICAgIFN0cmluZyB2ZXJzaW9uID0gTG93TGV2ZWxTYWYudG9TdHJpbmcoanNDb250ZXh0LCBqc2FyZ3NbMl0pOwogCiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKChFeHRlcm5hbE9iamVjdCkgdGhpc09iaikuZ3d0T25Mb2FkKGpzYXJnc1swXSwKICAgICAgICAgICAgIG1vZHVsZU5hbWUsIHZlcnNpb24pOwpAQCAtMTY4LDYgKzE3Niw0NiBAQAogICAgIH0KICAgfQogCisgIHByaXZhdGUgZmluYWwgY2xhc3MgSW5pdE1vZHVsZSBpbXBsZW1lbnRzIERpc3BhdGNoTWV0aG9kIHsKKworICAgIHB1YmxpYyBpbnQgaW52b2tlKGludCBqc0NvbnRleHQsIGludCBqc3RoaXMsIGludFtdIGpzYXJncywgaW50W10gZXhjZXB0aW9uKSB7CisgICAgICBpbnQganNGYWxzZSA9IExvd0xldmVsU2FmLnRvSnNCb29sZWFuKGpzQ29udGV4dCwgZmFsc2UpOworICAgICAgTG93TGV2ZWxTYWYucHVzaEpzQ29udGV4dChqc0NvbnRleHQpOworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKCFMb3dMZXZlbFNhZi5pc0Rpc3BhdGNoT2JqZWN0KGpzQ29udGV4dCwganN0aGlzKSkgeworICAgICAgICAgIHJldHVybiBqc0ZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgT2JqZWN0IHRoaXNPYmogPSBMb3dMZXZlbFNhZi51bndyYXBEaXNwYXRjaE9iamVjdChqc0NvbnRleHQsIGpzdGhpcyk7CisgICAgICAgIGlmICghKHRoaXNPYmogaW5zdGFuY2VvZiBFeHRlcm5hbE9iamVjdCkpIHsKKyAgICAgICAgICByZXR1cm4ganNGYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChqc2FyZ3MubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHJlcG9ydEluY29ycmVjdEludm9jYXRpb24oImluaXRNb2R1bGUiLCAxLCBqc2FyZ3MubGVuZ3RoKTsKKyAgICAgICAgICByZXR1cm4ganNGYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghTG93TGV2ZWxTYWYuaXNKc1N0cmluZyhqc0NvbnRleHQsIGpzYXJnc1swXSkpIHsKKyAgICAgICAgICByZXR1cm4ganNGYWxzZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IExvd0xldmVsU2FmLnRvU3RyaW5nKGpzQ29udGV4dCwganNhcmdzWzBdKTsKKworICAgICAgICBib29sZWFuIHJlc3VsdCA9ICgoRXh0ZXJuYWxPYmplY3QpIHRoaXNPYmopLmluaXRNb2R1bGUobW9kdWxlTmFtZSk7CisgICAgICAgIC8vIE5hdGl2ZSBjb2RlIGVhdHMgdGhlIHNhbWUgcmVmIGl0IGdhdmUgdXMuCisgICAgICAgIHJldHVybiBMb3dMZXZlbFNhZi50b0pzQm9vbGVhbihqc0NvbnRleHQsIHJlc3VsdCk7CisgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICByZXR1cm4ganNGYWxzZTsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIGZvciAoaW50IGpzYXJnIDoganNhcmdzKSB7CisgICAgICAgICAgTG93TGV2ZWxTYWYuZ2NVbnByb3RlY3QoanNDb250ZXh0LCBqc2FyZyk7CisgICAgICAgIH0KKyAgICAgICAgTG93TGV2ZWxTYWYuZ2NVbnByb3RlY3QoanNDb250ZXh0LCBqc3RoaXMpOworICAgICAgICBMb3dMZXZlbFNhZi5wb3BKc0NvbnRleHQoanNDb250ZXh0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKwogICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVEUkFXX1BFUklPRCA9IDI1MDsKIAogICBzdGF0aWMgewpkaWZmIC0tZ2l0IGEvZGV2L29vcGhtL292ZXJsYXkvY29tL2dvb2dsZS9nd3QvZGV2L0dXVFNoZWxsLmphdmEgYi9kZXYvb29waG0vb3ZlcmxheS9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGwuamF2YQppbmRleCBiYWQzM2RmLi45YmQwOGE2IDEwMDY0NAotLS0gYS9kZXYvb29waG0vb3ZlcmxheS9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGwuamF2YQorKysgYi9kZXYvb29waG0vb3ZlcmxheS9jb20vZ29vZ2xlL2d3dC9kZXYvR1dUU2hlbGwuamF2YQpAQCAtMjgsMjkgKzI4LDE4IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkJyb3dzZXJMaXN0ZW5lcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuQnJvd3NlcldpZGdldDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuQnJvd3NlcldpZGdldEhvc3Q7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkJyb3dzZXJXaWRnZXRIb3N0Q2hlY2tlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwuTW9kdWxlU3BhY2VIb3N0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5Pb3BobVNlc3Npb25IYW5kbGVyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5TaGVsbE1haW5XaW5kb3c7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLlNoZWxsTW9kdWxlU3BhY2VIb3N0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5zaGVsbC5Xb3JrRGlyczsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuc2hlbGwudG9tY2F0LkVtYmVkZGVkVG9tY2F0U2VydmVyOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLlBlcmZMb2dnZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuVXRpbDsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlckRpc2FibGVBZ2dyZXNzaXZlT3B0aW1pemF0aW9uOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyRW5hYmxlQXNzZXJ0aW9uczsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlckV4dHJhRGlyOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyR2VuRGlyOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyTG9nTGV2ZWw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJPdXREaXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwuYXJnLkFyZ0hhbmRsZXJTY3JpcHRTdHlsZTsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5hcmcuQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5sb2cuQWJzdHJhY3RUcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmxvZy5QcmludFdyaXRlclRyZWVMb2dnZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyRXh0cmE7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyRmxhZzsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJTdHJpbmc7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5Ub29sQmFzZTsKIAogaW1wb3J0IGphdmEuYXd0LkN1cnNvcjsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CkBAIC03MSwxMDAgKzYwLDcgQEAKIC8qKgogICogVGhlIG1haW4gZXhlY3V0YWJsZSBjbGFzcyBmb3IgdGhlIGhvc3RlZCBtb2RlIHNoZWxsLgogICovCi1wdWJsaWMgY2xhc3MgR1dUU2hlbGwgZXh0ZW5kcyBUb29sQmFzZSB7Ci0KLSAgLyoqCi0gICAqIEhhbmRsZXMgdGhlIC1ibGFja2xpc3QgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIEFyZ0hhbmRsZXJCbGFja2xpc3QgZXh0ZW5kcyBBcmdIYW5kbGVyU3RyaW5nIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyItYmxhY2tsaXN0IiwgIiJ9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgIHJldHVybiAiUHJldmVudHMgdGhlIHVzZXIgYnJvd3NpbmcgVVJMcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcmVnZXhlcyAoY29tbWEgb3Igc3BhY2Ugc2VwYXJhdGVkKSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICByZXR1cm4gIi1ibGFja2xpc3QiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7ImJsYWNrbGlzdC1zdHJpbmcifTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIGJsYWNrbGlzdFN0cikgewotICAgICAgcmV0dXJuIEJyb3dzZXJXaWRnZXRIb3N0Q2hlY2tlci5ibGFja2xpc3RSZWdleGVzKGJsYWNrbGlzdFN0cik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIGhhbmRsZXMgdGhlIC1ub3NlcnZlciBjb21tYW5kIGxpbmUgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBBcmdIYW5kbGVyTm9TZXJ2ZXJGbGFnIGV4dGVuZHMgQXJnSGFuZGxlckZsYWcgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgIHJldHVybiAiUHJldmVudHMgdGhlIGVtYmVkZGVkIFRvbWNhdCBzZXJ2ZXIgZnJvbSBydW5uaW5nLCBldmVuIGlmIGEgcG9ydCBpcyBzcGVjaWZpZWQiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgewotICAgICAgcmV0dXJuICItbm9zZXJ2ZXIiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHNldEZsYWcoKSB7Ci0gICAgICBydW5Ub21jYXQgPSBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBIYW5kbGVzIHRoZSAtcG9ydCBjb21tYW5kIGxpbmUgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBBcmdIYW5kbGVyUG9ydCBleHRlbmRzIEFyZ0hhbmRsZXJTdHJpbmcgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ii1wb3J0IiwgIjg4ODgifTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7Ci0gICAgICByZXR1cm4gIlJ1bnMgYW4gZW1iZWRkZWQgVG9tY2F0IGluc3RhbmNlIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCAoZGVmYXVsdHMgdG8gODg4OCkiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgewotICAgICAgcmV0dXJuICItcG9ydCI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsicG9ydC1udW1iZXIgfCBcImF1dG9cIiJ9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgdmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZS5lcXVhbHMoImF1dG8iKSkgewotICAgICAgICBwb3J0ID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOwotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQSBwb3J0IG11c3QgYmUgYW4gaW50ZWdlciBvciBcImF1dG9cIiIpOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9CitwdWJsaWMgY2xhc3MgR1dUU2hlbGwgZXh0ZW5kcyBIb3N0ZWRNb2RlQmFzZSB7CiAKICAgLyoqCiAgICAqIEhhbmRsZXMgdGhlIC1wb3J0SG9zdGVkIGNvbW1hbmQgbGluZSBmbGFnLgpAQCAtMjA5LDEzICsxMDUsMjAgQEAKICAgfQogCiAgIC8qKgotICAgKiBIYW5kbGVzIHRoZSBsaXN0IG9mIHN0YXJ0dXAgdXJscyB0aGF0IGNhbiBiZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICogSGFuZGxlcyB0aGUgbGlzdCBvZiBzdGFydHVwIHVybHMgdGhhdCBjYW4gYmUgcGFzc2VkIGF0IHRoZSBlbmQgb2YgdGhlCisgICAqIGNvbW1hbmQgbGluZS4KICAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBBcmdIYW5kbGVyU3RhcnR1cFVSTHMgZXh0ZW5kcyBBcmdIYW5kbGVyRXh0cmEgeworICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFyZ0hhbmRsZXJTdGFydHVwVVJMc0V4dHJhIGV4dGVuZHMgQXJnSGFuZGxlckV4dHJhIHsKKworICAgIHByaXZhdGUgZmluYWwgT3B0aW9uU3RhcnR1cFVSTHMgb3B0aW9uczsKKworICAgIHB1YmxpYyBBcmdIYW5kbGVyU3RhcnR1cFVSTHNFeHRyYShPcHRpb25TdGFydHVwVVJMcyBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGFkZEV4dHJhQXJnKFN0cmluZyBhcmcpIHsKLSAgICAgIGFkZFN0YXJ0dXBVUkwoYXJnKTsKKyAgICAgIG9wdGlvbnMuYWRkU3RhcnR1cFVSTChhcmcpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMzEsNjIgKzEzNCw1OSBAQAogICB9CiAKICAgLyoqCi0gICAqIEhhbmRsZXMgdGhlIC13aGl0ZWxpc3QgY29tbWFuZCBsaW5lIGZsYWcuCisgICAqIFRoZSBHV1RTaGVsbCBhcmd1bWVudCBwcm9jZXNzb3IuCiAgICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgQXJnSGFuZGxlcldoaXRlbGlzdCBleHRlbmRzIEFyZ0hhbmRsZXJTdHJpbmcgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ii13aGl0ZWxpc3QiLCAiIn07CisgIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQXJnUHJvY2Vzc29yIGV4dGVuZHMgSG9zdGVkTW9kZUJhc2UuQXJnUHJvY2Vzc29yIHsKKyAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKFNoZWxsT3B0aW9uc0ltcGwgb3B0aW9ucywgYm9vbGVhbiBmb3JjZVNlcnZlciwKKyAgICAgICAgYm9vbGVhbiBub1VSTHMpIHsKKyAgICAgIHN1cGVyKG9wdGlvbnMsIGZvcmNlU2VydmVyKTsKKyAgICAgIGlmICghbm9VUkxzKSB7CisgICAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlclN0YXJ0dXBVUkxzRXh0cmEob3B0aW9ucykpOworICAgICAgfQorICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyT3V0RGlyKG9wdGlvbnMpKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7Ci0gICAgICByZXR1cm4gIkFsbG93cyB0aGUgdXNlciB0byBicm93c2UgVVJMcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcmVnZXhlcyAoY29tbWEgb3Igc3BhY2Ugc2VwYXJhdGVkKSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICByZXR1cm4gIi13aGl0ZWxpc3QiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7IndoaXRlbGlzdC1zdHJpbmcifTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIHdoaXRlbGlzdFN0cikgewotICAgICAgcmV0dXJuIEJyb3dzZXJXaWRnZXRIb3N0Q2hlY2tlci53aGl0ZWxpc3RSZWdleGVzKHdoaXRlbGlzdFN0cik7CisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgcmV0dXJuIEdXVFNoZWxsLmNsYXNzLmdldE5hbWUoKTsKICAgICB9CiAgIH0KIAogICAvKioKLSAgICogQ29uY3JldGUgY2xhc3MgdG8gaW1wbGVtZW50IGFsbCBjb21waWxlciBvcHRpb25zLgorICAgKiBDb25jcmV0ZSBjbGFzcyB0byBpbXBsZW1lbnQgYWxsIHNoZWxsIG9wdGlvbnMuCiAgICAqLwotICBzdGF0aWMgY2xhc3MgU2hlbGxPcHRpb25zSW1wbCBleHRlbmRzIEdXVENvbXBpbGVyT3B0aW9uc0ltcGwgaW1wbGVtZW50cwotICAgICAgU2hlbGxPcHRpb25zLCBXb3JrRGlycyB7CisgIHN0YXRpYyBjbGFzcyBTaGVsbE9wdGlvbnNJbXBsIGV4dGVuZHMgSG9zdGVkTW9kZUJhc2VPcHRpb25zSW1wbCBpbXBsZW1lbnRzCisgICAgICBIb3N0ZWRNb2RlQmFzZU9wdGlvbnMsIFdvcmtEaXJzLCBMZWdhY3lDb21waWxlck9wdGlvbnMgeworICAgIHByaXZhdGUgaW50IGxvY2FsV29ya2VyczsKKyAgICBwcml2YXRlIEZpbGUgb3V0RGlyOworCiAgICAgcHVibGljIEZpbGUgZ2V0Q29tcGlsZXJPdXRwdXREaXIoTW9kdWxlRGVmIG1vZHVsZURlZikgewotICAgICAgcmV0dXJuIG5ldyBGaWxlKGdldE91dERpcigpLCBtb2R1bGVEZWYuZ2V0RGVwbG95VG8oKSk7CisgICAgICByZXR1cm4gbmV3IEZpbGUoZ2V0T3V0RGlyKCksIG1vZHVsZURlZi5nZXROYW1lKCkpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0TG9jYWxXb3JrZXJzKCkgeworICAgICAgcmV0dXJuIGxvY2FsV29ya2VyczsKKyAgICB9CisKKyAgICBwdWJsaWMgRmlsZSBnZXRPdXREaXIoKSB7CisgICAgICByZXR1cm4gb3V0RGlyOwogICAgIH0KIAogICAgIHB1YmxpYyBGaWxlIGdldFNoZWxsUHVibGljR2VuRGlyKE1vZHVsZURlZiBtb2R1bGVEZWYpIHsKICAgICAgIHJldHVybiBuZXcgRmlsZShnZXRTaGVsbEJhc2VXb3JrRGlyKG1vZHVsZURlZiksICJwdWJsaWMiKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBUaGUgYmFzZSBzaGVsbCB3b3JrIGRpcmVjdG9yeS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgRmlsZSBnZXRTaGVsbEJhc2VXb3JrRGlyKE1vZHVsZURlZiBtb2R1bGVEZWYpIHsKLSAgICAgIHJldHVybiBuZXcgRmlsZShuZXcgRmlsZShnZXRXb3JrRGlyKCksIG1vZHVsZURlZi5nZXROYW1lKCkpLCAic2hlbGwiKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRmlsZSBnZXRXb3JrRGlyKCkgeworICAgICAgcmV0dXJuIG5ldyBGaWxlKGdldE91dERpcigpLCAiLmd3dC10bXAiKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBXaGVyZSBnZW5lcmF0ZWQgZmlsZXMgZ28gYnkgZGVmYXVsdCB1bnRpbCB3ZSBhcmUgc3VyZSB0aGV5IGFyZSBwdWJsaWM7Ci0gICAgICogdGhlbiB0aGV5IGFyZSBjb3BpZWQgaW50byB7QGxpbmsgI2dldFNoZWxsUHVibGljR2VuRGlyKE1vZHVsZURlZil9LgotICAgICAqLwotICAgIHByb3RlY3RlZCBGaWxlIGdldFNoZWxsUHJpdmF0ZUdlbkRpcihNb2R1bGVEZWYgbW9kdWxlRGVmKSB7Ci0gICAgICByZXR1cm4gbmV3IEZpbGUoZ2V0U2hlbGxCYXNlV29ya0Rpcihtb2R1bGVEZWYpLCAiZ2VuIik7CisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxXb3JrZXJzKGludCBsb2NhbFdvcmtlcnMpIHsKKyAgICAgIHRoaXMubG9jYWxXb3JrZXJzID0gbG9jYWxXb3JrZXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE91dERpcihGaWxlIG91dERpcikgeworICAgICAgdGhpcy5vdXREaXIgPSBvdXREaXI7CiAgICAgfQogICB9CiAKQEAgLTM0NCwxMiArMjQ0LDkgQEAKICAgICAgICAgLy8gQ3JlYXRlIGEgc2FuZGJveCBmb3IgdGhlIG1vZHVsZS4KICAgICAgICAgLy8gVE9ETyhqYXQpOiBjb25zaWRlciBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgbW9kdWxlIG9wZW4gYXQKICAgICAgICAgLy8gb25jZQotICAgICAgICBGaWxlIHNoZWxsRGlyID0gbmV3IEZpbGUob3V0RGlyLCBHV1RfU0hFTExfUEFUSCArIEZpbGUuc2VwYXJhdG9yCi0gICAgICAgICAgICArIG1vZHVsZU5hbWUpOwotCiAgICAgICAgIFR5cGVPcmFjbGUgdHlwZU9yYWNsZSA9IG1vZHVsZURlZi5nZXRUeXBlT3JhY2xlKGxvZ2dlcik7CiAgICAgICAgIFNoZWxsTW9kdWxlU3BhY2VIb3N0IGhvc3QgPSBkb0NyZWF0ZVNoZWxsTW9kdWxlU3BhY2VIb3N0KGxvZ2dlciwKLSAgICAgICAgICAgIHR5cGVPcmFjbGUsIG1vZHVsZURlZiwgZ2VuRGlyLCBzaGVsbERpcik7CisgICAgICAgICAgICB0eXBlT3JhY2xlLCBtb2R1bGVEZWYpOwogCiAgICAgICAgIGlmICh0YWIgIT0gbnVsbCkgewogICAgICAgICAgIG1vZHVsZVRhYnMucHV0KGhvc3QsIHRhYik7CkBAIC00NDUsMTAgKzM0MiwxNSBAQAogICAgICAqIHNodXRkb3duIEFXVCByZWxhdGVkIHRocmVhZHMsIHNpbmNlIHRoZSBjb250cmFjdCBmb3IgdGhlaXIgdGVybWluYXRpb24gaXMKICAgICAgKiBzdGlsbCBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuCiAgICAgICovCi0gICAgR1dUU2hlbGwgc2hlbGxNYWluID0gbmV3IEdXVFNoZWxsKCk7Ci0gICAgaWYgKHNoZWxsTWFpbi5wcm9jZXNzQXJncyhhcmdzKSkgewotICAgICAgc2hlbGxNYWluLnJ1bigpOworICAgIEdXVFNoZWxsIGd3dFNoZWxsID0gbmV3IEdXVFNoZWxsKCk7CisgICAgQXJnUHJvY2Vzc29yIGFyZ1Byb2Nlc3NvciA9IG5ldyBBcmdQcm9jZXNzb3IoZ3d0U2hlbGwub3B0aW9ucywgZmFsc2UsIGZhbHNlKTsKKyAgICBpZiAoYXJnUHJvY2Vzc29yLnByb2Nlc3NBcmdzKGFyZ3MpKSB7CisgICAgICBnd3RTaGVsbC5ydW4oKTsKKyAgICAgIC8vIEV4aXQgdy8gc3VjY2VzcyBjb2RlLgorICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgfQorICAgIC8vIEV4aXQgdy8gbm9uLXN1Y2Nlc3MgY29kZS4KKyAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgIH0KIAogICAvKioKQEAgLTQ3MCw3ICszNzIsMTIgQEAKIAogICBwcm90ZWN0ZWQgRmlsZSBvdXREaXI7CiAKLSAgcHJvdGVjdGVkIGZpbmFsIFNoZWxsT3B0aW9uc0ltcGwgb3B0aW9ucyA9IG5ldyBTaGVsbE9wdGlvbnNJbXBsKCk7CisgIC8qKgorICAgKiBIaWRpbmcgc3VwZXIgZmllbGQgYmVjYXVzZSBpdCdzIGFjdHVhbGx5IHRoZSBzYW1lIG9iamVjdCwganVzdCB3aXRoIGEKKyAgICogc3Ryb25nZXIgdHlwZS4KKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJoaWRpbmciKQorICBwcm90ZWN0ZWQgZmluYWwgU2hlbGxPcHRpb25zSW1wbCBvcHRpb25zID0gKFNoZWxsT3B0aW9uc0ltcGwpIHN1cGVyLm9wdGlvbnM7CiAKICAgLyoqCiAgICAqIENoZWF0IG9uIHRoZSBmaXJzdCBsb2FkJ3MgcmVmcmVzaCBieSBhc3N1bWluZyB0aGUgbW9kdWxlIGxvYWRlZCBieQpAQCAtNDkwLDE0ICszOTcsMTAgQEAKIAogICBwcml2YXRlIFNoZWxsTWFpbldpbmRvdyBtYWluV25kOwogCi0gIHByaXZhdGUgaW50IHBvcnQ7Ci0KICAgcHJpdmF0ZSBpbnQgcG9ydEhvc3RlZDsKIAogICBwcml2YXRlIGJvb2xlYW4gcnVuVG9tY2F0ID0gdHJ1ZTsKIAotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRlZDsKLQogICBwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiBzdGFydHVwVXJscyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogCiAgIHByaXZhdGUgSlRhYmJlZFBhbmUgdGFiczsKQEAgLTUwNiw0NyArNDA5LDYgQEAKIAogICBwcml2YXRlIFdlYlNlcnZlclBhbmVsIHdlYlNlcnZlckxvZzsKIAotICBwdWJsaWMgR1dUU2hlbGwoKSB7Ci0gICAgdGhpcyhmYWxzZSwgZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEdXVFNoZWxsKGJvb2xlYW4gZm9yY2VTZXJ2ZXIsIGJvb2xlYW4gbm9VUkxzKSB7Ci0gICAgLy8gU2V0IGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBzeXN0ZW0gcHJvcGVydGllcy4KLSAgICBCb290U3RyYXBQbGF0Zm9ybS5pbml0SG9zdGVkTW9kZSgpOwotICAgIEJvb3RTdHJhcFBsYXRmb3JtLmFwcGx5UGxhdGZvcm1IYWNrcygpOwotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKGdldEFyZ0hhbmRsZXJQb3J0KCkpOwotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKGdldEFyZ0hhbmRsZXJQb3J0SG9zdGVkKCkpOwotCi0gICAgaWYgKCFmb3JjZVNlcnZlcikgewotICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyTm9TZXJ2ZXJGbGFnKCkpOwotICAgIH0KLQotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlcldoaXRlbGlzdCgpKTsKLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJCbGFja2xpc3QoKSk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJMb2dMZXZlbChvcHRpb25zKSk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJHZW5EaXIob3B0aW9ucykpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlcldvcmtEaXJPcHRpb25hbChvcHRpb25zKSk7Ci0KLSAgICBpZiAoIW5vVVJMcykgewotICAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU3RhcnR1cFVSTHMoKSk7Ci0gICAgfQotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyRXh0cmFEaXIob3B0aW9ucykpOwotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlck91dERpcihvcHRpb25zKSk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTY3JpcHRTdHlsZShvcHRpb25zKSk7Ci0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyRW5hYmxlQXNzZXJ0aW9ucyhvcHRpb25zKSk7Ci0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyRGlzYWJsZUFnZ3Jlc3NpdmVPcHRpbWl6YXRpb24ob3B0aW9ucykpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkU3RhcnR1cFVSTChTdHJpbmcgdXJsKSB7Ci0gICAgc3RhcnR1cFVybHMuYWRkKHVybCk7Ci0gIH0KLQogICBwdWJsaWMgRmlsZSBnZXRHZW5EaXIoKSB7CiAgICAgcmV0dXJuIGdlbkRpcjsKICAgfQpAQCAtNTU5LDEwICs0MjEsNiBAQAogICAgIHJldHVybiBvdXREaXI7CiAgIH0KIAotICBwdWJsaWMgaW50IGdldFBvcnQoKSB7Ci0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLQogICBwdWJsaWMgVHJlZUxvZ2dlciBnZXRUb3BMb2dnZXIoKSB7CiAgICAgcmV0dXJuIHRvcExvZ2dlcjsKICAgfQpAQCAtNjE0LDUxICs0NzIsNiBAQAogICAgIH0KICAgfQogCi0gIHB1YmxpYyBTdHJpbmcgbm9ybWFsaXplVVJMKFN0cmluZyB1bmtub3duVXJsVGV4dCkgewotICAgIGlmICh1bmtub3duVXJsVGV4dC5pbmRleE9mKCI6IikgIT0gLTEpIHsKLSAgICAgIC8vIEFzc3VtZSBpdCdzIGEgZnVsbCB1cmwuCi0gICAgICByZXR1cm4gdW5rbm93blVybFRleHQ7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lIGl0J3MgYSB0cmFpbGluZyB1cmwgcGF0aC4KLSAgICAvLwotICAgIGlmICh1bmtub3duVXJsVGV4dC5sZW5ndGgoKSA+IDAgJiYgdW5rbm93blVybFRleHQuY2hhckF0KDApID09ICcvJykgewotICAgICAgdW5rbm93blVybFRleHQgPSB1bmtub3duVXJsVGV4dC5zdWJzdHJpbmcoMSk7Ci0gICAgfQotCi0gICAgaW50IHBydCA9IGdldFBvcnQoKTsKLSAgICBpZiAocHJ0ICE9IDgwICYmIHBydCAhPSAwKSB7Ci0gICAgICAvLyBDSEVDS1NUWUxFX09GRjogTm90IHJlYWxseSBhbiBhc3NlbWJsZWQgZXJyb3IgbWVzc2FnZSwgc28gbm8gc3BhY2UKLSAgICAgIC8vIGFmdGVyICc6Jy4KLSAgICAgIHJldHVybiAiaHR0cDovL2xvY2FsaG9zdDoiICsgcHJ0ICsgIi8iICsgdW5rbm93blVybFRleHQ7Ci0gICAgICAvLyBDSEVDS1NUWUxFX09OCi0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAiaHR0cDovL2xvY2FsaG9zdC8iICsgdW5rbm93blVybFRleHQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdXAgYWxsIHRoZSBtYWpvciBhc3BlY3RzIG9mIHJ1bm5pbmcgdGhlIHNoZWxsIGdyYXBoaWNhbGx5LCBpbmNsdWRpbmcKLSAgICogY3JlYXRpbmcgdGhlIG1haW4gd2luZG93IGFuZCBvcHRpb25hbGx5IHN0YXJ0aW5nIHRoZSBlbWJlZGRlZCBUb21jYXQKLSAgICogc2VydmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuKCkgewotICAgIHRyeSB7Ci0gICAgICBpZiAoIXN0YXJ0VXAoKSkgewotICAgICAgICAvLyBGYWlsZWQgdG8gaW5pdGlhbGl6ZS4KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBQZXJmb3JtIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBoYWNrcyB0byBpbml0aWFsaXplIHRoZSBHVUkuCi0gICAgICBCb290U3RyYXBQbGF0Zm9ybS5pbml0R3VpKCk7Ci0KLSAgICAgIC8vIFRvbWNhdCdzIHJ1bm5pbmcgbm93LCBzbyBsYXVuY2ggYnJvd3NlcnMgZm9yIHN0YXJ0dXAgdXJscyBub3cuCi0gICAgICBsYXVuY2hTdGFydHVwVXJscyhnZXRUb3BMb2dnZXIoKSk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KICAgcHVibGljIHZvaWQgc2V0Q29tcGlsZXJPcHRpb25zKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICAgdGhpcy5vcHRpb25zLmNvcHlGcm9tKG9wdGlvbnMpOwogICB9CkBAIC02NzUsMTIgKzQ4OCw5IEBACiAgICAgdGhpcy5vdXREaXIgPSBvdXREaXI7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBzZXRQb3J0KGludCBwb3J0KSB7Ci0gICAgdGhpcy5wb3J0ID0gcG9ydDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJ1blRvbWNhdChib29sZWFuIHJ1bikgewotICAgIHJ1blRvbWNhdCA9IHJ1bjsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGNvbXBpbGUoVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgfQogCiAgIC8qKgpAQCAtNjg4LDEzICs0OTgsMTkgQEAKICAgICogZGVmIHByb2dyYW1tYXRpY2FsbHkgaW4gc29tZSBjYXNlcyAodGhpcyBpcyBuZWVkZWQgZm9yIEpVbml0IHN1cHBvcnQsIGZvcgogICAgKiBleGFtcGxlKS4KICAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiAgIHByb3RlY3RlZCB2b2lkIGNvbXBpbGUoVHJlZUxvZ2dlciBsb2dnZXIsIE1vZHVsZURlZiBtb2R1bGVEZWYpCiAgICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0gICAgQ29tcGlsZXJPcHRpb25zIG5ld09wdGlvbnMgPSBuZXcgR1dUQ29tcGlsZXJPcHRpb25zSW1wbChvcHRpb25zKTsKLSAgICBuZXdPcHRpb25zLnNldE1vZHVsZU5hbWUobW9kdWxlRGVmLmdldE5hbWUoKSk7CisgICAgTGVnYWN5Q29tcGlsZXJPcHRpb25zIG5ld09wdGlvbnMgPSBuZXcgR1dUQ29tcGlsZXJPcHRpb25zSW1wbChvcHRpb25zKTsKKyAgICBuZXdPcHRpb25zLmFkZE1vZHVsZU5hbWUobW9kdWxlRGVmLmdldE5hbWUoKSk7CiAgICAgbmV3IEdXVENvbXBpbGVyKG5ld09wdGlvbnMpLnJ1bihsb2dnZXIpOwogICB9CiAKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBIb3N0ZWRNb2RlQmFzZU9wdGlvbnMgY3JlYXRlT3B0aW9ucygpIHsKKyAgICByZXR1cm4gbmV3IFNoZWxsT3B0aW9uc0ltcGwoKTsKKyAgfQorCiAgIHByb3RlY3RlZCBBcnRpZmFjdEFjY2VwdG9yIGRvQ3JlYXRlQXJ0aWZhY3RBY2NlcHRvcihmaW5hbCBNb2R1bGVEZWYgbW9kdWxlKSB7CiAgICAgcmV0dXJuIG5ldyBBcnRpZmFjdEFjY2VwdG9yKCkgewogICAgICAgcHVibGljIHZvaWQgYWNjZXB0KFRyZWVMb2dnZXIgbG9nZ2VyLCBBcnRpZmFjdFNldCBhcnRpZmFjdHMpCkBAIC03MTYsMjcgKzUzMiw2IEBACiAgIH0KIAogICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTaGVsbE1vZHVsZVNwYWNlSG9zdCAob3IgYSBkZXJpdmVkIGNsYXNzKSB1c2luZyB0aGUKLSAgICogc3BlY2lmaWVkIGNvbnN0aXR1ZW50IHBhcnRzLiBUaGlzIG1ldGhvZCBpcyBtYWRlIHRvIGJlIG92ZXJyaWRkZW4gZm9yCi0gICAqIHN1YmNsYXNzZXMgdGhhdCBuZWVkIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgU2hlbGxNb2R1bGVTcGFjZUhvc3QuCi0gICAqIAotICAgKiBAcGFyYW0gbG9nZ2VyIFRyZWVMb2dnZXIgdG8gdXNlCi0gICAqIEBwYXJhbSB0eXBlT3JhY2xlCi0gICAqIEBwYXJhbSBtb2R1bGVEZWYKLSAgICogQHBhcmFtIGdlbkRpcgotICAgKiBAcmV0dXJuIFNoZWxsTW9kdWxlU3BhY2VIb3N0IGluc3RhbmNlCi0gICAqLwotICBwcm90ZWN0ZWQgU2hlbGxNb2R1bGVTcGFjZUhvc3QgZG9DcmVhdGVTaGVsbE1vZHVsZVNwYWNlSG9zdCgKLSAgICAgIFRyZWVMb2dnZXIgbG9nZ2VyLCBUeXBlT3JhY2xlIHR5cGVPcmFjbGUsIE1vZHVsZURlZiBtb2R1bGVEZWYsCi0gICAgICBGaWxlIGdlbkRpciwgRmlsZSBzaGVsbERpcikgewotICAgIC8vIENsZWFyIG91dCB0aGUgc2hlbGwgdGVtcCBkaXJlY3RvcnkuCi0gICAgVXRpbC5yZWN1cnNpdmVEZWxldGUob3B0aW9ucy5nZXRTaGVsbEJhc2VXb3JrRGlyKG1vZHVsZURlZiksIHRydWUpOwotICAgIHJldHVybiBuZXcgU2hlbGxNb2R1bGVTcGFjZUhvc3QobG9nZ2VyLCB0eXBlT3JhY2xlLCBtb2R1bGVEZWYsCi0gICAgICAgIG9wdGlvbnMuZ2V0R2VuRGlyKCksIG9wdGlvbnMuZ2V0U2hlbGxQcml2YXRlR2VuRGlyKG1vZHVsZURlZiksCi0gICAgICAgIGRvQ3JlYXRlQXJ0aWZhY3RBY2NlcHRvcihtb2R1bGVEZWYpKTsKLSAgfQotCi0gIC8qKgogICAgKiBDYW4gYmUgb3ZlcnJpZGUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGxvZyBsZXZlbCBpbiBzdWJjbGFzc2VzLiBKVW5pdCBkb2VzCiAgICAqIHRoaXMgZm9yIGV4YW1wbGUuCiAgICAqLwpAQCAtNzUxLDExICs1NDYsMjYgQEAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCi0gIC8qKgotICAgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHRvIHNldCBhIGRlZmF1bHQgcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBBcmdIYW5kbGVyUG9ydCBnZXRBcmdIYW5kbGVyUG9ydCgpIHsKLSAgICByZXR1cm4gbmV3IEFyZ0hhbmRsZXJQb3J0KCk7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb1NodXREb3duU2VydmVyKCkgeworICAgIC8vIFN0b3AgdGhlIEhUVFAgc2VydmVyLgorICAgIC8vCisgICAgRW1iZWRkZWRUb21jYXRTZXJ2ZXIuc3RvcCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBpbnQgZG9TdGFydFVwU2VydmVyKCkgeworICAgIC8vIFRPRE8oYnJ1Y2UpOiBtYWtlIHRvbWNhdCB3b3JrIGluIHRlcm1zIG9mIHRoZSBtb2R1bGFyIGxhdW5jaGVyCisgICAgU3RyaW5nIHdoeUZhaWxlZCA9IEVtYmVkZGVkVG9tY2F0U2VydmVyLnN0YXJ0KGdldFRvcExvZ2dlcigpLCBnZXRQb3J0KCksCisgICAgICAgIG9wdGlvbnMpOworCisgICAgLy8gVE9ETyhicnVjZSk6IHRlc3QgdGhhdCB3ZSBjYW4gcmVtb3ZlIHRoaXMgb2xkIGFwcHJvYWNoIGluIGZhdm9yIG9mCisgICAgLy8gYSBiZXR0ZXIsIGxvZ2dlci1iYXNlZCBlcnJvciByZXBvcnRpbmcKKyAgICBpZiAod2h5RmFpbGVkICE9IG51bGwpIHsKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbih3aHlGYWlsZWQpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gRW1iZWRkZWRUb21jYXRTZXJ2ZXIuZ2V0UG9ydCgpOwogICB9CiAKICAgLyoqCkBAIC03NjUsMTAgKzU3NSw2IEBACiAgICAgcmV0dXJuIG5ldyBBcmdIYW5kbGVyUG9ydEhvc3RlZCgpOwogICB9CiAKLSAgcHJvdGVjdGVkIEJyb3dzZXJXaWRnZXRIb3N0IGdldEJyb3dzZXJIb3N0KCkgewotICAgIHJldHVybiBicm93c2VySG9zdDsKLSAgfQotCiAgIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVMb2dnZXIoKSB7CiAgICAgaWYgKG1haW5XbmQgIT0gbnVsbCkgewogICAgICAgdG9wTG9nZ2VyID0gbWFpblduZC5nZXRMb2dnZXIoKTsKQEAgLTc3OCw3MyArNTg0LDM5IEBACiAgICAgdG9wTG9nZ2VyLnNldE1heERldGFpbChvcHRpb25zLmdldExvZ0xldmVsKCkpOwogICB9CiAKLSAgLyoqCi0gICAqIEJ5IGRlZmF1bHQgd2Ugd2lsbCBvcGVuIHRoZSBhcHBsaWNhdGlvbiB3aW5kb3cuCi0gICAqIAotICAgKiBAcmV0dXJuIHRydWUgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gaGVhZGxlc3MgbW9kZQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNIZWFkbGVzcygpIHsKLSAgICByZXR1cm4gaGVhZGxlc3NNb2RlOworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGJvb2xlYW4gaW5pdE1vZHVsZShTdHJpbmcgbW9kdWxlTmFtZSkgeworICAgIC8qCisgICAgICogTm90IHVzZWQgaW4gbGVnYWN5IG1vZGUgZHVlIHRvIEdXVFNoZWxsU2VydmxldCBwbGF5aW5nIHRoaXMgcm9sZS4KKyAgICAgKiAKKyAgICAgKiBUT0RPOiBzb21ldGhpbmcgc21hcnRlciBoZXJlIGFuZCBhY3R1YWxseSBtYWtlIEdXVFNoZWxsU2VydmxldCBsZXNzCisgICAgICogbWFnaWM/CisgICAgICovCisgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgcHJvdGVjdGVkIHZvaWQgc2V0SGVhZGxlc3MoYm9vbGVhbiBoZWFkbGVzc01vZGUpIHsKLSAgICB0aGlzLmhlYWRsZXNzTW9kZSA9IGhlYWRsZXNzTW9kZTsKKyAgcHJvdGVjdGVkIHZvaWQgb3BlbkFwcFdpbmRvdygpIHsKKyAgICBJbWFnZUljb24gZ3d0SWNvbiA9IGxvYWRJbWFnZUljb24oImljb24yNC5wbmciKTsKKyAgICBmcmFtZSA9IG5ldyBKRnJhbWUoIkdXVCBIb3N0ZWQgTW9kZSIpOworICAgIHRhYnMgPSBuZXcgSlRhYmJlZFBhbmUoKTsKKyAgICBib29sZWFuIGNoZWNrRm9yVXBkYXRlcyA9IGRvU2hvdWxkQ2hlY2tGb3JVcGRhdGVzKCk7CisgICAgbWFpblduZCA9IG5ldyBTaGVsbE1haW5XaW5kb3codGhpcywgY2hlY2tGb3JVcGRhdGVzLCBvcHRpb25zLmdldExvZ0xldmVsKCkpOworICAgIHRhYnMuYWRkVGFiKCJIb3N0ZWQgTW9kZSIsIGd3dEljb24sIG1haW5XbmQsICJHV1QgSG9zdGVkLW1vZGUiKTsKKyAgICBpZiAocnVuVG9tY2F0KSB7CisgICAgICBJbWFnZUljb24gdG9tY2F0SWNvbiA9IGxvYWRJbWFnZUljb24oInRvbWNhdDI0LnBuZyIpOworICAgICAgd2ViU2VydmVyTG9nID0gbmV3IFdlYlNlcnZlclBhbmVsKGdldFBvcnQoKSwgb3B0aW9ucy5nZXRMb2dMZXZlbCgpKTsKKyAgICAgIHRhYnMuYWRkVGFiKCJUb21jYXQiLCB0b21jYXRJY29uLCB3ZWJTZXJ2ZXJMb2cpOworICAgIH0KKyAgICBmcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZCh0YWJzKTsKKyAgICBmcmFtZS5zZXRTaXplKDk1MCwgNzAwKTsKKyAgICBmcmFtZS5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkVYSVRfT05fQ0xPU0UpOworICAgIGZyYW1lLnNldEljb25JbWFnZShsb2FkSW1hZ2VJY29uKCJpY29uMTYucG5nIikuZ2V0SW1hZ2UoKSk7CisgICAgZnJhbWUuc2V0VmlzaWJsZSh0cnVlKTsKICAgfQogCi0gIC8qKgotICAgKiAKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNodXREb3duKCkgewotICAgIGlmICghcnVuVG9tY2F0KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3RvcCB0aGUgSFRUUCBzZXJ2ZXIuCi0gICAgLy8KLSAgICBFbWJlZGRlZFRvbWNhdFNlcnZlci5zdG9wKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdGFydFVwKCkgewotICAgIGlmIChzdGFydGVkKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTdGFydHVwIGNvZGUgaGFzIGFscmVhZHkgYmVlbiBydW4iKTsKLSAgICB9Ci0KLSAgICBzdGFydGVkID0gdHJ1ZTsKLQotICAgIC8vIENyZWF0ZSB0aGUgbWFpbiBhcHAgd2luZG93LgotICAgIC8vIFdoZW4gaXQgaXMgdXAgYW5kIHJ1bm5pbmcsIGl0IHdpbGwgc3RhcnQgdGhlIFRvbWNhdCBzZXJ2ZXIgaWYgZGVzaXJlZC4KLSAgICBpZiAoIWhlYWRsZXNzTW9kZSkgewotICAgICAgb3BlbkFwcFdpbmRvdygpOwotICAgIH0KLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGxvZ2dlci4KLSAgICBpbml0aWFsaXplTG9nZ2VyKCk7Ci0KKyAgcHJvdGVjdGVkIHZvaWQgc3RhcnRVcEhvb2soKSB7CiAgICAgLy8gQWNjZXB0IGNvbm5lY3Rpb25zIGZyb20gT09QSE0gY2xpZW50cwogICAgIHN0YXJ0T29waG1MaXN0ZW5lcigpOwotCi0gICAgaWYgKHJ1blRvbWNhdCkgewotICAgICAgLy8gU3RhcnQgdGhlIEhUVFAgc2VydmVyLgotICAgICAgLy8gVXNlIGEgbmV3IHRocmVhZCBzbyB0aGF0IGxvZ2dpbmcgdGhhdCBvY2N1cnMgZHVyaW5nIHN0YXJ0dXAgaXMKLSAgICAgIC8vIGRpc3BsYXllZCBpbW1lZGlhdGVseS4KLSAgICAgIC8vCi0gICAgICBmaW5hbCBpbnQgc2VydmVyUG9ydCA9IGdldFBvcnQoKTsKLQotICAgICAgUGVyZkxvZ2dlci5zdGFydCgiR1dUU2hlbGwuc3RhcnR1cCAoVG9tY2F0IGxhdW5jaCkiKTsKLSAgICAgIFN0cmluZyB3aHlGYWlsZWQgPSBFbWJlZGRlZFRvbWNhdFNlcnZlci5zdGFydChoZWFkbGVzc01vZGUKLSAgICAgICAgICA/IGdldFRvcExvZ2dlcigpIDogd2ViU2VydmVyTG9nLmdldExvZ2dlcigpLCBzZXJ2ZXJQb3J0LCBvcHRpb25zKTsKLSAgICAgIFBlcmZMb2dnZXIuZW5kKCk7Ci0KLSAgICAgIGlmICh3aHlGYWlsZWQgIT0gbnVsbCkgewotICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4od2h5RmFpbGVkKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICAvLyBSZWNvcmQgd2hhdCBwb3J0IFRvbWNhdCBpcyBhY3R1YWxseSBydW5uaW5nIG9uLgotICAgICAgcG9ydCA9IEVtYmVkZGVkVG9tY2F0U2VydmVyLmdldFBvcnQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQpAQCAtODg5LDI1ICs2NjEsNiBAQAogICAgIC8vIGxhdW5jaEV4dGVybmFsQnJvd3Nlcihsb2dnZXIsIGxvY2F0aW9uVGV4dCk7CiAgIH0KIAotICBwcml2YXRlIHZvaWQgb3BlbkFwcFdpbmRvdygpIHsKLSAgICBJbWFnZUljb24gZ3d0SWNvbiA9IGxvYWRJbWFnZUljb24oImljb24yNC5wbmciKTsKLSAgICBmcmFtZSA9IG5ldyBKRnJhbWUoIkdXVCBIb3N0ZWQgTW9kZSIpOwotICAgIHRhYnMgPSBuZXcgSlRhYmJlZFBhbmUoKTsKLSAgICBib29sZWFuIGNoZWNrRm9yVXBkYXRlcyA9IGRvU2hvdWxkQ2hlY2tGb3JVcGRhdGVzKCk7Ci0gICAgbWFpblduZCA9IG5ldyBTaGVsbE1haW5XaW5kb3codGhpcywgY2hlY2tGb3JVcGRhdGVzLCBvcHRpb25zLmdldExvZ0xldmVsKCkpOwotICAgIHRhYnMuYWRkVGFiKCJIb3N0ZWQgTW9kZSIsIGd3dEljb24sIG1haW5XbmQsICJHV1QgSG9zdGVkLW1vZGUiKTsKLSAgICBpZiAocnVuVG9tY2F0KSB7Ci0gICAgICBJbWFnZUljb24gdG9tY2F0SWNvbiA9IGxvYWRJbWFnZUljb24oInRvbWNhdDI0LnBuZyIpOwotICAgICAgd2ViU2VydmVyTG9nID0gbmV3IFdlYlNlcnZlclBhbmVsKGdldFBvcnQoKSwgb3B0aW9ucy5nZXRMb2dMZXZlbCgpKTsKLSAgICAgIHRhYnMuYWRkVGFiKCJUb21jYXQiLCB0b21jYXRJY29uLCB3ZWJTZXJ2ZXJMb2cpOwotICAgIH0KLSAgICBmcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZCh0YWJzKTsKLSAgICBmcmFtZS5zZXRTaXplKDk1MCwgNzAwKTsKLSAgICBmcmFtZS5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkVYSVRfT05fQ0xPU0UpOwotICAgIGZyYW1lLnNldEljb25JbWFnZShsb2FkSW1hZ2VJY29uKCJpY29uMTYucG5nIikuZ2V0SW1hZ2UoKSk7Ci0gICAgZnJhbWUuc2V0VmlzaWJsZSh0cnVlKTsKLSAgfQotCiAgIHByaXZhdGUgdm9pZCBzdGFydE9vcGhtTGlzdGVuZXIoKSB7CiAgICAgbGlzdGVuZXIgPSBuZXcgQnJvd3Nlckxpc3RlbmVyKGdldFRvcExvZ2dlcigpLCBwb3J0SG9zdGVkLAogICAgICAgICBuZXcgT29waG1TZXNzaW9uSGFuZGxlcihicm93c2VySG9zdCkpOwpkaWZmIC0tZ2l0IGEvZGV2L3dpbmRvd3Mvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9zaGVsbC9pZS9Ccm93c2VyV2lkZ2V0SUU2LmphdmEgYi9kZXYvd2luZG93cy9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL2llL0Jyb3dzZXJXaWRnZXRJRTYuamF2YQppbmRleCAyMzAzZGYxLi42ZTNhYTYyIDEwMDY0NAotLS0gYS9kZXYvd2luZG93cy9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL2llL0Jyb3dzZXJXaWRnZXRJRTYuamF2YQorKysgYi9kZXYvd2luZG93cy9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L3NoZWxsL2llL0Jyb3dzZXJXaWRnZXRJRTYuamF2YQpAQCAtODYsNiArODYsMTcgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDYXVzZXMgYSBsaW5rIHRvIG9jY3VyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gbW9kdWxlTmFtZSB0aGUgbW9kdWxlIG5hbWUgdG8gbGluaworICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBtb2R1bGUgaXMgc3RhbGUgYW5kIHNob3VsZCBiZQorICAgICAqICAgICAgICAgcmVsb2FkZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpbml0TW9kdWxlKFN0cmluZyBtb2R1bGVOYW1lKSB7CisgICAgICByZXR1cm4gZ2V0SG9zdCgpLmluaXRNb2R1bGUobW9kdWxlTmFtZSk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZ2V0SURzT2ZOYW1lcyhTdHJpbmdbXSBuYW1lcywgaW50W10gaWRzKQogICAgICAgICB0aHJvd3MgSFJlc3VsdEV4Y2VwdGlvbiB7CkBAIC05OCw2ICsxMDksOSBAQAogICAgICAgaWYgKG5hbWUuZXF1YWxzKCJnd3RvbmxvYWQiKSkgewogICAgICAgICBpZHNbMF0gPSAxOwogICAgICAgICByZXR1cm47CisgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJpbml0bW9kdWxlIikpIHsKKyAgICAgICAgaWRzWzBdID0gMjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgfQogCiAgICAgICB0aHJvdyBuZXcgSFJlc3VsdEV4Y2VwdGlvbihESVNQX0VfVU5LTk9XTk5BTUUpOwpAQCAtMTI2LDE1ICsxNDAsMTUgQEAKICAgICAgIH0gZWxzZSBpZiAoZGlzcElkID09IDEpIHsKICAgICAgICAgaWYgKChmbGFncyAmIENPTS5ESVNQQVRDSF9NRVRIT0QpICE9IDApIHsKICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPCAyKSB7Ci0gICAgICAgICAgICAgIHJlcG9ydEluY29ycmVjdEd3dE9uTG9hZEludm9jYXRpb24ocGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA8IDMpIHsKKyAgICAgICAgICAgICAgcmVwb3J0SW5jb3JyZWN0SW52b2NhdGlvbigiZ3d0T25Mb2FkIiwgMywgcGFyYW1zLmxlbmd0aCk7CiAgICAgICAgICAgICAgIHRocm93IG5ldyBIUmVzdWx0RXhjZXB0aW9uKENPTS5FX0lOVkFMSURBUkcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSURpc3BhdGNoIGZyYW1lV25kID0gKHBhcmFtc1swXS5nZXRUeXBlKCkgPT0gQ09NLlZUX0RJU1BBVENIKQogICAgICAgICAgICAgICAgID8gcGFyYW1zWzBdLmdldERpc3BhdGNoKCkgOiBudWxsOwogICAgICAgICAgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSAocGFyYW1zWzFdLmdldFR5cGUoKSA9PSBDT00uVlRfQlNUUikKICAgICAgICAgICAgICAgICA/IHBhcmFtc1sxXS5nZXRTdHJpbmcoKSA6IG51bGw7Ci0gICAgICAgICAgICBTdHJpbmcgdmVyc2lvbiA9IChwYXJhbXMubGVuZ3RoID4gMiAmJiBwYXJhbXNbMl0uZ2V0VHlwZSgpID09IENPTS5WVF9CU1RSKQorICAgICAgICAgICAgU3RyaW5nIHZlcnNpb24gPSAocGFyYW1zWzJdLmdldFR5cGUoKSA9PSBDT00uVlRfQlNUUikKICAgICAgICAgICAgICAgICA/IHBhcmFtc1syXS5nZXRTdHJpbmcoKSA6IG51bGw7CiAgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBnd3RPbkxvYWQoZnJhbWVXbmQsIG1vZHVsZU5hbWUsIHZlcnNpb24pOwogCkBAIC0xNTksNiArMTczLDM4IEBACiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRocm93IG5ldyBIUmVzdWx0RXhjZXB0aW9uKENPTS5FX05PVFNVUFBPUlRFRCk7CisgICAgICB9IGVsc2UgaWYgKGRpc3BJZCA9PSAyKSB7CisgICAgICAgIGlmICgoZmxhZ3MgJiBDT00uRElTUEFUQ0hfTUVUSE9EKSAhPSAwKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgICByZXBvcnRJbmNvcnJlY3RJbnZvY2F0aW9uKCJpbml0TW9kdWxlIiwgMSwgcGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBIUmVzdWx0RXhjZXB0aW9uKENPTS5FX0lOVkFMSURBUkcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSAocGFyYW1zWzBdLmdldFR5cGUoKSA9PSBDT00uVlRfQlNUUikKKyAgICAgICAgICAgICAgICA/IHBhcmFtc1swXS5nZXRTdHJpbmcoKSA6IG51bGw7CisgICAgICAgICAgICBib29sZWFuIHJlbG9hZCA9IGluaXRNb2R1bGUobW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAgIC8vIGJvb2xlYW4gcmV0dXJuIHR5cGUKKyAgICAgICAgICAgIHJldHVybiBuZXcgVmFyaWFudChyZWxvYWQpOworICAgICAgICAgIH0gY2F0Y2ggKFNXVEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSFJlc3VsdEV4Y2VwdGlvbihDT00uRV9JTlZBTElEQVJHKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKGZsYWdzICYgQ09NLkRJU1BBVENIX1BST1BFUlRZR0VUKSAhPSAwKSB7CisgICAgICAgICAgLy8gcHJvcGVydHkgZ2V0IG9uIHRoZSBtZXRob2QgaXRzZWxmCisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE1ldGhvZCBnd3RPbkxvYWRNZXRob2QgPSBnZXRDbGFzcygpLmdldE1ldGhvZCgiaW5pdE1vZHVsZSIsCisgICAgICAgICAgICAgICAgbmV3IENsYXNzW10ge1N0cmluZy5jbGFzc30pOworICAgICAgICAgICAgTWV0aG9kQWRhcHRvciBtZXRob2RBZGFwdG9yID0gbmV3IE1ldGhvZEFkYXB0b3IoZ3d0T25Mb2FkTWV0aG9kKTsKKyAgICAgICAgICAgIElEaXNwYXRjaEltcGwgZnVuY09iaiA9IG5ldyBNZXRob2REaXNwYXRjaChudWxsLCBtZXRob2RBZGFwdG9yKTsKKyAgICAgICAgICAgIElEaXNwYXRjaCBkaXNwID0gbmV3IElEaXNwYXRjaChmdW5jT2JqLmdldEFkZHJlc3MoKSk7CisgICAgICAgICAgICBkaXNwLkFkZFJlZigpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBWYXJpYW50KGRpc3ApOworICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBqdXN0IHJldHVybiBWVF9FTVBUWQorICAgICAgICAgICAgcmV0dXJuIG5ldyBWYXJpYW50KCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBIUmVzdWx0RXhjZXB0aW9uKENPTS5FX05PVFNVUFBPUlRFRCk7CiAgICAgICB9CiAKICAgICAgIC8vIFRoZSBzcGVjaWZpZWQgbWVtYmVyIGlkIGlzIG91dCBvZiByYW5nZS4KZGlmZiAtLWdpdCBhL2Rpc3Ryby1zb3VyY2UvbGludXgvYnVpbGQueG1sIGIvZGlzdHJvLXNvdXJjZS9saW51eC9idWlsZC54bWwKaW5kZXggY2I2ZTlhMy4uZDRmYjE3MSAxMDA3NTUKLS0tIGEvZGlzdHJvLXNvdXJjZS9saW51eC9idWlsZC54bWwKKysrIGIvZGlzdHJvLXNvdXJjZS9saW51eC9idWlsZC54bWwKQEAgLTE0LDYgKzE0LDcgQEAKICAgICAgIDx0YXJmaWxlc2V0IGZpbGU9IiR7Z3d0LmJ1aWxkLmxpYn0vZ3d0LXNlcnZsZXQuamFyIiBwcmVmaXg9IiR7cHJvamVjdC5kaXN0bmFtZX0iIC8+CiAgICAgICA8dGFyZmlsZXNldCBmaWxlPSIke2d3dC5idWlsZC5saWJ9L2d3dC1iZW5jaG1hcmstdmlld2VyLmphciIgcHJlZml4PSIke3Byb2plY3QuZGlzdG5hbWV9IiAvPgogICAgICAgPHRhcmZpbGVzZXQgZmlsZT0iJHtnd3QuYnVpbGQubGlifS9nd3Qtc295Yy12aXMuamFyIiBwcmVmaXg9IiR7cHJvamVjdC5kaXN0bmFtZX0iIC8+CisgICAgICA8dGFyZmlsZXNldCBmaWxlPSIke2d3dC5idWlsZC5saWJ9L2d3dC1hcGktY2hlY2tlci5qYXIiIHByZWZpeD0iJHtwcm9qZWN0LmRpc3RuYW1lfSIgLz4KIAogICAgICAgPCEtLSBqbmkgbGlicy0tPgogICAgICAgPHRhcmZpbGVzZXQgZGlyPSIke2d3dC5idWlsZC5qbml9LyR7ZGlzdC5wbGF0Zm9ybX0iIHByZWZpeD0iJHtwcm9qZWN0LmRpc3RuYW1lfSIgLz4KZGlmZiAtLWdpdCBhL2Rpc3Ryby1zb3VyY2UvbGludXgvc3JjL3Byb2plY3RDcmVhdG9yIGIvZGlzdHJvLXNvdXJjZS9saW51eC9zcmMvcHJvamVjdENyZWF0b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFkYTgyYzUuLjAwMDAwMDAKLS0tIGEvZGlzdHJvLXNvdXJjZS9saW51eC9zcmMvcHJvamVjdENyZWF0b3IKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jpbi9zaAotSE9NRURJUj1gZGlybmFtZSAkMGA7Ci1qYXZhIC1jcCAkSE9NRURJUi9nd3QtdXNlci5qYXI6JEhPTUVESVIvZ3d0LWRldi1saW51eC5qYXIgY29tLmdvb2dsZS5nd3QudXNlci50b29scy5Qcm9qZWN0Q3JlYXRvciAiJEAiOwpkaWZmIC0tZ2l0IGEvZGlzdHJvLXNvdXJjZS9tYWMvYnVpbGQueG1sIGIvZGlzdHJvLXNvdXJjZS9tYWMvYnVpbGQueG1sCmluZGV4IGJjNDljZDMuLmNhOTdmNzMgMTAwNzU1Ci0tLSBhL2Rpc3Ryby1zb3VyY2UvbWFjL2J1aWxkLnhtbAorKysgYi9kaXN0cm8tc291cmNlL21hYy9idWlsZC54bWwKQEAgLTE0LDYgKzE0LDcgQEAKICAgICAgIDx0YXJmaWxlc2V0IGZpbGU9IiR7Z3d0LmJ1aWxkLmxpYn0vZ3d0LXNlcnZsZXQuamFyIiBwcmVmaXg9IiR7cHJvamVjdC5kaXN0bmFtZX0iIC8+CiAgICAgICA8dGFyZmlsZXNldCBmaWxlPSIke2d3dC5idWlsZC5saWJ9L2d3dC1iZW5jaG1hcmstdmlld2VyLmphciIgcHJlZml4PSIke3Byb2plY3QuZGlzdG5hbWV9IiAvPgogICAgICAgPHRhcmZpbGVzZXQgZmlsZT0iJHtnd3QuYnVpbGQubGlifS9nd3Qtc295Yy12aXMuamFyIiBwcmVmaXg9IiR7cHJvamVjdC5kaXN0bmFtZX0iIC8+CisgICAgICA8dGFyZmlsZXNldCBmaWxlPSIke2d3dC5idWlsZC5saWJ9L2d3dC1hcGktY2hlY2tlci5qYXIiIHByZWZpeD0iJHtwcm9qZWN0LmRpc3RuYW1lfSIgLz4KIAogICAgICAgPCEtLSBqbmkgbGlicy0tPgogICAgICAgPHRhcmZpbGVzZXQgZGlyPSIke2d3dC5idWlsZC5qbml9LyR7ZGlzdC5wbGF0Zm9ybX0iIHByZWZpeD0iJHtwcm9qZWN0LmRpc3RuYW1lfSIgLz4KZGlmZiAtLWdpdCBhL2Rpc3Ryby1zb3VyY2UvbWFjL3NyYy9wcm9qZWN0Q3JlYXRvciBiL2Rpc3Ryby1zb3VyY2UvbWFjL3NyYy9wcm9qZWN0Q3JlYXRvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2ZWJiNi4uMDAwMDAwMAotLS0gYS9kaXN0cm8tc291cmNlL21hYy9zcmMvcHJvamVjdENyZWF0b3IKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jpbi9zaAotSE9NRURJUj1gZGlybmFtZSAkMGA7Ci1qYXZhIC1jcCAkSE9NRURJUi9nd3QtdXNlci5qYXI6JEhPTUVESVIvZ3d0LWRldi1tYWMuamFyIGNvbS5nb29nbGUuZ3d0LnVzZXIudG9vbHMuUHJvamVjdENyZWF0b3IgIiRAIjsKZGlmZiAtLWdpdCBhL2Rpc3Ryby1zb3VyY2Uvd2luZG93cy9idWlsZC54bWwgYi9kaXN0cm8tc291cmNlL3dpbmRvd3MvYnVpbGQueG1sCmluZGV4IDRiZmI1OTYuLjA3NDljNmEgMTAwNzU1Ci0tLSBhL2Rpc3Ryby1zb3VyY2Uvd2luZG93cy9idWlsZC54bWwKKysrIGIvZGlzdHJvLXNvdXJjZS93aW5kb3dzL2J1aWxkLnhtbApAQCAtMTQsNiArMTQsNyBAQAogICAgICAgPHppcGZpbGVzZXQgZmlsZT0iJHtnd3QuYnVpbGQubGlifS9nd3Qtc2VydmxldC5qYXIiIHByZWZpeD0iJHtwcm9qZWN0LmRpc3RuYW1lfSIgLz4KICAgICAgIDx6aXBmaWxlc2V0IGZpbGU9IiR7Z3d0LmJ1aWxkLmxpYn0vZ3d0LWJlbmNobWFyay12aWV3ZXIuamFyIiBwcmVmaXg9IiR7cHJvamVjdC5kaXN0bmFtZX0iIC8+CiAgICAgICA8emlwZmlsZXNldCBmaWxlPSIke2d3dC5idWlsZC5saWJ9L2d3dC1zb3ljLXZpcy5qYXIiIHByZWZpeD0iJHtwcm9qZWN0LmRpc3RuYW1lfSIgLz4KKyAgICAgIDx6aXBmaWxlc2V0IGZpbGU9IiR7Z3d0LmJ1aWxkLmxpYn0vZ3d0LWFwaS1jaGVja2VyLmphciIgcHJlZml4PSIke3Byb2plY3QuZGlzdG5hbWV9IiAvPgogCiAgICAgICA8IS0tIGpuaSBsaWJzLS0+CiAgICAgICA8emlwZmlsZXNldCBkaXI9IiR7Z3d0LmJ1aWxkLmpuaX0vJHtkaXN0LnBsYXRmb3JtfSIgcHJlZml4PSIke3Byb2plY3QuZGlzdG5hbWV9IiAvPgpkaWZmIC0tZ2l0IGEvZGlzdHJvLXNvdXJjZS93aW5kb3dzL3NyYy9wcm9qZWN0Q3JlYXRvci5jbWQgYi9kaXN0cm8tc291cmNlL3dpbmRvd3Mvc3JjL3Byb2plY3RDcmVhdG9yLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODQ3OTE0NC4uMDAwMDAwMAotLS0gYS9kaXN0cm8tc291cmNlL3dpbmRvd3Mvc3JjL3Byb2plY3RDcmVhdG9yLmNtZAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBqYXZhIC1jcCAiJX5kcDBcZ3d0LXVzZXIuamFyOyV+ZHAwXGd3dC1kZXYtd2luZG93cy5qYXIiIGNvbS5nb29nbGUuZ3d0LnVzZXIudG9vbHMuUHJvamVjdENyZWF0b3IgJSoKZGlmZiAtLWdpdCBhL2VjbGlwc2UvUkVBRE1FLnR4dCBiL2VjbGlwc2UvUkVBRE1FLnR4dAppbmRleCBiOWEzOGRjLi41NDk1NWNhIDEwMDY0NAotLS0gYS9lY2xpcHNlL1JFQURNRS50eHQKKysrIGIvZWNsaXBzZS9SRUFETUUudHh0CkBAIC02Nyw2ICs2NywxMSBAQAogCiBUaGlyZCwgd2l0aGluIGEgY2F0ZWdvcnkvdmlzaWJpbGl0eSBjb21iaW5hdGlvbiwgbWVtYmVycyBzaG91bGQgYmUgc29ydGVkCiBhbHBoYWJldGljYWxseS4KKyAKKworLS0tLS0tLS0tLS0tIENvbXBpbGVyIHNldHRpbmdzIC0tLS0tLS0tLS0tLQorV2luZG93LT5QcmVmZXJlbmNlcy0+SmF2YS0+Q29tcGlsZXIKK1NldCB0aGUgY29tcGlsZXIgY29tcGxpYW5jZSBsZXZlbCB0byAxLjUuCiAKID09IENoZWNrc3R5bGUgPT0KIApAQCAtMTU5LDExICsxNjQsMTEgQEAKIAogPT0gTGF1bmNoaW5nICdIZWxsbycgPT0KIAotV2hpbGUgdGhlICdwcm9qZWN0Q3JlYXRvcicgYW5kICdhcHBsaWNhdGlvbkNyZWF0b3InIHNjcmlwdHMgYXJlIHVzZWZ1bCBmb3IKLXNldHRpbmcgdXAgcHJvamVjdHMgYW5kIGxhdW5jaCBjb25maWd1cmF0aW9ucyB0aGF0IHRhcmdldCBhIEdXVCBpbnN0YWxsYXRpb24sCi10aGV5IGFyZSBub3QgaW50ZW5kZWQgZm9yIEdXVCBkZXZlbG9wZXJzIHdvcmtpbmcgYWdhaW5zdCB0aGUgc291cmNlIGNvZGUuICBZb3UKLXdpbGwgd2FudCB0byBydW4gbm90IGFnYWluc3QgLmphciBmaWxlcywgYnV0IGFnYWluc3QgdGhlIGNsYXNzIGZpbGVzIGJ1aWx0IGJ5Ci1FY2xpcHNlLiAgVGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgaGVscCB5b3UgZG8ganVzdCB0aGF0LgorV2hpbGUgdGhlICdhcHBsaWNhdGlvbkNyZWF0b3InIHNjcmlwdCBpcyB1c2VmdWwgZm9yIHNldHRpbmcgdXAgcHJvamVjdHMgYW5kCitsYXVuY2ggY29uZmlndXJhdGlvbnMgdGhhdCB0YXJnZXQgYSBHV1QgaW5zdGFsbGF0aW9uLCBpdCBpcyBub3QgaW50ZW5kZWQgZm9yCitHV1QgZGV2ZWxvcGVycyB3b3JraW5nIGFnYWluc3QgdGhlIHNvdXJjZSBjb2RlLiAgWW91IHdpbGwgd2FudCB0byBydW4gbm90CithZ2FpbnN0IC5qYXIgZmlsZXMsIGJ1dCBhZ2FpbnN0IHRoZSBjbGFzcyBmaWxlcyBidWlsdCBieSBFY2xpcHNlLiAgVGhlCitmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGhlbHAgeW91IGRvIGp1c3QgdGhhdC4KIAogMSkgSW1wb3J0IHRoZSAnSGVsbG8nIHByb2plY3QgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeS4KIApAQCAtMjExLDEwICsyMTYsOSBAQAogCiAxKSBDcmVhdGUgb3IgSW1wb3J0IGEgbmV3IHByb2plY3QKIAotICBVc2luZyB0aGUgJ3Byb2plY3RDcmVhdG9yJyBhbmQgJ2FwcGxpY2F0aW9uQ3JlYXRvcicgc2NyaXB0cyBpcwotICBhbiBlYXN5IHdheSB0byBkbyB0aGlzLCBidXQgeW91IGNhbm5vdCB1c2UgdGhlIGNyZWF0ZWQgbGF1bmNoCi0gIHNjcmlwdHMgdG8gZGV2ZWxvcCB0aGUgR1dUIGNvcmUgc291cmNlIGJlY2F1c2UgdGhleSBhcmUKLSAgY29uZmlndXJlZCB0byBydW4gd2l0aCAuamFyIGZpbGVzIGZyb20gYSBHV1QgaW5zdGFsbGF0aW9uLgorICBVc2luZyB0aGUgJ2FwcGxpY2F0aW9uQ3JlYXRvcicgc2NyaXB0IGlzIGFuIGVhc3kgd2F5IHRvIGRvIHRoaXMsIGJ1dCB5b3UKKyAgY2Fubm90IHVzZSB0aGUgY3JlYXRlZCBsYXVuY2ggc2NyaXB0cyB0byBkZXZlbG9wIHRoZSBHV1QgY29yZSBzb3VyY2UgYmVjYXVzZQorICB0aGV5IGFyZSBjb25maWd1cmVkIHRvIHJ1biB3aXRoIC5qYXIgZmlsZXMgZnJvbSBhIEdXVCBpbnN0YWxsYXRpb24uCiAKIDIpIEFkZCBhIHByb2plY3QgcmVmZXJlbmNlIHRvIHRoZSBnd3QtdXNlciBwcm9qZWN0OgogCmRpZmYgLS1naXQgYS9lY2xpcHNlL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9EZWZhdWx0TXVzZXVtLmxhdW5jaCBiL2VjbGlwc2UvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL0RlZmF1bHRNdXNldW0ubGF1bmNoCmluZGV4IDA2M2M3ZWIuLjExYTgyODk1IDEwMDY0NAotLS0gYS9lY2xpcHNlL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9EZWZhdWx0TXVzZXVtLmxhdW5jaAorKysgYi9lY2xpcHNlL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9EZWZhdWx0TXVzZXVtLmxhdW5jaApAQCAtMjAsNSArMjAsNSBAQAogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuTUFJTl9UWVBFIiB2YWx1ZT0iY29tLmdvb2dsZS5nd3QuZGV2LkdXVFNoZWxsIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9HUkFNX0FSR1VNRU5UUyIgdmFsdWU9Ii1vdXQgd3d3IGNvbS5nb29nbGUuZ3d0Lm11c2V1bS5EZWZhdWx0TXVzZXVtL0RlZmF1bHRNdXNldW0uaHRtbCIvPgogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPSkVDVF9BVFRSIiB2YWx1ZT0iY29kZS1tdXNldW0iLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1EZ3d0LmRldmphcj0mcXVvdDsvdXNyL2xvY2FsL2dvb2dsZS9qbGFiYW5jYS9nd3RfYWxsL2d3dDE1L3JlbGVhc2VzLzEuNS9idWlsZC9zdGFnaW5nL2d3dC1saW51eC0wLjAuMC9nd3QtdXNlci5qYXImcXVvdDsiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1EZ3d0LmRldmphcj0ke2d3dF9kZXZqYXJ9JnF1b3Q7Ii8+CiA8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9lY2xpcHNlL3NhbXBsZXMvRHluYVRhYmxlMi8uY2xhc3NwYXRoIGIvZWNsaXBzZS9zYW1wbGVzL0R5bmFUYWJsZTIvLmNsYXNzcGF0aAppbmRleCA0NDdhNzcwLi44NWI3NjcxIDEwMDY0NAotLS0gYS9lY2xpcHNlL3NhbXBsZXMvRHluYVRhYmxlMi8uY2xhc3NwYXRoCisrKyBiL2VjbGlwc2Uvc2FtcGxlcy9EeW5hVGFibGUyLy5jbGFzc3BhdGgKQEAgLTEsNiArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPGNsYXNzcGF0aD4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJjb3JlL3NyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIG91dHB1dD0id2FyIiBwYXRoPSJjb3JlL3NyYy53YXIiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KIAk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIga2luZD0ic3JjIiBwYXRoPSIvZ3d0LXVzZXIiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJ3YXIvV0VCLUlORi9jbGFzc2VzIi8+CmRpZmYgLS1naXQgYS9lY2xpcHNlL3NhbXBsZXMvRHluYVRhYmxlMi8ucHJvamVjdCBiL2VjbGlwc2Uvc2FtcGxlcy9EeW5hVGFibGUyLy5wcm9qZWN0CmluZGV4IDVlY2U1ODIuLmU4YjdjN2UgMTAwNjQ0Ci0tLSBhL2VjbGlwc2Uvc2FtcGxlcy9EeW5hVGFibGUyLy5wcm9qZWN0CisrKyBiL2VjbGlwc2Uvc2FtcGxlcy9EeW5hVGFibGUyLy5wcm9qZWN0CkBAIC0yNCw3ICsyNCw3IEBACiAJCTxsaW5rPgogCQkJPG5hbWU+Y29yZTwvbmFtZT4KIAkJCTx0eXBlPjI8L3R5cGU+Ci0JCQk8bG9jYXRpb25VUkk+R1dUX1JPT1Qvc2FtcGxlcy9keW5hdGFibGU8L2xvY2F0aW9uVVJJPgorCQkJPGxvY2F0aW9uVVJJPkdXVF9ST09UL3NhbXBsZXMvZHluYXRhYmxlMjwvbG9jYXRpb25VUkk+CiAJCTwvbGluaz4KIAk8L2xpbmtlZFJlc291cmNlcz4KIDwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS9zYW1wbGVzL0R5bmFUYWJsZTIvRHluYVRhYmxlMiBjb21waWxlLmxhdW5jaCBiL2VjbGlwc2Uvc2FtcGxlcy9EeW5hVGFibGUyL0R5bmFUYWJsZTIgY29tcGlsZS5sYXVuY2gKaW5kZXggZmY3OGFhZi4uNzMxM2FlNSAxMDA2NDQKLS0tIGEvZWNsaXBzZS9zYW1wbGVzL0R5bmFUYWJsZTIvRHluYVRhYmxlMiBjb21waWxlLmxhdW5jaAorKysgYi9lY2xpcHNlL3NhbXBsZXMvRHluYVRhYmxlMi9EeW5hVGFibGUyIGNvbXBpbGUubGF1bmNoCkBAIC0xLDEwICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcubG9jYWxKYXZhQXBwbGljYXRpb24iPgogPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9QQVRIUyI+Ci08bGlzdEVudHJ5IHZhbHVlPSIvRHluYVRhYmxlMiIvPgorPGxpc3RFbnRyeSB2YWx1ZT0iL2d3dC1kZXYtd2luZG93cy9jb3JlL3NyYy9jb20vZ29vZ2xlL2d3dC9kZXYvQ29tcGlsZXIuamF2YSIvPgogPC9saXN0QXR0cmlidXRlPgogPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLk1BUFBFRF9SRVNPVVJDRV9UWVBFUyI+Ci08bGlzdEVudHJ5IHZhbHVlPSI0Ii8+Cis8bGlzdEVudHJ5IHZhbHVlPSIxIi8+CiA8L2xpc3RBdHRyaWJ1dGU+CiA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuYXBwZW5kRW52aXJvbm1lbnRWYXJpYWJsZXMiIHZhbHVlPSJ0cnVlIi8+CiA8bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQ0xBU1NQQVRIIj4KQEAgLTE2LDggKzE2LDggQEAKIDxsaXN0RW50cnkgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmIzEzOyYjMTA7Jmx0O3J1bnRpbWVDbGFzc3BhdGhFbnRyeSBpZD0mcXVvdDtvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLmNsYXNzcGF0aGVudHJ5LmRlZmF1bHRDbGFzc3BhdGgmcXVvdDsmZ3Q7JiMxMzsmIzEwOyZsdDttZW1lbnRvIGV4cG9ydGVkRW50cmllc09ubHk9JnF1b3Q7ZmFsc2UmcXVvdDsgcHJvamVjdD0mcXVvdDtEeW5hVGFibGUyJnF1b3Q7LyZndDsmIzEzOyYjMTA7Jmx0Oy9ydW50aW1lQ2xhc3NwYXRoRW50cnkmZ3Q7JiMxMzsmIzEwOyIvPgogPC9saXN0QXR0cmlidXRlPgogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkRFRkFVTFRfQ0xBU1NQQVRIIiB2YWx1ZT0iZmFsc2UiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLk1BSU5fVFlQRSIgdmFsdWU9ImNvbS5nb29nbGUuZ3d0LmRldi5HV1RDb21waWxlciIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPR1JBTV9BUkdVTUVOVFMiIHZhbHVlPSItb3V0IHdhciYjMTM7JiMxMDstc3R5bGUgUFJFVFRZJiMxMzsmIzEwOy1sb2dMZXZlbCBJTkZPJiMxMzsmIzEwOy1leHRyYSBleHRyYSYjMTM7JiMxMDtjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlLkR5bmFUYWJsZTIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLk1BSU5fVFlQRSIgdmFsdWU9ImNvbS5nb29nbGUuZ3d0LmRldi5Db21waWxlciIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPR1JBTV9BUkdVTUVOVFMiIHZhbHVlPSItc3R5bGUgUFJFVFRZJiMxMzsmIzEwO2NvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLkR5bmFUYWJsZTIiLz4KIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9IkR5bmFUYWJsZTIiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1lYSYjMTM7JiMxMDstRGd3dC5kZXZqYXI9QzpcZ3d0XHJlbGVhc2VzXDEuNlxidWlsZFxzdGFnaW5nXGd3dC13aW5kb3dzLTAuMC4wXGd3dC1kZXYtd2luZG93cy5qYXIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1lYSYjMTM7JiMxMDstWG14MjU2TSYjMTM7JiMxMDstRGd3dC5kZXZqYXI9JHtnd3RfZGV2amFyfSIvPgogPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS9zYW1wbGVzL0R5bmFUYWJsZTIvRHluYVRhYmxlMiBob3N0ZWQubGF1bmNoIGIvZWNsaXBzZS9zYW1wbGVzL0R5bmFUYWJsZTIvRHluYVRhYmxlMiBob3N0ZWQubGF1bmNoCmluZGV4IGUyNWI3MjguLjQyMzFmMjcgMTAwNjQ0Ci0tLSBhL2VjbGlwc2Uvc2FtcGxlcy9EeW5hVGFibGUyL0R5bmFUYWJsZTIgaG9zdGVkLmxhdW5jaAorKysgYi9lY2xpcHNlL3NhbXBsZXMvRHluYVRhYmxlMi9EeW5hVGFibGUyIGhvc3RlZC5sYXVuY2gKQEAgLTEsMTAgKzEsMTAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgogPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5sb2NhbEphdmFBcHBsaWNhdGlvbiI+CiA8bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuTUFQUEVEX1JFU09VUkNFX1BBVEhTIj4KLTxsaXN0RW50cnkgdmFsdWU9Ii9EeW5hVGFibGUyIi8+Cis8bGlzdEVudHJ5IHZhbHVlPSIvZ3d0LWRldi13aW5kb3dzL2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Ib3N0ZWRNb2RlLmphdmEiLz4KIDwvbGlzdEF0dHJpYnV0ZT4KIDxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfVFlQRVMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iNCIvPgorPGxpc3RFbnRyeSB2YWx1ZT0iMSIvPgogPC9saXN0QXR0cmlidXRlPgogPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLmFwcGVuZEVudmlyb25tZW50VmFyaWFibGVzIiB2YWx1ZT0idHJ1ZSIvPgogPGxpc3RBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkNMQVNTUEFUSCI+CkBAIC0xNiw4ICsxNiw4IEBACiA8bGlzdEVudHJ5IHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7JiMxMzsmIzEwOyZsdDtydW50aW1lQ2xhc3NwYXRoRW50cnkgaWQ9JnF1b3Q7b3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5jbGFzc3BhdGhlbnRyeS5kZWZhdWx0Q2xhc3NwYXRoJnF1b3Q7Jmd0OyYjMTM7JiMxMDsmbHQ7bWVtZW50byBleHBvcnRlZEVudHJpZXNPbmx5PSZxdW90O2ZhbHNlJnF1b3Q7IHByb2plY3Q9JnF1b3Q7RHluYVRhYmxlMiZxdW90Oy8mZ3Q7JiMxMzsmIzEwOyZsdDsvcnVudGltZUNsYXNzcGF0aEVudHJ5Jmd0OyYjMTM7JiMxMDsiLz4KIDwvbGlzdEF0dHJpYnV0ZT4KIDxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5ERUZBVUxUX0NMQVNTUEFUSCIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5NQUlOX1RZUEUiIHZhbHVlPSJjb20uZ29vZ2xlLmd3dC5kZXYuR1dUSG9zdGVkIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9HUkFNX0FSR1VNRU5UUyIgdmFsdWU9Ii1vdXQgd2FyJiMxMzsmIzEwOy1zdHlsZSBQUkVUVFkmIzEzOyYjMTA7LWxvZ0xldmVsIElORk8mIzEzOyYjMTA7LWV4dHJhIGV4dHJhJiMxMzsmIzEwOy1zdGFydHVwVXJsIER5bmFUYWJsZTIuaHRtbCYjMTM7JiMxMDtjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlLkR5bmFUYWJsZTIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLk1BSU5fVFlQRSIgdmFsdWU9ImNvbS5nb29nbGUuZ3d0LmRldi5Ib3N0ZWRNb2RlIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9HUkFNX0FSR1VNRU5UUyIgdmFsdWU9Ii1zdHlsZSBQUkVUVFkmIzEzOyYjMTA7LXN0YXJ0dXBVcmwgRHluYVRhYmxlMi5odG1sJiMxMzsmIzEwO2NvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLkR5bmFUYWJsZTIiLz4KIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9IkR5bmFUYWJsZTIiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1lYSYjMTM7JiMxMDstRGd3dC5kZXZqYXI9QzpcZ3d0XHJlbGVhc2VzXDEuNlxidWlsZFxzdGFnaW5nXGd3dC13aW5kb3dzLTAuMC4wXGd3dC1kZXYtd2luZG93cy5qYXIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1lYSYjMTM7JiMxMDstWG14MjU2TSYjMTM7JiMxMDstRGd3dC5kZXZqYXI9JHtnd3RfZGV2amFyfSIvPgogPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvam5pL2xpbnV4L0V4dGVybmFsV3JhcHBlci5jcHAgYi9qbmkvbGludXgvRXh0ZXJuYWxXcmFwcGVyLmNwcAppbmRleCA5OTBmYzk5Li4zYjI4NTRlIDEwMDY0NAotLS0gYS9qbmkvbGludXgvRXh0ZXJuYWxXcmFwcGVyLmNwcAorKysgYi9qbmkvbGludXgvRXh0ZXJuYWxXcmFwcGVyLmNwcApAQCAtNTAsOCArNTAsOCBAQAogICB0cmFjZXIubG9nKCJjb250ZXh0PSUwOHgiLCB1bnNpZ25lZChjeCkpOwogICBKc1Jvb3RlZFZhbHVlOjpDb250ZXh0TWFuYWdlciBjb250ZXh0KGN4KTsKICAgSnNSb290ZWRWYWx1ZTo6ZW5zdXJlUnVudGltZShjeCk7Ci0gIGlmIChhcmdjIDwgMikgewotICAgIHRyYWNlci5zZXRGYWlsKCJsZXNzIHRoYW4gMiBhcmdzIik7CisgIGlmIChhcmdjIDwgMykgeworICAgIHRyYWNlci5zZXRGYWlsKCJsZXNzIHRoYW4gMyBhcmdzIik7CiAgICAgcmV0dXJuIEpTX0ZBTFNFOwogICB9CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgfQogCiAgIEpTU3RyaW5nKiB2ZXJzaW9uID0gMDsKLSAgaWYgKGFyZ2MgPiAyICYmIGFyZ3ZbMl0gIT0gSlNWQUxfTlVMTCAmJiBhcmd2WzJdICE9IEpTVkFMX1ZPSUQpIHsKKyAgaWYgKGFyZ3ZbMl0gIT0gSlNWQUxfTlVMTCAmJiBhcmd2WzJdICE9IEpTVkFMX1ZPSUQpIHsKICAgICB2ZXJzaW9uID0gSlNfVmFsdWVUb1N0cmluZyhjeCwgYXJndlsyXSk7CiAgIH0KIApAQCAtMTM3LDYgKzEzNyw2NCBAQAogICByZXR1cm4gSlNfVFJVRTsKIH0KIAorLyoKKyAqIGRlZmluaXRpb24gb2YgSmF2YVNjcmlwdCBpbml0TW9kdWxlIG1ldGhvZCB3aGljaCBtYXBzIHRvIHRoZSBKYXZhCisgKiBpbml0TW9kdWxlIG1ldGhvZC4KKyAqLworc3RhdGljIEpTQm9vbCBpbml0TW9kdWxlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIHVpbnROIGFyZ2MsCisgICAganN2YWwgKmFyZ3YsIGpzdmFsICpydmFsKQoreworICBUcmFjZXIgdHJhY2VyKCJpbml0TW9kdWxlIik7CisgIHRyYWNlci5sb2coImNvbnRleHQ9JTA4eCIsIHVuc2lnbmVkKGN4KSk7CisgIEpzUm9vdGVkVmFsdWU6OkNvbnRleHRNYW5hZ2VyIGNvbnRleHQoY3gpOworICBKc1Jvb3RlZFZhbHVlOjplbnN1cmVSdW50aW1lKGN4KTsKKyAgaWYgKGFyZ2MgPCAxKSB7CisgICAgdHJhY2VyLnNldEZhaWwoImxlc3MgdGhhbiAxIGFyZ3MiKTsKKyAgICByZXR1cm4gSlNfRkFMU0U7CisgIH0KKworICBKU1N0cmluZyogbW9kdWxlTmFtZSA9IDA7CisgIGlmIChhcmd2WzBdICE9IEpTVkFMX05VTEwgJiYgYXJndlswXSAhPSBKU1ZBTF9WT0lEKSB7CisgICAgbW9kdWxlTmFtZSA9IEpTX1ZhbHVlVG9TdHJpbmcoY3gsIGFyZ3ZbMF0pOworICB9CisKKyAganN0cmluZyBqTW9kdWxlTmFtZSgwKTsKKyAgaWYgKG1vZHVsZU5hbWUpIHsKKyAgICBqTW9kdWxlTmFtZSA9IHNhdmVkSk5JRW52LT5OZXdTdHJpbmcoSlNfR2V0U3RyaW5nQ2hhcnMobW9kdWxlTmFtZSksCisgICAgICAgIEpTX0dldFN0cmluZ0xlbmd0aChtb2R1bGVOYW1lKSk7CisgICAgaWYgKCFqTW9kdWxlTmFtZSB8fCBzYXZlZEpOSUVudi0+RXhjZXB0aW9uQ2hlY2soKSkgeworICAgICAgdHJhY2VyLnNldEZhaWwoImNhbid0IGdldCBtb2R1bGUgbmFtZSBpbiBKYXZhIHN0cmluZyIpOworICAgICAgcmV0dXJuIEpTX0ZBTFNFOworICAgIH0KKyAgICB0cmFjZXIubG9nKCJtb2R1bGUgbmFtZT0lcyIsIEpTX0dldFN0cmluZ0J5dGVzKG1vZHVsZU5hbWUpKTsKKyAgfSBlbHNlIHsKKyAgICB0cmFjZXIubG9nKCJudWxsIG1vZHVsZSBuYW1lIik7CisgIH0KKworICBqb2JqZWN0IGV4dGVybmFsT2JqZWN0ID0gTlNfUkVJTlRFUlBSRVRfQ0FTVChqb2JqZWN0LCBKU19HZXRQcml2YXRlKGN4LCBvYmopKTsKKyAgamNsYXNzIG9iakNsYXNzID0gc2F2ZWRKTklFbnYtPkdldE9iamVjdENsYXNzKGV4dGVybmFsT2JqZWN0KTsKKyAgaWYgKCFvYmpDbGFzcyB8fCBzYXZlZEpOSUVudi0+RXhjZXB0aW9uQ2hlY2soKSkgeworICAgIHRyYWNlci5zZXRGYWlsKCJjYW4ndCBnZXQgTG93TGV2ZWxNb3ouRXh0ZXJuYWxPYmplY3QgY2xhc3MiKTsKKyAgICByZXR1cm4gSlNfRkFMU0U7CisgIH0KKworICBqbWV0aG9kSUQgbWV0aG9kSUQgPSBzYXZlZEpOSUVudi0+R2V0TWV0aG9kSUQob2JqQ2xhc3MsICJpbml0TW9kdWxlIiwKKyAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7KVoiKTsKKyAgaWYgKCFtZXRob2RJRCB8fCBzYXZlZEpOSUVudi0+RXhjZXB0aW9uQ2hlY2soKSkgeworICAgIHRyYWNlci5zZXRGYWlsKCJjYW4ndCBnZXQgaW5pdE1vZHVsZSBtZXRob2QiKTsKKyAgICByZXR1cm4gSlNfRkFMU0U7CisgIH0KKworICBqYm9vbGVhbiByZXN1bHQgPSBzYXZlZEpOSUVudi0+Q2FsbEJvb2xlYW5NZXRob2QoZXh0ZXJuYWxPYmplY3QsIG1ldGhvZElELAorICAgICAgak1vZHVsZU5hbWUpOworICBpZiAoc2F2ZWRKTklFbnYtPkV4Y2VwdGlvbkNoZWNrKCkpIHsKKyAgICB0cmFjZXIuc2V0RmFpbCgiTG93TGV2ZWxNb3ouRXh0ZXJuYWxPYmplY3QuaW5pdE1vZHVsZSgpIHRocmV3IGFuIGV4Y2VwdGlvbiIpOworICAgIHJldHVybiBKU19GQUxTRTsKKyAgfQorICAqcnZhbCA9IEJPT0xFQU5fVE9fSlNWQUwoKHJlc3VsdCA9PSBKTklfRkFMU0UpID8gSlNfRkFMU0UgOiBKU19UUlVFKTsKKyAgcmV0dXJuIEpTX1RSVUU7Cit9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSwgYW5kIGZpbmFsaXplIG1ldGhvZHMgICovCiAvKiBmb3IgdGhlIEphdmFTY3JpcHQgY2xhc3MgZ3d0X2V4dGVybmFsX2NsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI5OSw2ICszNTcsMTEgQEAKICAgICAgIHRyYWNlci5zZXRGYWlsKCJjYW4ndCBkZWZpbmUgZ3d0T25Mb2FkIGZ1bmN0aW9uIG9uIEphdmFTY3JpcHQgb2JqZWN0Iik7CiAgICAgICByZXR1cm4gTlNfRVJST1JfVU5FWFBFQ1RFRDsKICAgICB9CisgICAgaWYgKCFKU19EZWZpbmVGdW5jdGlvbihjeCwgbmV3T2JqLCAiaW5pdE1vZHVsZSIsIGluaXRNb2R1bGUsIDEsCisgICAgICAgIEpTUFJPUF9FTlVNRVJBVEUgfCBKU1BST1BfUkVBRE9OTFkgfCBKU1BST1BfUEVSTUFORU5UKSkgeworICAgICAgdHJhY2VyLnNldEZhaWwoImNhbid0IGRlZmluZSBpbml0TW9kdWxlIGZ1bmN0aW9uIG9uIEphdmFTY3JpcHQgb2JqZWN0Iik7CisgICAgICByZXR1cm4gTlNfRVJST1JfVU5FWFBFQ1RFRDsKKyAgICB9CiAgICAganNXaW5kb3dFeHRlcm5hbE9iamVjdCA9IG5ld09iajsKICAgfQogCmRpZmYgLS1naXQgYS9qbmkvbGludXgvcHJlYnVpbHQvbGliZ3d0LWxsLnNvIGIvam5pL2xpbnV4L3ByZWJ1aWx0L2xpYmd3dC1sbC5zbwppbmRleCBhYzFmNzJmLi45N2VhZDY1MSAxMDA3NTUKLS0tIGEvam5pL2xpbnV4L3ByZWJ1aWx0L2xpYmd3dC1sbC5zbworKysgYi9qbmkvbGludXgvcHJlYnVpbHQvbGliZ3d0LWxsLnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL1NpbmdsZUlzc3VlLmd3dC54bWwgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9TaW5nbGVJc3N1ZS5nd3QueG1sCmluZGV4IGRjMWYxZjMuLjVkZTNjMDMgMTAwNjQ0Ci0tLSBhL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL1NpbmdsZUlzc3VlLmd3dC54bWwKKysrIGIvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vU2luZ2xlSXNzdWUuZ3d0LnhtbApAQCAtMiwxMSArMiwxNiBAQAogICAgIAogICAgIDwhLS0gSW5oZXJpdCB0aGUgY29yZSBXZWIgVG9vbGtpdCBzdHVmZi4gICAgICAgICAgICAgICAgICAtLT4KICAgICA8aW5oZXJpdHMgbmFtZT0nY29tLmdvb2dsZS5nd3QudXNlci5Vc2VyJy8+CisgICAgPGluaGVyaXRzIG5hbWU9J2NvbS5nb29nbGUuZ3d0Lm11c2V1bS5NdXNldW0nLz4KICAgICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QudXNlci50aGVtZS5zdGFuZGFyZC5TdGFuZGFyZFJlc291cmNlcyIvPgorICAgIDxpbmhlcml0cyBuYW1lPSJjb20uZ29vZ2xlLmd3dC51c2VyLnRoZW1lLmNocm9tZS5DaHJvbWVSZXNvdXJjZXMiLz4KKyAgICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QudXNlci50aGVtZS5kYXJrLkRhcmtSZXNvdXJjZXMiLz4KICAgICAKICAgICA8IS0tIFNwZWNpZnkgdGhlIGFwcCBlbnRyeSBwb2ludCBjbGFzcy4gICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgPGVudHJ5LXBvaW50IGNsYXNzPSdjb20uZ29vZ2xlLmd3dC5tdXNldW0uY2xpZW50LmRlZmF1bHRtdXNldW0uSXNzdWUyNzAzJy8+CisgICAgPGVudHJ5LXBvaW50IGNsYXNzPSdjb20uZ29vZ2xlLmd3dC5tdXNldW0uY2xpZW50LmRlZmF1bHRtdXNldW0uVmlzdWFsc0ZvckRhdGVCb3gnLz4KICAgICA8c291cmNlIHBhdGg9ImNsaWVudC9jb21tb24iLz4KLSAgICA8c291cmNlIHBhdGg9ImNsaWVudC9kZWZhdWx0bXVzZXVtIiBpbmNsdWRlcz0iSXNzdWUyNzAzLmphdmEiLz4KKyAgICA8c291cmNlIHBhdGg9ImNsaWVudC9kZWZhdWx0bXVzZXVtIi8+CiAgICAgPHNvdXJjZSBwYXRoPSJjbGllbnQvdmlld2VyIi8+CisgICAgCisgICAgPGV4dGVuZC1wcm9wZXJ0eSBuYW1lPSJsb2NhbGUiIHZhbHVlcz0iYXIiLz4KIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vY2xpZW50L2RlZmF1bHRtdXNldW0vRGVmYXVsdE11c2V1bS5qYXZhIGIvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vY2xpZW50L2RlZmF1bHRtdXNldW0vRGVmYXVsdE11c2V1bS5qYXZhCmluZGV4IDU4NzQ1YzUuLmI0OWQyOTIgMTAwNjQ0Ci0tLSBhL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL0RlZmF1bHRNdXNldW0uamF2YQorKysgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9EZWZhdWx0TXVzZXVtLmphdmEKQEAgLTM3LDYgKzM3LDcgQEAKICAgICBhZGRJc3N1ZShuZXcgSXNzdWUyMjYxKCkpOwogICAgIGFkZElzc3VlKG5ldyBJc3N1ZTIyOTAoKSk7CiAgICAgYWRkSXNzdWUobmV3IElzc3VlMjMwNygpKTsKKyAgICBhZGRJc3N1ZShuZXcgSXNzdWUyMzE4KCkpOwogICAgIGFkZElzc3VlKG5ldyBJc3N1ZTIzMjEoKSk7CiAgICAgYWRkSXNzdWUobmV3IElzc3VlMjMzMSgpKTsKICAgICBhZGRJc3N1ZShuZXcgSXNzdWUyMzM4KCkpOwpAQCAtNDcsOSArNDgsMTIgQEAKICAgICBhZGRJc3N1ZShuZXcgSXNzdWUyNDQzKCkpOwogICAgIGFkZElzc3VlKG5ldyBJc3N1ZTI1NTMoKSk7CiAgICAgYWRkSXNzdWUobmV3IElzc3VlMjg1NSgpKTsKKyAgICBhZGRJc3N1ZShuZXcgSXNzdWUzMTcyKCkpOwogICB9CiAKICAgcHVibGljIHZvaWQgYWRkVmlzdWFscygpIHsKKyAgICBhZGRJc3N1ZShuZXcgVmlzdWFsc0ZvckRhdGVCb3goKSk7CisgICAgYWRkSXNzdWUobmV3IFZpc3VhbHNGb3JEYXRlUGlja2VyKCkpOwogICAgIGFkZElzc3VlKG5ldyBWaXN1YWxzRm9yRGlzY2xvc3VyZVBhbmVsRXZlbnRzKCkpOwogICAgIGFkZElzc3VlKG5ldyBWaXN1YWxzRm9yRXZlbnRzRmlyaW5nKCkpOwogICAgIGFkZElzc3VlKG5ldyBWaXN1YWxzRm9yUG9wdXBFdmVudHMoKSk7CmRpZmYgLS1naXQgYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9Jc3N1ZTIzMTguamF2YSBiL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL0lzc3VlMjMxOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNmEzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9Jc3N1ZTIzMTguamF2YQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5kZWZhdWx0bXVzZXVtOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5jb21tb24uQWJzdHJhY3RJc3N1ZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5OYW1lZEZyYW1lOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLldpZGdldDsKKworLyoqCisgKiBXYXJuaW5nIG1lc3NhZ2UgaW4gSUU2IHdoZW4gdXNpbmcgTmFtZWRGcmFtZSBvbiBTU0wtc2VjdXJlZCB3ZWItc2l0ZS4KKyAqLworcHVibGljIGNsYXNzIElzc3VlMjMxOCBleHRlbmRzIEFic3RyYWN0SXNzdWUgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIFdpZGdldCBjcmVhdGVJc3N1ZSgpIHsKKyAgICByZXR1cm4gbmV3IE5hbWVkRnJhbWUoIm15RnJhbWUiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIGdldEluc3RydWN0aW9ucygpIHsKKyAgICByZXR1cm4gIk9wZW4gdGhpcyBwYWdlIGluIElFNiBvbiBhbiBTU0wtc2VjdXJlZCBzZXJ2ZXIgKGh0dHBzKS4gIFZlcmlmeSAiCisgICAgICAgICsgInRoYXQgeW91IGRvIG5vdCBzZWUgYSBtaXhlZC1jb250ZW50IHdhcm5pbmcuIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnkoKSB7CisgICAgcmV0dXJuICJXYXJuaW5nIG1lc3NhZ2UgaW4gSUU2IHdoZW4gdXNpbmcgTmFtZWRGcmFtZSBvbiBTU0wtc2VjdXJlZCBzaXRlIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBoYXNDU1MoKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9Jc3N1ZTMxNzIuamF2YSBiL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL0lzc3VlMzE3Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOWE5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9Jc3N1ZTMxNzIuamF2YQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0Lm11c2V1bS5jbGllbnQuZGVmYXVsdG11c2V1bTsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0Lm11c2V1bS5jbGllbnQuY29tbW9uLkFic3RyYWN0SXNzdWU7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuQ29tbWFuZDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5NZW51QmFyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLk1lbnVJdGVtOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLldpZGdldDsKKworLyoqCisgKiBWZXJpZnkgdGhhdCBJRSByZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBnZXRBYnNvbHV0ZUxlZnQoKSB3aGVuIHpvb21lZAorICogaW4uIFRoZSBhYnNvbHV0ZSBsZWZ0IGNvb3JkaW5hdGUgc2hvdWxkIE5PVCBkZXBlbmQgb24gdGhlIHpvb20uIFRoYXQgaXMsIGFuCisgKiBlbGVtZW50cyBhYnNvbHV0ZUxlZnQgcG9zaXRpb24gc2hvdWxkIGJlIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygem9vbSAoSUUKKyAqIGF1dG9tYXRpY2FsbHkgbXVsdGlwbGllcyBpdCBieSB0aGUgem9vbSkuCisgKi8KK3B1YmxpYyBjbGFzcyBJc3N1ZTMxNzIgZXh0ZW5kcyBBYnN0cmFjdElzc3VlIHsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFdpZGdldCBjcmVhdGVJc3N1ZSgpIHsKKyAgICAvLyBDcmVhdGUgYSBjb21tYW5kIHRoYXQgd2lsbCBleGVjdXRlIG9uIG1lbnUgaXRlbSBzZWxlY3Rpb24KKyAgICBDb21tYW5kIGVtcHR5Q29tbWFuZCA9IG5ldyBDb21tYW5kKCkgeworICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKKyAgICAgIH0KKyAgICB9OworCisgICAgLy8gQ3JlYXRlIGEgbWVudSBiYXIKKyAgICBNZW51QmFyIG1lbnUgPSBuZXcgTWVudUJhcigpOworICAgIG1lbnUuc2V0V2lkdGgoIjUwMHB4Iik7CisgICAgbWVudS5zZXRBdXRvT3Blbih0cnVlKTsKKworICAgIC8vIENyZWF0ZSBhIHN1YiBtZW51IG9mIHJlY2VudCBkb2N1bWVudHMKKyAgICBNZW51QmFyIHJlY2VudERvY3NNZW51ID0gbmV3IE1lbnVCYXIodHJ1ZSk7CisgICAgcmVjZW50RG9jc01lbnUuYWRkSXRlbSgiRG9jdW1lbnQgMCIsIGVtcHR5Q29tbWFuZCk7CisgICAgcmVjZW50RG9jc01lbnUuYWRkSXRlbSgiRG9jdW1lbnQgMSIsIGVtcHR5Q29tbWFuZCk7CisgICAgcmVjZW50RG9jc01lbnUuYWRkSXRlbSgiRG9jdW1lbnQgMiIsIGVtcHR5Q29tbWFuZCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGZpbGUgbWVudQorICAgIE1lbnVCYXIgZmlsZU1lbnUgPSBuZXcgTWVudUJhcih0cnVlKTsKKyAgICBtZW51LmFkZEl0ZW0obmV3IE1lbnVJdGVtKCJGaWxlIiwgZmlsZU1lbnUpKTsKKyAgICBmaWxlTWVudS5hZGRJdGVtKCJOZXciLCBlbXB0eUNvbW1hbmQpOworICAgIGZpbGVNZW51LmFkZEl0ZW0oIlByaW50IiwgZW1wdHlDb21tYW5kKTsKKyAgICBmaWxlTWVudS5hZGRJdGVtKCJSZWNlbnQgRG9jcyIsIHJlY2VudERvY3NNZW51KTsKKworICAgIC8vIENyZWF0ZSB0aGUgZWRpdCBtZW51CisgICAgTWVudUJhciBlZGl0TWVudSA9IG5ldyBNZW51QmFyKHRydWUpOworICAgIG1lbnUuYWRkSXRlbShuZXcgTWVudUl0ZW0oIkVkaXQiLCBlZGl0TWVudSkpOworICAgIGVkaXRNZW51LmFkZEl0ZW0oIkN1dCIsIGVtcHR5Q29tbWFuZCk7CisgICAgZWRpdE1lbnUuYWRkSXRlbSgiQ29weSIsIGVtcHR5Q29tbWFuZCk7CisgICAgZWRpdE1lbnUuYWRkSXRlbSgiUGFzdGUiLCBlbXB0eUNvbW1hbmQpOworCisgICAgLy8gQ3JlYXRlIHRoZSBoZWxwIG1lbnUKKyAgICBNZW51QmFyIGhlbHBNZW51ID0gbmV3IE1lbnVCYXIodHJ1ZSk7CisgICAgbWVudS5hZGRJdGVtKG5ldyBNZW51SXRlbSgiSGVscCIsIGhlbHBNZW51KSk7CisgICAgaGVscE1lbnUuYWRkSXRlbSgiU2V0dGluZ3MiLCBlbXB0eUNvbW1hbmQpOworICAgIGhlbHBNZW51LmFkZEl0ZW0oIkFib3V0IiwgZW1wdHlDb21tYW5kKTsKKworICAgIHJldHVybiBtZW51OworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgZ2V0SW5zdHJ1Y3Rpb25zKCkgeworICAgIHJldHVybiAiSW4gSUUsIHByZXNzIEN0cmwrKyB0byB6b29tIGluLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzdWIgbWVudXMgb3BlbiIKKyAgICAgICAgKyAiIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9ucy4iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgZ2V0U3VtbWFyeSgpIHsKKyAgICByZXR1cm4gImdldEFic29sdXRlTGVmdCgpIHdpdGggem9vbSBpbiBJRSI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaGFzQ1NTKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vY2xpZW50L2RlZmF1bHRtdXNldW0vVmlzdWFsc0ZvckRhdGVCb3guamF2YSBiL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL1Zpc3VhbHNGb3JEYXRlQm94LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyZDBmOAotLS0gL2Rldi9udWxsCisrKyBiL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL1Zpc3VhbHNGb3JEYXRlQm94LmphdmEKQEAgLTAsMCArMSwxODcgQEAKKy8qDQorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4NCisgKiANCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QNCisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZg0KKyAqIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQNCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUNCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcg0KKyAqIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5kZWZhdWx0bXVzZXVtOw0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuQ2xpY2tIYW5kbGVyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LktleURvd25FdmVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5LZXlEb3duSGFuZGxlcjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VFdmVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VIYW5kbGVyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5EYXRlVGltZUZvcm1hdDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5jb21tb24uQWJzdHJhY3RJc3N1ZTsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuQnV0dG9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IVE1MOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5Ib3Jpem9udGFsUGFuZWw7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkxhYmVsOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5UZXh0Qm94Ow0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5WZXJ0aWNhbFBhbmVsOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5XaWRnZXQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuZGF0ZXBpY2tlci5jbGllbnQuRGF0ZUJveDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudC5EYXRlUGlja2VyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50LkRhdGVCb3guRGVmYXVsdEZvcm1hdDsNCisNCitpbXBvcnQgamF2YS51dGlsLkRhdGU7DQorDQorLyoqDQorICogVmlzdWFscyBmb3IgZGF0ZSBib3guDQorICovDQorcHVibGljIGNsYXNzIFZpc3VhbHNGb3JEYXRlQm94IGV4dGVuZHMgQWJzdHJhY3RJc3N1ZSB7DQorICBjbGFzcyBGb3JtYXRXaXRoTmV3WWVhcnNFdmUgZXh0ZW5kcyBEZWZhdWx0Rm9ybWF0IHsNCisgICAgcHVibGljIEZvcm1hdFdpdGhOZXdZZWFyc0V2ZSgpIHsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgRm9ybWF0V2l0aE5ld1llYXJzRXZlKERhdGVUaW1lRm9ybWF0IGZvcm1hdCkgew0KKyAgICAgIHN1cGVyKGZvcm1hdCk7DQorICAgIH0NCisNCisgICAgQE92ZXJyaWRlDQorICAgIHB1YmxpYyBTdHJpbmcgZm9ybWF0KERhdGVCb3ggYm94LCBEYXRlIGQpIHsNCisgICAgICBpZiAoZCA9PSBudWxsKSB7DQorICAgICAgICByZXR1cm4gIlBsZWFzZSBDaGFuZ2UgbWUiOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICByZXR1cm4gc3VwZXIuZm9ybWF0KGJveCwgZCk7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgRGF0ZSBwYXJzZShEYXRlQm94IGJveCwgU3RyaW5nIGlucHV0LCBib29sZWFuIHJlcG9ydEVycm9yKSB7DQorICAgICAgaWYgKGlucHV0LmVxdWFsc0lnbm9yZUNhc2UoIm5ldyB5ZWFyJ3MgZXZlIikpIHsNCisgICAgICAgIERhdGUgZCA9IG5ldyBEYXRlKCk7DQorICAgICAgICBkLnNldERhdGUoMzEpOw0KKyAgICAgICAgZC5zZXRNb250aCgxMik7DQorICAgICAgICByZXR1cm4gZDsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgcmV0dXJuIHN1cGVyLnBhcnNlKGJveCwgaW5wdXQsIHJlcG9ydEVycm9yKTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIEBPdmVycmlkZQ0KKyAgcHVibGljIFdpZGdldCBjcmVhdGVJc3N1ZSgpIHsNCisgICAgVmVydGljYWxQYW5lbCB2ID0gbmV3IFZlcnRpY2FsUGFuZWwoKTsNCisgICAgdi5hZGQobmV3IEhUTUwoIjxkaXYgc3R5bGU9J2hlaWdodDoyNXB4Jz48L2Rpdj4iKSk7DQorICAgIHYuYWRkKGRhdGVSYW5nZSgpKTsNCisgICAgdi5hZGQobmV3IEhUTUwoIjxkaXYgc3R5bGU9J2hlaWdodDoyNXB4Jz48L2Rpdj4iKSk7DQorICAgIHJldHVybiB2Ow0KKyAgfQ0KKw0KKyAgQE92ZXJyaWRlDQorICBwdWJsaWMgU3RyaW5nIGdldEluc3RydWN0aW9ucygpIHsNCisgICAgcmV0dXJuICJJbnN0cnVjdGlvbnMgPHVsPjxsaT5DbGljayBvbiBmaXJzdCBkYXRlIGJveCwgc2VlIHRoYXQgZGF0ZSBwaWNrZXIgaXMgZGlzcGxheWVkPC9saT4gIg0KKyAgICAgICAgKyAiPGxpPnVzZSBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlIHRvIHNlY29uZCBkYXRlIGJveCwgc2VsZWN0IGEgZGF0ZS48L2xpPiAiDQorICAgICAgICArICI8bGk+dHlwZSBpbiBhIGJhZCBkYXRlIHRoZW4gY2xpY2sgYmFjayB0byB0aGUgZmlyc3QgZGF0ZSBib3guIFlvdXIgYmFkIGRhdGUgc2hvdWxkIG5vdyBiZSBpbiByZWQ8L2xpPiINCisgICAgICAgICsgIjxsaT5nZXQgYmFjayB0byB0aGUgc2Vjb25kIGJveCwgbm93IHR5cGUgaW4gYSB2YWxpZCBkYXRlIGFuZCB0YWIgYXdheSwgaXRzIHRleHQgc2hvdWxkIG5vdyBiZSBibGFjayBhZ2Fpbi4gPC9saT4iDQorICAgICAgICArICI8bGk+VHJ5IHR5cGluZyAnTmV3IFllYXIncyBFdmUnIGluIG9uIHRoZSBzdGFydCBkYXRlYm94KTwvbGk+Ig0KKyAgICAgICAgKyAiPGxpPiBIaXQgJ1Nob3cgdmFsdWVzJyBhbmQgY29uZmlybSB0aGF0IHlvdSBzZWUgdGhlIGNvcnJlY3QgdmFsdWVzPC9saT48L3VsPiI7DQorICB9DQorDQorICBAT3ZlcnJpZGUNCisgIHB1YmxpYyBTdHJpbmcgZ2V0U3VtbWFyeSgpIHsNCisgICAgcmV0dXJuICJkYXRlIGJveCB2aXN1YWwgdGVzdCI7DQorICB9DQorDQorICBAT3ZlcnJpZGUNCisgIHB1YmxpYyBib29sZWFuIGhhc0NTUygpIHsNCisgICAgcmV0dXJuIGZhbHNlOw0KKyAgfQ0KKw0KKyAgcHJpdmF0ZSBXaWRnZXQgZGF0ZVJhbmdlKCkgew0KKyAgICBWZXJ0aWNhbFBhbmVsIHYgPSBuZXcgVmVydGljYWxQYW5lbCgpOw0KKyAgICBIb3Jpem9udGFsUGFuZWwgcCA9IG5ldyBIb3Jpem9udGFsUGFuZWwoKTsNCisgICAgdi5hZGQocCk7DQorICAgIGZpbmFsIERhdGVCb3ggc3RhcnQgPSBuZXcgRGF0ZUJveChuZXcgRGF0ZVBpY2tlcigpLCBudWxsLA0KKyAgICAgICAgbmV3IEZvcm1hdFdpdGhOZXdZZWFyc0V2ZSgpKTsNCisNCisgICAgc3RhcnQuc2V0V2lkdGgoIjEzZW0iKTsNCisgICAgZmluYWwgRGF0ZUJveCBlbmQgPSBuZXcgRGF0ZUJveCgpOw0KKyAgICBlbmQuc2V0V2lkdGgoIjEzZW0iKTsNCisNCisgICAgZW5kLmdldERhdGVQaWNrZXIoKS5hZGRWYWx1ZUNoYW5nZUhhbmRsZXIobmV3IFZhbHVlQ2hhbmdlSGFuZGxlcjxEYXRlPigpIHsNCisgICAgICBwdWJsaWMgdm9pZCBvblZhbHVlQ2hhbmdlKFZhbHVlQ2hhbmdlRXZlbnQ8RGF0ZT4gZXZlbnQpIHsNCisgICAgICAgIHN0YXJ0LnJlbW92ZVN0eWxlTmFtZSgidXNlci1tb2RpZmllZCIpOw0KKyAgICAgIH0NCisgICAgfSk7DQorDQorICAgIGZpbmFsIFRleHRCb3ggc3RhcnRUZXh0ID0gc3RhcnQuZ2V0VGV4dEJveCgpOw0KKyAgICBzdGFydFRleHQuYWRkS2V5RG93bkhhbmRsZXIobmV3IEtleURvd25IYW5kbGVyKCkgew0KKyAgICAgIHB1YmxpYyB2b2lkIG9uS2V5RG93bihLZXlEb3duRXZlbnQgZSkgew0KKyAgICAgICAgaWYgKGUuaXNSaWdodEFycm93KCkNCisgICAgICAgICAgICAmJiBzdGFydC5nZXRDdXJzb3JQb3MoKSA9PSBzdGFydFRleHQuZ2V0VGV4dCgpLmxlbmd0aCgpKSB7DQorICAgICAgICAgIHN0YXJ0LmhpZGVEYXRlUGlja2VyKCk7DQorICAgICAgICAgIGVuZC5zZXRGb2N1cyh0cnVlKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0pOw0KKw0KKyAgICBlbmQuZ2V0VGV4dEJveCgpLmFkZEtleURvd25IYW5kbGVyKG5ldyBLZXlEb3duSGFuZGxlcigpIHsNCisgICAgICBwdWJsaWMgdm9pZCBvbktleURvd24oS2V5RG93bkV2ZW50IGUpIHsNCisgICAgICAgIGlmICgoZS5pc0xlZnRBcnJvdygpKSAmJiBlbmQuZ2V0Q3Vyc29yUG9zKCkgPT0gMCkgew0KKyAgICAgICAgICBlbmQuaGlkZURhdGVQaWNrZXIoKTsNCisgICAgICAgICAgc3RhcnQuc2V0Rm9jdXModHJ1ZSk7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9KTsNCisNCisgICAgZW5kLnNldFZhbHVlKG5ldyBEYXRlKCkpOw0KKyAgICBwLmFkZChzdGFydCk7DQorICAgIExhYmVsIGwgPSBuZXcgTGFiZWwoIiAtICIpOw0KKyAgICBsLnNldFN0eWxlTmFtZSgiZmlsbGVyIik7DQorICAgIHAuYWRkKGwpOw0KKyAgICBwLmFkZChlbmQpOw0KKyAgICBmaW5hbCBMYWJlbCB2YWx1ZSA9IG5ldyBMYWJlbCgpOw0KKyAgICBwLmFkZCh2YWx1ZSk7DQorICAgIEhvcml6b250YWxQYW5lbCBoMiA9IG5ldyBIb3Jpem9udGFsUGFuZWwoKTsNCisgICAgdi5hZGQoaDIpOw0KKyAgICBoMi5hZGQobmV3IEJ1dHRvbigiU2hvcnQgZm9ybWF0IiwgbmV3IENsaWNrSGFuZGxlcigpIHsNCisgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKENsaWNrRXZlbnQgZXZlbnQpIHsNCisgICAgICAgIHVwZGF0ZUZvcm1hdChzdGFydCwgZW5kLCBEYXRlVGltZUZvcm1hdC5nZXRTaG9ydERhdGVGb3JtYXQoKSk7DQorICAgICAgfQ0KKyAgICB9KSk7DQorICAgIGgyLmFkZChuZXcgQnV0dG9uKCJMb25nIGZvcm1hdCIsIG5ldyBDbGlja0hhbmRsZXIoKSB7DQorDQorICAgICAgcHVibGljIHZvaWQgb25DbGljayhDbGlja0V2ZW50IGV2ZW50KSB7DQorICAgICAgICB1cGRhdGVGb3JtYXQoc3RhcnQsIGVuZCwgRGF0ZVRpbWVGb3JtYXQuZ2V0TWVkaXVtRGF0ZUZvcm1hdCgpKTsNCisgICAgICB9DQorICAgIH0pKTsNCisNCisgICAgaDIuYWRkKG5ldyBCdXR0b24oIkNsZWFyIiwgbmV3IENsaWNrSGFuZGxlcigpIHsNCisgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKENsaWNrRXZlbnQgc2VuZGVyKSB7DQorICAgICAgICBzdGFydC5zZXRWYWx1ZShudWxsKTsNCisgICAgICAgIGVuZC5zZXRWYWx1ZShudWxsKTsNCisgICAgICB9DQorICAgIH0pKTsNCisNCisgICAgaDIuYWRkKG5ldyBCdXR0b24oIlNob3cgVmFsdWVzIiwgbmV3IENsaWNrSGFuZGxlcigpIHsNCisgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKENsaWNrRXZlbnQgZXZlbnQpIHsNCisgICAgICAgIERhdGVUaW1lRm9ybWF0IGYgPSBEYXRlVGltZUZvcm1hdC5nZXRTaG9ydERhdGVGb3JtYXQoKTsNCisgICAgICAgIERhdGUgZDEgPSBzdGFydC5nZXRWYWx1ZSgpOw0KKyAgICAgICAgRGF0ZSBkMiA9IGVuZC5nZXRWYWx1ZSgpOw0KKyAgICAgICAgdmFsdWUuc2V0VGV4dCgiU3RhcnQ6IFwiIiArIChkMSA9PSBudWxsID8gIm51bGwiIDogZi5mb3JtYXQoZDEpKQ0KKyAgICAgICAgICAgICsgIlwiIEVuZDogXCIiICsgKGQyID09IG51bGwgPyAibnVsbCIgOiBmLmZvcm1hdChkMikpICsgIlwiIik7DQorICAgICAgfQ0KKyAgICB9KSk7DQorICAgIHJldHVybiB2Ow0KKyAgfQ0KKw0KKyAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUZvcm1hdChEYXRlQm94IHN0YXJ0LCBEYXRlQm94IGVuZCwgRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KSB7DQorICAgIC8vIFlvdSBjYW4gcmVwbGFjZSB0aGUgZm9ybWF0IGl0c2VsZi4NCisgICAgc3RhcnQuc2V0Rm9ybWF0KG5ldyBGb3JtYXRXaXRoTmV3WWVhcnNFdmUoZm9ybWF0KSk7DQorICAgIGVuZC5zZXRGb3JtYXQobmV3IERlZmF1bHRGb3JtYXQoZm9ybWF0KSk7DQorICB9DQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL1Zpc3VhbHNGb3JEYXRlUGlja2VyLmphdmEgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9WaXN1YWxzRm9yRGF0ZVBpY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Mzg2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9WaXN1YWxzRm9yRGF0ZVBpY2tlci5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5tdXNldW0uY2xpZW50LmRlZmF1bHRtdXNldW07CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IaWdobGlnaHRFdmVudDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IaWdobGlnaHRIYW5kbGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlNob3dSYW5nZUV2ZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlNob3dSYW5nZUhhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VFdmVudDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUhhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQuRGF0ZVRpbWVGb3JtYXQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5jb21tb24uQWJzdHJhY3RJc3N1ZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5MYWJlbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5WZXJ0aWNhbFBhbmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLldpZGdldDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50LkRhdGVQaWNrZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqCisgKiBEYXRlIHBpY2tlciBkZW1vLgorICovCitwdWJsaWMgY2xhc3MgVmlzdWFsc0ZvckRhdGVQaWNrZXIgZXh0ZW5kcyBBYnN0cmFjdElzc3VlIHsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFdpZGdldCBjcmVhdGVJc3N1ZSgpIHsKKyAgICBWZXJ0aWNhbFBhbmVsIHAgPSBuZXcgVmVydGljYWxQYW5lbCgpOworICAgIGZpbmFsIERhdGVQaWNrZXIgcGlja2VyID0gbmV3IERhdGVQaWNrZXIoKTsKKyAgICBwLmFkZChwaWNrZXIpOworICAgIGZpbmFsIExhYmVsIHZhbHVlID0gbmV3IExhYmVsKCJ2YWx1ZTogIik7CisgICAgcC5hZGQodmFsdWUpOworICAgIGZpbmFsIExhYmVsIGhpZ2hsaWdodCA9IG5ldyBMYWJlbCgiaGlnaGxpZ2h0OiAiKTsKKyAgICBwLmFkZChoaWdobGlnaHQpOworICAgIGZpbmFsIExhYmVsIHJhbmdlID0gbmV3IExhYmVsKCJyYW5nZTogIik7CisgICAgcC5hZGQocmFuZ2UpOworICAgIHBpY2tlci5hZGRWYWx1ZUNoYW5nZUhhbmRsZXIobmV3IFZhbHVlQ2hhbmdlSGFuZGxlcjxEYXRlPigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoVmFsdWVDaGFuZ2VFdmVudDxEYXRlPiBldmVudCkgeworICAgICAgICB2YWx1ZS5zZXRUZXh0KCJ2YWx1ZTogIgorICAgICAgICAgICAgKyBEYXRlVGltZUZvcm1hdC5nZXRTaG9ydERhdGVGb3JtYXQoKS5mb3JtYXQoZXZlbnQuZ2V0VmFsdWUoKSkpOworICAgICAgfQorICAgIH0pOworICAgIHBpY2tlci5hZGRIaWdobGlnaHRIYW5kbGVyKG5ldyBIaWdobGlnaHRIYW5kbGVyPERhdGU+KCkgeworCisgICAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorICAgICAgLy8gU2hvdWxkIG5ldmVyIGJlIHNlZW4sIGFzIGhpZ2hsaWdodCBzaG91bGQgYmUgY2xvbmVkLgorICAgICAgcHVibGljIHZvaWQgb25IaWdobGlnaHQoSGlnaGxpZ2h0RXZlbnQ8RGF0ZT4gZXZlbnQpIHsKKyAgICAgICAgZXZlbnQuZ2V0SGlnaGxpZ2h0ZWQoKS5zZXRZZWFyKDEpOworICAgICAgICBwaWNrZXIuZ2V0SGlnaGxpZ2h0ZWREYXRlKCkuc2V0WWVhcigxKTsKKyAgICAgIH0KKworICAgIH0pOworICAgIHBpY2tlci5hZGRIaWdobGlnaHRIYW5kbGVyKG5ldyBIaWdobGlnaHRIYW5kbGVyPERhdGU+KCkgeworICAgICAgcHVibGljIHZvaWQgb25IaWdobGlnaHQoSGlnaGxpZ2h0RXZlbnQ8RGF0ZT4gZXZlbnQpIHsKKyAgICAgICAgaGlnaGxpZ2h0LnNldFRleHQoImhpZ2hsaWdodDogIgorICAgICAgICAgICAgKyBEYXRlVGltZUZvcm1hdC5nZXRTaG9ydERhdGVGb3JtYXQoKS5mb3JtYXQoZXZlbnQuZ2V0SGlnaGxpZ2h0ZWQoKSkpOworICAgICAgfQorICAgIH0pOworICAgIHBpY2tlci5hZGRTaG93UmFuZ2VIYW5kbGVyKG5ldyBTaG93UmFuZ2VIYW5kbGVyPERhdGU+KCkgeworICAgICAgcHVibGljIHZvaWQgb25TaG93UmFuZ2UoU2hvd1JhbmdlRXZlbnQ8RGF0ZT4gZXZlbnQpIHsKKyAgICAgICAgRGF0ZSBzdGFydCA9IGV2ZW50LmdldFN0YXJ0KCk7CisgICAgICAgIERhdGUgZW5kID0gZXZlbnQuZ2V0RW5kKCk7CisgICAgICAgIERhdGVUaW1lRm9ybWF0IGZvcm1hdCA9IERhdGVUaW1lRm9ybWF0LmdldFNob3J0RGF0ZUZvcm1hdCgpOworICAgICAgICByYW5nZS5zZXRUZXh0KCJyYW5nZTogIiArIGZvcm1hdC5mb3JtYXQoc3RhcnQpICsgIiAtICIKKyAgICAgICAgICAgICsgZm9ybWF0LmZvcm1hdChlbmQpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gcDsKKyAgfTsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyBnZXRJbnN0cnVjdGlvbnMoKSB7CisgICAgcmV0dXJuICJHbyBiYWNrIG9uZSBtb250aCwgZ28gZm9yd2FyZCBvbmUgbW9udGgsIGNoZWNrIHRoYXQgaGlnaGxpZ2h0aW5nIGlzIHdvcmtpbmcsIGFuZCB0cnkgc2VsZWN0aW5nIGEgZGF0ZS4iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgZ2V0U3VtbWFyeSgpIHsKKyAgICByZXR1cm4gIlZpc3VhbCB0ZXN0IGZvciBkYXRlIHBpY2tlciI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaGFzQ1NTKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9WaXN1YWxzRm9yVHJlZS5qYXZhIGIvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vY2xpZW50L2RlZmF1bHRtdXNldW0vVmlzdWFsc0ZvclRyZWUuamF2YQppbmRleCBmZGU2YjFiLi5hYWRjNDA4IDEwMDY0NAotLS0gYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9jbGllbnQvZGVmYXVsdG11c2V1bS9WaXN1YWxzRm9yVHJlZS5qYXZhCisrKyBiL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL2NsaWVudC9kZWZhdWx0bXVzZXVtL1Zpc3VhbHNGb3JUcmVlLmphdmEKQEAgLTE3LDYgKzE3LDggQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5kZWZhdWx0bXVzZXVtOwogCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QubXVzZXVtLmNsaWVudC5jb21tb24uQWJzdHJhY3RJc3N1ZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5DaGVja0JveDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5SYWRpb0J1dHRvbjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5UcmVlOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlRyZWVJdGVtOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlZlcnRpY2FsUGFuZWw7CkBAIC0zNiwxMSArMzgsMTYgQEAKICAgICBUcmVlSXRlbSBiYmEgPSBuZXcgVHJlZUl0ZW0oImIuYi5hIik7CiAgICAgVHJlZUl0ZW0gYmMgPSBuZXcgVHJlZUl0ZW0oImIuYyIpOwogICAgIFRyZWVJdGVtIGMgPSBuZXcgVHJlZUl0ZW0oImMiKTsKKyAgICBUcmVlSXRlbSBkID0gbmV3IFRyZWVJdGVtKG5ldyBSYWRpb0J1dHRvbigibXlyYWRpbyIsCisgICAgICAgICJJIHNob3VsZCBsaW5lIHVwIG5pY2VseSIpKTsKKyAgICBUcmVlSXRlbSBlID0gbmV3IFRyZWVJdGVtKG5ldyBDaGVja0JveCgiSSBzaG91bGQgbGluZSB1cCBuaWNlbHkiKSk7CiAKICAgICB0LnNldFNlbGVjdGVkSXRlbShiKTsKICAgICB0LmFkZEl0ZW0oYSk7CiAgICAgdC5hZGRJdGVtKGIpOwogICAgIHQuYWRkSXRlbShjKTsKKyAgICB0LmFkZEl0ZW0oZCk7CisgICAgdC5hZGRJdGVtKGUpOwogICAgIGIuYWRkSXRlbShiYSk7CiAgICAgYi5hZGRJdGVtKGJiKTsKICAgICBiYi5hZGRJdGVtKGJiYSk7CmRpZmYgLS1naXQgYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9wdWJsaWMvRGVmYXVsdE11c2V1bS5odG1sIGIvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vcHVibGljL0RlZmF1bHRNdXNldW0uaHRtbAppbmRleCBhNGZmYmRjLi4yMTAxMzFjIDEwMDY0NAotLS0gYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9wdWJsaWMvRGVmYXVsdE11c2V1bS5odG1sCisrKyBiL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL3B1YmxpYy9EZWZhdWx0TXVzZXVtLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgogPGh0bWw+CiAJPGhlYWQ+CiAJCTx0aXRsZT5NdXNldW08L3RpdGxlPgpkaWZmIC0tZ2l0IGEvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vcHVibGljL011c2V1bS5odG1sIGIvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vcHVibGljL011c2V1bS5odG1sCmluZGV4IDZlNTM1MjguLmZhMTlmZWEgMTAwNjQ0Ci0tLSBhL3JlZmVyZW5jZS9jb2RlLW11c2V1bS9zcmMvY29tL2dvb2dsZS9nd3QvbXVzZXVtL3B1YmxpYy9NdXNldW0uaHRtbAorKysgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9wdWJsaWMvTXVzZXVtLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgogPGh0bWw+CiAJPGhlYWQ+CiAJCTx0aXRsZT5NdXNldW08L3RpdGxlPgpkaWZmIC0tZ2l0IGEvcmVmZXJlbmNlL2NvZGUtbXVzZXVtL3NyYy9jb20vZ29vZ2xlL2d3dC9tdXNldW0vcHVibGljL1NpbmdsZUlzc3VlLmh0bWwgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9wdWJsaWMvU2luZ2xlSXNzdWUuaHRtbAppbmRleCA4YWNkOGU2Li5hZTU2NzliIDEwMDY0NAotLS0gYS9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9wdWJsaWMvU2luZ2xlSXNzdWUuaHRtbAorKysgYi9yZWZlcmVuY2UvY29kZS1tdXNldW0vc3JjL2NvbS9nb29nbGUvZ3d0L211c2V1bS9wdWJsaWMvU2luZ2xlSXNzdWUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+CiA8aHRtbD4KIAk8aGVhZD4KIAkJPHRpdGxlPlNpbmdsZSBpc3N1ZSBmcm9tIE11c2V1bTwvdGl0bGU+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvYnVpbGQueG1sIGIvc2FtcGxlcy9keW5hdGFibGUyL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM5NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9keW5hdGFibGUyL2J1aWxkLnhtbApAQCAtMCwwICsxLDUgQEAKKzxwcm9qZWN0IG5hbWU9ImR5bmF0YWJsZSIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4iPgorICA8cHJvcGVydHkgbmFtZT0ic2FtcGxlLnJvb3QiIHZhbHVlPSJkeW5hdGFibGUiIC8+CisgIDxwcm9wZXJ0eSBuYW1lPSJzYW1wbGUubW9kdWxlIiB2YWx1ZT0iRHluYVRhYmxlIiAvPgorICA8aW1wb3J0IGZpbGU9Ii4uL2NvbW1vbi5hbnQueG1sIiAvPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvRHluYVRhYmxlMi5jc3MgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjLndhci9EeW5hVGFibGUyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjgxYWJmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvRHluYVRhYmxlMi5jc3MKQEAgLTAsMCArMSw4NSBAQAorCitib2R5IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGNvbG9yOiBibGFjazsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOworICBmb250LXNpemU6IHNtYWxsOworICBtYXJnaW46IDhweDsKKyAgbWFyZ2luLXRvcDogM3B4OworfQorCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCB7CisJd2lkdGg6IDEwMCU7CisJYm9yZGVyOiAxcHggc29saWQgI0FDQTg5OTsKK30KKworCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCAubmF2YmFyIHsKKwl3aWR0aDogMTAwJTsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRUNFOUQ4OworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBQ0E4OTk7Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC5uYXZiYXIgYnV0dG9uIHsKKwl3aWR0aDogM2VtOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCAubmF2YmFyIC5zdGF0dXMgeworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisJcGFkZGluZy1yaWdodDogMTBweDsKK30KKworLkR5bmFUYWJsZS1EeW5hVGFibGVXaWRnZXQgLnRhYmxlIHsKKwltYXJnaW46IDEwcHg7Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC50YWJsZSB0ZC5oZWFkZXIgeworCXRleHQtYWxpZ246IGxlZnQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC50YWJsZSB0ZC5uYW1lIHsKKwl3aWR0aDogMTBlbTsKK30KKworLkR5bmFUYWJsZS1EeW5hVGFibGVXaWRnZXQgLnRhYmxlIHRkLmRlc2MgeworCXdpZHRoOiAyMGVtOworfQorCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCAudGFibGUgdGQuc2NoZWQgeworCXdpZHRoOiAyMGVtOworfQorCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCAudGFibGUgdGQgeworCXZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKKy5EeW5hVGFibGUtRGF5RmlsdGVyV2lkZ2V0IHsKKwltYXJnaW46IDNlbSAxZW0gMWVtIDA7CisJd2lkdGg6IDEwZW07CisJcGFkZGluZzogMHB4IDhweCAwcHggOHB4OworCWJvcmRlcjogMXB4IHNvbGlkICNBQ0E4OTk7Cit9CisKKy5EeW5hVGFibGUtRGF5RmlsdGVyV2lkZ2V0IGJ1dHRvbiB7CisJd2lkdGg6IDRlbTsKKwltYXJnaW46IDhweCA0cHggOHB4IDRweDsKK30KKworLkR5bmFUYWJsZS1FcnJvckRpYWxvZyB7CisgIGJvcmRlcjogMnB4IG91dHNldDsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIHdpZHRoOiA1MCU7Cit9CisKKy5EeW5hVGFibGUtRXJyb3JEaWFsb2cgLkNhcHRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjQzNEOUZGOworICBwYWRkaW5nOiAzcHg7CisgIG1hcmdpbjogMnB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvRHluYVRhYmxlMi5odG1sIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvRHluYVRhYmxlMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YjhiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjLndhci9EeW5hVGFibGUyLmh0bWwKQEAgLTAsMCArMSwzNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8IS0tIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8IS0tIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgICAgLS0+Cis8IS0tIG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5ICAgLS0+Cis8IS0tIG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8IS0tIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8IS0tIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLS0+Cis8IS0tIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLS0+Cis8IS0tIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciAgICAgICAgLS0+Cis8IS0tIGltcGxpZWQuIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgLS0+Cis8IS0tIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgCis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorICAgIDxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkR5bmFUYWJsZTIuY3NzIj4KKyAgICA8dGl0bGU+PC90aXRsZT4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6JyciIGlkPSdfX2d3dF9oaXN0b3J5RnJhbWUnIHRhYkluZGV4PSctMScgc3R5bGU9J3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyOjAnPjwvaWZyYW1lPgorCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPSdkeW5hdGFibGUyL2R5bmF0YWJsZTIubm9jYWNoZS5qcyc+PC9zY3JpcHQ+CisgICAgPGgxPlNjaG9vbCBTY2hlZHVsZSBmb3IgUHJvZmVzc29ycyBhbmQgU3R1ZGVudHM8L2gxPgorICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTY2hvb2wgU2NoZWR1bGUgZm9yIFByb2Zlc3NvcnMgYW5kIFN0dWRlbnRzIj4KKyAgICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgIDx0ZCBpZD0iY2FsZW5kYXIiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI5MCUiPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgaWQ9ImRheXMiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMCUiPgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjLndhci9XRUItSU5GL2NsYXNzZXMvbWFya2VyIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvV0VCLUlORi9jbGFzc2VzL21hcmtlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvV0VCLUlORi9jbGFzc2VzL21hcmtlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy53YXIvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZWViMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjLndhci9XRUItSU5GL3dlYi54bWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx3ZWItYXBwPgorCisJPHNlcnZsZXQ+CisJCTxzZXJ2bGV0LW5hbWU+Y2FsZW5kYXI8L3NlcnZsZXQtbmFtZT4KKwkJPHNlcnZsZXQtY2xhc3M+CisJCQljb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5zZXJ2ZXIuU2Nob29sQ2FsZW5kYXJTZXJ2aWNlSW1wbAorCQk8L3NlcnZsZXQtY2xhc3M+CisJPC9zZXJ2bGV0PgorCTxzZXJ2bGV0LW1hcHBpbmc+CisJCTxzZXJ2bGV0LW5hbWU+Y2FsZW5kYXI8L3NlcnZsZXQtbmFtZT4KKwkJPHVybC1wYXR0ZXJuPi9keW5hdGFibGUyL2NhbGVuZGFyPC91cmwtcGF0dGVybj4KKwk8L3NlcnZsZXQtbWFwcGluZz4KKworPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9DT1BZSU5HIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTEwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL0NPUFlJTkcKQEAgLTAsMCArMSwxNzYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9EeW5hVGFibGUyLmd3dC54bWwgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL0R5bmFUYWJsZTIuZ3d0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgxOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9EeW5hVGFibGUyLmd3dC54bWwKQEAgLTAsMCArMSwxOSBAQAorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPCEtLSBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPCEtLSBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91ICAgIC0tPgorPCEtLSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSAgIC0tPgorPCEtLSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPCEtLSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPCEtLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC0tPgorPCEtLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC0tPgorPCEtLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgICAgICAgIC0tPgorPCEtLSBpbXBsaWVkLiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgIC0tPgorPCEtLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorCis8bW9kdWxlIHJlbmFtZS10bz0iZHluYXRhYmxlMiI+CisJPGluaGVyaXRzIG5hbWU9J2NvbS5nb29nbGUuZ3d0LnVzZXIuVXNlcicvPgorCTxlbnRyeS1wb2ludCBjbGFzcz0nY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50LkR5bmFUYWJsZScvPgorCTxzZXJ2bGV0IHBhdGg9Jy9jYWxlbmRhcicgY2xhc3M9J2NvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLnNlcnZlci5TY2hvb2xDYWxlbmRhclNlcnZpY2VJbXBsJy8+Cis8L21vZHVsZT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvRHluYVRhYmxlMkxlZ2FjeS5nd3QueG1sIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9EeW5hVGFibGUyTGVnYWN5Lmd3dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmODA2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvRHluYVRhYmxlMkxlZ2FjeS5nd3QueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSAgICAtLT4KKzwhLS0gbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgICAtLT4KKzwhLS0gbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAtLT4KKzwhLS0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAtLT4KKzwhLS0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yICAgICAgICAtLT4KKzwhLS0gaW1wbGllZC4gTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAtLT4KKzwhLS0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKworPG1vZHVsZT4KKwk8aW5oZXJpdHMgbmFtZT0nY29tLmdvb2dsZS5nd3QudXNlci5Vc2VyJy8+CisJPGVudHJ5LXBvaW50IGNsYXNzPSdjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5jbGllbnQuRHluYVRhYmxlJy8+CisJPHNlcnZsZXQgcGF0aD0nL2NhbGVuZGFyJyBjbGFzcz0nY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuc2VydmVyLlNjaG9vbENhbGVuZGFyU2VydmljZUltcGwnLz4KKwk8cHVibGljIHBhdGg9J2xlZ2FjeVB1YmxpYycvPgorPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9EYXlGaWx0ZXJXaWRnZXQuamF2YSBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L0RheUZpbHRlcldpZGdldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTRjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9EYXlGaWx0ZXJXaWRnZXQuamF2YQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5jbGllbnQ7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5DbGlja0hhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuQnV0dG9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkNoZWNrQm94OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkNvbXBvc2l0ZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IYXNBbGlnbm1lbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSG9yaXpvbnRhbFBhbmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlZlcnRpY2FsUGFuZWw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuV2lkZ2V0OworCisvKioKKyAqIEEgVUkgV2lkZ2V0IHRoYXQgYWxsb3dzIGEgdXNlciB0byBmaWx0ZXIgdGhlIGRheXMgYmVpbmcgZGlzcGxheWVkIGluIHRoZQorICogZHluYW1pYyB0YWJsZS4KKyAqLworcHVibGljIGNsYXNzIERheUZpbHRlcldpZGdldCBleHRlbmRzIENvbXBvc2l0ZSB7CisKKyAgcHJpdmF0ZSBjbGFzcyBEYXlDaGVja0JveCBleHRlbmRzIENoZWNrQm94IHsKKyAgICBwdWJsaWMgZmluYWwgaW50IGRheTsKKworICAgIHB1YmxpYyBEYXlDaGVja0JveChTdHJpbmcgY2FwdGlvbiwgaW50IGRheSkgeworICAgICAgc3VwZXIoY2FwdGlvbik7CisKKyAgICAgIC8vIFJlbWVtYmVyIGN1c3RvbSBkYXRhIGZvciB0aGlzIHdpZGdldC4KKyAgICAgIHRoaXMuZGF5ID0gZGF5OworCisgICAgICAvLyBVc2UgYSBzaGFyZWQgaGFuZGxlciB0byBzYXZlIG1lbW9yeS4KKyAgICAgIGFkZENsaWNrSGFuZGxlcihkYXlDaGVja0JveEhhbmRsZXIpOworCisgICAgICAvLyBJbml0aWFsaXplIGJhc2VkIG9uIHRoZSBjYWxlbmRhcidzIGN1cnJlbnQgdmFsdWUuCisgICAgICBzZXRDaGVja2VkKGNhbGVuZGFyLmdldERheUluY2x1ZGVkKGRheSkpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgY2xhc3MgRGF5Q2hlY2tCb3hIYW5kbGVyIGltcGxlbWVudHMgQ2xpY2tIYW5kbGVyIHsKKyAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKENsaWNrRXZlbnQgZXZlbnQpIHsKKyAgICAgIG9uQ2xpY2soKERheUNoZWNrQm94KSBldmVudC5nZXRTb3VyY2UoKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGF5Q2hlY2tCb3ggZGF5Q2hlY2tCb3gpIHsKKyAgICAgIGNhbGVuZGFyLnNldERheUluY2x1ZGVkKGRheUNoZWNrQm94LmRheSwgZGF5Q2hlY2tCb3guaXNDaGVja2VkKCkpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgU2Nob29sQ2FsZW5kYXJXaWRnZXQgY2FsZW5kYXI7CisKKyAgcHJpdmF0ZSBmaW5hbCBWZXJ0aWNhbFBhbmVsIG91dGVyID0gbmV3IFZlcnRpY2FsUGFuZWwoKTsKKworICBwcml2YXRlIGZpbmFsIERheUNoZWNrQm94SGFuZGxlciBkYXlDaGVja0JveEhhbmRsZXIgPSBuZXcgRGF5Q2hlY2tCb3hIYW5kbGVyKCk7CisKKyAgcHVibGljIERheUZpbHRlcldpZGdldChTY2hvb2xDYWxlbmRhcldpZGdldCBjYWxlbmRhcikgeworICAgIHRoaXMuY2FsZW5kYXIgPSBjYWxlbmRhcjsKKyAgICBpbml0V2lkZ2V0KG91dGVyKTsKKyAgICBzZXRTdHlsZU5hbWUoIkR5bmFUYWJsZS1EYXlGaWx0ZXJXaWRnZXQiKTsKKyAgICBvdXRlci5hZGQobmV3IERheUNoZWNrQm94KCJTdW5kYXkiLCAwKSk7CisgICAgb3V0ZXIuYWRkKG5ldyBEYXlDaGVja0JveCgiTW9uZGF5IiwgMSkpOworICAgIG91dGVyLmFkZChuZXcgRGF5Q2hlY2tCb3goIlR1ZXNkYXkiLCAyKSk7CisgICAgb3V0ZXIuYWRkKG5ldyBEYXlDaGVja0JveCgiV2VkbmVzZGF5IiwgMykpOworICAgIG91dGVyLmFkZChuZXcgRGF5Q2hlY2tCb3goIlRodXJzZGF5IiwgNCkpOworICAgIG91dGVyLmFkZChuZXcgRGF5Q2hlY2tCb3goIkZyaWRheSIsIDUpKTsKKyAgICBvdXRlci5hZGQobmV3IERheUNoZWNrQm94KCJTYXR1cmRheSIsIDYpKTsKKworICAgIEJ1dHRvbiBidXR0b25BbGwgPSBuZXcgQnV0dG9uKCJBbGwiLCBuZXcgQ2xpY2tIYW5kbGVyKCkgeworICAgICAgcHVibGljIHZvaWQgb25DbGljayhDbGlja0V2ZW50IGV2ZW50KSB7CisgICAgICAgIHNldEFsbENoZWNrQm94ZXModHJ1ZSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBCdXR0b24gYnV0dG9uTm9uZSA9IG5ldyBCdXR0b24oIk5vbmUiLCBuZXcgQ2xpY2tIYW5kbGVyKCkgeworICAgICAgcHVibGljIHZvaWQgb25DbGljayhDbGlja0V2ZW50IGV2ZW50KSB7CisgICAgICAgIHNldEFsbENoZWNrQm94ZXMoZmFsc2UpOworICAgICAgfQorICAgIH0pOworCisgICAgSG9yaXpvbnRhbFBhbmVsIGhwID0gbmV3IEhvcml6b250YWxQYW5lbCgpOworICAgIGhwLnNldEhvcml6b250YWxBbGlnbm1lbnQoSGFzQWxpZ25tZW50LkFMSUdOX0NFTlRFUik7CisgICAgaHAuYWRkKGJ1dHRvbkFsbCk7CisgICAgaHAuYWRkKGJ1dHRvbk5vbmUpOworCisgICAgb3V0ZXIuYWRkKGhwKTsKKyAgICBvdXRlci5zZXRDZWxsVmVydGljYWxBbGlnbm1lbnQoaHAsIEhhc0FsaWdubWVudC5BTElHTl9CT1RUT00pOworICAgIG91dGVyLnNldENlbGxIb3Jpem9udGFsQWxpZ25tZW50KGhwLCBIYXNBbGlnbm1lbnQuQUxJR05fQ0VOVEVSKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzZXRBbGxDaGVja0JveGVzKGJvb2xlYW4gY2hlY2tlZCkgeworICAgIGZvciAoaW50IGkgPSAwLCBuID0gb3V0ZXIuZ2V0V2lkZ2V0Q291bnQoKTsgaSA8IG47ICsraSkgeworICAgICAgV2lkZ2V0IHcgPSBvdXRlci5nZXRXaWRnZXQoaSk7CisgICAgICBpZiAodyBpbnN0YW5jZW9mIERheUNoZWNrQm94KSB7CisgICAgICAgICgoRGF5Q2hlY2tCb3gpIHcpLnNldENoZWNrZWQoY2hlY2tlZCk7CisgICAgICAgIGRheUNoZWNrQm94SGFuZGxlci5vbkNsaWNrKChEYXlDaGVja0JveCkgdyk7CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9EeW5hVGFibGUuamF2YSBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L0R5bmFUYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTIwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9EeW5hVGFibGUuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLmNsaWVudDsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkVudHJ5UG9pbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuUm9vdFBhbmVsOworCisvKioKKyAqIFRoZSBlbnRyeSBwb2ludCBjbGFzcyB3aGljaCBwZXJmb3JtcyB0aGUgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBEeW5hVGFibGUKKyAqIGFwcGxpY2F0aW9uLgorICovCitwdWJsaWMgY2xhc3MgRHluYVRhYmxlIGltcGxlbWVudHMgRW50cnlQb2ludCB7CisKKyAgcHVibGljIHZvaWQgb25Nb2R1bGVMb2FkKCkgeworICAgIC8vIEZpbmQgdGhlIHNsb3QgZm9yIHRoZSBjYWxlbmRhciB3aWRnZXQuCisgICAgLy8KKyAgICBSb290UGFuZWwgc2xvdCA9IFJvb3RQYW5lbC5nZXQoImNhbGVuZGFyIik7CisgICAgaWYgKHNsb3QgIT0gbnVsbCkgeworICAgICAgU2Nob29sQ2FsZW5kYXJXaWRnZXQgY2FsZW5kYXIgPSBuZXcgU2Nob29sQ2FsZW5kYXJXaWRnZXQoMTUpOworICAgICAgc2xvdC5hZGQoY2FsZW5kYXIpOworCisgICAgICAvLyBGaW5kIHRoZSBzbG90IGZvciB0aGUgZGF5cyBmaWx0ZXIgd2lkZ2V0LgorICAgICAgLy8KKyAgICAgIHNsb3QgPSBSb290UGFuZWwuZ2V0KCJkYXlzIik7CisgICAgICBpZiAoc2xvdCAhPSBudWxsKSB7CisgICAgICAgIERheUZpbHRlcldpZGdldCBmaWx0ZXIgPSBuZXcgRGF5RmlsdGVyV2lkZ2V0KGNhbGVuZGFyKTsKKyAgICAgICAgc2xvdC5hZGQoZmlsdGVyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L0R5bmFUYWJsZURhdGFQcm92aWRlci5qYXZhIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9jbGllbnQvRHluYVRhYmxlRGF0YVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3NWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L0R5bmFUYWJsZURhdGFQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50OworCisvKioKKyAqIEFuIGludGVyZmFjZSBmb3IgcHJvdmlkaW5nIHJvdy1sZXZlbCB1cGRhdGVzIG9mIGRhdGEsIGludGVuZGVkIGhlcmUgdG8gdXNlZAorICogdG8gdXBkYXRlIGEgRHluYVRhYmxlV2lkZ2V0LgorICovCitwdWJsaWMgaW50ZXJmYWNlIER5bmFUYWJsZURhdGFQcm92aWRlciB7CisKKyAgLyoqCisgICAqIEFuIGludGVyZmFjZSBhbGxvdyBhIHdpZGdldCB0byBhY2NlcHQgb3IgcmVwb3J0IGZhaWx1cmUgd2hlbiBhIHJvdyBkYXRhCisgICAqIGlzIGlzc3VlZCBmb3IgdXBkYXRlLgorICAgKi8KKyAgaW50ZXJmYWNlIFJvd0RhdGFBY2NlcHRvciB7CisgICAgdm9pZCBhY2NlcHQoaW50IHN0YXJ0Um93LCBTdHJpbmdbXVtdIHJvd3MpOworICAgIHZvaWQgZmFpbGVkKFRocm93YWJsZSBjYXVnaHQpOworICB9CisKKyAgdm9pZCB1cGRhdGVSb3dEYXRhKGludCBzdGFydFJvdywgaW50IG1heFJvd3MsIFJvd0RhdGFBY2NlcHRvciBhY2NlcHRvcik7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9EeW5hVGFibGVXaWRnZXQuamF2YSBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L0R5bmFUYWJsZVdpZGdldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTYyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9EeW5hVGFibGVXaWRnZXQuamF2YQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5jbGllbnQ7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5DbGlja0hhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50LkR5bmFUYWJsZURhdGFQcm92aWRlci5Sb3dEYXRhQWNjZXB0b3I7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLkludm9jYXRpb25FeGNlcHRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuQnV0dG9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkNvbXBvc2l0ZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5EaWFsb2dCb3g7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRG9ja1BhbmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkdyaWQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSFRNTDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IYXNBbGlnbm1lbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSG9yaXpvbnRhbFBhbmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlZlcnRpY2FsUGFuZWw7CisKKy8qKgorICogQSBjb21wb3NpdGUgV2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGUgbWFpbiBpbnRlcmZhY2UgZm9yIHRoZSBkeW5hbWljIHRhYmxlLAorICogaW5jbHVkaW5nIHRoZSBkYXRhIHRhYmxlLCBzdGF0dXMgaW5kaWNhdG9ycywgYW5kIHBhZ2luZyBidXR0b25zLgorICovCitwdWJsaWMgY2xhc3MgRHluYVRhYmxlV2lkZ2V0IGV4dGVuZHMgQ29tcG9zaXRlIHsKKworICAvKioKKyAgICogQSBkaWFsb2cgYm94IGZvciBkaXNwbGF5aW5nIGFuIGVycm9yLgorICAgKi8KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRXJyb3JEaWFsb2cgZXh0ZW5kcyBEaWFsb2dCb3ggaW1wbGVtZW50cyBDbGlja0hhbmRsZXIgeworICAgIHByaXZhdGUgSFRNTCBib2R5ID0gbmV3IEhUTUwoIiIpOworCisgICAgcHVibGljIEVycm9yRGlhbG9nKCkgeworICAgICAgc2V0U3R5bGVQcmltYXJ5TmFtZSgiRHluYVRhYmxlLUVycm9yRGlhbG9nIik7CisgICAgICBCdXR0b24gY2xvc2VCdXR0b24gPSBuZXcgQnV0dG9uKCJDbG9zZSIsIHRoaXMpOworICAgICAgVmVydGljYWxQYW5lbCBwYW5lbCA9IG5ldyBWZXJ0aWNhbFBhbmVsKCk7CisgICAgICBwYW5lbC5zZXRTcGFjaW5nKDQpOworICAgICAgcGFuZWwuYWRkKGJvZHkpOworICAgICAgcGFuZWwuYWRkKGNsb3NlQnV0dG9uKTsKKyAgICAgIHBhbmVsLnNldENlbGxIb3Jpem9udGFsQWxpZ25tZW50KGNsb3NlQnV0dG9uLCBWZXJ0aWNhbFBhbmVsLkFMSUdOX1JJR0hUKTsKKyAgICAgIHNldFdpZGdldChwYW5lbCk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRCb2R5KCkgeworICAgICAgcmV0dXJuIGJvZHkuZ2V0SFRNTCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkgeworICAgICAgaGlkZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEJvZHkoU3RyaW5nIGh0bWwpIHsKKyAgICAgIGJvZHkuc2V0SFRNTChodG1sKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGNsYXNzIE5hdkJhciBleHRlbmRzIENvbXBvc2l0ZSBpbXBsZW1lbnRzIENsaWNrSGFuZGxlciB7CisKKyAgICBwdWJsaWMgZmluYWwgRG9ja1BhbmVsIGJhciA9IG5ldyBEb2NrUGFuZWwoKTsKKyAgICBwdWJsaWMgZmluYWwgQnV0dG9uIGdvdG9GaXJzdCA9IG5ldyBCdXR0b24oIiZsdDsmbHQ7IiwgdGhpcyk7CisgICAgcHVibGljIGZpbmFsIEJ1dHRvbiBnb3RvTmV4dCA9IG5ldyBCdXR0b24oIiZndDsiLCB0aGlzKTsKKyAgICBwdWJsaWMgZmluYWwgQnV0dG9uIGdvdG9QcmV2ID0gbmV3IEJ1dHRvbigiJmx0OyIsIHRoaXMpOworICAgIHB1YmxpYyBmaW5hbCBIVE1MIHN0YXR1cyA9IG5ldyBIVE1MKCk7CisKKyAgICBwdWJsaWMgTmF2QmFyKCkgeworICAgICAgaW5pdFdpZGdldChiYXIpOworICAgICAgYmFyLnNldFN0eWxlTmFtZSgibmF2YmFyIik7CisgICAgICBzdGF0dXMuc2V0U3R5bGVOYW1lKCJzdGF0dXMiKTsKKworICAgICAgSG9yaXpvbnRhbFBhbmVsIGJ1dHRvbnMgPSBuZXcgSG9yaXpvbnRhbFBhbmVsKCk7CisgICAgICBidXR0b25zLmFkZChnb3RvRmlyc3QpOworICAgICAgYnV0dG9ucy5hZGQoZ290b1ByZXYpOworICAgICAgYnV0dG9ucy5hZGQoZ290b05leHQpOworICAgICAgYmFyLmFkZChidXR0b25zLCBEb2NrUGFuZWwuRUFTVCk7CisgICAgICBiYXIuc2V0Q2VsbEhvcml6b250YWxBbGlnbm1lbnQoYnV0dG9ucywgRG9ja1BhbmVsLkFMSUdOX1JJR0hUKTsKKyAgICAgIGJhci5hZGQoc3RhdHVzLCBEb2NrUGFuZWwuQ0VOVEVSKTsKKyAgICAgIGJhci5zZXRWZXJ0aWNhbEFsaWdubWVudChEb2NrUGFuZWwuQUxJR05fTUlERExFKTsKKyAgICAgIGJhci5zZXRDZWxsSG9yaXpvbnRhbEFsaWdubWVudChzdGF0dXMsIEhhc0FsaWdubWVudC5BTElHTl9SSUdIVCk7CisgICAgICBiYXIuc2V0Q2VsbFZlcnRpY2FsQWxpZ25tZW50KHN0YXR1cywgSGFzQWxpZ25tZW50LkFMSUdOX01JRERMRSk7CisgICAgICBiYXIuc2V0Q2VsbFdpZHRoKHN0YXR1cywgIjEwMCUiKTsKKworICAgICAgLy8gSW5pdGlhbGl6ZSBwcmV2ICYgZmlyc3QgYnV0dG9uIHRvIGRpc2FibGVkLgorICAgICAgLy8KKyAgICAgIGdvdG9QcmV2LnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgZ290b0ZpcnN0LnNldEVuYWJsZWQoZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkgeworICAgICAgT2JqZWN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpOworICAgICAgaWYgKHNvdXJjZSA9PSBnb3RvTmV4dCkgeworICAgICAgICBzdGFydFJvdyArPSBnZXREYXRhUm93Q291bnQoKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgfSBlbHNlIGlmIChzb3VyY2UgPT0gZ290b1ByZXYpIHsKKyAgICAgICAgc3RhcnRSb3cgLT0gZ2V0RGF0YVJvd0NvdW50KCk7CisgICAgICAgIGlmIChzdGFydFJvdyA8IDApIHsKKyAgICAgICAgICBzdGFydFJvdyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgfSBlbHNlIGlmIChzb3VyY2UgPT0gZ290b0ZpcnN0KSB7CisgICAgICAgIHN0YXJ0Um93ID0gMDsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgY2xhc3MgUm93RGF0YUFjY2VwdG9ySW1wbCBpbXBsZW1lbnRzIFJvd0RhdGFBY2NlcHRvciB7CisgICAgcHVibGljIHZvaWQgYWNjZXB0KGludCBzdGFydFJvdywgU3RyaW5nW11bXSBkYXRhKSB7CisKKyAgICAgIGludCBkZXN0Um93Q291bnQgPSBnZXREYXRhUm93Q291bnQoKTsKKyAgICAgIGludCBkZXN0Q29sQ291bnQgPSBncmlkLmdldENlbGxDb3VudCgwKTsKKyAgICAgIGFzc2VydCAoZGF0YS5sZW5ndGggPD0gZGVzdFJvd0NvdW50KSA6ICJUb28gbWFueSByb3dzIjsKKworICAgICAgaW50IHNyY1Jvd0luZGV4ID0gMDsKKyAgICAgIGludCBzcmNSb3dDb3VudCA9IGRhdGEubGVuZ3RoOworICAgICAgaW50IGRlc3RSb3dJbmRleCA9IDE7IC8vIHNraXAgbmF2YmFyIHJvdworICAgICAgZm9yICg7IHNyY1Jvd0luZGV4IDwgc3JjUm93Q291bnQ7ICsrc3JjUm93SW5kZXgsICsrZGVzdFJvd0luZGV4KSB7CisgICAgICAgIFN0cmluZ1tdIHNyY1Jvd0RhdGEgPSBkYXRhW3NyY1Jvd0luZGV4XTsKKyAgICAgICAgYXNzZXJ0IChzcmNSb3dEYXRhLmxlbmd0aCA9PSBkZXN0Q29sQ291bnQpIDogIiBDb2x1bW4gY291bnQgbWlzbWF0Y2giOworICAgICAgICBmb3IgKGludCBzcmNDb2xJbmRleCA9IDA7IHNyY0NvbEluZGV4IDwgZGVzdENvbENvdW50OyArK3NyY0NvbEluZGV4KSB7CisgICAgICAgICAgU3RyaW5nIGNlbGxIVE1MID0gc3JjUm93RGF0YVtzcmNDb2xJbmRleF07CisgICAgICAgICAgZ3JpZC5zZXRUZXh0KGRlc3RSb3dJbmRleCwgc3JjQ29sSW5kZXgsIGNlbGxIVE1MKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBDbGVhciByZW1haW5pbmcgdGFibGUgcm93cy4KKyAgICAgIC8vCisgICAgICBib29sZWFuIGlzTGFzdFBhZ2UgPSBmYWxzZTsKKyAgICAgIGZvciAoOyBkZXN0Um93SW5kZXggPCBkZXN0Um93Q291bnQgKyAxOyArK2Rlc3RSb3dJbmRleCkgeworICAgICAgICBpc0xhc3RQYWdlID0gdHJ1ZTsKKyAgICAgICAgZm9yIChpbnQgZGVzdENvbEluZGV4ID0gMDsgZGVzdENvbEluZGV4IDwgZGVzdENvbENvdW50OyArK2Rlc3RDb2xJbmRleCkgeworICAgICAgICAgIGdyaWQuY2xlYXJDZWxsKGRlc3RSb3dJbmRleCwgZGVzdENvbEluZGV4KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBTeW5jaHJvbml6ZSB0aGUgbmF2IGJ1dHRvbnMuCisgICAgICBuYXZiYXIuZ290b05leHQuc2V0RW5hYmxlZCghaXNMYXN0UGFnZSk7CisgICAgICBuYXZiYXIuZ290b0ZpcnN0LnNldEVuYWJsZWQoc3RhcnRSb3cgPiAwKTsKKyAgICAgIG5hdmJhci5nb3RvUHJldi5zZXRFbmFibGVkKHN0YXJ0Um93ID4gMCk7CisKKyAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdHVzIG1lc3NhZ2UuCisgICAgICAvLworICAgICAgc2V0U3RhdHVzVGV4dCgoc3RhcnRSb3cgKyAxKSArICIgLSAiICsgKHN0YXJ0Um93ICsgc3JjUm93Q291bnQpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmYWlsZWQoVGhyb3dhYmxlIGNhdWdodCkgeworICAgICAgc2V0U3RhdHVzVGV4dCgiRXJyb3IiKTsKKyAgICAgIGlmIChlcnJvckRpYWxvZyA9PSBudWxsKSB7CisgICAgICAgIGVycm9yRGlhbG9nID0gbmV3IEVycm9yRGlhbG9nKCk7CisgICAgICB9CisgICAgICBpZiAoY2F1Z2h0IGluc3RhbmNlb2YgSW52b2NhdGlvbkV4Y2VwdGlvbikgeworICAgICAgICBlcnJvckRpYWxvZy5zZXRUZXh0KCJBbiBSUEMgc2VydmVyIGNvdWxkIG5vdCBiZSByZWFjaGVkIik7CisgICAgICAgIGVycm9yRGlhbG9nLnNldEJvZHkoTk9fQ09OTkVDVElPTl9NRVNTQUdFKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yRGlhbG9nLnNldFRleHQoIlVuZXhjZXB0ZWQgRXJyb3IgcHJvY2Vzc2luZyByZW1vdGUgY2FsbCIpOworICAgICAgICBlcnJvckRpYWxvZy5zZXRCb2R5KGNhdWdodC5nZXRNZXNzYWdlKCkpOworICAgICAgfQorICAgICAgZXJyb3JEaWFsb2cuY2VudGVyKCk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0NPTk5FQ1RJT05fTUVTU0FHRSA9ICI8cD5UaGUgRHluYVRhYmxlIGV4YW1wbGUgdXNlcyBhIDxhIGhyZWY9XCJodHRwOi8vY29kZS5nb29nbGUuY29tLyIKKyAgICAgICsgIndlYnRvb2xraXQvZG9jdW1lbnRhdGlvbi9jb20uZ29vZ2xlLmd3dC5kb2MuRGV2ZWxvcGVyR3VpZGUuIgorICAgICAgKyAiUmVtb3RlUHJvY2VkdXJlQ2FsbHMuaHRtbFwiIHRhcmdldD1cIl9ibGFua1wiPlJlbW90ZSBQcm9jZWR1cmUgQ2FsbDwvYT4gIgorICAgICAgKyAiKFJQQykgdG8gcmVxdWVzdCBkYXRhIGZyb20gdGhlIHNlcnZlci4gIEluIG9yZGVyIGZvciB0aGUgUlBDIHRvICIKKyAgICAgICsgInN1Y2Nlc3NmdWxseSByZXR1cm4gZGF0YSwgdGhlIHNlcnZlciBjb21wb25lbnQgbXVzdCBiZSBhdmFpbGFibGUuPC9wPiIKKyAgICAgICsgIjxwPklmIHlvdSBhcmUgcnVubmluZyB0aGlzIGRlbW8gZnJvbSBjb21waWxlZCBjb2RlLCB0aGUgc2VydmVyICIKKyAgICAgICsgImNvbXBvbmVudCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byByZXNwb25kIHRvIHRoZSBSUEMgcmVxdWVzdHMgZnJvbSAiCisgICAgICArICJEeW5hVGFibGUuICBUcnkgcnVubmluZyBEeW5hVGFibGUgaW4gaG9zdGVkIG1vZGUgdG8gc2VlIHRoZSBkZW1vICIKKyAgICAgICsgImluIGFjdGlvbi48L3A+ICIKKyAgICAgICsgIjxwPkNsaWNrIG9uIHRoZSBSZW1vdGUgUHJvY2VkdXJlIENhbGwgbGluayBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiAiCisgICAgICArICJvbiBHV1QncyBSUEMgaW5mcmFzdHJ1Y3R1cmUuIjsKKworICBwcml2YXRlIGZpbmFsIFJvd0RhdGFBY2NlcHRvciBhY2NlcHRvciA9IG5ldyBSb3dEYXRhQWNjZXB0b3JJbXBsKCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBHcmlkIGdyaWQgPSBuZXcgR3JpZCgpOworCisgIHByaXZhdGUgZmluYWwgTmF2QmFyIG5hdmJhciA9IG5ldyBOYXZCYXIoKTsKKworICBwcml2YXRlIEVycm9yRGlhbG9nIGVycm9yRGlhbG9nID0gbnVsbDsKKworICBwcml2YXRlIGZpbmFsIERvY2tQYW5lbCBvdXRlciA9IG5ldyBEb2NrUGFuZWwoKTsKKworICBwcml2YXRlIGZpbmFsIER5bmFUYWJsZURhdGFQcm92aWRlciBwcm92aWRlcjsKKworICBwcml2YXRlIGludCBzdGFydFJvdyA9IDA7CisKKyAgcHVibGljIER5bmFUYWJsZVdpZGdldChEeW5hVGFibGVEYXRhUHJvdmlkZXIgcHJvdmlkZXIsIFN0cmluZ1tdIGNvbHVtbnMsCisgICAgICBTdHJpbmdbXSBjb2x1bW5TdHlsZXMsIGludCByb3dDb3VudCkgeworCisgICAgaWYgKGNvbHVtbnMubGVuZ3RoID09IDApIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgImV4cGVjdGluZyBhIHBvc2l0aXZlIG51bWJlciBvZiBjb2x1bW5zIik7CisgICAgfQorCisgICAgaWYgKGNvbHVtblN0eWxlcyAhPSBudWxsICYmIGNvbHVtbnMubGVuZ3RoICE9IGNvbHVtblN0eWxlcy5sZW5ndGgpIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImV4cGVjdGluZyBhcyBtYW55IHN0eWxlcyBhcyBjb2x1bW5zIik7CisgICAgfQorCisgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyOworICAgIGluaXRXaWRnZXQob3V0ZXIpOworICAgIGdyaWQuc2V0U3R5bGVOYW1lKCJ0YWJsZSIpOworICAgIG91dGVyLmFkZChuYXZiYXIsIERvY2tQYW5lbC5OT1JUSCk7CisgICAgb3V0ZXIuYWRkKGdyaWQsIERvY2tQYW5lbC5DRU5URVIpOworICAgIGluaXRUYWJsZShjb2x1bW5zLCBjb2x1bW5TdHlsZXMsIHJvd0NvdW50KTsKKyAgICBzZXRTdHlsZU5hbWUoIkR5bmFUYWJsZS1EeW5hVGFibGVXaWRnZXQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNsZWFyU3RhdHVzVGV4dCgpIHsKKyAgICBuYXZiYXIuc3RhdHVzLnNldEhUTUwoIiZuYnNwOyIpOworICB9CisKKyAgcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKyAgICAvLyBEaXNhYmxlIGJ1dHRvbnMgdGVtcG9yYXJpbHkgdG8gc3RvcCB0aGUgdXNlciBmcm9tIHJ1bm5pbmcgb2ZmIHRoZSBlbmQuCisgICAgLy8KKyAgICBuYXZiYXIuZ290b0ZpcnN0LnNldEVuYWJsZWQoZmFsc2UpOworICAgIG5hdmJhci5nb3RvUHJldi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBuYXZiYXIuZ290b05leHQuc2V0RW5hYmxlZChmYWxzZSk7CisKKyAgICBzZXRTdGF0dXNUZXh0KCJQbGVhc2Ugd2FpdC4uLiIpOworICAgIHByb3ZpZGVyLnVwZGF0ZVJvd0RhdGEoc3RhcnRSb3csIGdyaWQuZ2V0Um93Q291bnQoKSAtIDEsIGFjY2VwdG9yKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldFJvd0NvdW50KGludCByb3dzKSB7CisgICAgZ3JpZC5yZXNpemVSb3dzKHJvd3MpOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0U3RhdHVzVGV4dChTdHJpbmcgdGV4dCkgeworICAgIG5hdmJhci5zdGF0dXMuc2V0VGV4dCh0ZXh0KTsKKyAgfQorCisgIHByaXZhdGUgaW50IGdldERhdGFSb3dDb3VudCgpIHsKKyAgICByZXR1cm4gZ3JpZC5nZXRSb3dDb3VudCgpIC0gMTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBpbml0VGFibGUoU3RyaW5nW10gY29sdW1ucywgU3RyaW5nW10gY29sdW1uU3R5bGVzLCBpbnQgcm93Q291bnQpIHsKKyAgICAvLyBTZXQgdXAgdGhlIGhlYWRlciByb3cuIEl0J3Mgb25lIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHZpc2libGUgcm93cy4KKyAgICAvLworICAgIGdyaWQucmVzaXplKHJvd0NvdW50ICsgMSwgY29sdW1ucy5sZW5ndGgpOworICAgIGZvciAoaW50IGkgPSAwLCBuID0gY29sdW1ucy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKKyAgICAgIGdyaWQuc2V0VGV4dCgwLCBpLCBjb2x1bW5zW2ldKTsKKyAgICAgIGlmIChjb2x1bW5TdHlsZXMgIT0gbnVsbCkgeworICAgICAgICBncmlkLmdldENlbGxGb3JtYXR0ZXIoKS5zZXRTdHlsZU5hbWUoMCwgaSwgY29sdW1uU3R5bGVzW2ldICsgIiBoZWFkZXIiKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1BlcnNvbi5qYXZhIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9jbGllbnQvUGVyc29uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczNzAyZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1BlcnNvbi5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLklzU2VyaWFsaXphYmxlOworCisvKioKKyAqIEhvbGQgcmVsZXZhbnQgZGF0YSBmb3IgUGVyc29uLiBUaGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIHNlcmlhbGl6ZWQgaW4gUlBDCisgKiBjYWxscy4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFBlcnNvbiBpbXBsZW1lbnRzIElzU2VyaWFsaXphYmxlIHsKKworICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJERVNDIjsKKworICBwcml2YXRlIFN0cmluZyBuYW1lOworCisgIHB1YmxpYyBQZXJzb24oKSB7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgIHJldHVybiBkZXNjcmlwdGlvbjsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICByZXR1cm4gbmFtZTsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U2NoZWR1bGUoYm9vbGVhbltdIGRheXNGaWx0ZXIpOworCisgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9Qcm9mZXNzb3IuamF2YSBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1Byb2Zlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMmQxODgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9Qcm9mZXNzb3IuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLmNsaWVudDsKKworLyoqCisgKiBIb2xkcyByZWxldmFudCBkYXRhIGZvciBhIFByb2Zlc3NvciB0eXBlIFBlcnNvbi4gVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZQorICogc2VyaWFsaXplZCBpbiBSUEMgY2FsbHMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9mZXNzb3IgZXh0ZW5kcyBQZXJzb24geworCisgIHByaXZhdGUgU2NoZWR1bGUgdGVhY2hpbmdTY2hlZHVsZSA9IG5ldyBTY2hlZHVsZSgpOworCisgIHB1YmxpYyBQcm9mZXNzb3IoKSB7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyBnZXRTY2hlZHVsZShib29sZWFuW10gZGF5c0ZpbHRlcikgeworICAgIHJldHVybiB0ZWFjaGluZ1NjaGVkdWxlLmdldERlc2NyaXB0aW9uKGRheXNGaWx0ZXIpOworICB9CisKKyAgcHVibGljIFNjaGVkdWxlIGdldFRlYWNoaW5nU2NoZWR1bGUoKSB7CisgICAgcmV0dXJuIHRlYWNoaW5nU2NoZWR1bGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1NjaGVkdWxlLmphdmEgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TY2hlZHVsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGI0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TY2hlZHVsZS5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLklzU2VyaWFsaXphYmxlOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBIb2xkIHRoZSByZWxldmFudCBkYXRhIGZvciBhIFNjaGVkdWxlLiBUaGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIHNlcmlhbGl6ZWQKKyAqIGluIFJQQyBjYWxscy4KKyAqLworcHVibGljIGNsYXNzIFNjaGVkdWxlIGltcGxlbWVudHMgSXNTZXJpYWxpemFibGUgeworCisgIHByaXZhdGUgTGlzdDxUaW1lU2xvdD4gdGltZVNsb3RzID0gbmV3IEFycmF5TGlzdDxUaW1lU2xvdD4oKTsKKworICBwdWJsaWMgU2NoZWR1bGUoKSB7CisgIH0KKworICBwdWJsaWMgdm9pZCBhZGRUaW1lU2xvdChUaW1lU2xvdCB0aW1lU2xvdCkgeworICAgIHRpbWVTbG90cy5hZGQodGltZVNsb3QpOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbihib29sZWFuW10gZGF5c0ZpbHRlcikgeworICAgIFN0cmluZyBzID0gbnVsbDsKKyAgICBmb3IgKFRpbWVTbG90IHRpbWVTbG90IDogdGltZVNsb3RzKSB7CisgICAgICBpZiAoZGF5c0ZpbHRlclt0aW1lU2xvdC5nZXREYXlPZldlZWsoKV0pIHsKKyAgICAgICAgaWYgKHMgPT0gbnVsbCkgeworICAgICAgICAgIHMgPSB0aW1lU2xvdC5nZXREZXNjcmlwdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHMgKz0gIiwgIiArIHRpbWVTbG90LmdldERlc2NyaXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocyAhPSBudWxsKSB7CisgICAgICByZXR1cm4gczsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBnZXREZXNjcmlwdGlvbihudWxsKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YSBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1NjaG9vbENhbGVuZGFyU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YQpjb3B5IHRvIHNhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1NjaG9vbENhbGVuZGFyU2VydmljZS5qYXZhCmluZGV4IDkwNjI1OGIuLmZlZTY4ZjYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L3NoYXJlZC9IYXNIYW5kbGVyTWFuYWdlci5qYXZhCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1NjaG9vbENhbGVuZGFyU2VydmljZS5qYXZhCkBAIC0xLDMyICsxLDI4IEBACi0vKg0KLSAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuDQotICogDQotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90DQotICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YNCi0gKiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUDQotICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlDQotICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXINCi0gKiB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZDsNCi0NCi0vKioNCi0gKiANCi0gKiBDaGFyYWN0ZXJpc3RpYyBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGF0IHRoZSBnaXZlbiB3aWRnZXQgZmlyZXMgZXZlbnRzIHZpYSBhDQotICoge0BsaW5rIEhhbmRsZXJNYW5hZ2VyfS4NCi0gKiANCi0gKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJNYW5hZ2VyIHsNCi0gIC8qKg0KLSAgICogR2V0cyB0aGlzIHdpZGdldCdzIGhhbmRsZXIgbWFuYWdlci4NCi0gICAqIA0KLSAgICogQHJldHVybiB0aGUgbWFuYWdlcg0KLSAgICovDQotICBIYW5kbGVyTWFuYWdlciBnZXRIYW5kbGVyTWFuYWdlcigpOw0KLX0NCisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLmNsaWVudDsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnJwYy5SZW1vdGVTZXJ2aWNlOworCisvKioKKyAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBSUEMgc2VydmVyIGVuZHBvaW50IHRvIGdldCBzY2hvb2wgY2FsZW5kYXIKKyAqIGluZm9ybWF0aW9uLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFNjaG9vbENhbGVuZGFyU2VydmljZSBleHRlbmRzIFJlbW90ZVNlcnZpY2UgeworICAKKyAgUGVyc29uW10gZ2V0UGVvcGxlKGludCBzdGFydEluZGV4LCBpbnQgbWF4Q291bnQpOworICAKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1NjaG9vbENhbGVuZGFyU2VydmljZUFzeW5jLmphdmEgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TY2hvb2xDYWxlbmRhclNlcnZpY2VBc3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYTM3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TY2hvb2xDYWxlbmRhclNlcnZpY2VBc3luYy5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLkFzeW5jQ2FsbGJhY2s7CisKKy8qKgorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFJQQyBzZXJ2ZXIgZW5kcG9pbnQgdGhhdCBwcm92aWRlcyBzY2hvb2wgY2FsZW5kYXIKKyAqIGluZm9ybWF0aW9uIGZvciBjbGllbnRzIHRoYXQgd2lsbCBiZSBjYWxsaW5nIGFzeW5jaHJvbm91c2x5LiAKKyAqLworcHVibGljIGludGVyZmFjZSBTY2hvb2xDYWxlbmRhclNlcnZpY2VBc3luYyB7CisKKyAgdm9pZCBnZXRQZW9wbGUoaW50IHN0YXJ0SW5kZXgsIGludCBtYXhDb3VudCwgQXN5bmNDYWxsYmFjazxQZXJzb25bXT4gY2FsbGJhY2spOworCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TY2hvb2xDYWxlbmRhcldpZGdldC5qYXZhIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9jbGllbnQvU2Nob29sQ2FsZW5kYXJXaWRnZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU0ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9jbGllbnQvU2Nob29sQ2FsZW5kYXJXaWRnZXQuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5jbGllbnQ7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5HV1Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuQ29tbWFuZDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5EZWZlcnJlZENvbW1hbmQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLkFzeW5jQ2FsbGJhY2s7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLlNlcnZpY2VEZWZUYXJnZXQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuQ29tcG9zaXRlOworCisvKioKKyAqIEEgQ29tcG9zaXRlIHdpZGdldCB0aGF0IGFic3RyYWN0cyBhIER5bmFUYWJsZVdpZGdldCBhbmQgYSBkYXRhIHByb3ZpZGVyIHRpZWQKKyAqIHRvIHRoZSA8QGxpbmsgU2Nob29sQ2FsZW5kYXJTZXJ2aWNlPiBSUEMgZW5kcG9pbnQuCisgKi8KK3B1YmxpYyBjbGFzcyBTY2hvb2xDYWxlbmRhcldpZGdldCBleHRlbmRzIENvbXBvc2l0ZSB7CisKKyAgLyoqCisgICAqIEEgZGF0YSBwcm92aWRlciB0aGF0IGJyaWRnZXMgdGhlIHByb3ZpZGVzIHJvdyBsZXZlbCB1cGRhdGVzIGZyb20gdGhlIGRhdGEKKyAgICogYXZhaWxhYmxlIHRocm91Z2ggYSA8QGxpbmsgU2Nob29sQ2FsZW5kYXJTZXJ2aWNlPi4KKyAgICovCisgIHB1YmxpYyBjbGFzcyBDYWxlbmRhclByb3ZpZGVyIGltcGxlbWVudHMgRHluYVRhYmxlRGF0YVByb3ZpZGVyIHsKKworICAgIHByaXZhdGUgZmluYWwgU2Nob29sQ2FsZW5kYXJTZXJ2aWNlQXN5bmMgY2FsU2VydmljZTsKKworICAgIHByaXZhdGUgaW50IGxhc3RNYXhSb3dzID0gLTE7CisKKyAgICBwcml2YXRlIFBlcnNvbltdIGxhc3RQZW9wbGU7CisKKyAgICBwcml2YXRlIGludCBsYXN0U3RhcnRSb3cgPSAtMTsKKworICAgIHB1YmxpYyBDYWxlbmRhclByb3ZpZGVyKCkgeworICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgc2VydmljZS4KKyAgICAgIC8vCisgICAgICBjYWxTZXJ2aWNlID0gKFNjaG9vbENhbGVuZGFyU2VydmljZUFzeW5jKSBHV1QuY3JlYXRlKFNjaG9vbENhbGVuZGFyU2VydmljZS5jbGFzcyk7CisKKyAgICAgIC8vIEJ5IGRlZmF1bHQsIHdlIGFzc3VtZSB3ZSdsbCBtYWtlIFJQQ3MgdG8gYSBzZXJ2bGV0LCBidXQgc2VlCisgICAgICAvLyB1cGRhdGVSb3dEYXRhKCkuIFRoZXJlIGlzIHNwZWNpYWwgc3VwcG9ydCBmb3IgY2FubmVkIFJQQyByZXNwb25zZXMuCisgICAgICAvLyAoV2hpY2ggaXMgYSB0b3RhbGx5IGRlbW8gaGFjaywgYnkgdGhlIHdheSA6LSkKKyAgICAgIC8vIAorICAgICAgU2VydmljZURlZlRhcmdldCB0YXJnZXQgPSAoU2VydmljZURlZlRhcmdldCkgY2FsU2VydmljZTsKKworICAgICAgLy8gVXNlIGEgbW9kdWxlLXJlbGF0aXZlIFVSTHMgdG8gZW5zdXJlIHRoYXQgdGhpcyBjbGllbnQgY29kZSBjYW4gZmluZAorICAgICAgLy8gaXRzIHdheSBob21lLCBldmVuIHdoZW4gdGhlIFVSTCBjaGFuZ2VzIChhcyBtaWdodCBoYXBwZW4gd2hlbiB5b3UKKyAgICAgIC8vIGRlcGxveSB0aGlzIGFzIGEgd2ViYXBwIHVuZGVyIGFuIGV4dGVybmFsIHNlcnZsZXQgY29udGFpbmVyKS4KKyAgICAgIFN0cmluZyBtb2R1bGVSZWxhdGl2ZVVSTCA9IEdXVC5nZXRNb2R1bGVCYXNlVVJMKCkgKyAiY2FsZW5kYXIiOworICAgICAgdGFyZ2V0LnNldFNlcnZpY2VFbnRyeVBvaW50KG1vZHVsZVJlbGF0aXZlVVJMKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVSb3dEYXRhKGZpbmFsIGludCBzdGFydFJvdywgZmluYWwgaW50IG1heFJvd3MsCisgICAgICAgIGZpbmFsIFJvd0RhdGFBY2NlcHRvciBhY2NlcHRvcikgeworICAgICAgLy8gQ2hlY2sgdGhlIHNpbXBsZSBjYWNoZSBmaXJzdC4KKyAgICAgIC8vCisgICAgICBpZiAoc3RhcnRSb3cgPT0gbGFzdFN0YXJ0Um93KSB7CisgICAgICAgIGlmIChtYXhSb3dzID09IGxhc3RNYXhSb3dzKSB7CisgICAgICAgICAgLy8gVXNlIHRoZSBjYWNoZWQgYmF0Y2guCisgICAgICAgICAgLy8KKyAgICAgICAgICBwdXNoUmVzdWx0cyhhY2NlcHRvciwgc3RhcnRSb3csIGxhc3RQZW9wbGUpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBGZXRjaCB0aGUgZGF0YSByZW1vdGVseS4KKyAgICAgIC8vCisgICAgICBjYWxTZXJ2aWNlLmdldFBlb3BsZShzdGFydFJvdywgbWF4Um93cywgbmV3IEFzeW5jQ2FsbGJhY2s8UGVyc29uW10+KCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkZhaWx1cmUoVGhyb3dhYmxlIGNhdWdodCkgeworICAgICAgICAgIGFjY2VwdG9yLmZhaWxlZChjYXVnaHQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25TdWNjZXNzKFBlcnNvbltdIHJlc3VsdCkgeworICAgICAgICAgIGxhc3RTdGFydFJvdyA9IHN0YXJ0Um93OworICAgICAgICAgIGxhc3RNYXhSb3dzID0gbWF4Um93czsKKyAgICAgICAgICBsYXN0UGVvcGxlID0gcmVzdWx0OworICAgICAgICAgIHB1c2hSZXN1bHRzKGFjY2VwdG9yLCBzdGFydFJvdywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICB9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHVzaFJlc3VsdHMoUm93RGF0YUFjY2VwdG9yIGFjY2VwdG9yLCBpbnQgc3RhcnRSb3csCisgICAgICAgIFBlcnNvbltdIHBlb3BsZSkgeworICAgICAgU3RyaW5nW11bXSByb3dzID0gbmV3IFN0cmluZ1twZW9wbGUubGVuZ3RoXVtdOworICAgICAgZm9yIChpbnQgaSA9IDAsIG4gPSByb3dzLmxlbmd0aDsgaSA8IG47IGkrKykgeworICAgICAgICBQZXJzb24gcGVyc29uID0gcGVvcGxlW2ldOworICAgICAgICByb3dzW2ldID0gbmV3IFN0cmluZ1szXTsKKyAgICAgICAgcm93c1tpXVswXSA9IHBlcnNvbi5nZXROYW1lKCk7CisgICAgICAgIHJvd3NbaV1bMV0gPSBwZXJzb24uZ2V0RGVzY3JpcHRpb24oKTsKKyAgICAgICAgcm93c1tpXVsyXSA9IHBlcnNvbi5nZXRTY2hlZHVsZShkYXlzRmlsdGVyKTsKKyAgICAgIH0KKyAgICAgIGFjY2VwdG9yLmFjY2VwdChzdGFydFJvdywgcm93cyk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBDYWxlbmRhclByb3ZpZGVyIGNhbFByb3ZpZGVyID0gbmV3IENhbGVuZGFyUHJvdmlkZXIoKTsKKworICBwcml2YXRlIGZpbmFsIGJvb2xlYW5bXSBkYXlzRmlsdGVyID0gbmV3IGJvb2xlYW5bXSB7CisgICAgICB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKKworICBwcml2YXRlIGZpbmFsIER5bmFUYWJsZVdpZGdldCBkeW5hVGFibGU7CisKKyAgcHJpdmF0ZSBDb21tYW5kIHBlbmRpbmdSZWZyZXNoOworCisgIHB1YmxpYyBTY2hvb2xDYWxlbmRhcldpZGdldChpbnQgdmlzaWJsZVJvd3MpIHsKKyAgICBTdHJpbmdbXSBjb2x1bW5zID0gbmV3IFN0cmluZ1tdIHsiTmFtZSIsICJEZXNjcmlwdGlvbiIsICJTY2hlZHVsZSJ9OworICAgIFN0cmluZ1tdIHN0eWxlcyA9IG5ldyBTdHJpbmdbXSB7Im5hbWUiLCAiZGVzYyIsICJzY2hlZCJ9OworICAgIGR5bmFUYWJsZSA9IG5ldyBEeW5hVGFibGVXaWRnZXQoY2FsUHJvdmlkZXIsIGNvbHVtbnMsIHN0eWxlcywgdmlzaWJsZVJvd3MpOworICAgIGluaXRXaWRnZXQoZHluYVRhYmxlKTsKKyAgfQorCisgIHByb3RlY3RlZCBib29sZWFuIGdldERheUluY2x1ZGVkKGludCBkYXkpIHsKKyAgICByZXR1cm4gZGF5c0ZpbHRlcltkYXldOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIG9uTG9hZCgpIHsKKyAgICBkeW5hVGFibGUucmVmcmVzaCgpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgc2V0RGF5SW5jbHVkZWQoaW50IGRheSwgYm9vbGVhbiBpbmNsdWRlZCkgeworICAgIGlmIChkYXlzRmlsdGVyW2RheV0gPT0gaW5jbHVkZWQpIHsKKyAgICAgIC8vIE5vIGNoYW5nZS4KKyAgICAgIC8vCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF5c0ZpbHRlcltkYXldID0gaW5jbHVkZWQ7CisgICAgaWYgKHBlbmRpbmdSZWZyZXNoID09IG51bGwpIHsKKyAgICAgIHBlbmRpbmdSZWZyZXNoID0gbmV3IENvbW1hbmQoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7CisgICAgICAgICAgcGVuZGluZ1JlZnJlc2ggPSBudWxsOworICAgICAgICAgIGR5bmFUYWJsZS5yZWZyZXNoKCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBEZWZlcnJlZENvbW1hbmQuYWRkQ29tbWFuZChwZW5kaW5nUmVmcmVzaCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TdHVkZW50LmphdmEgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9TdHVkZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4ZDA2OAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvY2xpZW50L1N0dWRlbnQuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLmNsaWVudDsKKworLyoqCisgKiBIb2xkcyByZWxldmFudCBkYXRhIGZvciBhIFN0dWRlbnQgdHlwZSBQZXJzb24uIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUKKyAqIHNlcmlhbGl6ZWQgaW4gUlBDIGNhbGxzLgorICovCitwdWJsaWMgY2xhc3MgU3R1ZGVudCBleHRlbmRzIFBlcnNvbiB7CisKKyAgcHJpdmF0ZSBTY2hlZHVsZSBjbGFzc1NjaGVkdWxlID0gbmV3IFNjaGVkdWxlKCk7CisKKyAgcHVibGljIFNjaGVkdWxlIGdldENsYXNzU2NoZWR1bGUoKSB7CisgICAgcmV0dXJuIGNsYXNzU2NoZWR1bGU7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyBnZXRTY2hlZHVsZShib29sZWFuW10gZGF5c0ZpbHRlcikgeworICAgIHJldHVybiBjbGFzc1NjaGVkdWxlLmdldERlc2NyaXB0aW9uKGRheXNGaWx0ZXIpOworICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2NsaWVudC9UaW1lU2xvdC5qYXZhIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9jbGllbnQvVGltZVNsb3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTBmMTMwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9keW5hdGFibGUyL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvZHluYXRhYmxlMi9jbGllbnQvVGltZVNsb3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5jbGllbnQ7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5ycGMuSXNTZXJpYWxpemFibGU7CisKKy8qKgorICogSG9sZCByZWxldmFudCBkYXRhIGZvciBhIHRpbWUgc2xvdC4gVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkCisgKiBhcyBwYXJ0IG9mIFJQQyBjYWxscy4KKyAqLworcHVibGljIGNsYXNzIFRpbWVTbG90IGltcGxlbWVudHMgSXNTZXJpYWxpemFibGUsIENvbXBhcmFibGU8VGltZVNsb3Q+IHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCB0cmFuc2llbnQgU3RyaW5nW10gREFZUyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAiU3VuIiwgIk1vbiIsICJUdWVzIiwgIldlZCIsICJUaHVycyIsICJGcmkiLCAiU2F0In07CisKKyAgcHJpdmF0ZSBpbnQgZW5kTWludXRlczsKKworICBwcml2YXRlIGludCBzdGFydE1pbnV0ZXM7CisKKyAgcHJpdmF0ZSBpbnQgemVyb0Jhc2VkRGF5T2ZXZWVrOworCisgIHB1YmxpYyBUaW1lU2xvdCgpIHsKKyAgfQorCisgIHB1YmxpYyBUaW1lU2xvdChpbnQgemVyb0Jhc2VkRGF5T2ZXZWVrLCBpbnQgc3RhcnRNaW51dGVzLCBpbnQgZW5kTWludXRlcykgeworICAgIHRoaXMuemVyb0Jhc2VkRGF5T2ZXZWVrID0gemVyb0Jhc2VkRGF5T2ZXZWVrOworICAgIHRoaXMuc3RhcnRNaW51dGVzID0gc3RhcnRNaW51dGVzOworICAgIHRoaXMuZW5kTWludXRlcyA9IGVuZE1pbnV0ZXM7CisgIH0KKworICBwdWJsaWMgaW50IGNvbXBhcmVUbyhUaW1lU2xvdCBvKSB7CisgICAgaWYgKHplcm9CYXNlZERheU9mV2VlayA8IG8uemVyb0Jhc2VkRGF5T2ZXZWVrKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmICh6ZXJvQmFzZWREYXlPZldlZWsgPiBvLnplcm9CYXNlZERheU9mV2VlaykgeworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChzdGFydE1pbnV0ZXMgPCBvLnN0YXJ0TWludXRlcykgeworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9IGVsc2UgaWYgKHN0YXJ0TWludXRlcyA+IG8uc3RhcnRNaW51dGVzKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIGludCBnZXREYXlPZldlZWsoKSB7CisgICAgcmV0dXJuIHplcm9CYXNlZERheU9mV2VlazsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgcmV0dXJuIERBWVNbemVyb0Jhc2VkRGF5T2ZXZWVrXSArICIgIiArIGdldEhyc01pbnMoc3RhcnRNaW51dGVzKSArICItIgorICAgICAgICArIGdldEhyc01pbnMoZW5kTWludXRlcyk7CisgIH0KKworICBwdWJsaWMgaW50IGdldEVuZE1pbnV0ZXMoKSB7CisgICAgcmV0dXJuIGVuZE1pbnV0ZXM7CisgIH0KKworICBwdWJsaWMgaW50IGdldFN0YXJ0TWludXRlcygpIHsKKyAgICByZXR1cm4gc3RhcnRNaW51dGVzOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0RGF5T2ZXZWVrKGludCB6ZXJvQmFzZWREYXlPZldlZWspIHsKKyAgICBpZiAoMCA8PSB6ZXJvQmFzZWREYXlPZldlZWsgJiYgemVyb0Jhc2VkRGF5T2ZXZWVrIDwgNykgeworICAgICAgdGhpcy56ZXJvQmFzZWREYXlPZldlZWsgPSB6ZXJvQmFzZWREYXlPZldlZWs7CisgICAgfSBlbHNlIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRheSBtdXN0IGJlIGluIHRoZSByYW5nZSAwLTYiKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRFbmRNaW51dGVzKGludCBlbmRNaW51dGVzKSB7CisgICAgdGhpcy5lbmRNaW51dGVzID0gZW5kTWludXRlczsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldFN0YXJ0TWludXRlcyhpbnQgc3RhcnRNaW51dGVzKSB7CisgICAgdGhpcy5zdGFydE1pbnV0ZXMgPSBzdGFydE1pbnV0ZXM7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBnZXRIcnNNaW5zKGludCBtaW5zKSB7CisgICAgaW50IGhycyA9IG1pbnMgLyA2MDsKKyAgICBpZiAoaHJzID4gMTIpIHsKKyAgICAgIGhycyAtPSAxMjsKKyAgICB9CisKKyAgICBpbnQgcmVtYWluZGVyID0gbWlucyAlIDYwOworCisgICAgcmV0dXJuIGhycyArICI6IgorICAgICAgICArIChyZW1haW5kZXIgPCAxMCA/ICIwIiArIHJlbWFpbmRlciA6IFN0cmluZy52YWx1ZU9mKHJlbWFpbmRlcikpOworICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2xlZ2FjeVB1YmxpYy9EeW5hVGFibGUyTGVnYWN5LmNzcyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvbGVnYWN5UHVibGljL0R5bmFUYWJsZTJMZWdhY3kuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODFhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2xlZ2FjeVB1YmxpYy9EeW5hVGFibGUyTGVnYWN5LmNzcwpAQCAtMCwwICsxLDg1IEBACisKK2JvZHkgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgY29sb3I6IGJsYWNrOworICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogc21hbGw7CisgIG1hcmdpbjogOHB4OworICBtYXJnaW4tdG9wOiAzcHg7Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IHsKKwl3aWR0aDogMTAwJTsKKwlib3JkZXI6IDFweCBzb2xpZCAjQUNBODk5OworfQorCisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC5uYXZiYXIgeworCXdpZHRoOiAxMDAlOworCWJhY2tncm91bmQtY29sb3I6ICNFQ0U5RDg7CisJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKwlib3JkZXItYm90dG9tOiAxcHggc29saWQgI0FDQTg5OTsKK30KKworLkR5bmFUYWJsZS1EeW5hVGFibGVXaWRnZXQgLm5hdmJhciBidXR0b24geworCXdpZHRoOiAzZW07CisJdGV4dC1hbGlnbjogY2VudGVyOworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC5uYXZiYXIgLnN0YXR1cyB7CisJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKwlwYWRkaW5nLXJpZ2h0OiAxMHB4OworfQorCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCAudGFibGUgeworCW1hcmdpbjogMTBweDsKK30KKworLkR5bmFUYWJsZS1EeW5hVGFibGVXaWRnZXQgLnRhYmxlIHRkLmhlYWRlciB7CisJdGV4dC1hbGlnbjogbGVmdDsKKwlmb250LXdlaWdodDogYm9sZDsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLkR5bmFUYWJsZS1EeW5hVGFibGVXaWRnZXQgLnRhYmxlIHRkLm5hbWUgeworCXdpZHRoOiAxMGVtOworfQorCisuRHluYVRhYmxlLUR5bmFUYWJsZVdpZGdldCAudGFibGUgdGQuZGVzYyB7CisJd2lkdGg6IDIwZW07Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC50YWJsZSB0ZC5zY2hlZCB7CisJd2lkdGg6IDIwZW07Cit9CisKKy5EeW5hVGFibGUtRHluYVRhYmxlV2lkZ2V0IC50YWJsZSB0ZCB7CisJdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworLkR5bmFUYWJsZS1EYXlGaWx0ZXJXaWRnZXQgeworCW1hcmdpbjogM2VtIDFlbSAxZW0gMDsKKwl3aWR0aDogMTBlbTsKKwlwYWRkaW5nOiAwcHggOHB4IDBweCA4cHg7CisJYm9yZGVyOiAxcHggc29saWQgI0FDQTg5OTsKK30KKworLkR5bmFUYWJsZS1EYXlGaWx0ZXJXaWRnZXQgYnV0dG9uIHsKKwl3aWR0aDogNGVtOworCW1hcmdpbjogOHB4IDRweCA4cHggNHB4OworfQorCisuRHluYVRhYmxlLUVycm9yRGlhbG9nIHsKKyAgYm9yZGVyOiAycHggb3V0c2V0OworICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgd2lkdGg6IDUwJTsKK30KKworLkR5bmFUYWJsZS1FcnJvckRpYWxvZyAuQ2FwdGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNDM0Q5RkY7CisgIHBhZGRpbmc6IDNweDsKKyAgbWFyZ2luOiAycHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjdXJzb3I6IGRlZmF1bHQ7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2xlZ2FjeVB1YmxpYy9EeW5hVGFibGUyTGVnYWN5Lmh0bWwgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL2xlZ2FjeVB1YmxpYy9EeW5hVGFibGUyTGVnYWN5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1ODg3YQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvbGVnYWN5UHVibGljL0R5bmFUYWJsZTJMZWdhY3kuaHRtbApAQCAtMCwwICsxLDM1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSAgICAtLT4KKzwhLS0gbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgICAtLT4KKzwhLS0gbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAtLT4KKzwhLS0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAtLT4KKzwhLS0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yICAgICAgICAtLT4KKzwhLS0gaW1wbGllZC4gTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAtLT4KKzwhLS0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKyAKKzxodG1sPgorICA8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+CisgICAgPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iRHluYVRhYmxlMkxlZ2FjeS5jc3MiPgorICAgIDx0aXRsZT48L3RpdGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorICA8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDonJyIgaWQ9J19fZ3d0X2hpc3RvcnlGcmFtZScgdGFiSW5kZXg9Jy0xJyBzdHlsZT0nd2lkdGg6MDtoZWlnaHQ6MDtib3JkZXI6MCc+PC9pZnJhbWU+CisJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9J2NvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLkR5bmFUYWJsZTJMZWdhY3kubm9jYWNoZS5qcyc+PC9zY3JpcHQ+CisgICAgPGgxPlNjaG9vbCBTY2hlZHVsZSBmb3IgUHJvZmVzc29ycyBhbmQgU3R1ZGVudHM8L2gxPgorICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTY2hvb2wgU2NoZWR1bGUgZm9yIFByb2Zlc3NvcnMgYW5kIFN0dWRlbnRzIj4KKyAgICAgIDx0ciB2YWxpZ249InRvcCI+CisgICAgICAgIDx0ZCBpZD0iY2FsZW5kYXIiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI5MCUiPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgaWQ9ImRheXMiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMCUiPgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL3NlcnZlci9TY2hvb2xDYWxlbmRhclNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2R5bmF0YWJsZTIvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9keW5hdGFibGUyL3NlcnZlci9TY2hvb2xDYWxlbmRhclNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwNWVkYgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZHluYXRhYmxlMi9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL2R5bmF0YWJsZTIvc2VydmVyL1NjaG9vbENhbGVuZGFyU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5zZXJ2ZXI7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuZHluYXRhYmxlMi5jbGllbnQuUGVyc29uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLmNsaWVudC5Qcm9mZXNzb3I7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50LlNjaGVkdWxlOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5keW5hdGFibGUyLmNsaWVudC5TY2hvb2xDYWxlbmRhclNlcnZpY2U7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50LlN0dWRlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLmR5bmF0YWJsZTIuY2xpZW50LlRpbWVTbG90OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuc2VydmVyLnJwYy5SZW1vdGVTZXJ2aWNlU2VydmxldDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCisvKioKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlBDIHNlcnZpY2Ugd2hpY2ggcnVucyBvbiB0aGUgc2VydmVyLgorICovCitwdWJsaWMgY2xhc3MgU2Nob29sQ2FsZW5kYXJTZXJ2aWNlSW1wbCBleHRlbmRzIFJlbW90ZVNlcnZpY2VTZXJ2bGV0IGltcGxlbWVudHMKKyAgICBTY2hvb2xDYWxlbmRhclNlcnZpY2UgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEZJUlNUX05BTUVTID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICJJbm1hbiIsICJTYWxseSIsICJPbWFyIiwgIlRlZGR5IiwgIkppbW15IiwgIkNhdGh5IiwgIkJhcm5leSIsICJGcmVkIiwKKyAgICAgICJFZGRpZSIsICJDYXJsb3MifTsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBMQVNUX05BTUVTID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICJTbWl0aCIsICJKb25lcyIsICJFcHBzIiwgIkdpYmJzIiwgIldlYmJlciIsICJCbHVtIiwgIk1lbmRleiIsCisgICAgICAiQ3J1dGNoZXIiLCAiTmVlZGxlciIsICJXaWxzb24iLCAiQ2hhc2UiLCAiRWRlbHN0ZWluIn07CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gU1VCSkVDVFMgPSBuZXcgU3RyaW5nW10geworICAgICAgIkNoZW1pc3RyeSIsICJQaHJlbm9sb2d5IiwgIkdlb21ldHJ5IiwgIlVuZGVyd2F0ZXIgQmFza2V0IFdlYXZpbmciLAorICAgICAgIkJhc2tldGJhbGwiLCAiQ29tcHV0ZXIgU2NpZW5jZSIsICJTdGF0aXN0aWNzIiwgIk1hdGVyaWFscyBFbmdpbmVlcmluZyIsCisgICAgICAiRW5nbGlzaCBMaXRlcmF0dXJlIiwgIkdlb2xvZ3kifTsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQZXJzb25bXSBOT19QRU9QTEUgPSBuZXcgUGVyc29uWzBdOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDTEFTU19MRU5HVEhfTUlOUyA9IDUwOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfU0NIRURfRU5UUklFUyA9IDU7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9TQ0hFRF9FTlRSSUVTID0gMTsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1BFT1BMRSA9IDEwMDsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RVREVOVFNfUEVSX1BST0YgPSA1OworCisgIHByaXZhdGUgZmluYWwgTGlzdDxQZXJzb24+IHBlb3BsZSA9IG5ldyBBcnJheUxpc3Q8UGVyc29uPigpOworCisgIHByaXZhdGUgZmluYWwgUmFuZG9tIHJuZCA9IG5ldyBSYW5kb20oMyk7CisKKyAgcHVibGljIFNjaG9vbENhbGVuZGFyU2VydmljZUltcGwoKSB7CisgICAgZ2VuZXJhdGVSYW5kb21QZW9wbGUoKTsKKyAgfQorCisgIHB1YmxpYyBQZXJzb25bXSBnZXRQZW9wbGUoaW50IHN0YXJ0SW5kZXgsIGludCBtYXhDb3VudCkgeworICAgIGludCBwZW9wbGVDb3VudCA9IHBlb3BsZS5zaXplKCk7CisKKyAgICBpbnQgc3RhcnQgPSBzdGFydEluZGV4OworICAgIGlmIChzdGFydCA+PSBwZW9wbGVDb3VudCkgeworICAgICAgcmV0dXJuIE5PX1BFT1BMRTsKKyAgICB9CisKKyAgICBpbnQgZW5kID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heENvdW50LCBwZW9wbGVDb3VudCk7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgcmV0dXJuIE5PX1BFT1BMRTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0Q291bnQgPSBlbmQgLSBzdGFydDsKKyAgICBQZXJzb25bXSByZXN1bHRzID0gbmV3IFBlcnNvbltyZXN1bHRDb3VudF07CisgICAgZm9yIChpbnQgZnJvbSA9IHN0YXJ0LCB0byA9IDA7IHRvIDwgcmVzdWx0Q291bnQ7ICsrZnJvbSwgKyt0bykgeworICAgICAgcmVzdWx0c1t0b10gPSBwZW9wbGUuZ2V0KGZyb20pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHRzOworICB9CisKKyAgLyoqCisgICAqIFdyaXRlIHRoZSBzZXJpYWxpemVkIHJlc3BvbnNlIG91dCB0byBzdGRvdXQuIFRoaXMgaXMgYSB2ZXJ5IHVudXN1YWwgdGhpbmcKKyAgICogdG8gZG8sIGJ1dCBpdCBhbGxvd3MgdXMgdG8gY3JlYXRlIGEgc3RhdGljIGZpbGUgdmVyc2lvbiBvZiB0aGUgcmVzcG9uc2UKKyAgICogd2l0aG91dCBkZXBsb3lpbmcgYSBzZXJ2bGV0LgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIG9uQWZ0ZXJSZXNwb25zZVNlcmlhbGl6ZWQoU3RyaW5nIHNlcmlhbGl6ZWRSZXNwb25zZSkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZXJpYWxpemVkUmVzcG9uc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlUmFuZG9tUGVvcGxlKCkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1BFT1BMRTsgKytpKSB7CisgICAgICBQZXJzb24gcGVyc29uID0gZ2VuZXJhdGVSYW5kb21QZXJzb24oKTsKKyAgICAgIHBlb3BsZS5hZGQocGVyc29uKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIFBlcnNvbiBnZW5lcmF0ZVJhbmRvbVBlcnNvbigpIHsKKyAgICAvLyAxIG91dCBvZiBldmVyeSBzbyBtYW55IHBlb3BsZSBpcyBhIHByb2YuCisgICAgLy8KKyAgICBpZiAocm5kLm5leHRJbnQoU1RVREVOVFNfUEVSX1BST0YpID09IDEpIHsKKyAgICAgIHJldHVybiBnZW5lcmF0ZVJhbmRvbVByb2Zlc3NvcigpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZ2VuZXJhdGVSYW5kb21TdHVkZW50KCk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBQZXJzb24gZ2VuZXJhdGVSYW5kb21Qcm9mZXNzb3IoKSB7CisgICAgUHJvZmVzc29yIHByb2YgPSBuZXcgUHJvZmVzc29yKCk7CisKKyAgICBTdHJpbmcgZmlyc3ROYW1lID0gcGlja1JhbmRvbVN0cmluZyhGSVJTVF9OQU1FUyk7CisgICAgU3RyaW5nIGxhc3ROYW1lID0gcGlja1JhbmRvbVN0cmluZyhMQVNUX05BTUVTKTsKKyAgICBwcm9mLnNldE5hbWUoIkRyLiAiICsgZmlyc3ROYW1lICsgIiAiICsgbGFzdE5hbWUpOworCisgICAgU3RyaW5nIHN1YmplY3QgPSBwaWNrUmFuZG9tU3RyaW5nKFNVQkpFQ1RTKTsKKyAgICBwcm9mLnNldERlc2NyaXB0aW9uKCJQcm9mZXNzb3Igb2YgIiArIHN1YmplY3QpOworCisgICAgZ2VuZXJhdGVSYW5kb21TY2hlZHVsZShwcm9mLmdldFRlYWNoaW5nU2NoZWR1bGUoKSk7CisKKyAgICByZXR1cm4gcHJvZjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBnZW5lcmF0ZVJhbmRvbVNjaGVkdWxlKFNjaGVkdWxlIHNjaGVkKSB7CisgICAgaW50IHJhbmdlID0gTUFYX1NDSEVEX0VOVFJJRVMgLSBNSU5fU0NIRURfRU5UUklFUyArIDE7CisgICAgaW50IGhvd01hbnkgPSBNSU5fU0NIRURfRU5UUklFUyArIHJuZC5uZXh0SW50KHJhbmdlKTsKKworICAgIFRpbWVTbG90W10gdGltZVNsb3RzID0gbmV3IFRpbWVTbG90W2hvd01hbnldOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBob3dNYW55OyArK2kpIHsKKyAgICAgIGludCBzdGFydEhycyA9IDggKyBybmQubmV4dEludCg5KTsgLy8gOCBhbSAtIDUgcG0KKyAgICAgIGludCBzdGFydE1pbnMgPSAxNSAqIHJuZC5uZXh0SW50KDQpOyAvLyBvbiB0aGUgaG91ciBvciBzb21lIHF1YXJ0ZXIKKyAgICAgIGludCBkYXlPZldlZWsgPSAxICsgcm5kLm5leHRJbnQoNSk7IC8vIE1vbiAtIEZyaQorCisgICAgICBpbnQgYWJzU3RhcnRNaW5zID0gNjAgKiBzdGFydEhycyArIHN0YXJ0TWluczsgLy8gY29udmVydCB0byBtaW51dGVzCisgICAgICBpbnQgYWJzU3RvcE1pbnMgPSBhYnNTdGFydE1pbnMgKyBDTEFTU19MRU5HVEhfTUlOUzsKKworICAgICAgdGltZVNsb3RzW2ldID0gbmV3IFRpbWVTbG90KGRheU9mV2VlaywgYWJzU3RhcnRNaW5zLCBhYnNTdG9wTWlucyk7CisgICAgfQorCisgICAgQXJyYXlzLnNvcnQodGltZVNsb3RzKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaG93TWFueTsgKytpKSB7CisgICAgICBzY2hlZC5hZGRUaW1lU2xvdCh0aW1lU2xvdHNbaV0pOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgUGVyc29uIGdlbmVyYXRlUmFuZG9tU3R1ZGVudCgpIHsKKyAgICBTdHVkZW50IHN0dWRlbnQgPSBuZXcgU3R1ZGVudCgpOworCisgICAgU3RyaW5nIGZpcnN0TmFtZSA9IHBpY2tSYW5kb21TdHJpbmcoRklSU1RfTkFNRVMpOworICAgIFN0cmluZyBsYXN0TmFtZSA9IHBpY2tSYW5kb21TdHJpbmcoTEFTVF9OQU1FUyk7CisgICAgc3R1ZGVudC5zZXROYW1lKGZpcnN0TmFtZSArICIgIiArIGxhc3ROYW1lKTsKKworICAgIFN0cmluZyBzdWJqZWN0ID0gcGlja1JhbmRvbVN0cmluZyhTVUJKRUNUUyk7CisgICAgc3R1ZGVudC5zZXREZXNjcmlwdGlvbigiTWFqb3JpbmcgaW4gIiArIHN1YmplY3QpOworCisgICAgZ2VuZXJhdGVSYW5kb21TY2hlZHVsZShzdHVkZW50LmdldENsYXNzU2NoZWR1bGUoKSk7CisKKyAgICByZXR1cm4gc3R1ZGVudDsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIHBpY2tSYW5kb21TdHJpbmcoU3RyaW5nW10gYSkgeworICAgIGludCBpID0gcm5kLm5leHRJbnQoYS5sZW5ndGgpOworICAgIHJldHVybiBhW2ldOworICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlLmphdmEgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlLmphdmEKaW5kZXggZjAwZTk2Ni4uNzY4ZTFmMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZS5qYXZhCisrKyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2UuamF2YQpAQCAtNjIsNiArNjIsNyBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC53aWRnZXRzLkN3QmFzaWNCdXR0b247CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LndpZGdldHMuQ3dDaGVja0JveDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQud2lkZ2V0cy5Dd0N1c3RvbUJ1dHRvbjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQud2lkZ2V0cy5Dd0RhdGVQaWNrZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LndpZGdldHMuQ3dGaWxlVXBsb2FkOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC53aWRnZXRzLkN3SHlwZXJsaW5rOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC53aWRnZXRzLkN3UmFkaW9CdXR0b247CkBAIC0zMjAsNiArMzIxLDggQEAKICAgICAgICAgaW1hZ2VzLmNhdFdpZGdldHMoKSk7CiAgICAgc2V0dXBNYWluTWVudU9wdGlvbihjYXRXaWRnZXRzLCBuZXcgQ3dGaWxlVXBsb2FkKGNvbnN0YW50cyksCiAgICAgICAgIGltYWdlcy5jYXRXaWRnZXRzKCkpOworICAgIHNldHVwTWFpbk1lbnVPcHRpb24oY2F0V2lkZ2V0cywgbmV3IEN3RGF0ZVBpY2tlcihjb25zdGFudHMpLAorICAgICAgICBpbWFnZXMuY2F0V2lkZ2V0cygpKTsKICAgICBzZXR1cE1haW5NZW51T3B0aW9uKGNhdFdpZGdldHMsIG5ldyBDd0h5cGVybGluayhjb25zdGFudHMpLAogICAgICAgICBpbWFnZXMuY2F0V2lkZ2V0cygpKTsKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50cy5qYXZhIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50cy5qYXZhCmluZGV4IDk5Yjc1OTUuLjY4ZjU5ZWMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHMuamF2YQorKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzLmphdmEKQEAgLTQ5LDYgKzQ5LDcgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQud2lkZ2V0cy5Dd0Jhc2ljQnV0dG9uOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC53aWRnZXRzLkN3Q2hlY2tCb3g7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LndpZGdldHMuQ3dDdXN0b21CdXR0b247CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LndpZGdldHMuQ3dEYXRlUGlja2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC53aWRnZXRzLkN3RmlsZVVwbG9hZDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQud2lkZ2V0cy5Dd0h5cGVybGluazsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQud2lkZ2V0cy5Dd1JhZGlvQnV0dG9uOwpAQCAtNzMsNyArNzQsNyBAQAogICAgIEN3RGF0ZVRpbWVGb3JtYXQuQ3dDb25zdGFudHMsIEN3TWVzc2FnZXNFeGFtcGxlLkN3Q29uc3RhbnRzLAogICAgIEN3Q29uc3RhbnRzRXhhbXBsZS5Dd0NvbnN0YW50cywgQ3dDb25zdGFudHNXaXRoTG9va3VwRXhhbXBsZS5Dd0NvbnN0YW50cywKICAgICBDd0RpY3Rpb25hcnlFeGFtcGxlLkN3Q29uc3RhbnRzLCBDd0RlY29yYXRvclBhbmVsLkN3Q29uc3RhbnRzLAotICAgIEN3QW5pbWF0aW9uLkN3Q29uc3RhbnRzIHsKKyAgICBDd0FuaW1hdGlvbi5Dd0NvbnN0YW50cywgQ3dEYXRlUGlja2VyLkN3Q29uc3RhbnRzIHsKIAogICAvKioKICAgICogVGhlIHBhdGggdG8gc291cmNlIGNvZGUgZm9yIGV4YW1wbGVzLCByYXcgZmlsZXMsIGFuZCBzdHlsZSBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHMucHJvcGVydGllcyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHMucHJvcGVydGllcwppbmRleCBhMDQ5YzBiLi4wMGI4YTdiIDEwMDY0NAotLS0gYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50cy5wcm9wZXJ0aWVzCkBAIC03Myw2ICs3MywxMCBAQAogY3dDdXN0b21CdXR0b25EZXNjcmlwdGlvbiA9IFB1c2hCdXR0b25zIGFuZCBUb2dnbGVCdXR0b25zIGFsbG93IHlvdSB0byBjdXN0b21pemUgdGhlIGxvb2sgb2YgeW91ciBidXR0b25zCiBjd0N1c3RvbUJ1dHRvblB1c2ggPSA8Yj5QdXNoIEJ1dHRvbnM6PC9iPgogY3dDdXN0b21CdXR0b25Ub2dnbGUgPSA8Yj5Ub2dnbGUgQnV0dG9uczo8L2I+Citjd0RhdGVQaWNrZXJOYW1lID0gRGF0ZSBQaWNrZXIKK2N3RGF0ZVBpY2tlckRlc2NyaXB0aW9uID0gTGV0IHVzZXJzIHNlbGVjdCBhIGRhdGUgdXNpbmcgdGhlIERhdGVQaWNrZXIuCitjd0RhdGVQaWNrZXJCb3hMYWJlbCA9IDxicj48YnI+PGJyPjxiPkRhdGVCb3ggd2l0aCBwb3B1cCBEYXRlUGlja2VyOjwvYj4KK2N3RGF0ZVBpY2tlckxhYmVsID0gPGI+UGVybWFuZW50IERhdGVQaWNrZXI6PC9iPgogY3dEYXRlVGltZUZvcm1hdE5hbWUgPSBEYXRlIFRpbWUgRm9ybWF0CiBjd0RhdGVUaW1lRm9ybWF0RGVzY3JpcHRpb24gPSBDbGFzcyBEYXRlVGltZUZvcm1hdCBzdXBwb3J0cyBsb2NhbGUtc2Vuc2l0aXZlIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgb2YgZGF0ZSBhbmQgdGltZSB2YWx1ZXMsIGxpa2UgTnVtYmVyRm9ybWF0LCB1c2luZyBhIGZsZXhpYmxlIHBhdHRlcm4tYmFzZWQgc3ludGF4LiBCb3RoIGN1c3RvbSBwYXR0ZXJucyBhbmQgc3RhbmRhcmQgcGF0dGVybnMgYXJlIHN1cHBvcnRlZC4KIGN3RGF0ZVRpbWVGb3JtYXRGYWlsZWRUb1BhcnNlSW5wdXQgPSBVbmFibGUgdG8gcGFyc2UgaW5wdXQKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfYXIucHJvcGVydGllcyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfYXIucHJvcGVydGllcwppbmRleCA2ZmNmYTM2Li4wOWIxMDZhIDEwMDY0NAotLS0gYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzX2FyLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c19hci5wcm9wZXJ0aWVzCkBAIC0yMzQsMyArMjM0LDcgQEAKIGN3VHJlZUJyYWhtc1dvcmtTb25hdGFzID0g2KfYq9mG2YrZhiDYp9mE2LPZiNmG2KfYqtin2Kog2YTZg9mE2KfYsdmK2YbZitiqIC0tINmIINmC2KfYtdixICzZhNin2KvZhtmK2YYg2YXZhiDYp9mE2LPZiNmG2KfYqtin2Kog2YPZhNin2LHZitmG2YrYqiAtLSDYqSAtINi02YLYqSDYp9mE2LHYptmK2LPZitipCiBjd1RyZWVCcmFobXNXb3JrU3ltcGhvbmllcyA9INix2YLZhSAxIC0tINisINi32YHZitmB2KkgLNix2YLZhSAyIC0tINivINi32YHZitmB2KkgLNix2YLZhSAzIC0tINmIINin2YTYsdim2YrYs9mK2KkgLNix2YLZhSA0IC0tINipINi32YHZitmB2KkKIGN3VHJlZU1vemFydFdvcmtDb25jZXJ0b3MgPSDZg9mI2YbYtNix2KrZiCDYp9mE2KjZitin2YbZiCDYsdmC2YUgMTIgLCDZg9mI2YbYtNix2KrZiCDYp9mE2KjZitin2YbZiCDYsdmC2YUgMTcgLCDZg9mI2YbYtNix2KrZiCDYp9mE2YPZhNin2LHZitmG2KogLCDZg9mI2YbYtNix2KrZiCDYp9mE2YPZhdin2YYg2LHZgtmFIDUgLCDYsdmC2YUgNCDZg9mI2YbYtNix2KrZiCDYp9mE2YPZhdin2YYKK2N3RGF0ZVBpY2tlck5hbWUgPSDYqtin2LHZitiuINin2YTZgtin2LfZgQorY3dEYXRlUGlja2VyRGVzY3JpcHRpb24gPSDYp9iz2YXYrdmI2Kcg2KfZhNmF2LPYqtiu2K/ZhdmK2YYg2KfYrtiq2YrYp9ixINiq2KfYsdmK2K4g2KjYp9iz2KrYrtiv2KfZhSBEYXRlUGlja2VyLgorY3dEYXRlUGlja2VyQm94TGFiZWwgPSA8YnI+PGJyPjxicj48Yj5EYXRlQm94INmF2Lkg2YLYp9mB2LLYqSBEYXRlUGlja2VyIDogPC9iPgorY3dEYXRlUGlja2VyTGFiZWwgPSA8Yj7Yp9mE2K/Yp9im2YUgRGF0ZVBpY2tlciA6IDwvYj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfZnIucHJvcGVydGllcyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfZnIucHJvcGVydGllcwppbmRleCAxODNkMGM5Li5jYTRhNGE1IDEwMDY0NAotLS0gYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzX2ZyLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c19mci5wcm9wZXJ0aWVzCkBAIC0yMzIsMyArMjMyLDcgQEAKIGN3VHJlZUJyYWhtc1dvcmtTb25hdGFzID0gRGV1eCBTb25hdGVzIHBvdXIgY2xhcmluZXR0ZSAtIEYgTWlub3IsIGRldXggc29uYXRlcyBwb3VyIGNsYXJpbmV0dGUgLSBtaSBiw6ltb2wgbWFqZXVyCiBjd1RyZWVCcmFobXNXb3JrU3ltcGhvbmllcyA9IG4gwrAgMSAtIEMgTWlub3IsIG4gwrAgMiAtIHLDqSBtaW5ldXIsIG4gwrAgMyAtIEYgTWFqb3IsIG4gwrAgNCAtIEUgTWlub3IKIGN3VHJlZU1vemFydFdvcmtDb25jZXJ0b3MgPSBDb25jZXJ0byBwb3VyIHBpYW5vIG4gwrAgMTIsIENvbmNlcnRvIHBvdXIgcGlhbm8gbiDCsCAxNywgQ29uY2VydG8gcG91ciBjbGFyaW5ldHRlLCBDb25jZXJ0byBwb3VyIHZpb2xvbiBuIMKwIDUsIENvbmNlcnRvIHBvdXIgdmlvbG9uIG4gwrAgNAorY3dEYXRlUGlja2VyTmFtZSA9IERhdGUgUGlja2VyCitjd0RhdGVQaWNrZXJEZXNjcmlwdGlvbiA9IFBlcm1ldHRyZSBhdXggdXRpbGlzYXRldXJzIGRlIHPpbGVjdGlvbm5lciB1bmUgZGF0ZSDgIGwnYWlkZSBkZSBsYSBEYXRlUGlja2VyLgorY3dEYXRlUGlja2VyQm94TGFiZWwgPSA8YnI+PGJyPjxiPkRhdGVCb3ggYXZlYyBwb3B1cCBEYXRlUGlja2VyOjwvYj4KK2N3RGF0ZVBpY2tlckxhYmVsID0gPGI+RGF0ZVBpY2tlciBwZXJtYW5lbnQ6PC9iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfemgucHJvcGVydGllcyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfemgucHJvcGVydGllcwppbmRleCA0NzU4NmQ3Li5mOTE3NTM2IDEwMDY0NAotLS0gYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzX3poLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c196aC5wcm9wZXJ0aWVzCkBAIC0yMzIsMyArMjMyLDcgQEAKIGN3VHJlZUJyYWhtc1dvcmtTb25hdGFzID0gMuWlj+m4o+absuWNleewp+euoS1G5bCP6LCDLCAgMuWNleewp+euoeWlj+m4o+absi0gReWkp+iwg+WkpwogY3dUcmVlQnJhaG1zV29ya1N5bXBob25pZXMgPeesrDHlj7ctQ+Wwj+iwgywg56ysMuWPty0gROWwj+iwgywg56ysM+WPty0gRuWkpywg56ysNOWPty0gReWwj+iwgwogY3dUcmVlTW96YXJ0V29ya0NvbmNlcnRvcyA96ZKi55C05Y2P5aWP5puy56ysMTLlj7csIOmSoueQtOWNj+Wlj+absuesrDE35Y+3LCDljZXnsKfnrqHljY/lpY/mm7IsIOWwj+aPkOeQtOWNj+Wlj+absuesrDXlj7csIOWwj+aPkOeQtOWNj+Wlj+absuesrDTlj7cKK2N3RGF0ZVBpY2tlck5hbWUgPeaXpeacn+mAieaLqeWZqAorY3dEYXRlUGlja2VyRGVzY3JpcHRpb24gPeiuqeeUqOaIt+mAieaLqeaXpeacn+S9v+eUqERhdGVQaWNrZXIg44CCCitjd0RhdGVQaWNrZXJCb3hMYWJlbCA9IDxicj48YnI+PGJyPjxiPkRhdGVCb3jkuI7lvLnlh7pEYXRlUGlja2Vy77yaPC9iPgorY3dEYXRlUGlja2VyTGFiZWwgPTxiPuW4uOmpu0RhdGVQaWNrZXLvvJo8L2I+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvd2lkZ2V0cy9Dd0RhdGVQaWNrZXIuamF2YSBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC93aWRnZXRzL0N3RGF0ZVBpY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjhmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvd2lkZ2V0cy9Dd0RhdGVQaWNrZXIuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQud2lkZ2V0czsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkdXVDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5SdW5Bc3luY0NhbGxiYWNrOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlZhbHVlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VIYW5kbGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50LkNvbnN0YW50czsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5EYXRlVGltZUZvcm1hdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LkNvbnRlbnRXaWRnZXQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5TaG93Y2FzZUFubm90YXRpb25zLlNob3djYXNlRGF0YTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LlNob3djYXNlQW5ub3RhdGlvbnMuU2hvd2Nhc2VTb3VyY2U7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5TaG93Y2FzZUFubm90YXRpb25zLlNob3djYXNlU3R5bGU7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQucnBjLkFzeW5jQ2FsbGJhY2s7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSFRNTDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5MYWJlbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5WZXJ0aWNhbFBhbmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLldpZGdldDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50LkRhdGVCb3g7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudC5EYXRlUGlja2VyOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKKy8qKgorICogRXhhbXBsZSBmaWxlLgorICovCitAU2hvd2Nhc2VTdHlsZSh7CisgICAgIi5nd3QtRGF0ZVBpY2tlciIsICIuZGF0ZVBpY2tlciIsICJ0ZC5kYXRlUGlja2VyTW9udGgiLCAiLmd3dC1EYXRlQm94IiwKKyAgICAiLmRhdGVCb3gifSkKK3B1YmxpYyBjbGFzcyBDd0RhdGVQaWNrZXIgZXh0ZW5kcyBDb250ZW50V2lkZ2V0IHsKKyAgLyoqCisgICAqIFRoZSBjb25zdGFudHMgdXNlZCBpbiB0aGlzIENvbnRlbnQgV2lkZ2V0LgorICAgKi8KKyAgQFNob3djYXNlU291cmNlCisgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEN3Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzLAorICAgICAgQ29udGVudFdpZGdldC5Dd0NvbnN0YW50cyB7CisgICAgU3RyaW5nIGN3RGF0ZVBpY2tlckJveExhYmVsKCk7CisKKyAgICBTdHJpbmcgY3dEYXRlUGlja2VyRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBjd0RhdGVQaWNrZXJMYWJlbCgpOworCisgICAgU3RyaW5nIGN3RGF0ZVBpY2tlck5hbWUoKTsKKyAgfQorCisgIC8qKgorICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgY29uc3RhbnRzLgorICAgKi8KKyAgQFNob3djYXNlRGF0YQorICBwcml2YXRlIEN3Q29uc3RhbnRzIGNvbnN0YW50czsKKworICAvKioKKyAgICogQ29uc3RydWN0b3IuCisgICAqIAorICAgKiBAcGFyYW0gY29uc3RhbnRzIHRoZSBjb25zdGFudHMKKyAgICovCisgIHB1YmxpYyBDd0RhdGVQaWNrZXIoQ3dDb25zdGFudHMgY29uc3RhbnRzKSB7CisgICAgc3VwZXIoY29uc3RhbnRzKTsKKyAgICB0aGlzLmNvbnN0YW50cyA9IGNvbnN0YW50czsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgIHJldHVybiBjb25zdGFudHMuY3dEYXRlUGlja2VyRGVzY3JpcHRpb24oKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcmV0dXJuIGNvbnN0YW50cy5jd0RhdGVQaWNrZXJOYW1lKCk7CisgIH0KKworICAvKioKKyAgICogSW5pdGlhbGl6ZSB0aGlzIGV4YW1wbGUuCisgICAqLworICBAU2hvd2Nhc2VTb3VyY2UKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBXaWRnZXQgb25Jbml0aWFsaXplKCkgeworICAgIC8vIENyZWF0ZSBhIGJhc2ljIGRhdGUgcGlja2VyCisgICAgRGF0ZVBpY2tlciBkYXRlUGlja2VyID0gbmV3IERhdGVQaWNrZXIoKTsKKyAgICBmaW5hbCBMYWJlbCB0ZXh0ID0gbmV3IExhYmVsKCk7CisKKyAgICAvLyBTZXQgdGhlIHZhbHVlIGluIHRoZSB0ZXh0IGJveCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBkYXRlCisgICAgZGF0ZVBpY2tlci5hZGRWYWx1ZUNoYW5nZUhhbmRsZXIobmV3IFZhbHVlQ2hhbmdlSGFuZGxlcjxEYXRlPigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoVmFsdWVDaGFuZ2VFdmVudDxEYXRlPiBldmVudCkgeworICAgICAgICBEYXRlIGRhdGUgPSBldmVudC5nZXRWYWx1ZSgpOworICAgICAgICBTdHJpbmcgZGF0ZVN0cmluZyA9IERhdGVUaW1lRm9ybWF0LmdldE1lZGl1bURhdGVGb3JtYXQoKS5mb3JtYXQoZGF0ZSk7CisgICAgICAgIHRleHQuc2V0VGV4dChkYXRlU3RyaW5nKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZQorICAgIGRhdGVQaWNrZXIuc2V0VmFsdWUobmV3IERhdGUoKSwgdHJ1ZSk7CisKKyAgICAvLyBDcmVhdGUgYSBEYXRlQm94CisgICAgRGF0ZUJveCBkYXRlQm94ID0gbmV3IERhdGVCb3goKTsKKworICAgIC8vIENvbWJpbmUgdGhlIHdpZGdldHMgaW50byBhIHBhbmVsIGFuZCByZXR1cm4gdGhlbQorICAgIFZlcnRpY2FsUGFuZWwgdlBhbmVsID0gbmV3IFZlcnRpY2FsUGFuZWwoKTsKKyAgICB2UGFuZWwuYWRkKG5ldyBIVE1MKGNvbnN0YW50cy5jd0RhdGVQaWNrZXJMYWJlbCgpKSk7CisgICAgdlBhbmVsLmFkZCh0ZXh0KTsKKyAgICB2UGFuZWwuYWRkKGRhdGVQaWNrZXIpOworICAgIHZQYW5lbC5hZGQobmV3IEhUTUwoY29uc3RhbnRzLmN3RGF0ZVBpY2tlckJveExhYmVsKCkpKTsKKyAgICB2UGFuZWwuYWRkKGRhdGVCb3gpOworICAgIHJldHVybiB2UGFuZWw7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgYXN5bmNPbkluaXRpYWxpemUoZmluYWwgQXN5bmNDYWxsYmFjazxXaWRnZXQ+IGNhbGxiYWNrKSB7CisgICAgR1dULnJ1bkFzeW5jKG5ldyBSdW5Bc3luY0NhbGxiYWNrKCkgeworCisgICAgICBwdWJsaWMgdm9pZCBvbkZhaWx1cmUoVGhyb3dhYmxlIGNhdWdodCkgeworICAgICAgICBjYWxsYmFjay5vbkZhaWx1cmUoY2F1Z2h0KTsKKyAgICAgIH0KKworICAgICAgcHVibGljIHZvaWQgb25TdWNjZXNzKCkgeworICAgICAgICBjYWxsYmFjay5vblN1Y2Nlc3Mob25Jbml0aWFsaXplKCkpOworICAgICAgfQorICAgIH0pOworICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hcGktY2hlY2tlci9idWlsZC54bWwgYi90b29scy9hcGktY2hlY2tlci9idWlsZC54bWwKaW5kZXggMzI1OTM0Mi4uOGFmY2FlYSAxMDA3NTUKLS0tIGEvdG9vbHMvYXBpLWNoZWNrZXIvYnVpbGQueG1sCisrKyBiL3Rvb2xzL2FwaS1jaGVja2VyL2J1aWxkLnhtbApAQCAtNTQsNiArNTQsNyBAQAogICAgIDxta2RpciBkaXI9IiR7anVuaXQub3V0fS9yZXBvcnRzIiAvPgogICAKICAgICA8anVuaXQgZGlyPSIke2p1bml0Lm91dH0iIGZvcms9InllcyIgcHJpbnRzdW1tYXJ5PSJ5ZXMiIGhhbHRvbmZhaWx1cmU9InRydWUiPgorICAgICAgPHN5c3Byb3BlcnR5IGtleT0iZ3d0LmRldmphciIgdmFsdWU9IiR7Z3d0LmRldi5zdGFnaW5nLmphcn0iIC8+CiAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRlc3QiIC8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtnd3QuYnVpbGQub3V0fS9kZXYvY29yZS9iaW4iLz4KZGlmZiAtLWdpdCBhL3Rvb2xzL2FwaS1jaGVja2VyL2NvbmZpZy9nd3QxNV8xNnVzZXJBcGkuY29uZiBiL3Rvb2xzL2FwaS1jaGVja2VyL2NvbmZpZy9nd3QxNV8xNnVzZXJBcGkuY29uZgppbmRleCA4OTViZTM2Li5lNTVmNjQyIDEwMDY0NAotLS0gYS90b29scy9hcGktY2hlY2tlci9jb25maWcvZ3d0MTVfMTZ1c2VyQXBpLmNvbmYKKysrIGIvdG9vbHMvYXBpLWNoZWNrZXIvY29uZmlnL2d3dDE1XzE2dXNlckFwaS5jb25mCkBAIC0zMiwzICszMiw0IEBACiBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcjo6YXBwZW5kKExqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOykgT1ZFUlJJREFCTEVfTUVUSE9EX0FSR1VNRU5UX1RZUEVfQ0hBTkdFCiBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5CdXR0b246OkJ1dHRvbihMamF2YS9sYW5nL1N0cmluZztMY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvQ2xpY2tMaXN0ZW5lcjspIE9WRVJMT0FERURfTUVUSE9EX0NBTEwKIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlRvZ2dsZUJ1dHRvbjo6VG9nZ2xlQnV0dG9uKExjb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9JbWFnZTtMY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSW1hZ2U7TGNvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0NsaWNrTGlzdGVuZXI7KSBPVkVSTE9BREVEX01FVEhPRF9DQUxMIAorY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuVHJlZTo6c2V0SW1hZ2VCYXNlKExqYXZhL2xhbmcvU3RyaW5nOykgTUlTU0lORwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2FwaS1jaGVja2VyL3NyYy9jb20vZ29vZ2xlL2d3dC90b29scy9hcGljaGVja2VyL0FwaUNvbXBhdGliaWxpdHlDaGVja2VyLmphdmEgYi90b29scy9hcGktY2hlY2tlci9zcmMvY29tL2dvb2dsZS9nd3QvdG9vbHMvYXBpY2hlY2tlci9BcGlDb21wYXRpYmlsaXR5Q2hlY2tlci5qYXZhCmluZGV4IDAyMzY5YWUuLjMwZmI5OGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FwaS1jaGVja2VyL3NyYy9jb20vZ29vZ2xlL2d3dC90b29scy9hcGljaGVja2VyL0FwaUNvbXBhdGliaWxpdHlDaGVja2VyLmphdmEKKysrIGIvdG9vbHMvYXBpLWNoZWNrZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3Rvb2xzL2FwaWNoZWNrZXIvQXBpQ29tcGF0aWJpbGl0eUNoZWNrZXIuamF2YQpAQCAtMTYsMTkgKzE2LDM3IEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnRvb2xzLmFwaWNoZWNrZXI7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQudHlwZWluZm8uTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmphdmFjLkNvbXBpbGF0aW9uVW5pdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuamF2YWMuaW1wbC5GaWxlQ29tcGlsYXRpb25Vbml0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmxvZy5BYnN0cmFjdFRyZWVMb2dnZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwubG9nLlByaW50V3JpdGVyVHJlZUxvZ2dlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJGbGFnOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuQXJnSGFuZGxlclN0cmluZzsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLlRvb2xCYXNlOwogCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5SZWFkZXI7CitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuamFyLkphckVudHJ5OworaW1wb3J0IGphdmEudXRpbC5qYXIuSmFyRmlsZTsKIAogLyoqCiAgKiB7QGxpbmsgQXBpQ29tcGF0aWJpbGl0eUNoZWNrZXJ9IE1haW4gY2xhc3MgdG8gY2hlY2sgaWYgdGhlIG5ldyBBUEkgaXMKQEAgLTY3LDQ2ICs4NSwzNDkgQEAKICAqIGFkZGluZyB0aGUgJ2ZpbmFsJyBrZXl3b3JkIHRvIHRoZSBBUEkgbWVtYmVyLgogICogCiAgKi8KLXB1YmxpYyBjbGFzcyBBcGlDb21wYXRpYmlsaXR5Q2hlY2tlciB7Ci0KLSAgLy8gVE9ETyhhbWl0bWFuamhpKTogdXNlIFRvb2xCYXNlIGZvciBjb21tYW5kLWxpbmUgcHJvY2Vzc2luZworcHVibGljIGNsYXNzIEFwaUNvbXBhdGliaWxpdHlDaGVja2VyIGV4dGVuZHMgVG9vbEJhc2UgewogCiAgIC8vIFRPRE8oYW1pdG1hbmpoaSk6IGNoZWNrIGd3dCdzIGRldi9jb3JlL3NyYyBmaWxlcy4gV291bGQgbmVlZCB0aGUgYWJpbGl0eSB0bwogICAvLyBidWlsZCBUeXBlT3JhY2xlIGZyb20gY2xhc3MgZmlsZXMKIAotICAvLyBUT0RPKGFtaXRtYW5qaGkpOiBpZ25vcmUgQVBJIGJyZWFrYWdlcyBkdWUgdG8gaW1wbCBwYWNrYWdlLiBNb3JlIGdlbmVyYWxseSwKLSAgLy8gd2hpdGUtbGlzdCBvZiBwYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgY2hlY2tlZC4KLQogICAvLyBUT0RPKGFtaXRtYW5qaGkpOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucyBhbmQgZXhjZXB0aW9uLWNoYWluaW5nLgogCisgIHN0YXRpYyBjbGFzcyBTdGF0aWNDb21waWxhdGlvblVuaXQgZXh0ZW5kcyBDb21waWxhdGlvblVuaXQgeworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc291cmNlOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHR5cGVOYW1lOworCisgICAgcHVibGljIFN0YXRpY0NvbXBpbGF0aW9uVW5pdChTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBzb3VyY2UpIHsKKyAgICAgIHRoaXMudHlwZU5hbWUgPSB0eXBlTmFtZTsKKyAgICAgIHRoaXMuc291cmNlID0gc291cmNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheUxvY2F0aW9uKCkgeworICAgICAgcmV0dXJuICIvbW9jay8iICsgdHlwZU5hbWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGxvbmcgZ2V0TGFzdE1vZGlmaWVkKCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2UoKSB7CisgICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2Yoc291cmNlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkgeworICAgICAgcmV0dXJuIHR5cGVOYW1lOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzR2VuZXJhdGVkKCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzU3VwZXJTb3VyY2UoKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIEFic3RyYWN0IGludGVybmFsIGNsYXNzIHRoYXQgc3BlY2lmaWVzIGEgc2V0IG9mIHtAbGluayBDb21waWxhdGlvblVuaXR9LgorICAgKi8KKyAgcHJpdmF0ZSBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgQ29tcGlsYXRpb25Vbml0cyB7CisgICAgcHJvdGVjdGVkIGZpbmFsIFRyZWVMb2dnZXIgbG9nZ2VyOworCisgICAgQ29tcGlsYXRpb25Vbml0cyhUcmVlTG9nZ2VyIGxvZ2dlcikgeworICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7CisgICAgfQorCisgICAgcHVibGljIGFic3RyYWN0IFNldDxDb21waWxhdGlvblVuaXQ+IGdldENvbXBpbGF0aW9uVW5pdHMoKQorICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uOworCisgICAgLy8gVE9ETyAoYW1pdG1hbmpoaSk6IHJlbW92ZSB0aGlzIGNvZGUuIHVzZSBUeXBlT3JhY2xlIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBpbnN0ZWFkLgorICAgIHByb3RlY3RlZCBTdHJpbmcgZXh0cmFjdFBhY2thZ2VOYW1lKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOworICAgICAgU3RyaW5nIHN0ciA9IG51bGw7CisgICAgICB3aGlsZSAoKHN0ciA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgaWYgKHN0ci5pbmRleE9mKCJwYWNrYWdlIikgIT0gMCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBwYXJ0c1tdID0gc3RyLnNwbGl0KCJbXGJcdFxuXHIgXSsiKTsKKyAgICAgICAgaWYgKChwYXJ0cy5sZW5ndGggPT0gMikgJiYgcGFydHNbMF0uZXF1YWxzKCJwYWNrYWdlIikpIHsKKyAgICAgICAgICByZXR1cm4gcGFydHNbMV0uc3Vic3RyaW5nKDAsIHBhcnRzWzFdLmxlbmd0aCgpIC0gMSk7IC8vIHRoZSA7IGNoYXIKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJvdGVjdGVkIEZpbGUgZ2V0RmlsZUZyb21OYW1lKFN0cmluZyB0YWcsIFN0cmluZyBwYXRoTmFtZSkKKyAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoTmFtZSk7CisgICAgICBpZiAoIWZpbGUuZXhpc3RzKCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbih0YWcgKyAiZmlsZSAiICsgcGF0aE5hbWUgKyAiIG5vdCBmb3VuZCIpOworICAgICAgfQorICAgICAgcmV0dXJuIGZpbGU7CisgICAgfQorCisgICAgLy8gVE9ETyAoYW1pdG1hbmpoaSk6IHJlbW92ZSB0aGlzIGNvZGUuIHVzZSBUeXBlT3JhY2xlIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBpbnN0ZWFkLgorICAgIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRQYWNrYWdlKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIGZpbGVQYXRoKSB7CisgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuU1BBTSwgInBhY2thZ2VOYW1lID0gIiArIHBhY2thZ2VOYW1lCisgICAgICAgICAgKyAiLCBmaWxlUGF0aCA9ICIgKyBmaWxlUGF0aCwgbnVsbCk7CisgICAgICBpZiAocGFja2FnZU5hbWUgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBpbnQgbGFzdFNsYXNoUG9zaXRpb24gPSBmaWxlUGF0aC5sYXN0SW5kZXhPZigiLyIpOworICAgICAgaWYgKGxhc3RTbGFzaFBvc2l0aW9uID09IC0xKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIFN0cmluZyBkaXJQYXRoID0gZmlsZVBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaFBvc2l0aW9uKTsKKyAgICAgIFN0cmluZyBwYWNrYWdlTmFtZUFzUGF0aCA9IHBhY2thZ2VOYW1lLnJlcGxhY2UoJy4nLCAnLycpOworICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlNQQU0sICJwYWNrYWdlTmFtZUFzUGF0aCAiICsgcGFja2FnZU5hbWVBc1BhdGgKKyAgICAgICAgICArICIsIGRpclBhdGggPSAiICsgZGlyUGF0aCwgbnVsbCk7CisgICAgICByZXR1cm4gZGlyUGF0aC5lbmRzV2l0aChwYWNrYWdlTmFtZUFzUGF0aCk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIENsYXNzIHRoYXQgc3BlY2lmaWVzIGEgc2V0IG9mIHtAbGluayBDb21waWxhdGlvblVuaXR9IHJlYWQgZnJvbSBqYXIgZmlsZXMuCisgICAqLworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBKYXJGaWxlQ29tcGlsYXRpb25Vbml0cyBleHRlbmRzIENvbXBpbGF0aW9uVW5pdHMgeworICAgIHByaXZhdGUgZmluYWwgU2V0PFN0cmluZz4gZXhjbHVkZWRQYXRoczsKKyAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IGluY2x1ZGVkUGF0aHM7CisgICAgcHJpdmF0ZSBmaW5hbCBKYXJGaWxlIGphckZpbGVzW107CisgICAgcHJpdmF0ZSBTZXQ8Q29tcGlsYXRpb25Vbml0PiB1bml0cyA9IG51bGw7CisKKyAgICBKYXJGaWxlQ29tcGlsYXRpb25Vbml0cyhKYXJGaWxlW10gamFyRmlsZXMsIFNldDxTdHJpbmc+IGluY2x1ZGVkUGF0aHMsCisgICAgICAgIFNldDxTdHJpbmc+IGV4Y2x1ZGVkUGF0aHMsIFRyZWVMb2dnZXIgbG9nZ2VyKSB7CisgICAgICBzdXBlcihsb2dnZXIpOworICAgICAgdGhpcy5qYXJGaWxlcyA9IGphckZpbGVzOworICAgICAgdGhpcy5pbmNsdWRlZFBhdGhzID0gaW5jbHVkZWRQYXRoczsKKyAgICAgIHRoaXMuZXhjbHVkZWRQYXRocyA9IGV4Y2x1ZGVkUGF0aHM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFNldDxDb21waWxhdGlvblVuaXQ+IGdldENvbXBpbGF0aW9uVW5pdHMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgaWYgKHVuaXRzICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHVuaXRzOworICAgICAgfQorCisgICAgICB1bml0cyA9IG5ldyBIYXNoU2V0PENvbXBpbGF0aW9uVW5pdD4oKTsKKyAgICAgIGZvciAoSmFyRmlsZSBqYXJGaWxlIDogamFyRmlsZXMpIHsKKyAgICAgICAgRW51bWVyYXRpb248SmFyRW50cnk+IGVudHJpZXMgPSBqYXJGaWxlLmVudHJpZXMoKTsKKyAgICAgICAgd2hpbGUgKGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICBKYXJFbnRyeSBqYXJFbnRyeSA9IGVudHJpZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBqYXJFbnRyeS50b1N0cmluZygpOworICAgICAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aCgiLmphdmEiKSAmJiBpc0luY2x1ZGVkKGZpbGVOYW1lKSkgeworICAgICAgICAgICAgLy8gYWRkIHRoaXMgY29tcGlsYXRpb24gdW5pdAorICAgICAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50ID0gZ2V0RmlsZUNvbnRlbnRzRnJvbUphcihqYXJGaWxlLCBqYXJFbnRyeSk7CisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBleHRyYWN0UGFja2FnZU5hbWUobmV3IFN0cmluZ1JlYWRlcigKKyAgICAgICAgICAgICAgICBmaWxlQ29udGVudCkpOworICAgICAgICAgICAgaWYgKHBhY2thZ2VOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLldBUk4sICJOb3QgYWRkaW5nIGZpbGUgPSAiICsgZmlsZU5hbWUKKyAgICAgICAgICAgICAgICAgICsgIiwgYmVjYXVzZSBwYWNrYWdlTmFtZSA9IG51bGwiLCBudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChpc1ZhbGlkUGFja2FnZShwYWNrYWdlTmFtZSwgZmlsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gQWRkIGlmIHBhY2thZ2UgYW5kIGZpbGVOYW1lcyBhcmUgb2theQorICAgICAgICAgICAgICAgIHVuaXRzLmFkZChuZXcgU3RhdGljQ29tcGlsYXRpb25Vbml0KHBhY2thZ2VOYW1lICsgIi4iCisgICAgICAgICAgICAgICAgICAgICsgZ2V0Q2xhc3NOYW1lKGZpbGVOYW1lKSwgZmlsZUNvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuREVCVUcsICJhZGRpbmcgcGtnTmFtZSA9ICIgKyBwYWNrYWdlTmFtZQorICAgICAgICAgICAgICAgICAgICArICIsIGZpbGUgPSAiICsgZmlsZU5hbWUsIG51bGwpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5TUEFNLCAiIG5vdCBhZGRpbmcgZmlsZSAiICsgZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gdW5pdHM7CisgICAgfQorCisgICAgU3RyaW5nIGdldEZpbGVDb250ZW50c0Zyb21KYXIoSmFyRmlsZSBqYXJGaWxlLCBKYXJFbnRyeSBqYXJFbnRyeSkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgIFN0cmluZ0J1ZmZlciBmaWxlQ29udGVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgIElucHV0U3RyZWFtIGlzID0gamFyRmlsZS5nZXRJbnB1dFN0cmVhbShqYXJFbnRyeSk7CisgICAgICBCdWZmZXJlZElucHV0U3RyZWFtIGJpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGlzKTsKKyAgICAgIGludCBsZW5ndGggPSA1MDA7CisgICAgICBieXRlIGJ1ZltdID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKyAgICAgIGludCBjb3VudCA9IDA7CisgICAgICB3aGlsZSAoKGNvdW50ID0gYmlzLnJlYWQoYnVmLCAwLCBsZW5ndGgpKSAhPSAtMSkgeworICAgICAgICBmaWxlQ29udGVudC5hcHBlbmQobmV3IFN0cmluZyhidWYsIDAsIGNvdW50KSk7CisgICAgICAgIGJ1ZiA9IG5ldyBieXRlW2xlbmd0aF07CisgICAgICB9CisgICAgICBiaXMuY2xvc2UoKTsKKyAgICAgIGlzLmNsb3NlKCk7CisgICAgICByZXR1cm4gZmlsZUNvbnRlbnQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBnZXRDbGFzc05hbWUoU3RyaW5nIGZpbGVOYW1lKSB7CisgICAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5sYXN0SW5kZXhPZigiLyIpOworICAgICAgaW50IGVuZE9mZnNldCA9IDA7CisgICAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoIi5qYXZhIikpIHsKKyAgICAgICAgZW5kT2Zmc2V0ID0gNTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBmaWxlTmFtZS5sZW5ndGgoKSAtIGVuZE9mZnNldCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzSW5jbHVkZWQoU3RyaW5nIGZpbGVOYW1lKSB7CisgICAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5sZW5ndGgoKTsKKyAgICAgIGRvIHsKKyAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICBpZiAoaW5jbHVkZWRQYXRocy5jb250YWlucyhmaWxlTmFtZSkpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhjbHVkZWRQYXRocy5jb250YWlucyhmaWxlTmFtZSkpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBmaWxlTmFtZS5sYXN0SW5kZXhPZigiLyIpOworICAgICAgfSB3aGlsZSAoaW5kZXggIT0gLTEpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDbGFzcyB0aGF0IHNwZWNpZmllcyBhIHNldCBvZiB7QGxpbmsgQ29tcGlsYXRpb25Vbml0fSByZWFkIGZyb20gdGhlCisgICAqIGZpbGUtc3lzdGVtLgorICAgKi8KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU291cmNlRmlsZUNvbXBpbGF0aW9uVW5pdHMgZXh0ZW5kcyBDb21waWxhdGlvblVuaXRzIHsKKyAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IGV4Y2x1ZGVkUGF0aHM7CisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8RmlsZT4gaW5jbHVkZWRQYXRoczsKKyAgICBwcml2YXRlIFNldDxDb21waWxhdGlvblVuaXQ+IHVuaXRzID0gbnVsbDsKKworICAgIFNvdXJjZUZpbGVDb21waWxhdGlvblVuaXRzKFN0cmluZyBkaXJSb290LAorICAgICAgICBTZXQ8U3RyaW5nPiBpbmNsdWRlZFBhdGhzQXNTdHJpbmcsIFNldDxTdHJpbmc+IGV4Y2x1ZGVkUGF0aHNBc1N0cmluZywKKyAgICAgICAgVHJlZUxvZ2dlciBsb2dnZXIpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgIHN1cGVyKGxvZ2dlcik7CisgICAgICBpZiAoZGlyUm9vdCA9PSBudWxsKSB7CisgICAgICAgIGRpclJvb3QgPSAiIjsKKyAgICAgIH0KKyAgICAgIGluY2x1ZGVkUGF0aHMgPSBuZXcgSGFzaFNldDxGaWxlPigpOworICAgICAgZm9yIChTdHJpbmcgaW5jbHVkZWRQYXRoIDogaW5jbHVkZWRQYXRoc0FzU3RyaW5nKSB7CisgICAgICAgIGluY2x1ZGVkUGF0aHMuYWRkKGdldEZpbGVGcm9tTmFtZSgic291cmNlIGZpbGU6ICIsIGRpclJvb3QKKyAgICAgICAgICAgICsgaW5jbHVkZWRQYXRoKSk7CisgICAgICB9CisKKyAgICAgIGV4Y2x1ZGVkUGF0aHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICBmb3IgKFN0cmluZyBleGNsdWRlZFBhdGggOiBleGNsdWRlZFBhdGhzQXNTdHJpbmcpIHsKKyAgICAgICAgZXhjbHVkZWRQYXRocy5hZGQoZ2V0RmlsZUZyb21OYW1lKCJleGNsdWRlZCBmaWxlOiAiLAorICAgICAgICAgICAgZGlyUm9vdCArIGV4Y2x1ZGVkUGF0aCkuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU2V0PENvbXBpbGF0aW9uVW5pdD4gZ2V0Q29tcGlsYXRpb25Vbml0cygpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiwKKyAgICAgICAgSU9FeGNlcHRpb24sIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgICAgaWYgKHVuaXRzICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHVuaXRzOworICAgICAgfQorCisgICAgICB1bml0cyA9IG5ldyBIYXNoU2V0PENvbXBpbGF0aW9uVW5pdD4oKTsKKyAgICAgIGZvciAoRmlsZSBzb3VyY2VGaWxlIDogaW5jbHVkZWRQYXRocykgeworICAgICAgICB1cGRhdGVDb21waWxhdGlvblVuaXRzSW5QYXRoKHNvdXJjZUZpbGUpOworICAgICAgfQorICAgICAgcmV0dXJuIHVuaXRzOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc0V4Y2x1ZGVkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKKyAgICAgIFN0cmluZyBwYXR0ZXJuID0gImZpbGU6IjsKKyAgICAgIGlmIChmaWxlTmFtZS5pbmRleE9mKHBhdHRlcm4pID09IDApIHsKKyAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHJpbmcocGF0dGVybi5sZW5ndGgoKSk7CisgICAgICB9CisgICAgICByZXR1cm4gZXhjbHVkZWRQYXRocy5jb250YWlucyhmaWxlTmFtZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUNvbXBpbGF0aW9uVW5pdHNJblBhdGgoRmlsZSBzb3VyY2VQYXRoRW50cnkpCisgICAgICAgIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlNQQU0sICJlbnRlcmluZyBhZGRDb21waWxhdGlvblVuaXRzSW5QYXRoLCBmaWxlID0gIgorICAgICAgICAgICsgc291cmNlUGF0aEVudHJ5LCBudWxsKTsKKyAgICAgIEZpbGVbXSBmaWxlcyA9IHNvdXJjZVBhdGhFbnRyeS5saXN0RmlsZXMoKTsKKyAgICAgIGlmIChmaWxlcyA9PSBudWxsKSB7IC8vIE5vIGZpbGVzIGZvdW5kLgorICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZmluYWwgRmlsZSBmaWxlID0gZmlsZXNbaV07CisgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5TUEFNLCAiZGVjaWRpbmcgdGhlIGZhdGUgb2YgZmlsZSAiICsgZmlsZSwgbnVsbCk7CisgICAgICAgIC8vIElnbm9yZSBmaWxlcyBsaWtlIC5zdm4gYW5kIC5jdnMKKyAgICAgICAgaWYgKGZpbGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSB8fCBmaWxlLmdldE5hbWUoKS5lcXVhbHMoIkNWUyIpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzRXhjbHVkZWRGaWxlKGZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKSkgeworICAgICAgICAgIC8vIGRvIG5vdCBwcm9jZXNzIHRoZSBzdWJ0cmVlCisgICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkRFQlVHLAorICAgICAgICAgICAgICAibm90IHRyYXZlcnNpbmcgIiArIGZpbGUudG9VUkkoKS50b1VSTCgpLCBudWxsKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmlsZS5pc0ZpbGUoKSkgeworICAgICAgICAgIFN0cmluZyBwa2dOYW1lID0gbnVsbDsKKyAgICAgICAgICBpZiAoZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoImphdmEiKSkgeworICAgICAgICAgICAgcGtnTmFtZSA9IGV4dHJhY3RQYWNrYWdlTmFtZShuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisgICAgICAgICAgICBpZiAocGtnTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5XQVJOLCAiTm90IGFkZGluZyBmaWxlID0gIgorICAgICAgICAgICAgICAgICAgKyBmaWxlLnRvU3RyaW5nKCkgKyAiLCBiZWNhdXNlIHBhY2thZ2VOYW1lID0gbnVsbCIsIG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKGlzVmFsaWRQYWNrYWdlKHBrZ05hbWUsCisgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoRW50cnkudG9VUkkoKS50b1VSTCgpLnRvU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gQWRkIGlmIHRoZSBwYWNrYWdlIGFuZCBmaWxlTmFtZXMgYXJlIG9rYXkKKyAgICAgICAgICAgICAgICB1bml0cy5hZGQobmV3IEZpbGVDb21waWxhdGlvblVuaXQoZmlsZSwgcGtnTmFtZSkpOworICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5ERUJVRywgImFkZGluZyBwa2dOYW1lID0gIiArIHBrZ05hbWUKKyAgICAgICAgICAgICAgICAgICAgKyAiLCBmaWxlID0gIiArIGZpbGUudG9TdHJpbmcoKSwgbnVsbCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlNQQU0sICIgbm90IGFkZGluZyBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgKyBmaWxlLnRvVVJJKCkudG9VUkwoKSwgbnVsbCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gUmVjdXJzZSBpbnRvIHN1YkRpcnMKKyAgICAgICAgICB1cGRhdGVDb21waWxhdGlvblVuaXRzSW5QYXRoKGZpbGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKICAgLy8gY3VycmVudGx5IGRvaW5nIG9ubHkgc291cmNlX2NvbXBhdGliaWxpdHkuIHRydWUgYnkgZGVmYXVsdC4KICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEFQSV9TT1VSQ0VfQ09NUEFUSUJJTElUWSA9IHRydWU7CiAKLSAgLy8gcHJpbnRzIHdoaWNoIGNsYXNzIHRoZSBtZW1iZXIgd2FzIGRlY2xhcmVkIGluIHBsdXMgdGhlIHN0cmluZyBtZXNzYWdlIGluCi0gIC8vIEFwaUNoYW5nZSwgZmFsc2UgYnkgZGVmYXVsdAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICAvLyBwcmludHMgdGhlIEFQSSBvZiB0aGUgdHdvIGNvbnRhaW5lcnMsIGZhbHNlIGJ5IGRlZmF1bHQuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19QUklOVF9BTExfQVBJID0gZmFsc2U7Ci0KLSAgLy8gdGhlc2UgdHdvIHBhcmFtZXRlcnMgcHJpbnQgQVBJcyBjb21tb24gaW4gdGhlIHR3byByZXBvc2l0b3JpZXMuIFNob3VsZCBiZQotICAvLyBmYWxzZSBieSBkZWZhdWx0LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJJTlRfQ09NUEFUSUJMRSA9IGZhbHNlOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUklOVF9DT01QQVRJQkxFX1dJVEggPSBmYWxzZTsKLSAgLy8gZm9yIGRlYnVnZ2luZy4gVG8gc2VlIGlmIFR5cGVPcmFjbGUgYnVpbGRzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUk9DRVNTX0VYSVNUSU5HX0FQSSA9IHRydWU7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFBST0NFU1NfTkVXX0FQSSA9IHRydWU7Ci0gIC8vIHRydWUgYnkgZGVmYXVsdAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVNT1ZFX05PTl9TVUJDTEFTU0FCTEVfQUJTVFJBQ1RfQ0xBU1NfRlJPTV9BUEkgPSB0cnVlOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBGSUxURVJfRFVQTElDQVRFUyA9IHRydWU7CisgIC8qKgorICAgKiBwcmludHMgd2hpY2ggY2xhc3MgdGhlIG1lbWJlciB3YXMgZGVjbGFyZWQgaW4gcGx1cyB0aGUgc3RyaW5nIG1lc3NhZ2UgaW4KKyAgICogQXBpQ2hhbmdlLCBmYWxzZSBieSBkZWZhdWx0CisgICAqLworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKIAogICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfRFVQTElDQVRFX1JFTU9WQUwgPSBmYWxzZTsKIAotICAvLyBUd2VhayBmb3IgbG9nIG91dHB1dC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBUcmVlTG9nZ2VyLlR5cGUgdHlwZSA9IFRyZWVMb2dnZXIuV0FSTjsKKyAgLyoqCisgICAqIEZsYWcgZm9yIGZpbHRlcmluZyBkdXBsaWNhdGVzLCB0cnVlIGJ5IGRlZmF1bHQuIEp1c3QgZm9yIGRlYnVnZ2luZyBpbiByYXJlCisgICAqIGNhc2VzLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEZJTFRFUl9EVVBMSUNBVEVTID0gdHJ1ZTsKKworICAvKioKKyAgICogUHJpbnQgQVBJcyBjb21tb24gaW4gdGhlIHR3byByZXBvc2l0b3JpZXMuIFNob3VsZCBiZSBmYWxzZSBieSBkZWZhdWx0LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSSU5UX0NPTVBBVElCTEUgPSBmYWxzZTsKKyAgLyoqCisgICAqIFByaW50IEFQSXMgY29tbW9uIGluIHRoZSB0d28gcmVwb3NpdG9yaWVzLiBTaG91bGQgYmUgZmFsc2UgYnkgZGVmYXVsdC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUklOVF9DT01QQVRJQkxFX1dJVEggPSBmYWxzZTsKKworICAvKioKKyAgICogRmxhZyBmb3IgZGVidWdnaW5nIHdoZXRoZXIgdHlwZU9yYWNsZSBidWlsZHMuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJPQ0VTU19FWElTVElOR19BUEkgPSB0cnVlOworCisgIC8qKgorICAgKiBGbGFnIGZvciBkZWJ1Z2dpbmcgd2hldGhlciB0eXBlT3JhY2xlIGJ1aWxkcy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUk9DRVNTX05FV19BUEkgPSB0cnVlOworCisgIC8vIHRydWUgYnkgZGVmYXVsdAorICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVNT1ZFX05PTl9TVUJDTEFTU0FCTEVfQUJTVFJBQ1RfQ0xBU1NfRlJPTV9BUEkgPSB0cnVlOwogCiAgIC8vIHJlbW92ZSBkdXBsaWNhdGVzIGJ5IGRlZmF1bHQKICAgcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uPEFwaUNoYW5nZT4gZ2V0QXBpRGlmZihBcGlDb250YWluZXIgbmV3QXBpLApAQCAtMTE1LDQ1ICs0MzYsNzAgQEAKICAgICByZXR1cm4gZ2V0QXBpRGlmZihhcGlEaWZmLCB3aGl0ZUxpc3QsIEZJTFRFUl9EVVBMSUNBVEVTKTsKICAgfQogCi0gIC8vIENhbGwgQVBJQnVpbGRlcnMgZm9yIGVhY2ggb2YgdGhlIDIgc291cmNlIHRyZWVzCiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQogICAgIHRyeSB7Ci0gICAgICBBcGlDb250YWluZXIgbmV3QXBpID0gbnVsbCwgZXhpc3RpbmdBcGkgPSBudWxsOworICAgICAgQXBpQ29tcGF0aWJpbGl0eUNoZWNrZXIgY2hlY2tlciA9IG5ldyBBcGlDb21wYXRpYmlsaXR5Q2hlY2tlcigpOworICAgICAgaWYgKGNoZWNrZXIucHJvY2Vzc0FyZ3MoYXJncykpIHsKKyAgICAgICAgQXBpQ29udGFpbmVyIG5ld0FwaSA9IG51bGwsIGV4aXN0aW5nQXBpID0gbnVsbDsKIAotICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMSkgewotICAgICAgICBwcmludEhlbHAoKTsKLSAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotICAgICAgfQorICAgICAgICBBYnN0cmFjdFRyZWVMb2dnZXIgbG9nZ2VyID0gbmV3IFByaW50V3JpdGVyVHJlZUxvZ2dlcigpOworICAgICAgICBsb2dnZXIuc2V0TWF4RGV0YWlsKGNoZWNrZXIudHlwZSk7CisgICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5JTkZPLCAiZ3d0RGV2SmFyID0gIiArIGNoZWNrZXIuZ3d0RGV2SmFyCisgICAgICAgICAgICArICIsIHVzZXJKYXIgPSAiICsgY2hlY2tlci5nd3RVc2VySmFyICsgIiwgcmVmamFycyA9ICIKKyAgICAgICAgICAgICsgY2hlY2tlci5yZWZKYXJzICsgIiwgbG9nTGV2ZWwgPSAiICsgY2hlY2tlci50eXBlCisgICAgICAgICAgICArICIsIHByaW50QWxsQXBpID0gIiArIGNoZWNrZXIucHJpbnRBbGxBcGksIG51bGwpOwogCi0gICAgICBBYnN0cmFjdFRyZWVMb2dnZXIgbG9nZ2VyID0gbmV3IFByaW50V3JpdGVyVHJlZUxvZ2dlcigpOwotICAgICAgbG9nZ2VyLnNldE1heERldGFpbCh0eXBlKTsKLSAgICAgIGlmIChQUk9DRVNTX05FV19BUEkpIHsKLSAgICAgICAgbmV3QXBpID0gbmV3IEFwaUNvbnRhaW5lcihhcmdzWzBdLCAiX25ldyIsIGxvZ2dlcik7Ci0gICAgICAgIGlmIChBcGlDb21wYXRpYmlsaXR5Q2hlY2tlci5ERUJVR19QUklOVF9BTExfQVBJKSB7Ci0gICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLklORk8sIG5ld0FwaS5nZXRBcGlBc1N0cmluZygpKTsgLy8gcHJpbnQgdGhlIEFQSQorICAgICAgICBTZXQ8U3RyaW5nPiBleGNsdWRlZFBhY2thZ2VzID0gY2hlY2tlci5nZXRTZXRPZkV4Y2x1ZGVkUGFja2FnZXMoY2hlY2tlci5jb25maWdQcm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKFBST0NFU1NfTkVXX0FQSSkgeworICAgICAgICAgIFNldDxDb21waWxhdGlvblVuaXQ+IHVuaXRzID0gbmV3IEhhc2hTZXQ8Q29tcGlsYXRpb25Vbml0PigpOworICAgICAgICAgIHVuaXRzLmFkZEFsbChuZXcgU291cmNlRmlsZUNvbXBpbGF0aW9uVW5pdHMoCisgICAgICAgICAgICAgIGNoZWNrZXIuY29uZmlnUHJvcGVydGllcy5nZXRQcm9wZXJ0eSgiZGlyUm9vdF9uZXciKSwKKyAgICAgICAgICAgICAgY2hlY2tlci5nZXRDb25maWdQcm9wZXJ0eUFzU2V0KCJzb3VyY2VGaWxlc19uZXciKSwKKyAgICAgICAgICAgICAgY2hlY2tlci5nZXRDb25maWdQcm9wZXJ0eUFzU2V0KCJleGNsdWRlZEZpbGVzX25ldyIpLCBsb2dnZXIpLmdldENvbXBpbGF0aW9uVW5pdHMoKSk7CisgICAgICAgICAgdW5pdHMuYWRkQWxsKGNoZWNrZXIuZ2V0R3d0Q29tcGlsYXRpb25Vbml0cyhsb2dnZXIpKTsKKyAgICAgICAgICBuZXdBcGkgPSBuZXcgQXBpQ29udGFpbmVyKAorICAgICAgICAgICAgICBjaGVja2VyLmNvbmZpZ1Byb3BlcnRpZXMuZ2V0UHJvcGVydHkoIm5hbWVfbmV3IiksIHVuaXRzLAorICAgICAgICAgICAgICBleGNsdWRlZFBhY2thZ2VzLCBsb2dnZXIpOworICAgICAgICAgIGlmIChjaGVja2VyLnByaW50QWxsQXBpKSB7CisgICAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuSU5GTywgbmV3QXBpLmdldEFwaUFzU3RyaW5nKCkpOworICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKFBST0NFU1NfRVhJU1RJTkdfQVBJKSB7Ci0gICAgICAgIGV4aXN0aW5nQXBpID0gbmV3IEFwaUNvbnRhaW5lcihhcmdzWzBdLCAiX29sZCIsIGxvZ2dlcik7Ci0gICAgICAgIGlmIChBcGlDb21wYXRpYmlsaXR5Q2hlY2tlci5ERUJVR19QUklOVF9BTExfQVBJKSB7Ci0gICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLklORk8sIGV4aXN0aW5nQXBpLmdldEFwaUFzU3RyaW5nKCkpOworICAgICAgICBpZiAoUFJPQ0VTU19FWElTVElOR19BUEkpIHsKKyAgICAgICAgICBTZXQ8Q29tcGlsYXRpb25Vbml0PiB1bml0cyA9IG5ldyBIYXNoU2V0PENvbXBpbGF0aW9uVW5pdD4oKTsKKyAgICAgICAgICBpZiAoY2hlY2tlci5yZWZKYXJzID09IG51bGwpIHsKKyAgICAgICAgICAgIHVuaXRzLmFkZEFsbChuZXcgU291cmNlRmlsZUNvbXBpbGF0aW9uVW5pdHMoCisgICAgICAgICAgICAgICAgY2hlY2tlci5jb25maWdQcm9wZXJ0aWVzLmdldFByb3BlcnR5KCJkaXJSb290X29sZCIpLAorICAgICAgICAgICAgICAgIGNoZWNrZXIuZ2V0Q29uZmlnUHJvcGVydHlBc1NldCgic291cmNlRmlsZXNfb2xkIiksCisgICAgICAgICAgICAgICAgY2hlY2tlci5nZXRDb25maWdQcm9wZXJ0eUFzU2V0KCJleGNsdWRlZEZpbGVzX29sZCIpLCBsb2dnZXIpLmdldENvbXBpbGF0aW9uVW5pdHMoKSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuaXRzLmFkZEFsbChuZXcgSmFyRmlsZUNvbXBpbGF0aW9uVW5pdHMoY2hlY2tlci5yZWZKYXJzLAorICAgICAgICAgICAgICAgIGNoZWNrZXIuZ2V0Q29uZmlnUHJvcGVydHlBc1NldCgic291cmNlRmlsZXNfb2xkIiksCisgICAgICAgICAgICAgICAgY2hlY2tlci5nZXRDb25maWdQcm9wZXJ0eUFzU2V0KCJleGNsdWRlZEZpbGVzX29sZCIpLCBsb2dnZXIpLmdldENvbXBpbGF0aW9uVW5pdHMoKSk7CisgICAgICAgICAgfQorICAgICAgICAgIHVuaXRzLmFkZEFsbChjaGVja2VyLmdldEd3dENvbXBpbGF0aW9uVW5pdHMobG9nZ2VyKSk7CisgICAgICAgICAgZXhpc3RpbmdBcGkgPSBuZXcgQXBpQ29udGFpbmVyKAorICAgICAgICAgICAgICBjaGVja2VyLmNvbmZpZ1Byb3BlcnRpZXMuZ2V0UHJvcGVydHkoIm5hbWVfb2xkIiksIHVuaXRzLAorICAgICAgICAgICAgICBleGNsdWRlZFBhY2thZ2VzLCBsb2dnZXIpOworICAgICAgICAgIGlmIChjaGVja2VyLnByaW50QWxsQXBpKSB7CisgICAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuSU5GTywgZXhpc3RpbmdBcGkuZ2V0QXBpQXNTdHJpbmcoKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFBST0NFU1NfTkVXX0FQSSAmJiBQUk9DRVNTX0VYSVNUSU5HX0FQSSkgeworICAgICAgICAgIENvbGxlY3Rpb248QXBpQ2hhbmdlPiBhcGlEaWZmZXJlbmNlcyA9IGdldEFwaURpZmYobmV3QXBpLAorICAgICAgICAgICAgICBleGlzdGluZ0FwaSwgY2hlY2tlci53aGl0ZUxpc3QpOworICAgICAgICAgIGZvciAoQXBpQ2hhbmdlIGFwaUNoYW5nZSA6IGFwaURpZmZlcmVuY2VzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXBpQ2hhbmdlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFwaURpZmZlcmVuY2VzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFQSSBjb21wYXRpYmlsaXR5IGNoZWNrIFNVQ0NFU1NGVUwiKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBUEkgY29tcGF0aWJpbGl0eSBjaGVjayBGQUlMRUQiKTsKKyAgICAgICAgICB9CisgICAgICAgICAgU3lzdGVtLmV4aXQoYXBpRGlmZmVyZW5jZXMuc2l6ZSgpID09IDAgPyAwIDogMSk7CiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgaWYgKFBST0NFU1NfTkVXX0FQSSAmJiBQUk9DRVNTX0VYSVNUSU5HX0FQSSkgewotICAgICAgICBDb2xsZWN0aW9uPEFwaUNoYW5nZT4gYXBpRGlmZmVyZW5jZXMgPSBnZXRBcGlEaWZmKG5ld0FwaSwgZXhpc3RpbmdBcGksCi0gICAgICAgICAgICByZWFkV2hpdGVMaXN0RnJvbUZpbGUoYXJnc1swXSkpOwotICAgICAgICBmb3IgKEFwaUNoYW5nZSBhcGlDaGFuZ2UgOiBhcGlEaWZmZXJlbmNlcykgewotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcGlDaGFuZ2UpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcGlEaWZmZXJlbmNlcy5zaXplKCkgPT0gMCkgewotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQVBJIGNvbXBhdGliaWxpdHkgY2hlY2sgU1VDQ0VTU0ZVTCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQVBJIGNvbXBhdGliaWxpdHkgY2hlY2sgRkFJTEVEIik7Ci0gICAgICAgIH0KLSAgICAgICAgU3lzdGVtLmV4aXQoYXBpRGlmZmVyZW5jZXMuc2l6ZSgpID09IDAgPyAwIDogMSk7Ci0gICAgICB9CiAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgIC8vIGludGVyY2VwdGluZyBhbGwgZXhjZXB0aW9ucyBpbiBtYWluLCBiZWNhdXNlIEkgaGF2ZSB0byBleGl0IHdpdGggLTEgc28KICAgICAgIC8vIHRoYXQgdGhlIGJ1aWxkIGJyZWFrcy4KQEAgLTE2Myw0NCArNTA5LDYgQEAKICAgICB9CiAgIH0KIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRIZWxwKCkgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQoImphdmEgQXBpQ29tcGF0aWJpbGl0eUNoZWNrZXIgY29uZmlnRmlsZVxuIik7Ci0gICAgc2IuYXBwZW5kKCJUaGUgQXBpQ29tcGF0aWJpbGl0eUNoZWNrZXIgdG9vbCByZXF1aXJlcyBhIGNvbmZpZyBmaWxlIGFzIGFuIGFyZ3VtZW50LiAiKTsKLSAgICBzYi5hcHBlbmQoIlRoZSBjb25maWcgZmlsZSBtdXN0IHNwZWNpZnkgdHdvIHJlcG9zaXRvcmllcyBvZiBqYXZhIHNvdXJjZSBmaWxlczogIik7Ci0gICAgc2IuYXBwZW5kKCInX29sZCcgYW5kICdfbmV3Jywgd2hpY2ggYXJlIHRvIGJlIGNvbXBhcmVkIGZvciBBUEkgc291cmNlIGNvbXBhdGliaWxpdHkuXG4iKTsKLSAgICBzYi5hcHBlbmQoIkFuIG9wdGlvbmFsIHdoaXRlbGlzdCBpcyBwcmVzZW50IGF0IHRoZSBlbmQgb2YgIik7Ci0gICAgc2IuYXBwZW5kKCJ0aGUgY29uZmlnIGZpbGUuIFRoZSBmb3JtYXQgb2YgdGhlIHdoaXRlbGlzdCBpcyBzYW1lIGFzIHRoZSBvdXRwdXQgb2YgIik7Ci0gICAgc2IuYXBwZW5kKCJ0aGUgdG9vbCB3aXRob3V0IHRoZSB3aGl0ZWxpc3QuXG4iKTsKLSAgICBzYi5hcHBlbmQoIkVhY2ggcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgYnkgdGhlIGZvbGxvd2luZyBmb3VyIHByb3BlcnRpZXM6XG4iKTsKLSAgICBzYi5hcHBlbmQoIm5hbWUgICAgICAgICAgIHNwZWNpZmllcyBob3cgdGhlIGFwaSBzaG91bGQgYmUgcmVmZXJlZCB0byBpbiB0aGUgb3V0cHV0XG4iKTsKLSAgICBzYi5hcHBlbmQoImRpclJvb3QgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiBhbGwgb3RoZXIgZmlsZS9kaXJlY3RvcnkgbmFtZXNcbiIpOwotICAgIHNiLmFwcGVuZCgic291cmNlRmlsZXMgICAgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcy9kaXJlY3RvcmllcyB0aGF0IHNwZWNpZnkgdGhlIHJvb3RzIG9mIHRoZSB0aGUgZmlsZXN5c3RlbSB0cmVlcyB0byBiZSBpbmNsdWRlZC5cbiIpOwotICAgIHNiLmFwcGVuZCgiZXhjbHVkZUZpbGVzICAgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdHMgb2YgZmlsZXMvZGlyZWN0b3JpZXMgdGhhdCBzcGVjaWZ5IHRoZSByb290cyBvZiB0aGUgZmlsZXN5c3RlbSB0cmVlcyB0byBiZSBleGNsdWRlZCIpOwotCi0gICAgc2IuYXBwZW5kKCJcblxuIik7Ci0gICAgc2IuYXBwZW5kKCJFeGFtcGxlIGFwaS5jb25mIGZpbGU6XG4iKTsKLSAgICBzYi5hcHBlbmQoIm5hbWVfb2xkICAgICAgICAgZ3d0RW11bGF0b3IiKTsKLSAgICBzYi5hcHBlbmQoIlxuIik7Ci0gICAgc2IuYXBwZW5kKCJkaXJSb290X29sZCAgICAgIC4vIik7Ci0gICAgc2IuYXBwZW5kKCJcbiIpOwotICAgIHNiLmFwcGVuZCgic291cmNlRmlsZXNfb2xkICBkZXYvY29yZS9zdXBlcjp1c2VyL3N1cGVyOnVzZXIvc3JjIik7Ci0gICAgc2IuYXBwZW5kKCJcbiIpOwotICAgIHNiLmFwcGVuZCgiZXhjbHVkZUZpbGVzX29sZCB1c2VyL3N1cGVyL2NvbS9nb29nbGUvZ3d0L2p1bml0Iik7Ci0gICAgc2IuYXBwZW5kKCJcblxuIik7Ci0KLSAgICBzYi5hcHBlbmQoIm5hbWVfbmV3ICAgICAgICAgZ3d0RW11bGF0b3JDb3B5Iik7Ci0gICAgc2IuYXBwZW5kKCJcbiIpOwotICAgIHNiLmFwcGVuZCgiZGlyUm9vdF9uZXcgICAgICAuLi9nd3QtMTQvIik7Ci0gICAgc2IuYXBwZW5kKCJcbiIpOwotICAgIHNiLmFwcGVuZCgic291cmNlRmlsZXNfbmV3ICBkZXYvY29yZTp1c2VyL3N1cGVyOnVzZXIvc3JjIik7Ci0gICAgc2IuYXBwZW5kKCJcbiIpOwotICAgIHNiLmFwcGVuZCgiZXhjbHVkZUZpbGVzX25ldyB1c2VyL3N1cGVyL2NvbS9nb29nbGUvZ3d0L2p1bml0Iik7Ci0gICAgc2IuYXBwZW5kKCJcblxuIik7Ci0KLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7Ci0gIH0KLQogICAvLyBpbnRlcmZhY2UgZm9yIHRlc3RpbmcsIHNpbmNlIGRvIG5vdCB3YW50IHRvIGJ1aWxkIEFwaURpZmYgZnJlcXVlbnRseQogICBzdGF0aWMgQ29sbGVjdGlvbjxBcGlDaGFuZ2U+IGdldEFwaURpZmYoQXBpRGlmZkdlbmVyYXRvciBhcGlEaWZmLAogICAgICAgU2V0PFN0cmluZz4gd2hpdGVMaXN0LCBib29sZWFuIHJlbW92ZUR1cGxpY2F0ZXMpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7CkBAIC0yNDQsNiArNTUyLDMzMCBAQAogICAgIHJldHVybiBhcGlDaGFuZ2VMaXN0OwogICB9CiAKKyAgcHJpdmF0ZSBQcm9wZXJ0aWVzIGNvbmZpZ1Byb3BlcnRpZXM7CisKKyAgcHJpdmF0ZSBKYXJGaWxlIGd3dERldkphcjsKKyAgcHJpdmF0ZSBKYXJGaWxlIGd3dFVzZXJKYXI7CisKKyAgLy8gcHJpbnRzIHRoZSBBUEkgb2YgdGhlIHR3byBjb250YWluZXJzLCBmYWxzZSBieSBkZWZhdWx0LgorICBwcml2YXRlIGJvb2xlYW4gcHJpbnRBbGxBcGkgPSBmYWxzZTsKKyAgcHJpdmF0ZSBKYXJGaWxlIHJlZkphcnNbXTsKKyAgLy8gZGVmYXVsdCBsb2cgb3V0cHV0CisgIHByaXZhdGUgVHJlZUxvZ2dlci5UeXBlIHR5cGUgPSBUcmVlTG9nZ2VyLldBUk47CisgIHByaXZhdGUgU2V0PFN0cmluZz4gd2hpdGVMaXN0OworCisgIHByb3RlY3RlZCBBcGlDb21wYXRpYmlsaXR5Q2hlY2tlcigpIHsKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgaGFuZGxlcnMgZm9yIGd3dERldkphciwgZ3d0VXNlckphciwgcmVmSmFyLCBsb2dMZXZlbCwKKyAgICAgKiBwcmludEFsbEFwaSwgY29uZmlnUHJvcGVydGllcworICAgICAqLworCisgICAgLy8gaGFuZGxlciBmb3IgZ3d0RGV2SmFyCisgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU3RyaW5nKCkgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKKyAgICAgICAgcmV0dXJuICJQYXRoIG9mIHRoZSBnd3QgZGV2IGphciI7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7CisgICAgICAgIHJldHVybiAiLWd3dERldkphciI7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJnd3RfZGV2X2phcl9wYXRoIn07CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBzdHIpIHsKKyAgICAgICAgZ3d0RGV2SmFyID0gZ2V0SmFyRnJvbVN0cmluZyhzdHIpOworICAgICAgICByZXR1cm4gZ3d0RGV2SmFyICE9IG51bGw7CisgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBoYW5kbGVyIGZvciBnd3RVc2VySmFyCisgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU3RyaW5nKCkgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKKyAgICAgICAgcmV0dXJuICJQYXRoIG9mIHRoZSBnd3QgdXNlciBqYXIiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgICByZXR1cm4gIi1nd3RVc2VySmFyIjsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Imd3dF91c2VyX2phcl9wYXRoIn07CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBzdHIpIHsKKyAgICAgICAgZ3d0VXNlckphciA9IGdldEphckZyb21TdHJpbmcoc3RyKTsKKyAgICAgICAgcmV0dXJuIGd3dFVzZXJKYXIgIT0gbnVsbDsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIGhhbmRsZXIgZm9yIHJlZkphcgorICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlclN0cmluZygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgeworICAgICAgICByZXR1cm4gIlBhdGggb2YgdGhlIHJlZmVyZW5jZSBqYXIiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgICByZXR1cm4gIi1yZWZKYXIiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsicmVmZXJlbmNlX2phcl9wYXRoIn07CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBzdHIpIHsKKyAgICAgICAgU3RyaW5nIHJlZkphclN0cmluZ3NbXSA9IHN0ci5zcGxpdCgiOiIpOworICAgICAgICByZWZKYXJzID0gbmV3IEphckZpbGVbcmVmSmFyU3RyaW5ncy5sZW5ndGhdOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBmb3IgKFN0cmluZyByZWZKYXJTdHJpbmcgOiByZWZKYXJTdHJpbmdzKSB7CisgICAgICAgICAgcmVmSmFyc1tjb3VudCsrXSA9IGdldEphckZyb21TdHJpbmcocmVmSmFyU3RyaW5nKTsKKyAgICAgICAgICBpZiAocmVmSmFyc1tjb3VudCAtIDFdID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYmFpbC1vdXQgZWFybHkKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlZkphcnMgIT0gbnVsbDsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIGhhbmRsZXIgZm9yIGxvZ0xldmVsCisgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU3RyaW5nKCkgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKKyAgICAgICAgcmV0dXJuICJTZXRzIHRoZSBsb2cgbGV2ZWwgb2YgdGhlIFRyZWVMb2dnZXIiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgICByZXR1cm4gIi1sb2dMZXZlbCI7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZXNbXSA9IG5ldyBTdHJpbmdbVHJlZUxvZ2dlci5UeXBlLnZhbHVlcygpLmxlbmd0aF07CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGZvciAoVHJlZUxvZ2dlci5UeXBlIHRlbXBUeXBlIDogVHJlZUxvZ2dlci5UeXBlLnZhbHVlcygpKSB7CisgICAgICAgICAgdmFsdWVzW2NvdW50KytdID0gdGVtcFR5cGUubmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBzdHIpIHsKKyAgICAgICAgZm9yIChUcmVlTG9nZ2VyLlR5cGUgdGVtcFR5cGUgOiBUcmVlTG9nZ2VyLlR5cGUudmFsdWVzKCkpIHsKKyAgICAgICAgICBpZiAodGVtcFR5cGUubmFtZSgpLmVxdWFscyhzdHIpKSB7CisgICAgICAgICAgICB0eXBlID0gdGVtcFR5cGU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgfSk7CisKKyAgICAvLyBoYW5kbGVyIGZvciBwcmludEFsbEFwaQorICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckZsYWcoKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgeworICAgICAgICByZXR1cm4gIlByaW50cyBhbGwgYXBpIjsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgICAgcmV0dXJuICItcHJpbnRBbGxBcGkiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHNldEZsYWcoKSB7CisgICAgICAgIHByaW50QWxsQXBpID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICB9KTsKKworICAgIC8vIGhhbmRsZXIgZm9yIGNvbmZpZ0ZpbGUKKyAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdHJpbmcoKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgeworICAgICAgICByZXR1cm4gIlBhdGggb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSI7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7CisgICAgICAgIHJldHVybiAiLWNvbmZpZ0ZpbGUiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsiY29uZmlnX2ZpbGVfcGF0aCJ9OworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIGlzUmVxdWlyZWQoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgc3RyKSB7CisgICAgICAgIHNldFByb3BlcnRpZXNBbmRXaGl0ZWxpc3Qoc3RyKTsKKyAgICAgICAgcmV0dXJuIGNvbmZpZ1Byb3BlcnRpZXMgIT0gbnVsbCAmJiB3aGl0ZUxpc3QgIT0gbnVsbDsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBwcmludEhlbHAoKSB7CisgICAgc3VwZXIucHJpbnRIZWxwKCk7CisgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIHNiLmFwcGVuZCgiXG4iKTsKKyAgICBzYi5hcHBlbmQoIlRoZSBjb25maWcgZmlsZSBtdXN0IHNwZWNpZnkgdHdvIHJlcG9zaXRvcmllcyBvZiBqYXZhIHNvdXJjZSBmaWxlczogIik7CisgICAgc2IuYXBwZW5kKCInX29sZCcgYW5kICdfbmV3Jywgd2hpY2ggYXJlIHRvIGJlIGNvbXBhcmVkIGZvciBBUEkgc291cmNlIGNvbXBhdGliaWxpdHkuXG4iKTsKKyAgICBzYi5hcHBlbmQoIkFuIG9wdGlvbmFsIHdoaXRlbGlzdCBpcyBwcmVzZW50IGF0IHRoZSBlbmQgb2YgIik7CisgICAgc2IuYXBwZW5kKCJ0aGUgY29uZmlnIGZpbGUuIFRoZSBmb3JtYXQgb2YgdGhlIHdoaXRlbGlzdCBpcyBzYW1lIGFzIHRoZSBvdXRwdXQgb2YgIik7CisgICAgc2IuYXBwZW5kKCJ0aGUgdG9vbCB3aXRob3V0IHRoZSB3aGl0ZWxpc3QuXG4iKTsKKyAgICBzYi5hcHBlbmQoIkVhY2ggcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgYnkgdGhlIGZvbGxvd2luZyBmb3VyIHByb3BlcnRpZXM6XG4iKTsKKyAgICBzYi5hcHBlbmQoIm5hbWUgICAgICAgICAgICAgc3BlY2lmaWVzIGhvdyB0aGUgYXBpIHNob3VsZCBiZSByZWZlcmVkIHRvIGluIHRoZSBvdXRwdXRcbiIpOworICAgIHNiLmFwcGVuZCgiZGlyUm9vdCAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudCB0aGF0IHNwZWNpZmllcyB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgYWxsIG90aGVyIGZpbGUvZGlyZWN0b3J5IG5hbWVzXG4iKTsKKyAgICBzYi5hcHBlbmQoInNvdXJjZUZpbGVzICAgICAgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcy9kaXJlY3RvcmllcyB0aGF0IHNwZWNpZnkgdGhlIHJvb3RzIG9mIHRoZSB0aGUgZmlsZXN5c3RlbSB0cmVlcyB0byBiZSBpbmNsdWRlZC5cbiIpOworICAgIHNiLmFwcGVuZCgiZXhjbHVkZUZpbGVzICAgICBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0cyBvZiBmaWxlcy9kaXJlY3RvcmllcyB0aGF0IHNwZWNpZnkgdGhlIHJvb3RzIG9mIHRoZSBmaWxlc3lzdGVtIHRyZWVzIHRvIGJlIGV4Y2x1ZGVkIik7CisKKyAgICBzYi5hcHBlbmQoIlxuXG4iKTsKKyAgICBzYi5hcHBlbmQoIkV4YW1wbGUgYXBpLmNvbmYgZmlsZTpcbiIpOworICAgIHNiLmFwcGVuZCgibmFtZV9vbGQgICAgICAgICBnd3RFbXVsYXRvciIpOworICAgIHNiLmFwcGVuZCgiXG4iKTsKKyAgICBzYi5hcHBlbmQoImRpclJvb3Rfb2xkICAgICAgLi8iKTsKKyAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgc2IuYXBwZW5kKCJzb3VyY2VGaWxlc19vbGQgIGRldi9jb3JlL3N1cGVyOnVzZXIvc3VwZXI6dXNlci9zcmMiKTsKKyAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgc2IuYXBwZW5kKCJleGNsdWRlRmlsZXNfb2xkIHVzZXIvc3VwZXIvY29tL2dvb2dsZS9nd3QvanVuaXQiKTsKKyAgICBzYi5hcHBlbmQoIlxuXG4iKTsKKworICAgIHNiLmFwcGVuZCgibmFtZV9uZXcgICAgICAgICBnd3RFbXVsYXRvckNvcHkiKTsKKyAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgc2IuYXBwZW5kKCJkaXJSb290X25ldyAgICAgIC4uL2d3dC0xNC8iKTsKKyAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgc2IuYXBwZW5kKCJzb3VyY2VGaWxlc19uZXcgIGRldi9jb3JlOnVzZXIvc3VwZXI6dXNlci9zcmMiKTsKKyAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgc2IuYXBwZW5kKCJleGNsdWRlRmlsZXNfbmV3IHVzZXIvc3VwZXIvY29tL2dvb2dsZS9nd3QvanVuaXQiKTsKKyAgICBzYi5hcHBlbmQoIlxuXG4iKTsKKworICAgIFN5c3RlbS5lcnIucHJpbnRsbihzYi50b1N0cmluZygpKTsKKyAgfQorCisgIHByb3RlY3RlZCBKYXJGaWxlIGdldEphckZyb21TdHJpbmcoU3RyaW5nIHN0cikgeworICAgIHRyeSB7CisgICAgICByZXR1cm4gbmV3IEphckZpbGUoc3RyKTsKKyAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJleGNlcHRpb24gaW4gZ2V0dGluZyBqYXIgZnJvbSBuYW1lICIKKyAgICAgICAgICArIGV4LmdldE1lc3NhZ2UoKSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBzZXRQcm9wZXJ0aWVzQW5kV2hpdGVsaXN0KFN0cmluZyBmaWxlTmFtZSkKKyAgICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICAvLyBsb2FkIGNvbmZpZyBwcm9wZXJ0aWVzCisgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlTmFtZSk7CisgICAgICBjb25maWdQcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIGNvbmZpZ1Byb3BlcnRpZXMubG9hZChmaXMpOworICAgICAgZmlzLmNsb3NlKCk7CisKKyAgICAgIC8vIGxvYWQgd2hpdGVsaXN0CisgICAgICBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoZmlsZU5hbWUpOworICAgICAgd2hpdGVMaXN0ID0gcmVhZFdoaXRlTGlzdEZyb21GaWxlKGZyKTsKKyAgICAgIGZyLmNsb3NlKCk7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSGF2ZSB5b3Ugc3BlY2lmaWVkIHRoZSBwYXRoIG9mIHRoZSBjb25maWcgZmlsZSBjb3JyZWN0bHk/Iik7CisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGV4KTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIFNldDxTdHJpbmc+IGdldENvbmZpZ1Byb3BlcnR5QXNTZXQoU3RyaW5nIGtleSkgeworICAgIFNldDxTdHJpbmc+IHNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICBTdHJpbmcgcHJvcGVydHlWYWx1ZSA9IGNvbmZpZ1Byb3BlcnRpZXMuZ2V0UHJvcGVydHkoa2V5KTsKKyAgICBpZiAocHJvcGVydHlWYWx1ZSA9PSBudWxsKSB7CisgICAgICByZXR1cm4gc2V0OworICAgIH0KKyAgICBmb3IgKFN0cmluZyBlbGVtZW50IDogcHJvcGVydHlWYWx1ZS5zcGxpdCgiOiIpKSB7CisgICAgICBlbGVtZW50ID0gZWxlbWVudC50cmltKCk7CisgICAgICBzZXQuYWRkKGVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gc2V0OworICB9CisKKyAgcHJpdmF0ZSBTZXQ8Q29tcGlsYXRpb25Vbml0PiBnZXRHd3RDb21waWxhdGlvblVuaXRzKFRyZWVMb2dnZXIgbG9nZ2VyKQorICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIE5vdEZvdW5kRXhjZXB0aW9uLAorICAgICAgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7CisgICAgU2V0PENvbXBpbGF0aW9uVW5pdD4gdW5pdHMgPSBuZXcgSGFzaFNldDxDb21waWxhdGlvblVuaXQ+KCk7CisgICAgaWYgKGd3dERldkphciA9PSBudWxsIHx8IGd3dFVzZXJKYXIgPT0gbnVsbCkgeworICAgICAgaWYgKGd3dERldkphciAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQXJndW1lbnQgZ3d0VXNlckphciBtdXN0IGJlIHByb3ZpZGVkIGZvciBnd3REZXZKYXIgdG8gYmUgdXNlZCIpOworICAgICAgfQorICAgICAgaWYgKGd3dFVzZXJKYXIgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkFyZ3VtZW50IGd3dERldkphciBtdXN0IGJlIHByb3ZpZGVkIGZvciBnd3RVc2VySmFyIHRvIGJlIHVzZWQiKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB1bml0czsKKyAgICB9CisgICAgLy8gZ3d0LXVzZXIuamFyCisgICAgU2V0PFN0cmluZz4gZ3d0SW5jbHVkZWRQYXRocyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oCisgICAgICAgIEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsiY29tL2dvb2dsZS9nd3QifSkpOworICAgIFNldDxTdHJpbmc+IGd3dEV4Y2x1ZGVkUGF0aHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KAorICAgICAgICBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiY29tL2dvb2dsZS9nd3QvYmVuY2htYXJrcyIsCisgICAgICAgICAgICAiY29tL2dvb2dsZS9nd3QvaTE4bi9yZWJpbmQiLAorICAgICAgICAgICAgImNvbS9nb29nbGUvZ3d0L2kxOG4vdG9vbHMiLAorICAgICAgICAgICAgImNvbS9nb29nbGUvZ3d0L2pzb24iLAorICAgICAgICAgICAgImNvbS9nb29nbGUvZ3d0L2p1bml0IiwKKyAgICAgICAgICAgICJjb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC9ycGMvY29yZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcF9DdXN0b21GaWVsZFNlcmlhbGl6ZXIuamF2YSIsCisgICAgICAgICAgICAiY29tL2dvb2dsZS9nd3QvdXNlci9yZWJpbmQiLCAiY29tL2dvb2dsZS9nd3QvdXNlci9zZXJ2ZXIiLAorICAgICAgICAgICAgImNvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMiLH0pKTsKKyAgICBDb21waWxhdGlvblVuaXRzIGN1ID0gbmV3IEphckZpbGVDb21waWxhdGlvblVuaXRzKAorICAgICAgICBuZXcgSmFyRmlsZVtdIHtnd3RVc2VySmFyfSwgZ3d0SW5jbHVkZWRQYXRocywgZ3d0RXhjbHVkZWRQYXRocywgbG9nZ2VyKTsKKyAgICB1bml0cy5hZGRBbGwoY3UuZ2V0Q29tcGlsYXRpb25Vbml0cygpKTsKKworICAgIC8vIGd3dC1kZXYtKi5qYXIKKyAgICBnd3RJbmNsdWRlZFBhdGhzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPihBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7CisgICAgICAgICJjb20vZ29vZ2xlL2d3dC9jb3JlL2NsaWVudCIsCisgICAgICAgICJjb20vZ29vZ2xlL2d3dC9kZXYvampzL2ludHJpbnNpYy9jb20vZ29vZ2xlL2d3dC9sYW5nIiwKKyAgICAgICAgImNvbS9nb29nbGUvZ3d0L2xhbmciLH0pKTsKKyAgICBjdSA9IG5ldyBKYXJGaWxlQ29tcGlsYXRpb25Vbml0cyhuZXcgSmFyRmlsZVtdIHtnd3REZXZKYXJ9LAorICAgICAgICBnd3RJbmNsdWRlZFBhdGhzLCBudWxsLCBsb2dnZXIpOworICAgIHVuaXRzLmFkZEFsbChjdS5nZXRDb21waWxhdGlvblVuaXRzKCkpOworICAgIHJldHVybiB1bml0czsKKyAgfQorCisgIC8qCisgICAqIGV4Y2x1ZGVkUGFja2FnZXMgaXMgdXNlZCBpbiBvbmx5IG9uZSBwbGFjZTogdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc29tZSBjbGFzcworICAgKiBpcyBhbiBhcGkgY2xhc3Mgb3Igbm90CisgICAqLworICBwcml2YXRlIFNldDxTdHJpbmc+IGdldFNldE9mRXhjbHVkZWRQYWNrYWdlcyhQcm9wZXJ0aWVzIGNvbmZpZykgeworICAgIFN0cmluZyBhbGxFeGNsdWRlZFBhY2thZ2VzID0gY29uZmlnLmdldFByb3BlcnR5KCJleGNsdWRlZFBhY2thZ2VzIik7CisgICAgaWYgKGFsbEV4Y2x1ZGVkUGFja2FnZXMgPT0gbnVsbCkgeworICAgICAgYWxsRXhjbHVkZWRQYWNrYWdlcyA9ICIiOworICAgIH0KKyAgICBTdHJpbmcgZXhjbHVkZWRQYWNrYWdlc0FycmF5W10gPSBhbGxFeGNsdWRlZFBhY2thZ2VzLnNwbGl0KCI6Iik7CisgICAgcmV0dXJuIG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdChleGNsdWRlZFBhY2thZ2VzQXJyYXkpKTsKKyAgfQorCiAgIC8qKgogICAgKiBFYWNoIHdoaXRlTGlzdCBlbGVtZW50IGlzIGFuIHtAbGluayBBcGlFbGVtZW50fSBhbmQKICAgICoge0BsaW5rIEFwaUNoYW5nZS5TdGF0dXN9IHNlcGFyYXRlZCBieSBzcGFjZS4gRm9yIGV4YW1wbGUsCkBAIC0yNTIsMTMgKzg4NCw4IEBACiAgICAqIG1ldGhvZCBvbiB7QGxpbmsgQXBpRWxlbWVudH0uCiAgICAqIAogICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gcmVhZFdoaXRlTGlzdEZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSkKLSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKGZpbGVOYW1lID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImZpbGVOYW1lIGlzIG51bGwiKTsKLSAgICB9CisgIHByaXZhdGUgU2V0PFN0cmluZz4gcmVhZFdoaXRlTGlzdEZyb21GaWxlKEZpbGVSZWFkZXIgZnIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgU2V0PFN0cmluZz4gaGFzaFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLSAgICBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoZmlsZU5hbWUpOwogICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsKICAgICBTdHJpbmcgc3RyID0gbnVsbDsKICAgICB3aGlsZSAoKHN0ciA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2FwaS1jaGVja2VyL3NyYy9jb20vZ29vZ2xlL2d3dC90b29scy9hcGljaGVja2VyL0FwaUNvbnRhaW5lci5qYXZhIGIvdG9vbHMvYXBpLWNoZWNrZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3Rvb2xzL2FwaWNoZWNrZXIvQXBpQ29udGFpbmVyLmphdmEKaW5kZXggOGFlYjg4Ny4uNDAzMTliNCAxMDA2NDQKLS0tIGEvdG9vbHMvYXBpLWNoZWNrZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3Rvb2xzL2FwaWNoZWNrZXIvQXBpQ29udGFpbmVyLmphdmEKKysrIGIvdG9vbHMvYXBpLWNoZWNrZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3Rvb2xzL2FwaWNoZWNrZXIvQXBpQ29udGFpbmVyLmphdmEKQEAgLTI3LDI2ICsyNywxNyBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5qYXZhYy5Db21waWxhdGlvblVuaXRJbnZhbGlkYXRvcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuamF2YWMuSmR0Q29tcGlsZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmphdmFjLlR5cGVPcmFjbGVNZWRpYXRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuamF2YWMuaW1wbC5GaWxlQ29tcGlsYXRpb25Vbml0OwogCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CiAKIC8qKgogICoge0BsaW5rIEFwaUNvbnRhaW5lcn0gRW5jYXBzdWxhdGVzIGFuIEFQSS4KQEAgLTU3LDkxICs0OCwzMiBAQAogICBwcml2YXRlIGZpbmFsIE1hcDxKQ2xhc3NUeXBlLCBCb29sZWFuPiBhcGlDbGFzc0NhY2hlID0gbmV3IEhhc2hNYXA8SkNsYXNzVHlwZSwgQm9vbGVhbj4oKTsKICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBBcGlQYWNrYWdlPiBhcGlQYWNrYWdlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgQXBpUGFja2FnZT4oKTsKIAotICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IGV4Y2x1ZGVkRmlsZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gIHByaXZhdGUgZmluYWwgU2V0PFN0cmluZz4gZXhjbHVkZWRQYWNrYWdlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiBleGNsdWRlZFBhY2thZ2VzOwogICBwcml2YXRlIGZpbmFsIFRyZWVMb2dnZXIgbG9nZ2VyOwotCiAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CiAKLSAgcHJpdmF0ZSBpbnQgbnVtRmlsZXNDb3VudCA9IDA7Ci0gIHByaXZhdGUgQ29sbGVjdGlvbjxGaWxlPiBzb3VyY2VUcmVlcyA9IG51bGw7CiAgIHByaXZhdGUgZmluYWwgVHlwZU9yYWNsZSB0eXBlT3JhY2xlOwogCiAgIC8qKgotICAgKiBBIHB1YmxpYyBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYW4ge0Bjb2RlIEFwaUNvbnRhaW5lcn0gZnJvbSBhIGNvbmZpZyBmaWxlLgorICAgKiBBIHB1YmxpYyBjb25zdHJ1Y3RvciB1c2VkIGZvciBwcm9ncmFtbWF0aWMgaW52b2NhdGlvbiBhbmQgdGVzdGluZy4KICAgICogCi0gICAqIEBwYXJhbSBmaWxlTmFtZSB0aGUgY29uZmlnIGZpbGUKLSAgICogQHBhcmFtIHN1ZmZpeCBUaGUgY29kZSBsb29rcyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgcHJvcGVydGllczogZGlyUm9vdCwKLSAgICogICAgICAgICAgbmFtZSwgc291cmNlRmlsZXMsIGV4Y2x1ZGVkRmlsZXMsIGVuZGluZyBpbiAic3VmZml4IgotICAgKiBAcGFyYW0gbG9nZ2VyIFRoZSBsb2dnZXIgZm9yIHRoZSBjb2RlLgorICAgKiBAcGFyYW0gbmFtZSBBcGkgbmFtZQorICAgKiBAcGFyYW0gdW5pdHMgYSBzZXQgb2YgQ29tcGlsYXRpb25Vbml0cworICAgKiBAcGFyYW0gZXhjbHVkZWRQYWNrYWdlcyBhIHNldCBvZiBleGNsdWRlZFBhY2thZ2VzCisgICAqIEBwYXJhbSBsb2dnZXIgVHJlZUxvZ2dlciBmb3IgbG9nZ2luZyBtZXNzYWdlcwogICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcyBpbGxlZ2FsCiAgICAqIEB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIFR5cGVPcmFjbGUgZXhjZXB0aW9uCiAgICAqLwotICBwdWJsaWMgQXBpQ29udGFpbmVyKFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIHN1ZmZpeCwgVHJlZUxvZ2dlciBsb2dnZXIpCi0gICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLCBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKKyAgQXBpQ29udGFpbmVyKFN0cmluZyBuYW1lLCBTZXQ8Q29tcGlsYXRpb25Vbml0PiB1bml0cywKKyAgICAgIFNldDxTdHJpbmc+IGV4Y2x1ZGVkUGFja2FnZXMsIFRyZWVMb2dnZXIgbG9nZ2VyKQorICAgICAgdGhyb3dzIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24geworICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7Ci0gICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG51bGw7Ci0gICAgaWYgKGZpbGVOYW1lID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImZpbGVOYW1lIGlzIG51bGwiKTsKLSAgICB9CisgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLklORk8sICJuYW1lID0gIiArIG5hbWUgKyAiLCB1bml0cy5zaXplID0gIiArIHVuaXRzLnNpemUoKSwgbnVsbCk7CiAgICAgdHJ5IHsKLSAgICAgIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZU5hbWUpOwotICAgICAgUHJvcGVydGllcyBjb25maWcgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgY29uZmlnLmxvYWQoZmlzKTsKLSAgICAgIFN0cmluZyBhcGlOYW1lID0gY29uZmlnLmdldFByb3BlcnR5KCJuYW1lIiArIHN1ZmZpeCk7Ci0gICAgICBTdHJpbmcgYWxsU291cmNlRmlsZXMgPSBjb25maWcuZ2V0UHJvcGVydHkoInNvdXJjZUZpbGVzIiArIHN1ZmZpeCk7Ci0gICAgICBTdHJpbmcgYWxsRXhjbHVkZWRGaWxlcyA9IGNvbmZpZy5nZXRQcm9wZXJ0eSgiZXhjbHVkZWRGaWxlcyIgKyBzdWZmaXgpOwotICAgICAgaWYgKGFsbEV4Y2x1ZGVkRmlsZXMgPT0gbnVsbCkgewotICAgICAgICBhbGxFeGNsdWRlZEZpbGVzID0gIiI7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgYWxsRXhjbHVkZWRQYWNrYWdlcyA9IGNvbmZpZy5nZXRQcm9wZXJ0eSgiZXhjbHVkZWRQYWNrYWdlcyIpOwotICAgICAgaWYgKGFsbEV4Y2x1ZGVkUGFja2FnZXMgPT0gbnVsbCkgewotICAgICAgICBhbGxFeGNsdWRlZFBhY2thZ2VzID0gIiI7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhcGlOYW1lID09IG51bGwgfHwgYWxsU291cmNlRmlsZXMgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgImluIGFwaUNvbnRhaW5lciBjb25zdHJ1Y3RvciwgZWl0aGVyIG5hbWUgKCIgKyBhcGlOYW1lCi0gICAgICAgICAgICAgICAgKyAiKSBvciBzb3VyY2VGaWxlcyAoIiArIGFsbFNvdXJjZUZpbGVzICsgIikgaXMgbnVsbCIpOwotICAgICAgfQotICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkRFQlVHLCAicmVhZCBmcm9tIGNvbmZpZyBmaWxlICIgKyBmaWxlTmFtZQotICAgICAgICAgICsgIiwgbmFtZSA9ICIgKyBhcGlOYW1lICsgIiwgYWxsU291cmNlRmlsZXMgPSAiICsgYWxsU291cmNlRmlsZXMKLSAgICAgICAgICArICIsIGFsbEV4Y2x1ZGVkRmlsZXMgPSAiICsgYWxsRXhjbHVkZWRGaWxlcwotICAgICAgICAgICsgIiwgYWxsRXhjbHVkZWRQYWNrYWdlcyA9ICIgKyBhbGxFeGNsdWRlZFBhY2thZ2VzLCBudWxsKTsKLQotICAgICAgU3RyaW5nIGRpclJvb3QgPSBjb25maWcuZ2V0UHJvcGVydHkoImRpclJvb3QiICsgc3VmZml4KTsKLSAgICAgIGlmIChkaXJSb290ID09IG51bGwpIHsKLSAgICAgICAgZGlyUm9vdCA9ICIiOwotICAgICAgfQotICAgICAgU3RyaW5nIHNvdXJjZUZpbGVzQXJyYXlbXSA9IGFsbFNvdXJjZUZpbGVzLnNwbGl0KCI6Iik7Ci0gICAgICBDb2xsZWN0aW9uPEZpbGU+IGZpbGVDb2xsZWN0aW9uID0gbmV3IFZlY3RvcjxGaWxlPigpOwotICAgICAgZm9yIChTdHJpbmcgdGVtcFN0ciA6IHNvdXJjZUZpbGVzQXJyYXkpIHsKLSAgICAgICAgdGVtcFN0ciA9IHRlbXBTdHIudHJpbSgpOwotICAgICAgICBjaGVja0ZpbGVFeGlzdGVuY2UoInNvdXJjZSBmaWxlOiAiLCBkaXJSb290ICsgdGVtcFN0cik7Ci0gICAgICAgIGZpbGVDb2xsZWN0aW9uLmFkZChuZXcgRmlsZShkaXJSb290ICsgdGVtcFN0cikpOwotICAgICAgfQotICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkRFQlVHLCAiZmlsZUNvbGxlY3Rpb24gIiArIGZpbGVDb2xsZWN0aW9uLCBudWxsKTsKLSAgICAgIHRoaXMuc291cmNlVHJlZXMgPSBmaWxlQ29sbGVjdGlvbjsKLQotICAgICAgU3RyaW5nIGV4Y2x1ZGVkRmlsZXNBcnJheVtdID0gYWxsRXhjbHVkZWRGaWxlcy5zcGxpdCgiOiIpOwotICAgICAgZm9yIChTdHJpbmcgZXhjbHVkZWRGaWxlIDogZXhjbHVkZWRGaWxlc0FycmF5KSB7Ci0gICAgICAgIGNoZWNrRmlsZUV4aXN0ZW5jZSgiZXhjbHVkZWQgZmlsZTogIiwgZGlyUm9vdCArIGV4Y2x1ZGVkRmlsZSk7Ci0gICAgICB9Ci0gICAgICBnZW5lcmF0ZUNhbm9uaWNhbEZpbGVTZXQoZXhjbHVkZWRGaWxlc0FycmF5LCBkaXJSb290LCBleGNsdWRlZEZpbGVzKTsKLQotICAgICAgU3RyaW5nIGV4Y2x1ZGVkUGFja2FnZXNBcnJheVtdID0gYWxsRXhjbHVkZWRQYWNrYWdlcy5zcGxpdCgiOiIpOwotICAgICAgZXhjbHVkZWRQYWNrYWdlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChleGNsdWRlZFBhY2thZ2VzQXJyYXkpKTsKLSAgICAgIHRoaXMubmFtZSA9IGFwaU5hbWU7Ci0gICAgICB0aGlzLnR5cGVPcmFjbGUgPSBjcmVhdGVUeXBlT3JhY2xlRnJvbVNvdXJjZXMoKTsKLSAgICAgIGluaXRpYWxpemVBcGlQYWNrYWdlcygpOwotICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlMSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlMSk7CisgICAgICB0aGlzLnR5cGVPcmFjbGUgPSBnZXRUeXBlT3JhY2xlRnJvbUNvbXBpbGF0aW9uVW5pdHModW5pdHMpOwogICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlMikgewotICAgICAgaWYgKGZpcyA9PSBudWxsKSB7Ci0gICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSGF2ZSB5b3Ugc3BlY2lmaWVkIHRoZSBwYXRoIG9mIHRoZSBjb25maWcgZmlsZSBjb3JyZWN0bHk/Iik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRvIHlvdSBoYXZlIGEgcmVmZXJlbmNlIHZlcnNpb24gb2YgdGhlIEFQSSBjaGVja2VkIG91dD8iKTsKLSAgICAgIH0KKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRG8geW91IGhhdmUgYSByZWZlcmVuY2UgdmVyc2lvbiBvZiB0aGUgQVBJIGNoZWNrZWQgb3V0PyIpOwogICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlMik7CiAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZTMpIHsKICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZTMpOwpAQCAtMTQ5LDE5ICs4MSw3IEBACiAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsICJsb2dnZWQgYSBOb3RGb3VuZEV4Y2VwdGlvbiIsIGU0KTsKICAgICAgIHRocm93IG5ldyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uKCk7CiAgICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFub3RoZXIgcHVibGljIGNvbnN0cnVjdG9yLiBVc2VkIGZvciBwcm9ncmFtbWF0aWMgaW52b2NhdGlvbiBhbmQgdGVzdGluZy4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqIEBwYXJhbSBsb2dnZXIKLSAgICogQHBhcmFtIHR5cGVPcmFjbGUKLSAgICovCi0gIEFwaUNvbnRhaW5lcihTdHJpbmcgbmFtZSwgVHJlZUxvZ2dlciBsb2dnZXIsIFR5cGVPcmFjbGUgdHlwZU9yYWNsZSkgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7Ci0gICAgdGhpcy50eXBlT3JhY2xlID0gdHlwZU9yYWNsZTsKKyAgICB0aGlzLmV4Y2x1ZGVkUGFja2FnZXMgPSBleGNsdWRlZFBhY2thZ2VzOwogICAgIGluaXRpYWxpemVBcGlQYWNrYWdlcygpOwogICB9CiAKQEAgLTI0MSw2NSArMTYxLDYgQEAKICAgICByZXR1cm4gaXNBcGlDbGFzcyhjbGFzc1R5cGUpICYmIGlzU3ViY2xhc3NhYmxlKGNsYXNzVHlwZSk7CiAgIH0KIAotICBwcml2YXRlIHZvaWQgYWRkQ29tcGlsYXRpb25Vbml0c0luUGF0aChTZXQ8Q29tcGlsYXRpb25Vbml0PiB1bml0cywKLSAgICAgIEZpbGUgc291cmNlUGF0aEVudHJ5KSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uLAotICAgICAgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0gICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlNQQU0sICJlbnRlcmluZyBhZGRDb21waWxhdGlvblVuaXRzSW5QYXRoLCBmaWxlID0gIgotICAgICAgICArIHNvdXJjZVBhdGhFbnRyeSwgbnVsbCk7Ci0gICAgRmlsZVtdIGZpbGVzID0gc291cmNlUGF0aEVudHJ5Lmxpc3RGaWxlcygpOwotICAgIGlmIChmaWxlcyA9PSBudWxsKSB7Ci0gICAgICAvLyBObyBmaWxlcyBmb3VuZC4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBmaW5hbCBGaWxlIGZpbGUgPSBmaWxlc1tpXTsKLSAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5TUEFNLCAiZGVjaWRpbmcgdGhlIGZhdGUgb2YgZmlsZSAiICsgZmlsZSwgbnVsbCk7Ci0gICAgICAvLyBJZ25vcmUgZmlsZXMgbGlrZSAuc3ZuIGFuZCAuY3ZzCi0gICAgICBpZiAoZmlsZS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpIHx8IGZpbGUuZ2V0TmFtZSgpLmVxdWFscygiQ1ZTIikpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBpZiAoaXNFeGNsdWRlZEZpbGUoZmlsZS5nZXRDYW5vbmljYWxQYXRoKCkpKSB7Ci0gICAgICAgIC8vIGRvIG5vdCBwcm9jZXNzIHRoZSBzdWJ0cmVlCi0gICAgICAgIGxvZ2dlci5sb2coVHJlZUxvZ2dlci5ERUJVRywgIm5vdCB0cmF2ZXJzaW5nICIKLSAgICAgICAgICAgICsgZmlsZS50b1VSTCgpLnRvU3RyaW5nKCksIG51bGwpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGlmIChmaWxlLmlzRmlsZSgpKSB7Ci0gICAgICAgIFN0cmluZyBwa2dOYW1lID0gbnVsbDsKLSAgICAgICAgaWYgKGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJqYXZhIikpIHsKLSAgICAgICAgICBwa2dOYW1lID0gZXh0cmFjdFBhY2thZ2VOYW1lRnJvbUZpbGUoZmlsZSk7Ci0gICAgICAgICAgaWYgKHBrZ05hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLldBUk4sICJOb3QgYWRkaW5nIGZpbGUgPSAiICsgZmlsZS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiLCBiZWNhdXNlIHBhY2thZ2VOYW1lID0gbnVsbCIsIG51bGwpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuREVCVUcsICJhZGRpbmcgcGtnTmFtZSA9ICIgKyBwa2dOYW1lCi0gICAgICAgICAgICAgICAgKyAiLCBmaWxlID0gIiArIGZpbGUudG9TdHJpbmcoKSwgbnVsbCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1ZhbGlkUGFja2FnZShwa2dOYW1lLCBzb3VyY2VQYXRoRW50cnkudG9VUkwoKS50b1N0cmluZygpKSkgewotICAgICAgICAgIC8vIEFkZCBpZiBpdCdzIGEgc291cmNlIGZpbGUgYW5kIHRoZSBwYWNrYWdlIGFuZCBmaWxlTmFtZXMgYXJlIG9rYXkKLSAgICAgICAgICBDb21waWxhdGlvblVuaXQgdW5pdCA9IG5ldyBGaWxlQ29tcGlsYXRpb25Vbml0KGZpbGUsIHBrZ05hbWUpOwotICAgICAgICAgIHVuaXRzLmFkZCh1bml0KTsKLSAgICAgICAgICBudW1GaWxlc0NvdW50Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLlNQQU0sICIgbm90IGFkZGluZyBmaWxlICIgKyBmaWxlLnRvVVJMKCksIG51bGwpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBSZWN1cnNlIGludG8gc3ViRGlycwotICAgICAgICBhZGRDb21waWxhdGlvblVuaXRzSW5QYXRoKHVuaXRzLCBmaWxlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tGaWxlRXhpc3RlbmNlKFN0cmluZyB0YWcsIFN0cmluZyBwYXRoTmFtZSkKLSAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotICAgIEZpbGUgdGVtcEZpbGUgPSBuZXcgRmlsZShwYXRoTmFtZSk7Ci0gICAgaWYgKCF0ZW1wRmlsZS5leGlzdHMoKSkgewotICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbih0YWcgKyAiZmlsZSAiICsgcGF0aE5hbWUgKyAiIG5vdCBmb3VuZCIpOwotICAgIH0KLSAgfQotCiAgIC8qKgogICAgKiBBc3N1bXB0aW9uOiBDbGllbnRzIG1heSBzdWJjbGFzcyBhbiBBUEkgY2xhc3MsIGJ1dCB0aGV5IHdpbGwgbm90IGFkZCB0aGVpcgogICAgKiBjbGFzcyB0byB0aGUgcGFja2FnZS4KQEAgLTMzMCwxMyArMTkxLDkgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBwcml2YXRlIFR5cGVPcmFjbGUgY3JlYXRlVHlwZU9yYWNsZUZyb21Tb3VyY2VzKCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uLAotICAgICAgSU9FeGNlcHRpb24sIFVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb24gewotICAgIG51bUZpbGVzQ291bnQgPSAwOwotICAgIFNldDxDb21waWxhdGlvblVuaXQ+IHVuaXRzID0gbmV3IEhhc2hTZXQ8Q29tcGlsYXRpb25Vbml0PigpOwotICAgIGZvciAoRmlsZSB0ZW1wRmlsZSA6IHNvdXJjZVRyZWVzKSB7Ci0gICAgICBhZGRDb21waWxhdGlvblVuaXRzSW5QYXRoKHVuaXRzLCB0ZW1wRmlsZSk7Ci0gICAgfQorICBwcml2YXRlIFR5cGVPcmFjbGUgZ2V0VHlwZU9yYWNsZUZyb21Db21waWxhdGlvblVuaXRzKAorICAgICAgU2V0PENvbXBpbGF0aW9uVW5pdD4gdW5pdHMpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCisgICAgICBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKICAgICBKZHRDb21waWxlci5jb21waWxlKHVuaXRzKTsKICAgICBpZiAoQ29tcGlsYXRpb25Vbml0SW52YWxpZGF0b3IuaW52YWxpZGF0ZVVuaXRzV2l0aEVycm9ycyhsb2dnZXIsIHVuaXRzKSkgewogICAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLkVSUk9SLCAiVW5hYmxlIHRvIGJ1aWxkIHR5cGVPcmFjbGUgZm9yICIKQEAgLTM0Nyw1NSArMjA0LDExIEBACiAgICAgVHlwZU9yYWNsZU1lZGlhdG9yIG1lZGlhdG9yID0gbmV3IFR5cGVPcmFjbGVNZWRpYXRvcigpOwogICAgIG1lZGlhdG9yLnJlZnJlc2gobG9nZ2VyLCB1bml0cyk7CiAgICAgbG9nZ2VyLmxvZyhUcmVlTG9nZ2VyLklORk8sICJBUEkgIiArIG5hbWUKLSAgICAgICAgKyAiLCBGaW5pc2hlZCB3aXRoIGJ1aWxkaW5nIHR5cGVPcmFjbGUsIGFkZGVkICIgKyBudW1GaWxlc0NvdW50CisgICAgICAgICsgIiwgRmluaXNoZWQgd2l0aCBidWlsZGluZyB0eXBlT3JhY2xlLCBhZGRlZCAiICsgdW5pdHMuc2l6ZSgpCiAgICAgICAgICsgIiBmaWxlcyIsIG51bGwpOwogICAgIHJldHVybiBtZWRpYXRvci5nZXRUeXBlT3JhY2xlKCk7CiAgIH0KIAotICBwcml2YXRlIFN0cmluZyBleHRyYWN0UGFja2FnZU5hbWVGcm9tRmlsZShGaWxlIGZpbGUpIHsKLSAgICBpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBTdHJpbmcgZmlsZU5hbWUgPSBudWxsOwotICAgIHRyeSB7Ci0gICAgICBmaWxlTmFtZSA9IGZpbGUudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGZpbGUpOwotICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZnIpOwotICAgICAgU3RyaW5nIHN0ciA9IG51bGw7Ci0gICAgICB3aGlsZSAoKHN0ciA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHN0ci5pbmRleE9mKCJwYWNrYWdlIikgIT0gMCkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBwYXJ0c1tdID0gc3RyLnNwbGl0KCJbXGJcdFxuXHIgXSsiKTsKLSAgICAgICAgaWYgKChwYXJ0cy5sZW5ndGggPT0gMikgJiYgcGFydHNbMF0uZXF1YWxzKCJwYWNrYWdlIikpIHsKLSAgICAgICAgICByZXR1cm4gcGFydHNbMV0uc3Vic3RyaW5nKDAsIHBhcnRzWzFdLmxlbmd0aCgpIC0gMSk7IC8vIHRoZSA7IGNoYXIKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuRVJST1IsCi0gICAgICAgICAgImVycm9yIGluIHBhcnNpbmcgYW5kIG9idGFpbmluZyB0aGUgcGFja2FnZU5hbWUgZnJvbSBmaWxlICIKLSAgICAgICAgICAgICAgKyBmaWxlTmFtZSArICJlcnJvcidzIG1lc3NhZ2UgIiArIGV4LmdldE1lc3NhZ2UoKSwgZXgpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnQgYSBzZXQgaW50byBhIEhhc2hNYXAgZm9yIGZhc3RlciBsb29rdXBzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlQ2Fub25pY2FsRmlsZVNldChTdHJpbmcgc3RyQXJyYXlbXSwgU3RyaW5nIGRpclJvb3QsCi0gICAgICBTZXQ8U3RyaW5nPiByZXN1bHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKHN0ckFycmF5ID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yIChTdHJpbmcgc3RyIDogc3RyQXJyYXkpIHsKLSAgICAgIHN0ciA9IHN0ci50cmltKCk7Ci0gICAgICBGaWxlIHRlbXBGaWxlID0gbmV3IEZpbGUoZGlyUm9vdCArIHN0cik7Ci0gICAgICBzdHIgPSB0ZW1wRmlsZS5nZXRDYW5vbmljYWxQYXRoKCk7Ci0gICAgICByZXN1bHQuYWRkKHN0cik7Ci0gICAgfQotICB9Ci0KICAgcHJpdmF0ZSBib29sZWFuIGhhc1B1YmxpY09yUHJvdGVjdGVkQ29uc3RydWN0b3IoSkNsYXNzVHlwZSBjbGFzc1R5cGUpIHsKICAgICBKQ29uc3RydWN0b3JbXSBjb25zdHJ1Y3RvcnMgPSBjbGFzc1R5cGUuZ2V0Q29uc3RydWN0b3JzKCk7CiAgICAgZm9yIChKQ29uc3RydWN0b3IgY29uc3RydWN0b3IgOiBjb25zdHJ1Y3RvcnMpIHsKQEAgLTQzMSw2ICsyNDQsOCBAQAogICAgIH0KICAgfQogCisKKwogICBwcml2YXRlIGJvb2xlYW4gaXNBbnlTdWJ0eXBlQW5BcGlDbGFzcyhKQ2xhc3NUeXBlIGNsYXNzVHlwZSkgewogICAgIEpDbGFzc1R5cGUgc3ViVHlwZXNbXSA9IGNsYXNzVHlwZS5nZXRTdWJ0eXBlcygpOwogICAgIGZvciAoSkNsYXNzVHlwZSB0ZW1wVHlwZSA6IHN1YlR5cGVzKSB7CkBAIC00NjksMTQgKzI4NCw2IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgcHJpdmF0ZSBib29sZWFuIGlzRXhjbHVkZWRGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotICAgIFN0cmluZyBwYXR0ZXJuID0gImZpbGU6IjsKLSAgICBpZiAoZmlsZU5hbWUuaW5kZXhPZihwYXR0ZXJuKSA9PSAwKSB7Ci0gICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cmluZyhwYXR0ZXJuLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4Y2x1ZGVkRmlsZXMuY29udGFpbnMoZmlsZU5hbWUpOwotICB9Ci0KICAgLyoqCiAgICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIGNsYXNzVHlwZSBpcyBwdWJsaWMgQU5EIGFuIG91dGVyIGNsYXNzCiAgICAqLwpAQCAtNDg4LDIwICsyOTUsNCBAQAogICAgIHJldHVybiAhY2xhc3NUeXBlLmlzRmluYWwoKSAmJiBoYXNQdWJsaWNPclByb3RlY3RlZENvbnN0cnVjdG9yKGNsYXNzVHlwZSk7CiAgIH0KIAotICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFBhY2thZ2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgZmlsZVBhdGgpIHsKLSAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuU1BBTSwgInBhY2thZ2VOYW1lID0gIiArIHBhY2thZ2VOYW1lCi0gICAgICAgICsgIiwgZmlsZVBhdGggPSAiICsgZmlsZVBhdGgsIG51bGwpOwotICAgIGlmIChwYWNrYWdlTmFtZSA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGludCBsYXN0U2xhc2hQb3NpdGlvbiA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKCIvIik7Ci0gICAgaWYgKGxhc3RTbGFzaFBvc2l0aW9uID09IC0xKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFN0cmluZyBkaXJQYXRoID0gZmlsZVBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaFBvc2l0aW9uKTsKLSAgICBTdHJpbmcgcGFja2FnZU5hbWVBc1BhdGggPSBwYWNrYWdlTmFtZS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICBsb2dnZXIubG9nKFRyZWVMb2dnZXIuU1BBTSwgInBhY2thZ2VOYW1lQXNQYXRoICIgKyBwYWNrYWdlTmFtZUFzUGF0aAotICAgICAgICArICIsIGRpclBhdGggPSAiICsgZGlyUGF0aCwgbnVsbCk7Ci0gICAgcmV0dXJuIGRpclBhdGguZW5kc1dpdGgocGFja2FnZU5hbWVBc1BhdGgpOwotICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hcGktY2hlY2tlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3Rvb2xzL2FwaWNoZWNrZXIvQXBpQ29tcGF0aWJpbGl0eVRlc3QuamF2YSBiL3Rvb2xzL2FwaS1jaGVja2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdG9vbHMvYXBpY2hlY2tlci9BcGlDb21wYXRpYmlsaXR5VGVzdC5qYXZhCmluZGV4IGNjNGNiYTkuLjU0MTE3YTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FwaS1jaGVja2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdG9vbHMvYXBpY2hlY2tlci9BcGlDb21wYXRpYmlsaXR5VGVzdC5qYXZhCisrKyBiL3Rvb2xzL2FwaS1jaGVja2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdG9vbHMvYXBpY2hlY2tlci9BcGlDb21wYXRpYmlsaXR5VGVzdC5qYXZhCkBAIC0xOCwxMiArMTgsMTQgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmV4dC5UcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQudHlwZWluZm8uTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmphdmFjLkNvbXBpbGF0aW9uVW5pdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5sb2cuQWJzdHJhY3RUcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmxvZy5QcmludFdyaXRlclRyZWVMb2dnZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QudG9vbHMuYXBpY2hlY2tlci5BcGlDb250YWluZXJUZXN0LlN0YXRpY0NvbXBpbGF0aW9uVW5pdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC50b29scy5hcGljaGVja2VyLkFwaUNvbXBhdGliaWxpdHlDaGVja2VyLlN0YXRpY0NvbXBpbGF0aW9uVW5pdDsKIAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiAKQEAgLTU5LDcgKzYxLDcgQEAKICAgICAgICAgICAgIGdldFNvdXJjZUZvclJ1bnRpbWVFeGNlcHRpb24oKSksfTsKICAgfQogCi0gIHByaXZhdGUgc3RhdGljIGNoYXJbXSBnZXRTb3VyY2VGb3JBcGlDbGFzcygpIHsKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNvdXJjZUZvckFwaUNsYXNzKCkgewogICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICBzYi5hcHBlbmQoInBhY2thZ2UgdGVzdC5hcGljb250YWluZXI7XG4iKTsKICAgICBzYi5hcHBlbmQoInB1YmxpYyBjbGFzcyBBcGlDbGFzcyBleHRlbmRzIE5vbkFwaUNsYXNzIHtcbiIpOwpAQCAtNjcsMTAgKzY5LDEwIEBACiAgICAgc2IuYXBwZW5kKCJcdHB1YmxpYyB2b2lkIGNoZWNrUGFyYW1ldGVyc0FuZFJldHVyblR5cGVzKGphdmEubGFuZy5PYmplY3QgeCkgdGhyb3dzIGphdmEubGFuZy5UaHJvd2FibGUgeyB9O1xuIik7CiAgICAgc2IuYXBwZW5kKCJcdHB1YmxpYyBmaW5hbCB2b2lkIGNoZWNrUGFyYW1ldGVyc0FuZFJldHVyblR5cGVzRmluYWxWZXJzaW9uKGphdmEubGFuZy5PYmplY3QgeCkgdGhyb3dzIGphdmEubGFuZy5UaHJvd2FibGUgeyB9O1xuIik7CiAgICAgc2IuYXBwZW5kKCJ9O1xuIik7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudG9DaGFyQXJyYXkoKTsKKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgfQogCi0gIHByaXZhdGUgc3RhdGljIGNoYXJbXSBnZXRTb3VyY2VGb3JOb25BcGlDbGFzcygpIHsKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNvdXJjZUZvck5vbkFwaUNsYXNzKCkgewogICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICBzYi5hcHBlbmQoInBhY2thZ2UgdGVzdC5hcGljb250YWluZXI7XG4iKTsKICAgICBzYi5hcHBlbmQoImNsYXNzIE5vbkFwaUNsYXNzIGV4dGVuZHMgamF2YS5sYW5nLk9iamVjdCB7XG4iKTsKQEAgLTgxLDEwICs4MywxMCBAQAogICAgIHNiLmFwcGVuZCgiXHRwcm90ZWN0ZWQgQXBpQ2xhc3NJbk5vbkFwaUNsYXNzKCkgeyB9XG4iKTsKICAgICBzYi5hcHBlbmQoIlx0fVxuIik7CiAgICAgc2IuYXBwZW5kKCJ9XG4iKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvck9iamVjdCgpIHsKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNvdXJjZUZvck9iamVjdCgpIHsKICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgc2IuYXBwZW5kKCJwYWNrYWdlIGphdmEubGFuZztcbiIpOwogICAgIHNiLmFwcGVuZCgicHVibGljIGNsYXNzIE9iamVjdCB7XG4iKTsKQEAgLTk3LDEwICs5OSwxMCBAQAogICAgIHNiLmFwcGVuZCgiXHRwcml2YXRlIGludCBpbnRlcm5hbEZpZWxkID0gMDtcbiIpOwogICAgIHNiLmFwcGVuZCgiXHRwcm90ZWN0ZWQgc3RhdGljIGludCBwcm90ZWN0ZWRGaWVsZD0yO1xuIik7CiAgICAgc2IuYXBwZW5kKCJ9XG4iKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvck9uZU1vcmVBcGlDbGFzcygpIHsKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNvdXJjZUZvck9uZU1vcmVBcGlDbGFzcygpIHsKICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgc2IuYXBwZW5kKCJwYWNrYWdlIHRlc3QuYXBpY29udGFpbmVyO1xuIik7CiAgICAgc2IuYXBwZW5kKCJwdWJsaWMgY2xhc3MgT25lTW9yZUFwaUNsYXNzIGV4dGVuZHMgamF2YS5sYW5nLk9iamVjdCB7XG4iKTsKQEAgLTEwOCwzMiArMTEwLDMyIEBACiAgICAgc2IuYXBwZW5kKCJcdHByb3RlY3RlZCBmaW5hbCB2b2lkIGNoZWNrT3ZlcmxvYWRlZE1ldGhvZEFjY291bnRlZCh0ZXN0LmFwaWNvbnRhaW5lci5BcGlDbGFzcyBiKSB0aHJvd3MgamF2YS5sYW5nLlRocm93YWJsZSB7IH1cbiIpOwogICAgIHNiLmFwcGVuZCgiXHRwdWJsaWMgdm9pZCB0ZXN0VW5jaGVja2VkRXhjZXB0aW9ucygpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsgfVxuIik7CiAgICAgc2IuYXBwZW5kKCJ9O1xuIik7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudG9DaGFyQXJyYXkoKTsKKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgfQogCi0gIHByaXZhdGUgc3RhdGljIGNoYXJbXSBnZXRTb3VyY2VGb3JSdW50aW1lRXhjZXB0aW9uKCkgeworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U291cmNlRm9yUnVudGltZUV4Y2VwdGlvbigpIHsKICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgc2IuYXBwZW5kKCJwYWNrYWdlIGphdmEubGFuZztcbiIpOwogICAgIHNiLmFwcGVuZCgicHVibGljIGNsYXNzIFJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUge1xuIik7CiAgICAgc2IuYXBwZW5kKCJ9XG4iKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvclRlc3RDbGFzcygpIHsKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNvdXJjZUZvclRlc3RDbGFzcygpIHsKICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgc2IuYXBwZW5kKCJwYWNrYWdlIHRlc3Qubm9uYXBpcGFja2FnZTtcbiIpOwogICAgIHNiLmFwcGVuZCgiY2xhc3MgVGVzdENsYXNzIGV4dGVuZHMgamF2YS5sYW5nLk9iamVjdCB7XG4iKTsKICAgICBzYi5hcHBlbmQoIlx0cHVibGljIHZvaWQgbWV0aG9kKCkgeyB9XG4iKTsKICAgICBzYi5hcHBlbmQoIn1cbiIpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpLnRvQ2hhckFycmF5KCk7CisgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgIH0KIAotICBwcml2YXRlIHN0YXRpYyBjaGFyW10gZ2V0U291cmNlRm9yVGhyb3dhYmxlKCkgeworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U291cmNlRm9yVGhyb3dhYmxlKCkgewogICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICBzYi5hcHBlbmQoInBhY2thZ2UgamF2YS5sYW5nO1xuIik7CiAgICAgc2IuYXBwZW5kKCJwdWJsaWMgY2xhc3MgVGhyb3dhYmxlIGV4dGVuZHMgT2JqZWN0IHtcbiIpOwogICAgIHNiLmFwcGVuZCgifVxuIik7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudG9DaGFyQXJyYXkoKTsKKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgfQogCiAgIEFwaUNvbnRhaW5lciBhcGkxID0gbnVsbDsKQEAgLTE0NSwxNSArMTQ3LDE0IEBACiAgICAgQWJzdHJhY3RUcmVlTG9nZ2VyIGxvZ2dlciA9IG5ldyBQcmludFdyaXRlclRyZWVMb2dnZXIoKTsKICAgICBsb2dnZXIuc2V0TWF4RGV0YWlsKFRyZWVMb2dnZXIuRVJST1IpOwogCi0gICAgYXBpMSA9IG5ldyBBcGlDb250YWluZXIoIkFwaTEiLCBsb2dnZXIsCi0gICAgICAgIEFwaUNvbnRhaW5lclRlc3QuZ2V0TmV3VHlwZU9yYWNsZUZyb21Db21waWxhdGlvblVuaXRzKAotICAgICAgICAgICAgQXBpQ29udGFpbmVyVGVzdC5nZXRTY3VBcnJheSgpLCBsb2dnZXIpKTsKLSAgICBhcGlTYW1lQXMxID0gbmV3IEFwaUNvbnRhaW5lcigiQXBpMiIsIGxvZ2dlciwKLSAgICAgICAgQXBpQ29udGFpbmVyVGVzdC5nZXROZXdUeXBlT3JhY2xlRnJvbUNvbXBpbGF0aW9uVW5pdHMoCi0gICAgICAgICAgICBBcGlDb250YWluZXJUZXN0LmdldFNjdUFycmF5KCksIGxvZ2dlcikpOwotICAgIGFwaTIgPSBuZXcgQXBpQ29udGFpbmVyKCJBcGkyIiwgbG9nZ2VyLAotICAgICAgICBBcGlDb250YWluZXJUZXN0LmdldE5ld1R5cGVPcmFjbGVGcm9tQ29tcGlsYXRpb25Vbml0cyhnZXRTY3VBcnJheSgpLAotICAgICAgICAgICAgbG9nZ2VyKSk7CisgICAgYXBpMSA9IG5ldyBBcGlDb250YWluZXIoIkFwaTEiLCBuZXcgSGFzaFNldDxDb21waWxhdGlvblVuaXQ+KAorICAgICAgICBBcnJheXMuYXNMaXN0KEFwaUNvbnRhaW5lclRlc3QuZ2V0U2N1QXJyYXkoKSkpLCBuZXcgSGFzaFNldDxTdHJpbmc+KCksCisgICAgICAgIGxvZ2dlcik7CisgICAgYXBpU2FtZUFzMSA9IG5ldyBBcGlDb250YWluZXIoIkFwaVNhbWVBczEiLCBuZXcgSGFzaFNldDxDb21waWxhdGlvblVuaXQ+KAorICAgICAgICBBcnJheXMuYXNMaXN0KEFwaUNvbnRhaW5lclRlc3QuZ2V0U2N1QXJyYXkoKSkpLCBuZXcgSGFzaFNldDxTdHJpbmc+KCksCisgICAgICAgIGxvZ2dlcik7CisgICAgYXBpMiA9IG5ldyBBcGlDb250YWluZXIoIkFwaTIiLCBuZXcgSGFzaFNldDxDb21waWxhdGlvblVuaXQ+KAorICAgICAgICBBcnJheXMuYXNMaXN0KGdldFNjdUFycmF5KCkpKSwgbmV3IEhhc2hTZXQ8U3RyaW5nPigpLCBsb2dnZXIpOwogICB9CiAKICAgLy8gc2V0dXAgaXMgY2FsbGVkIGJlZm9yZSBldmVyeSB0ZXN0Ki4gVG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHNldFVwKCkgZWFjaApkaWZmIC0tZ2l0IGEvdG9vbHMvYXBpLWNoZWNrZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC90b29scy9hcGljaGVja2VyL0FwaUNvbnRhaW5lclRlc3QuamF2YSBiL3Rvb2xzL2FwaS1jaGVja2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdG9vbHMvYXBpY2hlY2tlci9BcGlDb250YWluZXJUZXN0LmphdmEKaW5kZXggYmYyMWM4OC4uOGJiYTI0YyAxMDA2NDQKLS0tIGEvdG9vbHMvYXBpLWNoZWNrZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC90b29scy9hcGljaGVja2VyL0FwaUNvbnRhaW5lclRlc3QuamF2YQorKysgYi90b29scy9hcGktY2hlY2tlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3Rvb2xzL2FwaWNoZWNrZXIvQXBpQ29udGFpbmVyVGVzdC5qYXZhCkBAIC0xNywxMiArMTcsMTAgQEAKIAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LlVuYWJsZVRvQ29tcGxldGVFeGNlcHRpb247CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5leHQudHlwZWluZm8uSkFic3RyYWN0TWV0aG9kOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuZXh0LnR5cGVpbmZvLlR5cGVPcmFjbGU7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmphdmFjLkNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuamF2YWMuSmR0Q29tcGlsZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LmphdmFjLlR5cGVPcmFjbGVNZWRpYXRvcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYudXRpbC5sb2cuQWJzdHJhY3RUcmVlTG9nZ2VyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmxvZy5QcmludFdyaXRlclRyZWVMb2dnZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudG9vbHMuYXBpY2hlY2tlci5BcGlDb21wYXRpYmlsaXR5Q2hlY2tlci5TdGF0aWNDb21waWxhdGlvblVuaXQ7CiAKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiAKQEAgLTMxLDUxICsyOSwxMCBAQAogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgotICogVGVzdCBBcGlDb250YWluZXIuCisgKiBUZXN0IHtAbGluayBBcGlDb250YWluZXJ9LgogICovCiBwdWJsaWMgY2xhc3MgQXBpQ29udGFpbmVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgc3RhdGljIGNsYXNzIFN0YXRpY0NvbXBpbGF0aW9uVW5pdCBleHRlbmRzIENvbXBpbGF0aW9uVW5pdCB7CiAKLSAgICBwcml2YXRlIGZpbmFsIGNoYXJbXSBzb3VyY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHlwZU5hbWU7Ci0KLSAgICBwdWJsaWMgU3RhdGljQ29tcGlsYXRpb25Vbml0KFN0cmluZyB0eXBlTmFtZSwgY2hhcltdIHNvdXJjZSkgewotICAgICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5TG9jYXRpb24oKSB7Ci0gICAgICByZXR1cm4gIi9tb2NrLyIgKyB0eXBlTmFtZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRMYXN0TW9kaWZpZWQoKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZSgpIHsKLSAgICAgIHJldHVybiBTdHJpbmcudmFsdWVPZihzb3VyY2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZU5hbWUoKSB7Ci0gICAgICByZXR1cm4gdHlwZU5hbWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNHZW5lcmF0ZWQoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBlclNvdXJjZSgpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgY2xhc3MgVGVzdEEgewogICAgIHB1YmxpYyBUZXN0QShTdHJpbmcgYXJncykgewogICAgIH0KQEAgLTEwNCwxOSArNjEsNiBAQAogICAgIH0KICAgfQogCi0gIC8vIFRPRE8gKGFtaXRtYW5qaGkpOiBUcnkgdXNpbmcgVW5pdFRlc3RUcmVlTG9nZ2VyIHRvIGNhcHR1cmUgbG9nIG1lc3NhZ2VzCi0gIHB1YmxpYyBzdGF0aWMgVHlwZU9yYWNsZSBnZXROZXdUeXBlT3JhY2xlRnJvbUNvbXBpbGF0aW9uVW5pdHMoCi0gICAgICBTdGF0aWNDb21waWxhdGlvblVuaXQgdGVtcFNjdUFycmF5W10sIEFic3RyYWN0VHJlZUxvZ2dlciBsb2dnZXIpCi0gICAgICB0aHJvd3MgVW5hYmxlVG9Db21wbGV0ZUV4Y2VwdGlvbiB7Ci0KLSAgICBUeXBlT3JhY2xlTWVkaWF0b3IgbWVkaWF0b3IgPSBuZXcgVHlwZU9yYWNsZU1lZGlhdG9yKCk7Ci0gICAgU2V0PENvbXBpbGF0aW9uVW5pdD4gdW5pdHMgPSBuZXcgSGFzaFNldDxDb21waWxhdGlvblVuaXQ+KAotICAgICAgICBBcnJheXMuYXNMaXN0KHRlbXBTY3VBcnJheSkpOwotICAgIEpkdENvbXBpbGVyLmNvbXBpbGUodW5pdHMpOwotICAgIG1lZGlhdG9yLnJlZnJlc2gobG9nZ2VyLCB1bml0cyk7Ci0gICAgcmV0dXJuIG1lZGlhdG9yLmdldFR5cGVPcmFjbGUoKTsKLSAgfQotCiAgIHB1YmxpYyBzdGF0aWMgU3RhdGljQ29tcGlsYXRpb25Vbml0W10gZ2V0U2N1QXJyYXkoKSB7CiAgICAgcmV0dXJuIG5ldyBTdGF0aWNDb21waWxhdGlvblVuaXRbXSB7CiAgICAgICAgIG5ldyBTdGF0aWNDb21waWxhdGlvblVuaXQoInRlc3QuYXBpY29udGFpbmVyLkFwaUNsYXNzIiwKQEAgLTEzNiw3ICs4MCw3IEBACiAgICAgICAgIG5ldyBBcGlBYnN0cmFjdE1ldGhvZFswXSlbMF0pLmdldE1ldGhvZCgpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvckFwaUNsYXNzKCkgeworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U291cmNlRm9yQXBpQ2xhc3MoKSB7CiAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgIHNiLmFwcGVuZCgicGFja2FnZSB0ZXN0LmFwaWNvbnRhaW5lcjtcbiIpOwogICAgIHNiLmFwcGVuZCgicHVibGljIGNsYXNzIEFwaUNsYXNzIGV4dGVuZHMgTm9uQXBpQ2xhc3Mge1xuIik7CkBAIC0xNDQsMTAgKzg4LDEwIEBACiAgICAgc2IuYXBwZW5kKCJcdHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IGNoZWNrUGFyYW1ldGVyc0FuZFJldHVyblR5cGVzKEFwaUNsYXNzIGEpIHsgcmV0dXJuIHRoaXM7IH07XG4iKTsKICAgICBzYi5hcHBlbmQoIlx0cHVibGljIGZpbmFsIGphdmEubGFuZy5PYmplY3QgY2hlY2tQYXJhbWV0ZXJzQW5kUmV0dXJuVHlwZXNGaW5hbFZlcnNpb24oQXBpQ2xhc3MgYSkgeyByZXR1cm4gdGhpczsgfTtcbiIpOwogICAgIHNiLmFwcGVuZCgifTtcbiIpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpLnRvQ2hhckFycmF5KCk7CisgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgIH0KIAotICBwcml2YXRlIHN0YXRpYyBjaGFyW10gZ2V0U291cmNlRm9yTmV3T2JqZWN0KCkgeworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U291cmNlRm9yTmV3T2JqZWN0KCkgewogICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICBzYi5hcHBlbmQoInBhY2thZ2UgamF2YS5sYW5nO1xuIik7CiAgICAgc2IuYXBwZW5kKCJwdWJsaWMgY2xhc3MgT2JqZWN0IHtcbiIpOwpAQCAtMTU2LDEwICsxMDAsMTAgQEAKICAgICBzYi5hcHBlbmQoIn1cbiIpOwogICAgIHNiLmFwcGVuZCgiY2xhc3MgVGVtcCB7XG4iKTsKICAgICBzYi5hcHBlbmQoIn0iKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvck5vbkFwaUNsYXNzKCkgeworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U291cmNlRm9yTm9uQXBpQ2xhc3MoKSB7CiAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgIHNiLmFwcGVuZCgicGFja2FnZSB0ZXN0LmFwaWNvbnRhaW5lcjtcbiIpOwogICAgIHNiLmFwcGVuZCgiY2xhc3MgTm9uQXBpQ2xhc3MgZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0IHtcbiIpOwpAQCAtMTcyLDEwICsxMTYsMTAgQEAKICAgICBzYi5hcHBlbmQoIlx0cHJpdmF0ZSBBbm90aGVyQXBpQ2xhc3NJbk5vbkFwaUNsYXNzKCkgeyB9XG4iKTsKICAgICBzYi5hcHBlbmQoIlx0fVxuIik7CiAgICAgc2IuYXBwZW5kKCJ9XG4iKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvck9iamVjdCgpIHsKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNvdXJjZUZvck9iamVjdCgpIHsKICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgc2IuYXBwZW5kKCJwYWNrYWdlIGphdmEubGFuZztcbiIpOwogICAgIHNiLmFwcGVuZCgicHVibGljIGNsYXNzIE9iamVjdCB7XG4iKTsKQEAgLTE4OSwzMyArMTMzLDMzIEBACiAgICAgc2IuYXBwZW5kKCJcdHByaXZhdGUgaW50IGludGVybmFsRmllbGQgPSAwO1xuIik7CiAgICAgc2IuYXBwZW5kKCJcdHByb3RlY3RlZCBpbnQgcHJvdGVjdGVkRmllbGQ9MjtcbiIpOwogICAgIHNiLmFwcGVuZCgifVxuIik7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudG9DaGFyQXJyYXkoKTsKKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgfQogCi0gIHByaXZhdGUgc3RhdGljIGNoYXJbXSBnZXRTb3VyY2VGb3JPbmVNb3JlQXBpQ2xhc3MoKSB7CisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTb3VyY2VGb3JPbmVNb3JlQXBpQ2xhc3MoKSB7CiAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgIHNiLmFwcGVuZCgicGFja2FnZSB0ZXN0LmFwaWNvbnRhaW5lcjtcbiIpOwogICAgIHNiLmFwcGVuZCgicHVibGljIGNsYXNzIE9uZU1vcmVBcGlDbGFzcyBleHRlbmRzIGphdmEubGFuZy5PYmplY3Qge1xuIik7CiAgICAgc2IuYXBwZW5kKCJcdHByb3RlY3RlZCBmaW5hbCB2b2lkIGNoZWNrT3ZlcmxvYWRlZE1ldGhvZEFjY291bnRlZCh0ZXN0LmFwaWNvbnRhaW5lci5PbmVNb3JlQXBpQ2xhc3MgYikgeyB9XG4iKTsKICAgICBzYi5hcHBlbmQoIlx0cHVibGljIHZvaWQgdGVzdFVuY2hlY2tlZEV4Y2VwdGlvbnMgKCkgeyB9XG4iKTsKICAgICBzYi5hcHBlbmQoIn07XG4iKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGdldFNvdXJjZUZvclRlc3QoKSB7CisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTb3VyY2VGb3JUZXN0KCkgewogICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICBzYi5hcHBlbmQoInBhY2thZ2UgamF2YS5uZXdwYWNrYWdlO1xuIik7CiAgICAgc2IuYXBwZW5kKCJwdWJsaWMgY2xhc3MgVGVzdCB7IH1cbiIpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpLnRvQ2hhckFycmF5KCk7CisgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgIH0KIAotICBwcml2YXRlIHN0YXRpYyBjaGFyW10gZ2V0U291cmNlRm9yVGVzdENsYXNzKCkgeworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U291cmNlRm9yVGVzdENsYXNzKCkgewogICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICBzYi5hcHBlbmQoInBhY2thZ2UgdGVzdC5ub25hcGlwYWNrYWdlO1xuIik7CiAgICAgc2IuYXBwZW5kKCJjbGFzcyBUZXN0Q2xhc3MgZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0IHtcbiIpOwogICAgIHNiLmFwcGVuZCgiXHRwdWJsaWMgdm9pZCBtZXRob2QoKSB7IH1cbiIpOwogICAgIHNiLmFwcGVuZCgifVxuIik7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudG9DaGFyQXJyYXkoKTsKKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgfQogCiAgIEFwaUNvbnRhaW5lciBhcGlDaGVjayA9IG51bGw7CkBAIC0yMzAsMTMgKzE3NCwxNSBAQAogICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBVbmFibGVUb0NvbXBsZXRlRXhjZXB0aW9uIHsKICAgICBBYnN0cmFjdFRyZWVMb2dnZXIgbG9nZ2VyID0gbmV3IFByaW50V3JpdGVyVHJlZUxvZ2dlcigpOwogICAgIGxvZ2dlci5zZXRNYXhEZXRhaWwoY29tLmdvb2dsZS5nd3QuY29yZS5leHQuVHJlZUxvZ2dlci5FUlJPUik7Ci0gICAgYXBpQ2hlY2tMb29wID0gbmV3IEFwaUNvbnRhaW5lcigiQXBpQ2xhc3NUZXN0IiwgbG9nZ2VyLAotICAgICAgICBnZXROZXdUeXBlT3JhY2xlRnJvbUNvbXBpbGF0aW9uVW5pdHMoCi0gICAgICAgICAgICBuZXcgU3RhdGljQ29tcGlsYXRpb25Vbml0W10ge25ldyBTdGF0aWNDb21waWxhdGlvblVuaXQoCi0gICAgICAgICAgICAgICAgImphdmEubGFuZy5PYmplY3QiLCBnZXRTb3VyY2VGb3JOZXdPYmplY3QoKSksfSwgbG9nZ2VyKSk7Ci0KLSAgICBhcGlDaGVjayA9IG5ldyBBcGlDb250YWluZXIoIkFwaUNvbnRhaW5lclRlc3QiLCBsb2dnZXIsCi0gICAgICAgIGdldE5ld1R5cGVPcmFjbGVGcm9tQ29tcGlsYXRpb25Vbml0cyhnZXRTY3VBcnJheSgpLCBsb2dnZXIpKTsKKyAgICBhcGlDaGVja0xvb3AgPSBuZXcgQXBpQ29udGFpbmVyKAorICAgICAgICAiQXBpQ2xhc3NUZXN0IiwKKyAgICAgICAgbmV3IEhhc2hTZXQ8Q29tcGlsYXRpb25Vbml0PigKKyAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobmV3IFN0YXRpY0NvbXBpbGF0aW9uVW5pdFtdIHtuZXcgU3RhdGljQ29tcGlsYXRpb25Vbml0KAorICAgICAgICAgICAgICAgICJqYXZhLmxhbmcuT2JqZWN0IiwgZ2V0U291cmNlRm9yTmV3T2JqZWN0KCkpLH0pKSwKKyAgICAgICAgbmV3IEhhc2hTZXQ8U3RyaW5nPigpLCBsb2dnZXIpOworICAgIGFwaUNoZWNrID0gbmV3IEFwaUNvbnRhaW5lcigiQXBpQ29udGFpbmVyVGVzdCIsCisgICAgICAgIG5ldyBIYXNoU2V0PENvbXBpbGF0aW9uVW5pdD4oQXJyYXlzLmFzTGlzdChnZXRTY3VBcnJheSgpKSksCisgICAgICAgIG5ldyBIYXNoU2V0PFN0cmluZz4oKSwgbG9nZ2VyKTsKICAgfQogCiAgIHB1YmxpYyB2b2lkIHRlc3RFdmVyeXRoaW5nKCkgewpkaWZmIC0tZ2l0IGEvdXNlci9idWlsZC54bWwgYi91c2VyL2J1aWxkLnhtbAppbmRleCA2YmM2MTEzLi4wNTM5MjUzIDEwMDc1NQotLS0gYS91c2VyL2J1aWxkLnhtbAorKysgYi91c2VyL2J1aWxkLnhtbApAQCAtNzgsNyArNzgsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0icmVtb3Rld2ViLXRlc3QiIGRlc2NyaXB0aW9uPSJSdW4gYSByZW1vdGV3ZWIgdGVzdCBhdCB0aGUgZ2l2ZW4gaG9zdCBhbmQgcGF0aCIgaWY9Imd3dC5yZW1vdGUuYnJvd3NlcnMiPgogICAgIDxlY2hvIG1lc3NhZ2U9IlBlcmZvcm1pbmcgcmVtb3RlIGJyb3dzZXIgdGVzdGluZyBhdCAke2d3dC5yZW1vdGUuYnJvd3NlcnN9IiAvPgotICAgIDxnd3QuanVuaXQgdGVzdC5hcmdzPSIke3Rlc3QuYXJnc30gLW91dCB3d3cgLXdvcmtEaXIgJHtqdW5pdC5vdXR9L3JlbW90ZXdlYi93b3JrZGlyIC1yZW1vdGV3ZWIgJHtnd3QucmVtb3RlLmJyb3dzZXJzfSIgdGVzdC5vdXQ9IiR7anVuaXQub3V0fS9yZW1vdGV3ZWIiIHRlc3QuY2FzZXM9ImRlZmF1bHQud2ViLnRlc3RzIiA+CisgICAgPGd3dC5qdW5pdCB0ZXN0LmFyZ3M9IiR7dGVzdC5hcmdzfSAtb3V0IHd3dyAtcmVtb3Rld2ViICR7Z3d0LnJlbW90ZS5icm93c2Vyc30iIHRlc3Qub3V0PSIke2p1bml0Lm91dH0vcmVtb3Rld2ViIiB0ZXN0LmNhc2VzPSJkZWZhdWx0LndlYi50ZXN0cyIgPgogICAgICAgPGV4dHJhY2xhc3NwYXRocz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2d3dC5idWlsZH0vb3V0L2Rldi9jb3JlL2Jpbi10ZXN0IiAvPgogICAgICAgPC9leHRyYWNsYXNzcGF0aHM+CkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJzZWxlbml1bS10ZXN0IiBkZXNjcmlwdGlvbj0iUnVuIGEgcmVtb3RlIHRlc3QgdXNpbmcgU2VsZW5pdW0gUkMgdGVzdCBhdCB0aGUgZ2l2ZW4gaG9zdCBhbmQgcGF0aCIgaWY9Imd3dC5zZWxlbml1bS5ob3N0cyI+CiAgICAgPGVjaG8gbWVzc2FnZT0iUGVyZm9ybWluZyByZW1vdGUgYnJvd3NlciB0ZXN0aW5nIHVzaW5nIFNlbGVuaXVtIFJDIGF0ICR7Z3d0LnNlbGVuaXVtLmhvc3RzfSIgLz4KLSAgICA8Z3d0Lmp1bml0IHRlc3QuYXJncz0iJHt0ZXN0LmFyZ3N9IC1vdXQgd3d3IC13b3JrRGlyICR7anVuaXQub3V0fS9zZWxlbml1bS93b3JrZGlyIC1zZWxlbml1bSAke2d3dC5zZWxlbml1bS5ob3N0c30iIHRlc3Qub3V0PSIke2p1bml0Lm91dH0vc2VsZW5pdW0iIHRlc3QuY2FzZXM9ImRlZmF1bHQud2ViLnRlc3RzIiA+CisgICAgPGd3dC5qdW5pdCB0ZXN0LmFyZ3M9IiR7dGVzdC5hcmdzfSAtb3V0IHd3dyAtc2VsZW5pdW0gJHtnd3Quc2VsZW5pdW0uaG9zdHN9IiB0ZXN0Lm91dD0iJHtqdW5pdC5vdXR9L3NlbGVuaXVtIiB0ZXN0LmNhc2VzPSJkZWZhdWx0LndlYi50ZXN0cyIgPgogICAgICAgPGV4dHJhY2xhc3NwYXRocz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2d3dC5idWlsZH0vb3V0L2Rldi9jb3JlL2Jpbi10ZXN0IiAvPgogICAgICAgPC9leHRyYWNsYXNzcGF0aHM+CkBAIC05NSw3ICs5NSw3IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idGVzdC5ob3N0ZWQiIGRlcGVuZHM9ImNvbXBpbGUsIGNvbXBpbGUudGVzdHMiIGRlc2NyaXB0aW9uPSJSdW4gb25seSBob3N0ZWQtbW9kZSB0ZXN0cyBmb3IgdGhpcyBwcm9qZWN0LiI+Ci0gICAgPGd3dC5qdW5pdCB0ZXN0LmFyZ3M9IiR7dGVzdC5hcmdzfSAtd29ya0RpciAke2p1bml0Lm91dH0vJHtidWlsZC5ob3N0LnBsYXRmb3JtfS1ob3N0ZWQtbW9kZS93b3JrZGlyIiB0ZXN0Lm91dD0iJHtqdW5pdC5vdXR9LyR7YnVpbGQuaG9zdC5wbGF0Zm9ybX0taG9zdGVkLW1vZGUiIHRlc3QuY2FzZXM9ImRlZmF1bHQuaG9zdGVkLnRlc3RzIiA+CisgICAgPGd3dC5qdW5pdCB0ZXN0LmFyZ3M9IiR7dGVzdC5hcmdzfSIgdGVzdC5vdXQ9IiR7anVuaXQub3V0fS8ke2J1aWxkLmhvc3QucGxhdGZvcm19LWhvc3RlZC1tb2RlIiB0ZXN0LmNhc2VzPSJkZWZhdWx0Lmhvc3RlZC50ZXN0cyIgPgogICAgICAgPGV4dHJhY2xhc3NwYXRocz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2d3dC5idWlsZH0vb3V0L2Rldi9jb3JlL2Jpbi10ZXN0IiAvPgogICAgICAgPC9leHRyYWNsYXNzcGF0aHM+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ0ZXN0LndlYiIgZGVwZW5kcz0iY29tcGlsZSwgY29tcGlsZS50ZXN0cyIgZGVzY3JpcHRpb249IlJ1biBvbmx5IHdlYi1tb2RlIHRlc3RzIGZvciB0aGlzIHByb2plY3QuIj4KLSAgICA8Z3d0Lmp1bml0IHRlc3QuYXJncz0iJHt0ZXN0LmFyZ3N9IC1vdXQgd3d3IC13b3JrRGlyICR7anVuaXQub3V0fS8ke2J1aWxkLmhvc3QucGxhdGZvcm19LXdlYi1tb2RlL3dvcmtkaXIgLXdlYiIgdGVzdC5vdXQ9IiR7anVuaXQub3V0fS8ke2J1aWxkLmhvc3QucGxhdGZvcm19LXdlYi1tb2RlIiB0ZXN0LmNhc2VzPSJkZWZhdWx0LndlYi50ZXN0cyIgPgorICAgIDxnd3QuanVuaXQgdGVzdC5hcmdzPSIke3Rlc3QuYXJnc30gLW91dCB3d3cgLXdlYiIgdGVzdC5vdXQ9IiR7anVuaXQub3V0fS8ke2J1aWxkLmhvc3QucGxhdGZvcm19LXdlYi1tb2RlIiB0ZXN0LmNhc2VzPSJkZWZhdWx0LndlYi50ZXN0cyIgPgogICAgICAgPGV4dHJhY2xhc3NwYXRocz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2d3dC5idWlsZH0vb3V0L2Rldi9jb3JlL2Jpbi10ZXN0IiAvPgogICAgICAgPC9leHRyYWNsYXNzcGF0aHM+CmRpZmYgLS1naXQgYS91c2VyL2phdmFkb2MvY29tL2dvb2dsZS9nd3QvZXhhbXBsZXMvRGF0ZUJveEV4YW1wbGUuamF2YSBiL3VzZXIvamF2YWRvYy9jb20vZ29vZ2xlL2d3dC9leGFtcGxlcy9EYXRlQm94RXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjUwMzUKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL2phdmFkb2MvY29tL2dvb2dsZS9nd3QvZXhhbXBsZXMvRGF0ZUJveEV4YW1wbGUuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV4YW1wbGVzOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuRW50cnlQb2ludDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5Sb290UGFuZWw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudC5EYXRlQm94OworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK3B1YmxpYyBjbGFzcyBEYXRlQm94RXhhbXBsZSBpbXBsZW1lbnRzIEVudHJ5UG9pbnQgeworCisgIHB1YmxpYyB2b2lkIG9uTW9kdWxlTG9hZCgpIHsKKyAgICBEYXRlQm94IGRhdGVCb3ggPSBuZXcgRGF0ZUJveCgpOworICAgIGRhdGVCb3guc2V0VmFsdWUobmV3IERhdGUoKSk7CisgICAgUm9vdFBhbmVsLmdldCgpLmFkZChkYXRlQm94KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdXNlci9qYXZhZG9jL2NvbS9nb29nbGUvZ3d0L2V4YW1wbGVzL0RhdGVQaWNrZXJFeGFtcGxlLmphdmEgYi91c2VyL2phdmFkb2MvY29tL2dvb2dsZS9nd3QvZXhhbXBsZXMvRGF0ZVBpY2tlckV4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGFkYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdXNlci9qYXZhZG9jL2NvbS9nb29nbGUvZ3d0L2V4YW1wbGVzL0RhdGVQaWNrZXJFeGFtcGxlLmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5leGFtcGxlczsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkVudHJ5UG9pbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VFdmVudDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUhhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQuRGF0ZVRpbWVGb3JtYXQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuTGFiZWw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuUm9vdFBhbmVsOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuZGF0ZXBpY2tlci5jbGllbnQuRGF0ZVBpY2tlcjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitwdWJsaWMgY2xhc3MgRGF0ZVBpY2tlckV4YW1wbGUgaW1wbGVtZW50cyBFbnRyeVBvaW50IHsKKworICBwdWJsaWMgdm9pZCBvbk1vZHVsZUxvYWQoKSB7CisgICAgLy8gQ3JlYXRlIGEgZGF0ZSBwaWNrZXIKKyAgICBEYXRlUGlja2VyIGRhdGVQaWNrZXIgPSBuZXcgRGF0ZVBpY2tlcigpOworICAgIGZpbmFsIExhYmVsIHRleHQgPSBuZXcgTGFiZWwoKTsKKworICAgIC8vIFNldCB0aGUgdmFsdWUgaW4gdGhlIHRleHQgYm94IHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIGRhdGUKKyAgICBkYXRlUGlja2VyLmFkZFZhbHVlQ2hhbmdlSGFuZGxlcihuZXcgVmFsdWVDaGFuZ2VIYW5kbGVyPERhdGU+KCkgeworICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShWYWx1ZUNoYW5nZUV2ZW50PERhdGU+IGV2ZW50KSB7CisgICAgICAgIERhdGUgZGF0ZSA9IGV2ZW50LmdldFZhbHVlKCk7CisgICAgICAgIFN0cmluZyBkYXRlU3RyaW5nID0gRGF0ZVRpbWVGb3JtYXQuZ2V0TWVkaXVtRGF0ZUZvcm1hdCgpLmZvcm1hdChkYXRlKTsKKyAgICAgICAgdGV4dC5zZXRUZXh0KGRhdGVTdHJpbmcpOworICAgICAgfQorICAgIH0pOworCisgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlCisgICAgZGF0ZVBpY2tlci5zZXRWYWx1ZShuZXcgRGF0ZSgpLCB0cnVlKTsKKyAgICAKKyAgICAvLyBBZGQgdGhlIHdpZGdldHMgdG8gdGhlIHBhZ2UKKyAgICBSb290UGFuZWwuZ2V0KCkuYWRkKHRleHQpOworICAgIFJvb3RQYW5lbC5nZXQoKS5hZGQoZGF0ZVBpY2tlcik7CisgIH0KK30KZGlmZiAtLWdpdCBhL3VzZXIvamF2YWRvYy9jb20vZ29vZ2xlL2d3dC9leGFtcGxlcy9MYXp5UGFuZWxFeGFtcGxlLmphdmEgYi91c2VyL2phdmFkb2MvY29tL2dvb2dsZS9nd3QvZXhhbXBsZXMvTGF6eVBhbmVsRXhhbXBsZS5qYXZhCmluZGV4IDZkZWFkNTUuLmEzNDBiZGEgMTAwNjQ0Ci0tLSBhL3VzZXIvamF2YWRvYy9jb20vZ29vZ2xlL2d3dC9leGFtcGxlcy9MYXp5UGFuZWxFeGFtcGxlLmphdmEKKysrIGIvdXNlci9qYXZhZG9jL2NvbS9nb29nbGUvZ3d0L2V4YW1wbGVzL0xhenlQYW5lbEV4YW1wbGUuamF2YQpAQCAtMjYsMTAgKzI2LDcgQEAKIAogcHVibGljIGNsYXNzIExhenlQYW5lbEV4YW1wbGUgaW1wbGVtZW50cyBFbnRyeVBvaW50IHsKIAotICAvKioKLSAgICogQSBmcmllbmRseSBsaXR0bGUgTGF6eVBhbmVsLgotICAgKi8KLSAgc3RhdGljIGNsYXNzIEhlbGxvTGF6eSBleHRlbmRzIExhenlQYW5lbCB7CisgIHByaXZhdGUgc3RhdGljIGNsYXNzIEhlbGxvTGF6eVBhbmVsIGV4dGVuZHMgTGF6eVBhbmVsIHsKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgV2lkZ2V0IGNyZWF0ZVdpZGdldCgpIHsKICAgICAgIHJldHVybiBuZXcgTGFiZWwoIldlbGwgaGVsbG8gdGhlcmUhIik7CkBAIC0zNyw3ICszNCwxMCBAQAogICB9CiAKICAgcHVibGljIHZvaWQgb25Nb2R1bGVMb2FkKCkgewotICAgIGZpbmFsIFdpZGdldCBsYXp5ID0gbmV3IEhlbGxvTGF6eSgpOyAKKyAgICBmaW5hbCBXaWRnZXQgbGF6eSA9IG5ldyBIZWxsb0xhenlQYW5lbCgpOworICAgIAorICAgIC8vIE5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBrZWVwcyB0aGUgZW1wdHkgb3V0ZXIgZGl2CisgICAgLy8gZnJvbSBlZmZlY3RpbmcgbGF5b3V0IGJlZm9yZSBpdCBpcyBvZiBhbnkgdXNlCiAgICAgbGF6eS5zZXRWaXNpYmxlKGZhbHNlKTsKIAogICAgIFB1c2hCdXR0b24gYiA9IG5ldyBQdXNoQnV0dG9uKCJDbGljayBtZSIpOyAgICAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvcHVibGljL2hpc3RvcnkuaHRtbCBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2NvcmUvcHVibGljL2hpc3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2ZjQ2YS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9jb3JlL3B1YmxpYy9oaXN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHNjcmlwdD4KLWZ1bmN0aW9uIGhzdCgpIHsKLSAgdmFyIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDsKLSAgdmFyIGhpc3RvcnlUb2tlbiA9ICcnOwotICBpZiAoc2VhcmNoLmxlbmd0aCA+IDApCi0gICAgaGlzdG9yeVRva2VuID0gc2VhcmNoLnN1YnN0cmluZygxKTsKLQotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX19nd3RfaGlzdG9yeVRva2VuJykudmFsdWUgPSBoaXN0b3J5VG9rZW47Ci0gIGlmIChwYXJlbnQuX19nd3Rfb25IaXN0b3J5TG9hZCkgewotICAgIHBhcmVudC5fX2d3dF9vbkhpc3RvcnlMb2FkKGhpc3RvcnlUb2tlbik7Ci0gIH0KLX0KLTwvc2NyaXB0PjwvaGVhZD4KLTxib2R5IG9ubG9hZD0naHN0KCknPgotCi08aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J19fZ3d0X2hpc3RvcnlUb2tlbicgdGFiSW5kZXg9Jy0xJz4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZG9tL2NsaWVudC9ET01JbXBsSUU2LmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9kb20vY2xpZW50L0RPTUltcGxJRTYuamF2YQppbmRleCAxNGJhZWI4Li4zNmZhZDc3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9kb20vY2xpZW50L0RPTUltcGxJRTYuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9kb20vY2xpZW50L0RPTUltcGxJRTYuamF2YQpAQCAtNDEsMTMgKzQxLDE1IEBACiAKICAgQE92ZXJyaWRlCiAgIHB1YmxpYyBuYXRpdmUgaW50IGdldEFic29sdXRlTGVmdChFbGVtZW50IGVsZW0pIC8qLXsKLSAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsKKyAgICByZXR1cm4gKGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAvCisgICAgICB0aGlzLkBjb20uZ29vZ2xlLmd3dC5kb20uY2xpZW50LkRPTUltcGxJRTY6OmdldFpvb21NdWx0aXBsZSgpKCkpICsKICAgICAgIEBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5pbXBsLkRvY3VtZW50Um9vdEltcGw6OmRvY3VtZW50Um9vdC5zY3JvbGxMZWZ0OwogICB9LSovOwogCiAgIEBPdmVycmlkZQogICBwdWJsaWMgbmF0aXZlIGludCBnZXRBYnNvbHV0ZVRvcChFbGVtZW50IGVsZW0pIC8qLXsKLSAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKworICAgIHJldHVybiAoZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLworICAgICAgdGhpcy5AY29tLmdvb2dsZS5nd3QuZG9tLmNsaWVudC5ET01JbXBsSUU2OjpnZXRab29tTXVsdGlwbGUoKSgpKSArCiAgICAgICBAY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuaW1wbC5Eb2N1bWVudFJvb3RJbXBsOjpkb2N1bWVudFJvb3Quc2Nyb2xsVG9wOwogICB9LSovOwogCkBAIC0xMTIsNCArMTE0LDE1IEBACiAgIHB1YmxpYyBuYXRpdmUgdm9pZCBzZXRJbm5lclRleHQoRWxlbWVudCBlbGVtLCBTdHJpbmcgdGV4dCkgLyotewogICAgIGVsZW0uaW5uZXJUZXh0ID0gdGV4dCB8fCAnJzsKICAgfS0qLzsKKworICAvKioKKyAgICogR2V0IHRoZSB6b29tIG11bHRpcGxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IElFIHpvb20gbGV2ZWwuICBBIG11bHRpcGxlIG9mCisgICAqIDIuMCBtZWFucyB0aGF0IHRoZSB1c2VyIGhhcyB6b29tZWQgaW4gdG8gMjAwJS4KKyAgICogCisgICAqIEByZXR1cm4gdGhlIHpvb20gbXVsdGlwbGUKKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorICBwcml2YXRlIG5hdGl2ZSBkb3VibGUgZ2V0Wm9vbU11bHRpcGxlKCkgLyoteworICAgIHJldHVybiAkZG9jLmJvZHkucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCAvICRkb2MuYm9keS5vZmZzZXRXaWR0aDsKKyAgfS0qLzsKIH0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzQmx1ckhhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0JsdXJIYW5kbGVycy5qYXZhCmluZGV4IDI4OTIwNTkuLmJhN2I3ZDggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzQmx1ckhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNCbHVySGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgQmx1ckhhbmRsZXJ9IGluc3RhbmNlcy4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0JsdXJIYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNCbHVySGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgQmx1ckV2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNDaGFuZ2VIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNDaGFuZ2VIYW5kbGVycy5qYXZhCmluZGV4IDhiOWI4ZGEuLmMwMzc4OTIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzQ2hhbmdlSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0NoYW5nZUhhbmRsZXJzLmphdmEKQEAgLTE2LDEyICsxNiwxMyBAQAogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Ow0KIA0KIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KIA0KIC8qKg0KICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBwcm92aWRlcyByZWdpc3RyYXRpb24gZm9yDQogICoge0BsaW5rIENoYW5nZUhhbmRsZXJ9IGluc3RhbmNlcy4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0NoYW5nZUhhbmRsZXJzIHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0NoYW5nZUhhbmRsZXJzIGV4dGVuZHMgSGFzSGFuZGxlcnMgew0KICAgLyoqDQogICAgKiBBZGRzIGEge0BsaW5rIENoYW5nZUV2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNDbGlja0hhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0NsaWNrSGFuZGxlcnMuamF2YQppbmRleCAyNmMxYTlhLi5jZGM2Y2UzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0NsaWNrSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0NsaWNrSGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgQ2xpY2tIYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNDbGlja0hhbmRsZXJzIHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0NsaWNrSGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgQ2xpY2tFdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzQ29udGV4dE1lbnVIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNDb250ZXh0TWVudUhhbmRsZXJzLmphdmEKaW5kZXggNjY5ZWQ1ZC4uNWVkOTQ3ZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNDb250ZXh0TWVudUhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNDb250ZXh0TWVudUhhbmRsZXJzLmphdmEKQEAgLTE2LDEyICsxNiwxMyBAQAogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50OwogCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOwogCiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBwcm92aWRlcyByZWdpc3RyYXRpb24gZm9yCiAgKiB7QGxpbmsgQ29udGV4dE1lbnVIYW5kbGVyfSBpbnN0YW5jZXMuCiAgKi8KLXB1YmxpYyBpbnRlcmZhY2UgSGFzQ29udGV4dE1lbnVIYW5kbGVycyB7CitwdWJsaWMgaW50ZXJmYWNlIEhhc0NvbnRleHRNZW51SGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7CiAgIC8qKgogICAgKiBBZGRzIGEge0BsaW5rIENvbnRleHRNZW51RXZlbnR9IGhhbmRsZXIuCiAgICAqIApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNEb3VibGVDbGlja0hhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0RvdWJsZUNsaWNrSGFuZGxlcnMuamF2YQppbmRleCAzNWY2ZDdiLi42NDYyOTRiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0RvdWJsZUNsaWNrSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0RvdWJsZUNsaWNrSGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgRG91YmxlQ2xpY2tIYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNEb3VibGVDbGlja0hhbmRsZXJzIHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0RvdWJsZUNsaWNrSGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgRG91YmxlQ2xpY2tFdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzRXJyb3JIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNFcnJvckhhbmRsZXJzLmphdmEKaW5kZXggMDBiNzQxYy4uM2Q0YjQ3MyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNFcnJvckhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNFcnJvckhhbmRsZXJzLmphdmEKQEAgLTE2LDEyICsxNiwxMyBAQAogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Ow0KIA0KIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KIA0KIC8qKg0KICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBwcm92aWRlcyByZWdpc3RyYXRpb24gZm9yDQogICoge0BsaW5rIEVycm9ySGFuZGxlcn0gaW5zdGFuY2VzLg0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzRXJyb3JIYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNFcnJvckhhbmRsZXJzIGV4dGVuZHMgSGFzSGFuZGxlcnMgew0KICAgLyoqDQogICAgKiBBZGRzIGEge0BsaW5rIEVycm9yRXZlbnR9IGhhbmRsZXIuDQogICAgKiANCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0ZvY3VzSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzRm9jdXNIYW5kbGVycy5qYXZhCmluZGV4IGE3ZDNkZmQuLjZjMTlkYzIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzRm9jdXNIYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzRm9jdXNIYW5kbGVycy5qYXZhCkBAIC0xNiwxMiArMTYsMTMgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudDsNCiANCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCiANCiAvKioNCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgcmVnaXN0cmF0aW9uIGZvcg0KICAqIHtAbGluayBGb2N1c0hhbmRsZXJ9IGluc3RhbmNlcy4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0ZvY3VzSGFuZGxlcnMgew0KK3B1YmxpYyBpbnRlcmZhY2UgSGFzRm9jdXNIYW5kbGVycyBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBGb2N1c0V2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNLZXlEb3duSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzS2V5RG93bkhhbmRsZXJzLmphdmEKaW5kZXggNWQ1ODRkNy4uNjczNmRhNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNLZXlEb3duSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0tleURvd25IYW5kbGVycy5qYXZhCkBAIC0xNiwxMiArMTYsMTMgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudDsNCiANCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCiANCiAvKioNCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgcmVnaXN0cmF0aW9uIGZvcg0KICAqIHtAbGluayBLZXlEb3duSGFuZGxlcn0gaW5zdGFuY2VzLg0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzS2V5RG93bkhhbmRsZXJzIHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0tleURvd25IYW5kbGVycyBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBLZXlEb3duRXZlbnR9IGhhbmRsZXIuDQogICAgKiANCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0tleVByZXNzSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzS2V5UHJlc3NIYW5kbGVycy5qYXZhCmluZGV4IDdkNTU0NDkuLjFmZDVjZmQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzS2V5UHJlc3NIYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzS2V5UHJlc3NIYW5kbGVycy5qYXZhCkBAIC0xNiwxMiArMTYsMTMgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudDsNCiANCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCiANCiAvKioNCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgcmVnaXN0cmF0aW9uIGZvcg0KICAqIHtAbGluayBLZXlQcmVzc0hhbmRsZXJ9IGluc3RhbmNlcy4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0tleVByZXNzSGFuZGxlcnMgew0KK3B1YmxpYyBpbnRlcmZhY2UgSGFzS2V5UHJlc3NIYW5kbGVycyBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBLZXlQcmVzc0V2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNLZXlVcEhhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0tleVVwSGFuZGxlcnMuamF2YQppbmRleCAwYjZiYzkyLi4zZTk1YWM5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0tleVVwSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0tleVVwSGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgS2V5VXBIYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNLZXlVcEhhbmRsZXJzIHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0tleVVwSGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgS2V5VXBFdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTG9hZEhhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0xvYWRIYW5kbGVycy5qYXZhCmluZGV4IGVmZTI4OTIuLjIwOTAzY2QgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTG9hZEhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNMb2FkSGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgTG9hZEhhbmRsZXJ9IGluc3RhbmNlcy4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0xvYWRIYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNMb2FkSGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgTG9hZEV2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNMb3NlQ2FwdHVyZUhhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0xvc2VDYXB0dXJlSGFuZGxlcnMuamF2YQppbmRleCBkYWMxYzRiLi40OGI2YTcyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0xvc2VDYXB0dXJlSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc0xvc2VDYXB0dXJlSGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgTG9zZUNhcHR1cmVIYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNMb3NlQ2FwdHVyZUhhbmRsZXJzIHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0xvc2VDYXB0dXJlSGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgTG9zZUNhcHR1cmVFdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VEb3duSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VEb3duSGFuZGxlcnMuamF2YQppbmRleCA3MTg1M2ExLi5lYTk5YTgyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlRG93bkhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZURvd25IYW5kbGVycy5qYXZhCkBAIC0xNiwxMiArMTYsMTMgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudDsNCiANCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCiANCiAvKioNCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgcmVnaXN0cmF0aW9uIGZvcg0KICAqIHtAbGluayBNb3VzZURvd25IYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNNb3VzZURvd25IYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNNb3VzZURvd25IYW5kbGVycyBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBNb3VzZURvd25FdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VNb3ZlSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VNb3ZlSGFuZGxlcnMuamF2YQppbmRleCA5MGY2ZTU1Li4xOTE2OGI3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlTW92ZUhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZU1vdmVIYW5kbGVycy5qYXZhCkBAIC0xNiwxMiArMTYsMTMgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudDsNCiANCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCiANCiAvKioNCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgcmVnaXN0cmF0aW9uIGZvcg0KICAqIHtAbGluayBNb3VzZU1vdmVIYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNNb3VzZU1vdmVIYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNNb3VzZU1vdmVIYW5kbGVycyBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBNb3VzZU1vdmVFdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VPdXRIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZU91dEhhbmRsZXJzLmphdmEKaW5kZXggZTk5M2M2Ny4uZTRjZjM3YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZU91dEhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZU91dEhhbmRsZXJzLmphdmEKQEAgLTE2LDEyICsxNiwxMyBAQAogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Ow0KIA0KIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KIA0KIC8qKg0KICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBwcm92aWRlcyByZWdpc3RyYXRpb24gZm9yDQogICoge0BsaW5rIE1vdXNlT3V0SGFuZGxlcn0gaW5zdGFuY2VzLg0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzTW91c2VPdXRIYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNNb3VzZU91dEhhbmRsZXJzIGV4dGVuZHMgSGFzSGFuZGxlcnMgew0KICAgLyoqDQogICAgKiBBZGRzIGEge0BsaW5rIE1vdXNlT3V0RXZlbnR9IGhhbmRsZXIuDQogICAgKiANCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlT3ZlckhhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlT3ZlckhhbmRsZXJzLmphdmEKaW5kZXggZGFiOTdiNi4uYWNjNTJiNyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZU92ZXJIYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VPdmVySGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgTW91c2VPdmVySGFuZGxlcn0gaW5zdGFuY2VzLg0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzTW91c2VPdmVySGFuZGxlcnMgew0KK3B1YmxpYyBpbnRlcmZhY2UgSGFzTW91c2VPdmVySGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgTW91c2VPdmVyRXZlbnR9IGhhbmRsZXIuDQogICAgKiANCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlVXBIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZVVwSGFuZGxlcnMuamF2YQppbmRleCBlMDRhMzkxLi5iOWYwYmM0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlVXBIYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VVcEhhbmRsZXJzLmphdmEKQEAgLTE2LDEyICsxNiwxMyBAQAogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Ow0KIA0KIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KIA0KIC8qKg0KICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBwcm92aWRlcyByZWdpc3RyYXRpb24gZm9yDQogICoge0BsaW5rIE1vdXNlVXBIYW5kbGVyfSBpbnN0YW5jZXMuDQogICovDQotcHVibGljIGludGVyZmFjZSBIYXNNb3VzZVVwSGFuZGxlcnMgew0KK3B1YmxpYyBpbnRlcmZhY2UgSGFzTW91c2VVcEhhbmRsZXJzIGV4dGVuZHMgSGFzSGFuZGxlcnMgew0KICAgLyoqDQogICAgKiBBZGRzIGEge0BsaW5rIE1vdXNlVXBFdmVudH0gaGFuZGxlci4NCiAgICAqIA0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VXaGVlbEhhbmRsZXJzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0hhc01vdXNlV2hlZWxIYW5kbGVycy5qYXZhCmluZGV4IDdhYWFhNDEuLmI2ODExNjIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvSGFzTW91c2VXaGVlbEhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9IYXNNb3VzZVdoZWVsSGFuZGxlcnMuamF2YQpAQCAtMTYsMTIgKzE2LDEzIEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmb3INCiAgKiB7QGxpbmsgTW91c2VXaGVlbEhhbmRsZXJ9IGluc3RhbmNlcy4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc01vdXNlV2hlZWxIYW5kbGVycyB7DQorcHVibGljIGludGVyZmFjZSBIYXNNb3VzZVdoZWVsSGFuZGxlcnMgZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQogICAvKioNCiAgICAqIEFkZHMgYSB7QGxpbmsgTW91c2VXaGVlbEV2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9LZXlFdmVudC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvZG9tL2NsaWVudC9LZXlFdmVudC5qYXZhCmluZGV4IDZkNzNiZGMuLjE4ZTdkMmMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2RvbS9jbGllbnQvS2V5RXZlbnQuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9kb20vY2xpZW50L0tleUV2ZW50LmphdmEKQEAgLTM2LDYgKzM2LDE3IEBACiAgIH0KIAogICAvKioKKyAgICogRG9lcyB0aGlzIGV2ZW50IGhhdmUgYW55IG1vZGlmaWVyIGtleXMgZG93bj8gU3BlY2lmaWNhbGx5LiBpcyB0aGUgY29udHJvbCwKKyAgICogbWV0YSwgc2hpZnQsIG9yIGFsdCBrZXkgY3VycmVudGx5IHByZXNzZWQ/CisgICAqIAorICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBldmVudCBoYXZlIGFueSBtb2RpZmllciBrZXkgZG93bgorICAgKi8KKyAgcHVibGljIGJvb2xlYW4gaXNBbnlNb2RpZmllcktleURvd24oKSB7CisgICAgcmV0dXJuIGlzQ29udHJvbEtleURvd24oKSB8fCBpc1NoaWZ0S2V5RG93bigpIHx8IGlzTWV0YUtleURvd24oKQorICAgICAgICB8fCBpc0FsdEtleURvd24oKTsKKyAgfQorCisgIC8qKgogICAgKiBHZXRzIHRoZSBrZXktcmVwZWF0IHN0YXRlIG9mIHRoaXMgZXZlbnQuCiAgICAqIAogICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMga2V5IGV2ZW50IHdhcyBhbiBhdXRvLXJlcGVhdApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvQmVmb3JlU2VsZWN0aW9uRXZlbnQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0JlZm9yZVNlbGVjdGlvbkV2ZW50LmphdmEKaW5kZXggZDgxYTcxNS4uNTU2MzM1YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvQmVmb3JlU2VsZWN0aW9uRXZlbnQuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9CZWZvcmVTZWxlY3Rpb25FdmVudC5qYXZhCkBAIC0zNiwxNCArMzYsMTMgQEAKICAgICogbWFuYWdlci4gSWYgbm8gc3VjaCBoYW5kbGVycyBleGlzdCwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLgogICAgKiAKICAgICogQHBhcmFtIDxJPiB0aGUgaXRlbSB0eXBlCi0gICAqIEBwYXJhbSA8Uz4gVGhlIGV2ZW50IHNvdXJjZSB0eXBlCiAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgaGFuZGxlcnMKICAgICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0KICAgICogQHJldHVybiB0aGUgZXZlbnQgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBjaGVjayBpZiBpdCB3YXMgY2FuY2VsZWQsIG9yIG51bGwKLSAgICogaWYgbm8gaGFuZGxlcnMgb2YgdGhpcyBldmVudCB0eXBlIGhhdmUgYmVlbiByZWdpc3RlcmVkCisgICAqICAgICAgICAgaWYgbm8gaGFuZGxlcnMgb2YgdGhpcyBldmVudCB0eXBlIGhhdmUgYmVlbiByZWdpc3RlcmVkCiAgICAqLwotICBwdWJsaWMgc3RhdGljIDxJLCBTIGV4dGVuZHMgSGFzQmVmb3JlU2VsZWN0aW9uSGFuZGxlcnM8ST4gJiBIYXNIYW5kbGVycz4gQmVmb3JlU2VsZWN0aW9uRXZlbnQ8ST4gZmlyZSgKLSAgICAgIFMgc291cmNlLCBJIGl0ZW0pIHsKKyAgcHVibGljIHN0YXRpYyA8ST4gQmVmb3JlU2VsZWN0aW9uRXZlbnQ8ST4gZmlyZSgKKyAgICAgIEhhc0JlZm9yZVNlbGVjdGlvbkhhbmRsZXJzPEk+IHNvdXJjZSwgSSBpdGVtKSB7CiAgICAgLy8gSWYgbm8gaGFuZGxlcnMgZXhpc3QsIHRoZW4gdHlwZSBjYW4gYmUgbnVsbC4KICAgICBpZiAoVFlQRSAhPSBudWxsKSB7CiAgICAgICBIYW5kbGVyTWFuYWdlciBoYW5kbGVycyA9IHNvdXJjZS5nZXRIYW5kbGVycygpOwpAQCAtODAsNyArNzksNyBAQAogICB9CiAKICAgLyoqCi0gICAqIENhbmNlbCB0aGUgYmVmb3JlIHNlbGVjdGlvbiBldmVudC4gIAorICAgKiBDYW5jZWwgdGhlIGJlZm9yZSBzZWxlY3Rpb24gZXZlbnQuCiAgICAqIAogICAgKiBDbGFzc2VzIG92ZXJyaWRpbmcgdGhpcyBtZXRob2Qgc2hvdWxkIHN0aWxsIGNhbGwgc3VwZXIuY2FuY2VsKCkuCiAgICAqLwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvQ2xvc2VFdmVudC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvQ2xvc2VFdmVudC5qYXZhCmluZGV4IDI1Y2VhYmEuLmM2ODUzNmIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0Nsb3NlRXZlbnQuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9DbG9zZUV2ZW50LmphdmEKQEAgLTM1LDEyICszNSwxMCBAQAogICAgKiBubyBzdWNoIGhhbmRsZXJzIGV4aXN0LCB0aGlzIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmcuDQogICAgKiANCiAgICAqIEBwYXJhbSA8VD4gdGhlIHRhcmdldCB0eXBlDQotICAgKiBAcGFyYW0gPFM+IFRoZSBldmVudCBzb3VyY2UNCiAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgaGFuZGxlcnMNCiAgICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldA0KICAgICovDQotICBwdWJsaWMgc3RhdGljIDxULCBTIGV4dGVuZHMgSGFzQ2xvc2VIYW5kbGVyczxUPiAmIEhhc0hhbmRsZXJzPiB2b2lkIGZpcmUoDQotICAgICAgUyBzb3VyY2UsIFQgdGFyZ2V0KSB7DQorICBwdWJsaWMgc3RhdGljIDxUPiB2b2lkIGZpcmUoSGFzQ2xvc2VIYW5kbGVyczxUPiBzb3VyY2UsIFQgdGFyZ2V0KSB7DQogICAgIGZpcmUoc291cmNlLCB0YXJnZXQsIGZhbHNlKTsNCiAgIH0NCiANCkBAIC00OCwxMyArNDYsMTIgQEAKICAgICogRmlyZXMgYSBjbG9zZSBldmVudCBvbiBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVycyBpbiB0aGUgaGFuZGxlciBtYW5hZ2VyLg0KICAgICogDQogICAgKiBAcGFyYW0gPFQ+IHRoZSB0YXJnZXQgdHlwZQ0KLSAgICogQHBhcmFtIDxTPiBUaGUgZXZlbnQgc291cmNlDQogICAgKiBAcGFyYW0gc291cmNlIHRoZSBzb3VyY2Ugb2YgdGhlIGhhbmRsZXJzDQogICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQNCiAgICAqIEBwYXJhbSBhdXRvQ2xvc2VkIHdhcyB0aGUgdGFyZ2V0IGNsb3NlZCBhdXRvbWF0aWNhbGx5DQogICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgPFQsIFMgZXh0ZW5kcyBIYXNDbG9zZUhhbmRsZXJzPFQ+ICYgSGFzSGFuZGxlcnM+IHZvaWQgZmlyZSgNCi0gICAgICBTIHNvdXJjZSwgVCB0YXJnZXQsIGJvb2xlYW4gYXV0b0Nsb3NlZCkgew0KKyAgcHVibGljIHN0YXRpYyA8VD4gdm9pZCBmaXJlKA0KKyAgICAgIEhhc0Nsb3NlSGFuZGxlcnM8VD4gc291cmNlLCBUIHRhcmdldCwgYm9vbGVhbiBhdXRvQ2xvc2VkKSB7DQogICAgIGlmIChUWVBFICE9IG51bGwpIHsNCiAgICAgICBIYW5kbGVyTWFuYWdlciBoYW5kbGVycyA9IHNvdXJjZS5nZXRIYW5kbGVycygpOw0KICAgICAgIGlmIChoYW5kbGVycyAhPSBudWxsKSB7DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzQmVmb3JlU2VsZWN0aW9uSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc0JlZm9yZVNlbGVjdGlvbkhhbmRsZXJzLmphdmEKaW5kZXggOTZhNmQ3MS4uZjg4MTE5ZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzQmVmb3JlU2VsZWN0aW9uSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNCZWZvcmVTZWxlY3Rpb25IYW5kbGVycy5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkOwogCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOwogCiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBpcyBhIHB1YmxpYyBzb3VyY2Ugb2YKQEAgLTIzLDcgKzI0LDcgQEAKICAqIAogICogQHBhcmFtIDxJPiB0aGUgdHlwZSBhYm91dCB0byBiZSBzZWxlY3RlZAogICovCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0JlZm9yZVNlbGVjdGlvbkhhbmRsZXJzPEk+IHsKK3B1YmxpYyBpbnRlcmZhY2UgSGFzQmVmb3JlU2VsZWN0aW9uSGFuZGxlcnM8ST4gZXh0ZW5kcyBIYXNIYW5kbGVycyB7CiAgIC8qKgogICAgKiBBZGRzIGEge0BsaW5rIEJlZm9yZVNlbGVjdGlvbkV2ZW50fSBoYW5kbGVyLgogICAgKiAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc0Nsb3NlSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc0Nsb3NlSGFuZGxlcnMuamF2YQppbmRleCBmZWNkYjRkLi5mOWQzZGZlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNDbG9zZUhhbmRsZXJzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzQ2xvc2VIYW5kbGVycy5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkOw0KIA0KIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KIA0KIC8qKg0KICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBpcyBhIHB1YmxpYyBzb3VyY2Ugb2YNCkBAIC0yMyw3ICsyNCw3IEBACiAgKiANCiAgKiBAcGFyYW0gPFQ+IHRoZSB0eXBlIGJlaW5nIGNsb3NlZA0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzQ2xvc2VIYW5kbGVyczxUPiB7DQorcHVibGljIGludGVyZmFjZSBIYXNDbG9zZUhhbmRsZXJzPFQ+IGV4dGVuZHMgSGFzSGFuZGxlcnMgew0KICAgLyoqDQogICAgKiBBZGRzIGEge0BsaW5rIENsb3NlRXZlbnR9IGhhbmRsZXIuDQogICAgKiANCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzSGFuZGxlcnMuamF2YQppbmRleCBlYTM2NDYxLi5mMTZlYjUyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNIYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc0hhbmRsZXJzLmphdmEKQEAgLTE2LDE4ICsxNiwxNCBAQAogDQogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZDsNCiANCi1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJNYW5hZ2VyOw0KLQ0KIC8qKg0KLSAqIEFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgaGFzIGEgY29sbGVjdGlvbiBvZiBoYW5kbGVycyBzdG9yZWQNCi0gKiBpbiBhIHtAbGluayBIYW5kbGVyTWFuYWdlcn0uDQorICogVGhpcyBpcyBhIHBsYWNlaG9sZGVyIHRvIGF2b2lkIGJyZWFraW5nIHByb2plY3RzIGRlcGVuZGluZyBvbiBHV1QgdHJ1bmssDQorICogSGFzSGFuZGxlcnMgaGFzIG1vdmVkIHRvIGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVycy4gVGhpcw0KKyAqIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQgYmVmb3JlIHRoZSBmaXJzdCBHV1QgMS42IG1pbGVzdG9uZS4NCisgKiANCisgKiBAZGVwcmVjYXRlZCB1c2UgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzIGluc3RlYWQuDQogICovDQorQERlcHJlY2F0ZWQNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJzIGV4dGVuZHMgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzIHsNCiANCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJzIHsNCi0gIC8qKg0KLSAgICogR2V0cyB0aGlzIG9iamVjdCdzIGhhbmRsZXJzLiBNYXkgcmV0dXJuIG51bGwgaWYgdGhlcmUgYXJlIG5vIGhhbmRsZXJzLg0KLSAgICogDQotICAgKiBAcmV0dXJuIHRoZSBoYW5kbGVycw0KLSAgICovDQotICBIYW5kbGVyTWFuYWdlciBnZXRIYW5kbGVycygpOw0KIH0NCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNIaWdobGlnaHRIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzSGlnaGxpZ2h0SGFuZGxlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc1MDMxCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzSGlnaGxpZ2h0SGFuZGxlcnMuamF2YQpAQCAtMCwwICsxLDM1IEBACisvKg0KKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuDQorICogDQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90DQorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YNCisgKiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUDQorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlDQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXINCisgKiB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkOw0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KKw0KKy8qKg0KKyAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBpcyBhIHB1YmxpYyBzb3VyY2Ugb2YNCisgKiB7QGxpbmsgSGlnaGxpZ2h0RXZlbnR9IGV2ZW50cy4NCisgKiANCisgKiBAcGFyYW0gPFY+IHRoZSBoaWdobGlnaHRlZCB2YWx1ZSB0eXBlDQorICovDQorcHVibGljIGludGVyZmFjZSBIYXNIaWdobGlnaHRIYW5kbGVyczxWPiBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCisgIC8qKg0KKyAgICogQWRkcyBhIHtAbGluayBIaWdobGlnaHRFdmVudH0gaGFuZGxlci4NCisgICAqIA0KKyAgICogQHBhcmFtIGhhbmRsZXIgdGhlIGhhbmRsZXINCisgICAqIEByZXR1cm4gdGhlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGV2ZW50DQorICAgKi8NCisgIEhhbmRsZXJSZWdpc3RyYXRpb24gYWRkSGlnaGxpZ2h0SGFuZGxlcihIaWdobGlnaHRIYW5kbGVyPFY+IGhhbmRsZXIpOw0KK30NCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNPcGVuSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc09wZW5IYW5kbGVycy5qYXZhCmluZGV4IDY0N2YyNzAuLjY3MTM5YzEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc09wZW5IYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc09wZW5IYW5kbGVycy5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkOw0KIA0KIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOw0KIA0KIC8qKg0KICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBpcyBhIHB1YmxpYyBzb3VyY2Ugb2YNCkBAIC0yMyw3ICsyNCw3IEBACiAgKiANCiAgKiBAcGFyYW0gPFQ+IHRoZSB0eXBlIGJlaW5nIG9wZW5lZA0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzT3BlbkhhbmRsZXJzPFQ+IHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc09wZW5IYW5kbGVyczxUPiBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBPcGVuRXZlbnR9IGhhbmRsZXIuDQogICAgKiANCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNSZXNpemVIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzUmVzaXplSGFuZGxlcnMuamF2YQppbmRleCBhNWNmZjNmLi5lMzI3OTVlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNSZXNpemVIYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc1Jlc2l6ZUhhbmRsZXJzLmphdmEKQEAgLTE2LDEyICsxNiwxMyBAQAogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZDsKIAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsKIAogLyoqCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgaXMgYSBwdWJsaWMgc291cmNlIG9mCiAgKiB7QGxpbmsgUmVzaXplRXZlbnR9IGV2ZW50cy4KICAqLwotcHVibGljIGludGVyZmFjZSBIYXNSZXNpemVIYW5kbGVycyB7CitwdWJsaWMgaW50ZXJmYWNlIEhhc1Jlc2l6ZUhhbmRsZXJzIGV4dGVuZHMgSGFzSGFuZGxlcnMgewogICAvKioKICAgICogQWRkcyBhIHtAbGluayBSZXNpemVFdmVudH0gaGFuZGxlci4KICAgICogCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNTZWxlY3Rpb25IYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzU2VsZWN0aW9uSGFuZGxlcnMuamF2YQppbmRleCAzZDMxMGM2Li43NTk4ZTA1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNTZWxlY3Rpb25IYW5kbGVycy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc1NlbGVjdGlvbkhhbmRsZXJzLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGlzIGEgcHVibGljIHNvdXJjZSBvZg0KQEAgLTIzLDcgKzI0LDcgQEAKICAqIA0KICAqIEBwYXJhbSA8ST4gdGhlIHR5cGUgYmVpbmcgc2VsZWN0ZWQNCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc1NlbGVjdGlvbkhhbmRsZXJzPEk+IHsNCitwdWJsaWMgaW50ZXJmYWNlIEhhc1NlbGVjdGlvbkhhbmRsZXJzPEk+IGV4dGVuZHMgSGFzSGFuZGxlcnMgew0KICAgLyoqDQogICAgKiBBZGRzIGEge0BsaW5rIFNlbGVjdGlvbkV2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzU2hvd1JhbmdlSGFuZGxlcnMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc1Nob3dSYW5nZUhhbmRsZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlZGFjMwotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc1Nob3dSYW5nZUhhbmRsZXJzLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZDsNCisNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCisNCisvKioNCisgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgaXMgYSBwdWJsaWMgc291cmNlIG9mDQorICoge0BsaW5rIFNob3dSYW5nZUV2ZW50fSBldmVudHMuDQorICogDQorICogQHBhcmFtIDxWPiB0aGUgdHlwZSBvZiByYW5nZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgSGFzU2hvd1JhbmdlSGFuZGxlcnM8Vj4gZXh0ZW5kcyBIYXNIYW5kbGVycyB7DQorICAvKioNCisgICAqIEFkZHMgYSB7QGxpbmsgU2hvd1JhbmdlRXZlbnR9IGhhbmRsZXIuDQorICAgKiANCisgICAqIEBwYXJhbSBoYW5kbGVyIHRoZSBoYW5kbGVyDQorICAgKiBAcmV0dXJuIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSBldmVudA0KKyAgICovDQorICBIYW5kbGVyUmVnaXN0cmF0aW9uIGFkZFNob3dSYW5nZUhhbmRsZXIoU2hvd1JhbmdlSGFuZGxlcjxWPiBoYW5kbGVyKTsNCit9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzVmFsdWVDaGFuZ2VIYW5kbGVycy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGFzVmFsdWVDaGFuZ2VIYW5kbGVycy5qYXZhCmluZGV4IDJlYTFmMTIuLmU4OTMwOTIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hhc1ZhbHVlQ2hhbmdlSGFuZGxlcnMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IYXNWYWx1ZUNoYW5nZUhhbmRsZXJzLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQ7DQogDQogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyUmVnaXN0cmF0aW9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQogDQogLyoqDQogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGlzIGEgcHVibGljIHNvdXJjZSBvZg0KQEAgLTIzLDcgKzI0LDcgQEAKICAqIA0KICAqIEBwYXJhbSA8ST4gdGhlIHZhbHVlIGFib3V0IHRvIGJlIGNoYW5nZWQNCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc1ZhbHVlQ2hhbmdlSGFuZGxlcnM8ST4gew0KK3B1YmxpYyBpbnRlcmZhY2UgSGFzVmFsdWVDaGFuZ2VIYW5kbGVyczxJPiBleHRlbmRzIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KICAgICogQWRkcyBhIHtAbGluayBWYWx1ZUNoYW5nZUV2ZW50fSBoYW5kbGVyLg0KICAgICogDQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGlnaGxpZ2h0RXZlbnQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hpZ2hsaWdodEV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxYjUxNAotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hpZ2hsaWdodEV2ZW50LmphdmEKQEAgLTAsMCArMSw5NyBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZDsNCisNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkd3dEV2ZW50Ow0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlck1hbmFnZXI7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYXNIYW5kbGVyczsNCisNCisvKioNCisgKiBSZXByZXNlbnRzIGEgaGlnaGxpZ2h0IGV2ZW50Lg0KKyAqIA0KKyAqIEBwYXJhbSA8Vj4gdGhlIGhpZ2hsaWdodGVkIHZhbHVlIHR5cGUNCisgKi8NCitwdWJsaWMgY2xhc3MgSGlnaGxpZ2h0RXZlbnQ8Vj4gZXh0ZW5kcyBHd3RFdmVudDxIaWdobGlnaHRIYW5kbGVyPFY+PiB7DQorDQorICAvKioNCisgICAqIEhhbmRsZXIgdHlwZS4NCisgICAqLw0KKyAgcHJpdmF0ZSBzdGF0aWMgVHlwZTxIaWdobGlnaHRIYW5kbGVyPD8+PiBUWVBFOw0KKw0KKyAgLyoqDQorICAgKiBGaXJlcyBhIGhpZ2hsaWdodCBldmVudCBvbiBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVycyBpbiB0aGUgaGFuZGxlciBtYW5hZ2VyLg0KKyAgICogDQorICAgKiBAcGFyYW0gPFY+IHRoZSBoaWdobGlnaHRlZCB2YWx1ZSB0eXBlDQorICAgKiBAcGFyYW0gPFM+IFRoZSBldmVudCBzb3VyY2UNCisgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgaGFuZGxlcnMNCisgICAqIEBwYXJhbSBoaWdobGlnaHRlZCB0aGUgdmFsdWUgaGlnaGxpZ2h0ZWQNCisgICAqLw0KKyAgcHVibGljIHN0YXRpYyA8ViwgUyBleHRlbmRzIEhhc0hpZ2hsaWdodEhhbmRsZXJzPFY+ICYgSGFzSGFuZGxlcnM+IHZvaWQgZmlyZSgNCisgICAgICBTIHNvdXJjZSwgViBoaWdobGlnaHRlZCkgew0KKyAgICBpZiAoVFlQRSAhPSBudWxsKSB7DQorICAgICAgSGFuZGxlck1hbmFnZXIgaGFuZGxlcnMgPSBzb3VyY2UuZ2V0SGFuZGxlcnMoKTsNCisgICAgICBpZiAoaGFuZGxlcnMgIT0gbnVsbCkgew0KKyAgICAgICAgSGlnaGxpZ2h0RXZlbnQ8Vj4gZXZlbnQgPSBuZXcgSGlnaGxpZ2h0RXZlbnQ8Vj4oaGlnaGxpZ2h0ZWQpOw0KKyAgICAgICAgaGFuZGxlcnMuZmlyZUV2ZW50KGV2ZW50KTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0cyB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudC4NCisgICAqIA0KKyAgICogQHJldHVybiByZXR1cm5zIHRoZSBoYW5kbGVyIHR5cGUNCisgICAqLw0KKyAgcHVibGljIHN0YXRpYyBUeXBlPEhpZ2hsaWdodEhhbmRsZXI8Pz4+IGdldFR5cGUoKSB7DQorICAgIGlmIChUWVBFID09IG51bGwpIHsNCisgICAgICBUWVBFID0gbmV3IFR5cGU8SGlnaGxpZ2h0SGFuZGxlcjw/Pj4oKTsNCisgICAgfQ0KKyAgICByZXR1cm4gVFlQRTsNCisgIH0NCisNCisgIHByaXZhdGUgZmluYWwgViBoaWdobGlnaHRlZDsNCisNCisgIC8qKg0KKyAgICogQ3JlYXRlcyBhIG5ldyBoaWdobGlnaHQgZXZlbnQuDQorICAgKiANCisgICAqIEBwYXJhbSBoaWdobGlnaHRlZCB2YWx1ZSBoaWdobGlnaHRlZA0KKyAgICovDQorICBwcm90ZWN0ZWQgSGlnaGxpZ2h0RXZlbnQoViBoaWdobGlnaHRlZCkgew0KKyAgICB0aGlzLmhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0ZWQ7DQorICB9DQorDQorICAvKioNCisgICAqIEdldHMgdGhlIHZhbHVlIGhpZ2hsaWdodGVkLg0KKyAgICogDQorICAgKiBAcmV0dXJuIHZhbHVlIGhpZ2hsaWdodGVkDQorICAgKi8NCisgIHB1YmxpYyBWIGdldEhpZ2hsaWdodGVkKCkgew0KKyAgICByZXR1cm4gaGlnaGxpZ2h0ZWQ7DQorICB9DQorDQorICBAT3ZlcnJpZGUNCisgIHByb3RlY3RlZCB2b2lkIGRpc3BhdGNoKEhpZ2hsaWdodEhhbmRsZXI8Vj4gaGFuZGxlcikgew0KKyAgICBoYW5kbGVyLm9uSGlnaGxpZ2h0KHRoaXMpOw0KKyAgfQ0KKw0KKyAgLy8gQmVjYXVzZSBvZiB0eXBlIGVyYXN1cmUsIG91ciBzdGF0aWMgdHlwZSBpcw0KKyAgLy8gd2lsZCBjYXJkZWQsIHlldCB0aGUgInJlYWwiIHR5cGUgc2hvdWxkIHVzZSBvdXIgSSBwYXJhbS4NCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQ0KKyAgQE92ZXJyaWRlDQorICBwcm90ZWN0ZWQgZmluYWwgVHlwZTxIaWdobGlnaHRIYW5kbGVyPFY+PiBnZXRBc3NvY2lhdGVkVHlwZSgpIHsNCisgICAgcmV0dXJuIChUeXBlKSBUWVBFOw0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL0hpZ2hsaWdodEhhbmRsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEKY29weSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9IaWdobGlnaHRIYW5kbGVyLmphdmEKaW5kZXggOTA2MjU4Yi4uZWZmYzJjZSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvSGlnaGxpZ2h0SGFuZGxlci5qYXZhCkBAIC0xMywyMCArMTMsMjEgQEAKICAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQogICogdGhlIExpY2Vuc2UuDQogICovDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZDsNCiANCi1wYWNrYWdlIGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkV2ZW50SGFuZGxlcjsNCiANCiAvKioNCisgKiBIYW5kbGVyIGludGVyZmFjZSBmb3Ige0BsaW5rIEhpZ2hsaWdodEV2ZW50fSBldmVudHMuDQogICogDQotICogQ2hhcmFjdGVyaXN0aWMgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhhdCB0aGUgZ2l2ZW4gd2lkZ2V0IGZpcmVzIGV2ZW50cyB2aWEgYQ0KLSAqIHtAbGluayBIYW5kbGVyTWFuYWdlcn0uDQotICogDQorICogQHBhcmFtIDxWPiB0aGUgaGlnaGxpZ2h0ZWQgdmFsdWUgdHlwZQ0KICAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgSGFzSGFuZGxlck1hbmFnZXIgew0KK3B1YmxpYyBpbnRlcmZhY2UgSGlnaGxpZ2h0SGFuZGxlcjxWPiBleHRlbmRzIEV2ZW50SGFuZGxlciB7DQorDQogICAvKioNCi0gICAqIEdldHMgdGhpcyB3aWRnZXQncyBoYW5kbGVyIG1hbmFnZXIuDQorICAgKiBDYWxsZWQgd2hlbiB7QGxpbmsgSGlnaGxpZ2h0RXZlbnR9IGlzIGZpcmVkLg0KICAgICogDQotICAgKiBAcmV0dXJuIHRoZSBtYW5hZ2VyDQorICAgKiBAcGFyYW0gZXZlbnQgdGhlIHtAbGluayBIaWdobGlnaHRFdmVudH0gdGhhdCB3YXMgZmlyZWQNCiAgICAqLw0KLSAgSGFuZGxlck1hbmFnZXIgZ2V0SGFuZGxlck1hbmFnZXIoKTsNCisgIHZvaWQgb25IaWdobGlnaHQoSGlnaGxpZ2h0RXZlbnQ8Vj4gZXZlbnQpOw0KIH0NCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9PcGVuRXZlbnQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL09wZW5FdmVudC5qYXZhCmluZGV4IDM0MDI2ZjIuLmNhOGMxYTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL09wZW5FdmVudC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL09wZW5FdmVudC5qYXZhCkBAIC0zNSwxMiArMzUsMTAgQEAKICAgICogc3VjaCBoYW5kbGVycyBleGlzdCwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLg0KICAgICogDQogICAgKiBAcGFyYW0gPFQ+IHRoZSB0YXJnZXQgdHlwZQ0KLSAgICogQHBhcmFtIDxTPiBUaGUgZXZlbnQgc291cmNlDQogICAgKiBAcGFyYW0gc291cmNlIHRoZSBzb3VyY2Ugb2YgdGhlIGhhbmRsZXJzDQogICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQNCiAgICAqLw0KLSAgcHVibGljIHN0YXRpYyA8VCwgUyBleHRlbmRzIEhhc09wZW5IYW5kbGVyczxUPiAmIEhhc0hhbmRsZXJzPiB2b2lkIGZpcmUoDQotICAgICAgUyBzb3VyY2UsIFQgdGFyZ2V0KSB7DQorICBwdWJsaWMgc3RhdGljIDxUPiB2b2lkIGZpcmUoSGFzT3BlbkhhbmRsZXJzPFQ+IHNvdXJjZSwgVCB0YXJnZXQpIHsNCiAgICAgaWYgKFRZUEUgIT0gbnVsbCkgew0KICAgICAgIEhhbmRsZXJNYW5hZ2VyIGhhbmRsZXJzID0gc291cmNlLmdldEhhbmRsZXJzKCk7DQogICAgICAgaWYgKGhhbmRsZXJzICE9IG51bGwpIHsNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9SZXNpemVFdmVudC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvUmVzaXplRXZlbnQuamF2YQppbmRleCBmZjczMWU4Li4zNTFiODZjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9SZXNpemVFdmVudC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL1Jlc2l6ZUV2ZW50LmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5Hd3RFdmVudDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlck1hbmFnZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOwogCiAvKioKICAqIEZpcmVkIHdoZW4gdGhlIGV2ZW50IHNvdXJjZSBpcyByZXNpemVkLgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvU2VsZWN0aW9uRXZlbnQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL1NlbGVjdGlvbkV2ZW50LmphdmEKaW5kZXggNDBhODQyMy4uYzQzYWI1NiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvU2VsZWN0aW9uRXZlbnQuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9TZWxlY3Rpb25FdmVudC5qYXZhCkBAIC0zOSw4ICszOSw3IEBACiAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgaGFuZGxlcnMNCiAgICAqIEBwYXJhbSBzZWxlY3RlZEl0ZW0gdGhlIHNlbGVjdGVkIGl0ZW0NCiAgICAqLw0KLSAgcHVibGljIHN0YXRpYyA8SSwgUyBleHRlbmRzIEhhc1NlbGVjdGlvbkhhbmRsZXJzPEk+ICYgSGFzSGFuZGxlcnM+IHZvaWQgZmlyZSgNCi0gICAgICBTIHNvdXJjZSwgSSBzZWxlY3RlZEl0ZW0pIHsNCisgIHB1YmxpYyBzdGF0aWMgPEk+IHZvaWQgZmlyZShIYXNTZWxlY3Rpb25IYW5kbGVyczxJPiBzb3VyY2UsIEkgc2VsZWN0ZWRJdGVtKSB7DQogICAgIGlmIChUWVBFICE9IG51bGwpIHsNCiAgICAgICBIYW5kbGVyTWFuYWdlciBoYW5kbGVycyA9IHNvdXJjZS5nZXRIYW5kbGVycygpOw0KICAgICAgIGlmIChoYW5kbGVycyAhPSBudWxsKSB7DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvU2hvd1JhbmdlRXZlbnQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL1Nob3dSYW5nZUV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkM2M4OAotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL1Nob3dSYW5nZUV2ZW50LmphdmEKQEAgLTAsMCArMSwxMTIgQEAKKy8qDQorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4NCisgKiANCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QNCisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZg0KKyAqIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQNCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUNCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcg0KKyAqIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQ7DQorDQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5Hd3RFdmVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJNYW5hZ2VyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQorDQorLyoqDQorICogUmVwcmVzZW50cyBhIHNob3cgcmFuZ2UgZXZlbnQuIFRoaXMgbG9naWNhbCBldmVudCBzaG91bGQgYmUgdXNlZCB3aGVuIGENCisgKiB3aWRnZXQgZGlzcGxheXMgYSByYW5nZSBvZiB2YWx1ZXMgdG8gdGhlIHVzZXIuICBUaGlzIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgdW50aWwgYSB3aWRnZXQgaXMgZGlzcGxheWluZyB0DQorICogDQorICogQHBhcmFtIDxWPiB0aGUgdHlwZSBvZiByYW5nZQ0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTaG93UmFuZ2VFdmVudDxWPiBleHRlbmRzIEd3dEV2ZW50PFNob3dSYW5nZUhhbmRsZXI8Vj4+IHsNCisNCisgIC8qKg0KKyAgICogSGFuZGxlciB0eXBlLg0KKyAgICovDQorICBwcml2YXRlIHN0YXRpYyBUeXBlPFNob3dSYW5nZUhhbmRsZXI8Pz4+IFRZUEU7DQorDQorICAvKioNCisgICAqIEZpcmVzIGEgc2hvdyByYW5nZSBldmVudCBvbiBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVycyBpbiB0aGUgaGFuZGxlciBtYW5hZ2VyLg0KKyAgICogDQorICAgKiBAcGFyYW0gPFY+IHRoZSB0eXBlIG9mIHJhbmdlDQorICAgKiBAcGFyYW0gPFM+IHRoZSBldmVudCBzb3VyY2UNCisgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgaGFuZGxlcnMNCisgICAqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlDQorICAgKiBAcGFyYW0gZW5kIHRoZSBlbmQgb2YgdGhlIHJhbmdlDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgPFYsIFMgZXh0ZW5kcyBIYXNTaG93UmFuZ2VIYW5kbGVyczxWPiAmIEhhc0hhbmRsZXJzPiB2b2lkIGZpcmUoDQorICAgICAgUyBzb3VyY2UsIFYgc3RhcnQsIFYgZW5kKSB7DQorICAgIGlmIChUWVBFICE9IG51bGwpIHsNCisgICAgICBIYW5kbGVyTWFuYWdlciBoYW5kbGVycyA9IHNvdXJjZS5nZXRIYW5kbGVycygpOw0KKyAgICAgIGlmIChoYW5kbGVycyAhPSBudWxsKSB7DQorICAgICAgICBTaG93UmFuZ2VFdmVudDxWPiBldmVudCA9IG5ldyBTaG93UmFuZ2VFdmVudDxWPihzdGFydCwgZW5kKTsNCisgICAgICAgIGhhbmRsZXJzLmZpcmVFdmVudChldmVudCk7DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIEdldHMgdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXZlbnQuDQorICAgKiANCisgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgaGFuZGxlciB0eXBlDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgVHlwZTxTaG93UmFuZ2VIYW5kbGVyPD8+PiBnZXRUeXBlKCkgew0KKyAgICBpZiAoVFlQRSA9PSBudWxsKSB7DQorICAgICAgVFlQRSA9IG5ldyBUeXBlPFNob3dSYW5nZUhhbmRsZXI8Pz4+KCk7DQorICAgIH0NCisgICAgcmV0dXJuIFRZUEU7DQorICB9DQorDQorICBwcml2YXRlIGZpbmFsIFYgc3RhcnQ7DQorDQorICBwcml2YXRlIGZpbmFsIFYgZW5kOw0KKw0KKyAgLyoqDQorICAgKiBDcmVhdGVzIGEgbmV3IHNob3cgcmFuZ2UgZXZlbnQuDQorICAgKiANCisgICAqIEBwYXJhbSBzdGFydCBzdGFydCBvZiB0aGUgcmFuZ2UNCisgICAqIEBwYXJhbSBlbmQgZW5kIG9mIHRoZSByYW5nZQ0KKyAgICovDQorICBwcm90ZWN0ZWQgU2hvd1JhbmdlRXZlbnQoViBzdGFydCwgViBlbmQpIHsNCisgICAgdGhpcy5zdGFydCA9IHN0YXJ0Ow0KKyAgICB0aGlzLmVuZCA9IGVuZDsNCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0cyB0aGUgZW5kIG9mIHRoZSByYW5nZS4NCisgICAqIA0KKyAgICogQHJldHVybiBlbmQgb2YgdGhlIHJhbmdlDQorICAgKi8NCisgIHB1YmxpYyBWIGdldEVuZCgpIHsNCisgICAgcmV0dXJuIGVuZDsNCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0cyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlLg0KKyAgICogDQorICAgKiBAcmV0dXJuIHN0YXJ0IG9mIHRoZSByYW5nZQ0KKyAgICovDQorICBwdWJsaWMgViBnZXRTdGFydCgpIHsNCisgICAgcmV0dXJuIHN0YXJ0Ow0KKyAgfQ0KKw0KKyAgQE92ZXJyaWRlDQorICBwcm90ZWN0ZWQgdm9pZCBkaXNwYXRjaChTaG93UmFuZ2VIYW5kbGVyPFY+IGhhbmRsZXIpIHsNCisgICAgaGFuZGxlci5vblNob3dSYW5nZSh0aGlzKTsNCisgIH0NCisNCisgIC8vIEJlY2F1c2Ugb2YgdHlwZSBlcmFzdXJlLCBvdXIgc3RhdGljIHR5cGUgaXMNCisgIC8vIHdpbGQgY2FyZGVkLCB5ZXQgdGhlICJyZWFsIiB0eXBlIHNob3VsZCB1c2Ugb3VyIEkgcGFyYW0uDQorICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisgIEBPdmVycmlkZQ0KKyAgcHJvdGVjdGVkIGZpbmFsIFR5cGU8U2hvd1JhbmdlSGFuZGxlcjxWPj4gZ2V0QXNzb2NpYXRlZFR5cGUoKSB7DQorICAgIHJldHVybiAoVHlwZSkgVFlQRTsNCisgIH0NCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9TaG93UmFuZ2VIYW5kbGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCA2MCUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L3NoYXJlZC9IYXNIYW5kbGVyTWFuYWdlci5qYXZhCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvU2hvd1JhbmdlSGFuZGxlci5qYXZhCmluZGV4IDkwNjI1OGIuLmJkZTQ2OGYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L3NoYXJlZC9IYXNIYW5kbGVyTWFuYWdlci5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL1Nob3dSYW5nZUhhbmRsZXIuamF2YQpAQCAtMTMsMjAgKzEzLDIxIEBACiAgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcg0KICAqIHRoZSBMaWNlbnNlLg0KICAqLw0KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQ7DQogDQotcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5FdmVudEhhbmRsZXI7DQogDQogLyoqDQorICogSGFuZGxlciBpbnRlcmZhY2UgZm9yIHtAbGluayBTaG93UmFuZ2VFdmVudH0gZXZlbnRzLg0KICAqIA0KLSAqIENoYXJhY3RlcmlzdGljIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGdpdmVuIHdpZGdldCBmaXJlcyBldmVudHMgdmlhIGENCi0gKiB7QGxpbmsgSGFuZGxlck1hbmFnZXJ9Lg0KLSAqIA0KKyAqIEBwYXJhbSA8Vj4gdGhlIHR5cGUgb2YgcmFuZ2UNCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJNYW5hZ2VyIHsNCitwdWJsaWMgaW50ZXJmYWNlIFNob3dSYW5nZUhhbmRsZXI8Vj4gZXh0ZW5kcyBFdmVudEhhbmRsZXIgew0KKw0KICAgLyoqDQotICAgKiBHZXRzIHRoaXMgd2lkZ2V0J3MgaGFuZGxlciBtYW5hZ2VyLg0KKyAgICogQ2FsbGVkIHdoZW4ge0BsaW5rIFNob3dSYW5nZUV2ZW50fSBpcyBmaXJlZC4NCiAgICAqIA0KLSAgICogQHJldHVybiB0aGUgbWFuYWdlcg0KKyAgICogQHBhcmFtIGV2ZW50IHRoZSB7QGxpbmsgU2hvd1JhbmdlRXZlbnR9IHRoYXQgd2FzIGZpcmVkDQogICAgKi8NCi0gIEhhbmRsZXJNYW5hZ2VyIGdldEhhbmRsZXJNYW5hZ2VyKCk7DQorICB2b2lkIG9uU2hvd1JhbmdlKFNob3dSYW5nZUV2ZW50PFY+IGV2ZW50KTsNCiB9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvVmFsdWVDaGFuZ2VFdmVudC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvVmFsdWVDaGFuZ2VFdmVudC5qYXZhCmluZGV4IDUyMzc2ZTguLjVhNzY5ZGMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L2xvZ2ljYWwvc2hhcmVkL1ZhbHVlQ2hhbmdlRXZlbnQuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9WYWx1ZUNoYW5nZUV2ZW50LmphdmEKQEAgLTM1LDEyICszNSwxMCBAQAogICAgKiBtYW5hZ2VyLklmIG5vIHN1Y2ggaGFuZGxlcnMgZXhpc3QsIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4NCiAgICAqIA0KICAgICogQHBhcmFtIDxJPiB0aGUgb2xkIHZhbHVlIHR5cGUNCi0gICAqIEBwYXJhbSA8Uz4gVGhlIGV2ZW50IHNvdXJjZQ0KICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIG9mIHRoZSBoYW5kbGVycw0KICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQ0KICAgICovDQotICBwdWJsaWMgc3RhdGljIDxJLCBTIGV4dGVuZHMgSGFzVmFsdWVDaGFuZ2VIYW5kbGVyczxJPiAmIEhhc0hhbmRsZXJzPiB2b2lkIGZpcmUoDQotICAgICAgUyBzb3VyY2UsIEkgdmFsdWUpIHsNCisgIHB1YmxpYyBzdGF0aWMgPEk+IHZvaWQgZmlyZShIYXNWYWx1ZUNoYW5nZUhhbmRsZXJzPEk+IHNvdXJjZSwgSSB2YWx1ZSkgew0KICAgICBpZiAoVFlQRSAhPSBudWxsKSB7DQogICAgICAgSGFuZGxlck1hbmFnZXIgaGFuZGxlcnMgPSBzb3VyY2UuZ2V0SGFuZGxlcnMoKTsNCiAgICAgICBpZiAoaGFuZGxlcnMgIT0gbnVsbCAmJiBoYW5kbGVycy5pc0V2ZW50SGFuZGxlZChUWVBFKSkgew0KQEAgLTYxLDEzICs1OSwxMSBAQAogICAgKiBAcGFyYW0gb2xkVmFsdWUgdGhlIG9sZFZhbHVlLCBtYXkgYmUgbnVsbA0KICAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBuZXdWYWx1ZSwgbWF5IGJlIG51bGwNCiAgICAqLw0KLSAgcHVibGljIHN0YXRpYyA8SSwgUyBleHRlbmRzIEhhc1ZhbHVlQ2hhbmdlSGFuZGxlcnM8ST4gJiBIYXNIYW5kbGVycz4gdm9pZCBmaXJlSWZOb3RFcXVhbCgNCi0gICAgICBTIHNvdXJjZSwgSSBvbGRWYWx1ZSwgSSBuZXdWYWx1ZSkgew0KLSAgICBpZiAoVFlQRSAhPSBudWxsKSB7DQotICAgICAgaWYgKG9sZFZhbHVlICE9IG5ld1ZhbHVlDQotICAgICAgICAgICYmIChvbGRWYWx1ZSA9PSBudWxsIHx8ICFvbGRWYWx1ZS5lcXVhbHMobmV3VmFsdWUpKSkgew0KLSAgICAgICAgZmlyZShzb3VyY2UsIG5ld1ZhbHVlKTsNCi0gICAgICB9DQorICBwdWJsaWMgc3RhdGljIDxJPiB2b2lkIGZpcmVJZk5vdEVxdWFsKEhhc1ZhbHVlQ2hhbmdlSGFuZGxlcnM8ST4gc291cmNlLA0KKyAgICAgIEkgb2xkVmFsdWUsIEkgbmV3VmFsdWUpIHsNCisgICAgaWYgKHNob3VsZEZpcmUoc291cmNlLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7DQorICAgICAgVmFsdWVDaGFuZ2VFdmVudDxJPiBldmVudCA9IG5ldyBWYWx1ZUNoYW5nZUV2ZW50PEk+KG5ld1ZhbHVlKTsNCisgICAgICBzb3VyY2UuZ2V0SGFuZGxlcnMoKS5maXJlRXZlbnQoZXZlbnQpOw0KICAgICB9DQogICB9DQogDQpAQCAtODMsMTAgKzc5LDI3IEBACiAgICAgcmV0dXJuIFRZUEU7DQogICB9DQogDQorICAvKioNCisgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBhbGxvdyBzdWJ0eXBlcyB0byBrbm93IHdoZW4gdGhleSBzaG91bGQgZmlyZSBhIHZhbHVlDQorICAgKiBjaGFuZ2UgZXZlbnQgaW4gYSBudWxsLXNhZmUgbWFubmVyLg0KKyAgICogDQorICAgKiBAcGFyYW0gPEk+IHZhbHVlIHR5cGUNCisgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZQ0KKyAgICogQHBhcmFtIG9sZFZhbHVlIHRoZSBvbGQgdmFsdWUNCisgICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlDQorICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBmaXJlZA0KKyAgICovDQorICBwcm90ZWN0ZWQgc3RhdGljIDxJPiBib29sZWFuIHNob3VsZEZpcmUoSGFzVmFsdWVDaGFuZ2VIYW5kbGVyczxJPiBzb3VyY2UsDQorICAgICAgSSBvbGRWYWx1ZSwgSSBuZXdWYWx1ZSkgew0KKyAgICByZXR1cm4gVFlQRSAhPSBudWxsICYmIHNvdXJjZS5nZXRIYW5kbGVycygpICE9IG51bGwgJiYgb2xkVmFsdWUgIT0gbmV3VmFsdWUNCisgICAgICAgICYmIChvbGRWYWx1ZSA9PSBudWxsIHx8ICFvbGRWYWx1ZS5lcXVhbHMobmV3VmFsdWUpKTsNCisgIH0NCisNCiAgIHByaXZhdGUgZmluYWwgSSB2YWx1ZTsNCiANCiAgIC8qKg0KICAgICogQ3JlYXRlcyBhIHZhbHVlIGNoYW5nZSBldmVudC4NCisgICAqIA0KICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQ0KICAgICovDQogICBwcm90ZWN0ZWQgVmFsdWVDaGFuZ2VFdmVudChJIHZhbHVlKSB7DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlcnMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YQpyZW5hbWUgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJzLmphdmEKaW5kZXggOTA2MjU4Yi4uYjU3YTQwZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJNYW5hZ2VyLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvZXZlbnQvc2hhcmVkL0hhc0hhbmRsZXJzLmphdmEKQEAgLTE2LDE3ICsxNiwxNyBAQAogDQogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQ7DQogDQorDQogLyoqDQotICogDQotICogQ2hhcmFjdGVyaXN0aWMgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhhdCB0aGUgZ2l2ZW4gd2lkZ2V0IGZpcmVzIGV2ZW50cyB2aWEgYQ0KLSAqIHtAbGluayBIYW5kbGVyTWFuYWdlcn0uDQotICogDQorICogQW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBoYXMgYSBjb2xsZWN0aW9uIG9mIGhhbmRsZXJzIHN0b3JlZA0KKyAqIGluIGEge0BsaW5rIEhhbmRsZXJNYW5hZ2VyfS4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJNYW5hZ2VyIHsNCisNCitwdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJzIHsNCiAgIC8qKg0KLSAgICogR2V0cyB0aGlzIHdpZGdldCdzIGhhbmRsZXIgbWFuYWdlci4NCisgICAqIEdldHMgdGhpcyBvYmplY3QncyBoYW5kbGVycy4gTWF5IHJldHVybiBudWxsIGlmIHRoZXJlIGFyZSBubyBoYW5kbGVycy4NCiAgICAqIA0KLSAgICogQHJldHVybiB0aGUgbWFuYWdlcg0KKyAgICogQHJldHVybiB0aGUgaGFuZGxlcnMNCiAgICAqLw0KLSAgSGFuZGxlck1hbmFnZXIgZ2V0SGFuZGxlck1hbmFnZXIoKTsNCisgIEhhbmRsZXJNYW5hZ2VyIGdldEhhbmRsZXJzKCk7DQogfQ0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWEucHJvcGVydGllcwppbmRleCA5ODZlNDlhLi40YzQ5YjcyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FhLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hYS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IERKRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hYV9ESi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hYV9ESi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmZiZmZhLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWFfREoucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gREpGCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FhX0VSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FhX0VSLnByb3BlcnRpZXMKaW5kZXggYzU3Mjk4ZC4uZWQxNDNhOSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hYV9FUi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWFfRVIucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVJOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FhX0VSX1NBQUhPLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FhX0VSX1NBQUhPLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NzI5OGQuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hYV9FUl9TQUFITy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBFUk4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWFfRVQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWFfRVQucHJvcGVydGllcwppbmRleCA4YWMwNGRlLi40YmUxNDQzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FhX0VULnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hYV9FVC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBFVEIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWYucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWYucHJvcGVydGllcwppbmRleCAyYzk1ZTkwLi4xOGE3ODE3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FmLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hZi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FmX05BLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FmX05BLnByb3BlcnRpZXMKaW5kZXggMmM5NWU5MC4uYTE3NmE2NSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hZl9OQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWZfTkEucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFpBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hZl9aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hZl9aQS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDQwNTk2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWZfWkEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hay5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hay5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLjg5N2VlMmQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWsucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FrLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBHSEMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWtfR0gucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYWtfR0gucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwZGQ1My4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FrX0dILnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBHSEMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYW0ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYW0ucHJvcGVydGllcwppbmRleCBiNGI3ZDIzLi4wNzY5YTQxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FtLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hbS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FtX0VULnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FtX0VULnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYzA0ZGUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hbV9FVC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBFVEIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXIucHJvcGVydGllcwppbmRleCBjMDI0NTA3Li44OTg2ZDJmMjcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXIucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyLnByb3BlcnRpZXMKQEAgLTcsMTEgKzcsMTEgQEAKIGV4cG9uZW50aWFsU3ltYm9sID0gXHUwNjI3XHUwNjMzCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IFx1MDY0NFx1MDY0YVx1MDYzMyBcdTA2MzFcdTA2NDJcdTA2NDUKK25vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NEFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1CiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyM7IywjIzAuIyMjLQotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMDtcdTAwQTQgIywjIzAuMDAtCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDtcdTAwQTRcdTAwQTAjLCMjMC4wMC0KIGRlZkN1cnJlbmN5Q29kZSA9IEFFRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9BRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9BRS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDI0NTA3Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfQUUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSBcdTA2NkIKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwNjZDCi1wZXJjZW50ID0gXHUwNjZBCi16ZXJvRGlnaXQgPSBcdTA2NjAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA2MjdcdTA2MzMKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRhXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQotbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMDtcdTAwQTQgIywjIzAuMDAtCi1kZWZDdXJyZW5jeUNvZGUgPSBBRUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfQkgucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfQkgucHJvcGVydGllcwppbmRleCA0MzNiYTMxLi44OGVjZjI4IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0JILnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9CSC5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBCSEQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfRFoucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfRFoucHJvcGVydGllcwppbmRleCBlNGY0Y2JhLi5mN2IwNDBiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0RaLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9EWi5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBEWkQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfRUcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfRUcucHJvcGVydGllcwppbmRleCAxMWYxZDJhLi45MmRjYTVhIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0VHLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9FRy5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBFR1AKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfSVEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfSVEucHJvcGVydGllcwppbmRleCAzZTdmYWY2Li5lMTVmZDlhIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0lRLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9JUS5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBJUUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfSk8ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfSk8ucHJvcGVydGllcwppbmRleCA2NzlhNzBiLi4wYWExN2Y2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0pPLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9KTy5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBKT0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfS1cucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfS1cucHJvcGVydGllcwppbmRleCBmMzE5MGUxLi4wYTU1ZDZjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0tXLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9LVy5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBLV0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfTEIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfTEIucHJvcGVydGllcwppbmRleCBiYzdiN2E3Li5jZTZiZjkyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0xCLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9MQi5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSBcdTA2NjAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA2MjdcdTA2MzMKK2V4cG9uZW50aWFsU3ltYm9sID0gRQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBMQlAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfTFkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfTFkucHJvcGVydGllcwppbmRleCAxOWQxMmYwLi5kYmZkMTI1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX0xZLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9MWS5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBMWUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfTUEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfTUEucHJvcGVydGllcwppbmRleCAyZjE2OTg1Li4zNDZhYWJiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX01BLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9NQS5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBNQUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfT00ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfT00ucHJvcGVydGllcwppbmRleCAzMGMwOTNjLi4wZDAxMmVjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX09NLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9PTS5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0ICMsIyMwLjAwLQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwIywjIzAuMDAtCiBkZWZDdXJyZW5jeUNvZGUgPSBPTVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfUUEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfUUEucHJvcGVydGllcwppbmRleCBlNjRmOTQ3Li5mZWJkNTRkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1FBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9RQS5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IFx1MDYyN1x1MDYzMwogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NGFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1Citub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRBXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIzAuIyMjOyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gUUFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1NBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1NBLnByb3BlcnRpZXMKaW5kZXggYjlmMjE2Ny4uODcxODkwOCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9TQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfU0EucHJvcGVydGllcwpAQCAtNywxMSArNywxMSBAQAogZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA2MjdcdTA2MzMKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRhXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQorbm90QU51bWJlciA9IFx1MDY0NFx1MDY0QVx1MDYzMyBcdTA2MzFcdTA2NDJcdTA2NDUKIG1vbmV0YXJ5U2VwYXJhdG9yID0gXHUwNjZCCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwNjZDCiBkZWNpbWFsUGF0dGVybiA9ICMwLiMjIzsjMC4jIyMtCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFNBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9TRC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9TRC5wcm9wZXJ0aWVzCmluZGV4IGQ1ODM3ZGEuLjk1YzQ1YTkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfU0QucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1NELnByb3BlcnRpZXMKQEAgLTcsMTEgKzcsMTEgQEAKIGV4cG9uZW50aWFsU3ltYm9sID0gXHUwNjI3XHUwNjMzCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IFx1MDY0NFx1MDY0YVx1MDYzMyBcdTA2MzFcdTA2NDJcdTA2NDUKK25vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NEFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1CiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyM7IywjIzAuIyMjLQotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMDtcdTAwQTQgIywjIzAuMDAtCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDtcdTAwQTRcdTAwQTAjLCMjMC4wMC0KIGRlZkN1cnJlbmN5Q29kZSA9IFNERApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9TWS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9TWS5wcm9wZXJ0aWVzCmluZGV4IDA1MzEwYjIuLjgzOThiYTggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfU1kucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1NZLnByb3BlcnRpZXMKQEAgLTcsMTEgKzcsMTEgQEAKIGV4cG9uZW50aWFsU3ltYm9sID0gXHUwNjI3XHUwNjMzCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IFx1MDY0NFx1MDY0YVx1MDYzMyBcdTA2MzFcdTA2NDJcdTA2NDUKK25vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NEFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1CiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjMC4jIyM7IzAuIyMjLQotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBTWVAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfVE4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfVE4ucHJvcGVydGllcwppbmRleCAwMWIyYWU0Li4xYzA3Nzg3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1ROLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9UTi5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gXHUwNjI3XHUwNjMzCitleHBvbmVudGlhbFN5bWJvbCA9IEUKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gXHUwNjQ0XHUwNjRhXHUwNjMzIFx1MDYzMVx1MDY0Mlx1MDY0NQorbm90QU51bWJlciA9IFx1MDY0NFx1MDY0QVx1MDYzMyBcdTA2MzFcdTA2NDJcdTA2NDUKIG1vbmV0YXJ5U2VwYXJhdG9yID0gXHUwNjZCCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwNjZDCiBkZWNpbWFsUGF0dGVybiA9ICMwLiMjIzsjMC4jIyMtCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFRORApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9ZRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcl9ZRS5wcm9wZXJ0aWVzCmluZGV4IDA2OTAwNjUuLmNmZDMyMjIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXJfWUUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FyX1lFLnByb3BlcnRpZXMKQEAgLTcsMTEgKzcsMTEgQEAKIGV4cG9uZW50aWFsU3ltYm9sID0gXHUwNjI3XHUwNjMzCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IFx1MDY0NFx1MDY0YVx1MDYzMyBcdTA2MzFcdTA2NDJcdTA2NDUKK25vdEFOdW1iZXIgPSBcdTA2NDRcdTA2NEFcdTA2MzMgXHUwNjMxXHUwNjQyXHUwNjQ1CiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjMC4jIyM7IzAuIyMjLQotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBZRVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXMucHJvcGVydGllcwppbmRleCAwOTYwYjg0Li4zNzg3ODJiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hcy5wcm9wZXJ0aWVzCkBAIC0xMCw4ICsxMCw4IEBACiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBCRFQKK2RlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXNfSU4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXNfSU4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1NjI4Yi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2FzX0lOLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXoucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXoucHJvcGVydGllcwppbmRleCA2OTRjNDllLi5iM2Y0OWJjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2F6LnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hei5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNSBAQAogZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCitncm91cGluZ1NlcGFyYXRvciA9IC4KIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTksOSArOSw5IEBACiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCittb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEFaTQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IEFaTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9BWi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9BWi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTRjNDllLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXpfQVoucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBBWk0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXpfQ3lybC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9DeXJsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjFmYTYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9DeXJsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2F6X0N5cmxfQVoucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXpfQ3lybF9BWi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTRjNDllLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXpfQ3lybF9BWi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEFaTQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9MYXRuLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2F6X0xhdG4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUyMWZhNi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2F6X0xhdG4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYXpfTGF0bl9BWi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9MYXRuX0FaLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGM0OWUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19hel9MYXRuX0FaLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gQVpNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JlLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JlLnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uOWFkM2Y5ZiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gQllSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JnLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JnLnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uYWE0YjM4OCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmcucHJvcGVydGllcwpAQCAtNywxMSArNywxMSBAQAogZXhwb25lbnRpYWxTeW1ib2wgPSBFCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgorbm90QU51bWJlciA9IFx1MDQxRC9cdTA0MjcKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjMCUKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBCR04KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmdfQkcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmdfQkcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1ODEwNS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JnX0JHLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gQkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JuLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JuLnByb3BlcnRpZXMKaW5kZXggMDk2MGI4NC4uYWYzM2RmNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ibi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYm4ucHJvcGVydGllcwpAQCAtMSw3ICsxLDcgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAuCiBncm91cGluZ1NlcGFyYXRvciA9ICwKIHBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCit6ZXJvRGlnaXQgPSBcdTA5RTYKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQogZXhwb25lbnRpYWxTeW1ib2wgPSBFCkBAIC0xMCw4ICsxMCw4IEBACiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIworc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjLCMjMC4wMFx1MDBBNDsoIywjIywjIzAuMDBcdTAwQTQpCiBkZWZDdXJyZW5jeUNvZGUgPSBCRFQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYm5fSU4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYm5fSU4ucHJvcGVydGllcwppbmRleCBhNzU2MjhiLi5jNzY3ODRiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JuX0lOLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ibl9JTi5wcm9wZXJ0aWVzCkBAIC0xLDcgKzEsNyBAQAogZGVjaW1hbFNlcGFyYXRvciA9IC4KIGdyb3VwaW5nU2VwYXJhdG9yID0gLAogcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKK3plcm9EaWdpdCA9IFx1MDlFNgogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCiBleHBvbmVudGlhbFN5bWJvbCA9IEUKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjLCMjMC4wMFx1MDBBNDsoIywjIywjIzAuMDBcdTAwQTQpCiBkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYnMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYnMucHJvcGVydGllcwppbmRleCA2ODhhNzUxLi5hMmI3OTFmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19icy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSFJLCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gQkFNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JzX0JBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JzX0JBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZGYwYWIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ic19CQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gQkFNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2J5bi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ieW4ucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li5lZDE0M2E5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2J5bi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYnluLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBFUk4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYnluX0VSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2J5bl9FUi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTcyOThkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYnluX0VSLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEVSTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jYS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jYS5wcm9wZXJ0aWVzCmluZGV4IGNjMzBmNmUuLjRkNmQ5MDQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY2EucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NhLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NhX0VTLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NhX0VTLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTA5YjUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jYV9FUy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NjaC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jY2gucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li5hOTQ4NzIxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NjaC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY2NoLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBOR04KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY2NoX05HLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NjaF9ORy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGIyMWYzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY2NoX05HLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBOR04KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY2hhcmFjdGVycy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jaGFyYWN0ZXJzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWMxNzUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jaGFyYWN0ZXJzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY29wLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY29wLnByb3BlcnRpZXMKaW5kZXggZjFkZWE1ZC4uMjI5NjEyMyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY29wLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBaQVIKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBFR1AKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3MucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3MucHJvcGVydGllcwppbmRleCAxZTIxZmE2Li41ZGFjYTI2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jcy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBDWksKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3NfQ1oucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3NfQ1oucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0YzQyYy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2NzX0NaLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gQ1pLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2N5LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2N5LnByb3BlcnRpZXMKaW5kZXggYmI2NDZhMy4uMzkzNDFjYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19jeS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3kucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitkZWZDdXJyZW5jeUNvZGUgPSBHQlAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3lfR0IucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfY3lfR0IucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiYmIxOC4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2N5X0dCLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEdCUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kYS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kYS5wcm9wZXJ0aWVzCmluZGV4IDA4NmRjMTkuLjI1NWM5MTkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RhLnByb3BlcnRpZXMKQEAgLTMsNyArMyw3IEBACiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSBcdTIyMTIKK21pbnVzU2lnbiA9IC0KIGV4cG9uZW50aWFsU3ltYm9sID0gRQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAgJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0CitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBES0sKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGFfREsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGFfREsucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZhZWY3My4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RhX0RLLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSBcdTIyMTIKLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAgJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwO1x1MDBBNCAtIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IERLSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZS5wcm9wZXJ0aWVzCmluZGV4IDY0Y2RmM2IuLjY5NGJiNTEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAgJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGVfQVQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGVfQVQucHJvcGVydGllcwppbmRleCA2NGNkZjNiLi40MjMzNDNkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0FULnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9BVC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwICUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0JFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0JFLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNTY3MWIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9CRS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9DSC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9DSC5wcm9wZXJ0aWVzCmluZGV4IGU1NDEzNDUuLjNiN2MzOWMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGVfQ0gucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0NILnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICcKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAgJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwO1x1MDBBNC0jLCMjMC4wMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDtcdTAwQTQtIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IENIRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9ERS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9ERS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTU2NzFiLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGVfREUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IC4KLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAgJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGVfTEkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZGVfTEkucHJvcGVydGllcwppbmRleCAxNTZlMGVjLi4wYmMzZWU1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0xJLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9MSS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAnCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwICUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQ0hGCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0xVLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2RlX0xVLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNTY3MWIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kZV9MVS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kdi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kdi5wcm9wZXJ0aWVzCmluZGV4IGE2Y2E1M2QuLjVkNDAyMDYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZHYucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2R2LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBNVlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZHZfTVYucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZHZfTVYucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY1ZTY2MS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2R2X01WLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gXHUwNjYwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE1WUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kei5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kei5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLmVlZmZkMjkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZHoucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2R6LnByb3BlcnRpZXMKQEAgLTEsMTcgKzEsMTcgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAuCiBncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCitwZXJjZW50ID0gXHUwRjU2XHUwRjYyXHUwRjkyXHUwRjBCXHUwRjQ2XHUwRjcxCit6ZXJvRGlnaXQgPSBcdTBGMjAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQogZXhwb25lbnRpYWxTeW1ib2wgPSBFCiBwZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgoraW5maW5pdHkgPSBcdTBGNDJcdTBGQjJcdTBGNDRcdTBGNjZcdTBGMEJcdTBGNThcdTBGN0FcdTBGNTEKK25vdEFOdW1iZXIgPSBcdTBGNjhcdTBGNDRcdTBGMEJcdTBGNThcdTBGNTEKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UrMDAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gQlROCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2R6X0JULnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2R6X0JULnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYmU5YTIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19kel9CVC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9IFx1MEY1Nlx1MEY2Mlx1MEY5Mlx1MEYwQlx1MEY0Nlx1MEY3MQotemVyb0RpZ2l0ID0gXHUwRjIwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTBGNDJcdTBGQjJcdTBGNDRcdTBGNjZcdTBGMEJcdTBGNThcdTBGN0FcdTBGNTEKLW5vdEFOdW1iZXIgPSBcdTBGNjhcdTBGNDRcdTBGMEJcdTBGNThcdTBGNTEKLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lZS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lZS5wcm9wZXJ0aWVzCmluZGV4IDg0MGRkNTMuLjg5N2VlMmQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VlLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gR0hDCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VlX0dILnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VlX0dILnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MGRkNTMuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lZV9HSC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gR0hDCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VlX1RHLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VlX1RHLnByb3BlcnRpZXMKaW5kZXggNWQ4NWIyMi4uMzczMWI1NiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lZV9URy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWVfVEcucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBYT0YKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWwucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWwucHJvcGVydGllcwppbmRleCAxOWJjZDk4Li45YjczZjExIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQ7LSMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBDWVAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWxfQ1kucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWxfQ1kucHJvcGVydGllcwppbmRleCBhNGQ3MDRhLi40Y2JlMjQ4IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsX0NZLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbF9DWS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBDWVAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWxfR1IucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWxfR1IucHJvcGVydGllcwppbmRleCBmOTE3MmFhLi5kMTg0MGZlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsX0dSLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbF9HUi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEE0Oy1cdTAwQTQjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQ7LSMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW4ucHJvcGVydGllcwppbmRleCBiYjY0NmEzLi5kMDViMmZjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCiBkZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQVMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQVMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzNmVjNi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0FTLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0FVLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0FVLnByb3BlcnRpZXMKaW5kZXggNDNjODU4ZS4uZDRhODc5YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9BVS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQVUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQVVECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0JFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0JFLnByb3BlcnRpZXMKaW5kZXggOGFhMDliNS4uNGQ2ZDkwNCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9CRS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQkUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQlcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQlcucHJvcGVydGllcwppbmRleCBjNWFjMzg5Li45ODU1MTkxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0JXLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9CVy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBCV1AKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQloucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQloucHJvcGVydGllcwppbmRleCBjYzNjZDBkLi42ZjQwMjkyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0JaLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9CWi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBCWkQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQ0EucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fQ0EucHJvcGVydGllcwppbmRleCAzNzY4ZDIwLi43OTAwYjE5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0NBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9DQS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKIGRlZkN1cnJlbmN5Q29kZSA9IENBRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9HQi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9HQi5wcm9wZXJ0aWVzCmluZGV4IGFjYmJiMTguLjM5MzQxY2EgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fR0IucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0dCLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEdCUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9HVS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9HVS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTM2ZWM2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fR1UucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fSEsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fSEsucHJvcGVydGllcwppbmRleCA2ZjcxYjMyLi5jODYyZWFiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0hLLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9ISy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKIGRlZkN1cnJlbmN5Q29kZSA9IEhLRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9JRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9JRS5wcm9wZXJ0aWVzCmluZGV4IGJjYTQ1ODguLjdjNWIwNjIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fSUUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0lFLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9JTi5wcm9wZXJ0aWVzCmluZGV4IGE3NTYyOGIuLjM3ODc4MmIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fSU4ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0lOLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0pNLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX0pNLnByb3BlcnRpZXMKaW5kZXggM2UzN2JiNS4uNGZlZGM4YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9KTS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fSk0ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gSk1ECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX01ILnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX01ILnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzZlYzYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9NSC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9NUC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9NUC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTM2ZWM2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTVAucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTVQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTVQucHJvcGVydGllcwppbmRleCBjMjc1OTI2Li43NjVkNWQxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX01ULnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9NVC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBNVEwKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTkEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTkEucHJvcGVydGllcwppbmRleCBkZTBlZWU4Li42YzZkNDRhIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX05BLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9OQS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBaQVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTloucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fTloucHJvcGVydGllcwppbmRleCA0MzVkY2M5Li5jYmM4ZDM2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX05aLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9OWi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBOWkQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fUEgucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fUEgucHJvcGVydGllcwppbmRleCAxOTRmODYwLi4xNGFkM2RmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1BILnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9QSC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKIGRlZkN1cnJlbmN5Q29kZSA9IFBIUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9QSy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9QSy5wcm9wZXJ0aWVzCmluZGV4IDhhZjkyZjQuLjAxOTBhMGMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fUEsucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1BLLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gUEtSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1NHLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1NHLnByb3BlcnRpZXMKaW5kZXggNGM3OTIzOS4uOGZjYjE4NCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9TRy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fU0cucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gU0dECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1RULnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1RULnByb3BlcnRpZXMKaW5kZXggZjgzMWZlNi4uOWIyODE3NiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9UVC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fVFQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gVFRECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1VNLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1VNLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzZlYzYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9VTS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9VUy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9VUy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTM2ZWM2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fVVMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fVVNfUE9TSVgucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fVVNfUE9TSVgucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3NDYzYi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1VTX1BPU0lYLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSAwLzAwCi1pbmZpbml0eSA9IElORgotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjMC4jIyMjIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4wMDAwMDBFKzAwMAotcGVyY2VudFBhdHRlcm4gPSAjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1ZJLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1ZJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzZlYzYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9WSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9aQS5wcm9wZXJ0aWVzCmluZGV4IGRlMGVlZTguLjE4YTc4MTcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fWkEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1pBLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitkZWNpbWFsU2VwYXJhdG9yID0gLAorZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCittb25ldGFyeVNlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFpBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9aVy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lbl9aVy5wcm9wZXJ0aWVzCmluZGV4IGQ5N2M5OGQuLjVjY2U5YzkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW5fWlcucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VuX1pXLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFpXRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lby5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lby5wcm9wZXJ0aWVzCmluZGV4IDFlMjFmYTYuLmEyNDY5NTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZW8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VvLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXMucHJvcGVydGllcwppbmRleCBjNTMxZDdkLi45MTBkNTFkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lcy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBBUlMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfQVIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfQVIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzMWQ3ZC4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0FSLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQotZGVmQ3VycmVuY3lDb2RlID0gQVJTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0JPLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0JPLnByb3BlcnRpZXMKaW5kZXggYzc3YmI4MC4uOTcwYjcwMyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19CTy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfQk8ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQk9CCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0NMLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0NMLnByb3BlcnRpZXMKaW5kZXggY2Y1NTMxMy4uNWYzMzkyMCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19DTC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfQ0wucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDtcdTAwQTQtIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IENMUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19DTy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19DTy5wcm9wZXJ0aWVzCmluZGV4IGEzMTQwODIuLmIyZjRhOWIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfQ08ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0NPLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IENPUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19DUi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19DUi5wcm9wZXJ0aWVzCmluZGV4IDdjNTk5M2QuLmU1NGQ3YTkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfQ1IucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0NSLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IENSQwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19ETy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19ETy5wcm9wZXJ0aWVzCmluZGV4IDU0M2I3NDUuLmI1MjE1ZmEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfRE8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0RPLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IERPUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19FQy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19FQy5wcm9wZXJ0aWVzCmluZGV4IDdhZWJkODMuLmFkYTY3ODIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfRUMucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0VDLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7XHUwMEE0LSMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfRVMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfRVMucHJvcGVydGllcwppbmRleCA4YWEwOWI1Li4yNzYyZmYzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0VTLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19FUy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19HVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19HVC5wcm9wZXJ0aWVzCmluZGV4IDgzZmJmNTYuLjJlODJiMWIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfR1QucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0dULnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEdUUQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19ITi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19ITi5wcm9wZXJ0aWVzCmluZGV4IDU4MGVlNGQuLjJkMTBhOGQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfSE4ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX0hOLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEhOTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19NWC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19NWC5wcm9wZXJ0aWVzCmluZGV4IGRkNGEzMDQuLmY1YmZkZWUgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfTVgucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX01YLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IE1YTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19OSS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19OSS5wcm9wZXJ0aWVzCmluZGV4IGY0Y2M5MTguLjEzZWY2NDQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfTkkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX05JLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IE5JTwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19QQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19QQS5wcm9wZXJ0aWVzCmluZGV4IGQ0OGJkMGYuLjllMWZmOTIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfUEEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1BBLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFBBQgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19QRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19QRS5wcm9wZXJ0aWVzCmluZGV4IGQ4NDgzY2YuLjhkODQ1N2QgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfUEUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1BFLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCitkZWNpbWFsU2VwYXJhdG9yID0gLgorZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCkBAIC04LDEwICs4LDEwIEBACiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgorbW9uZXRhcnlTZXBhcmF0b3IgPSAuCittb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gUEVOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1BSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1BSLnByb3BlcnRpZXMKaW5kZXggNGEzNmVjNi4uZDA1ZmU4ZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19QUi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfUFIucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1BZLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1BZLnByb3BlcnRpZXMKaW5kZXggMWQ0MmM5MC4uZTZlN2Q0OCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19QWS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfUFkucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0IC0jLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDA7XHUwMEE0XHUwMEEwLSMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBQWUcKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfU1YucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfU1YucHJvcGVydGllcwppbmRleCBlOTRiODU2Li5jNTIzNzExIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1NWLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19TVi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBTVkMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfVVMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfVVMucHJvcGVydGllcwppbmRleCA0YTM2ZWM2Li5kMDVmZThkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1VTLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19VUy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfVVkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfVVkucHJvcGVydGllcwppbmRleCA3NDVhYjE2Li45Yzk2NTliIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1VZLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19VWS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDsoXHUwMEE0XHUwMEEwIywjIzAuMDApCiBkZWZDdXJyZW5jeUNvZGUgPSBVWVUKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfVkUucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXNfVkUucHJvcGVydGllcwppbmRleCAyYzBmMzYxLi4xNzc0NTBkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VzX1ZFLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19lc19WRS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNCAtIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNC0jLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gVkVCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2V0LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2V0LnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uYzdkOWI2NCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ldC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gRUVLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2V0X0VFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2V0X0VFLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OWUzMjYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ldF9FRS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEVFSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ldS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ldS5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLjRkNmQ5MDQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2V1LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXVfRVMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZXVfRVMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhMDliNS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2V1X0VTLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmEucHJvcGVydGllcwppbmRleCA2ZTZlMTIyLi41ZGJlNGIzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZhLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mYS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyM7J1x1MjAyQSctIywjIzAuIyMjJ1x1MjAyQycKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gJ1x1MjAyQSclIywjIzAnXHUyMDJDJwotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0OydcdTIwMkEnLSMsIyMwLjAwJ1x1MjAyQycgXHUwMEE0CitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNDsnXHUyMDJBJy0jLCMjMC4wMCdcdTIwMkMnXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBBRk4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmFfQUYucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmFfQUYucHJvcGVydGllcwppbmRleCAyYTMzOGUyLi5kYWNhZGQzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZhX0FGLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mYV9BRi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyM7J1x1MjAyQSctIywjIzAuIyMjJ1x1MjAyQycKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gJ1x1MjAyQScjLCMjMCUnXHUyMDJDJwotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0OydcdTIwMkEnLSMsIyMwLjAwJ1x1MjAyQycgXHUwMEE0CitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNDsnXHUyMDJBJy0jLCMjMC4wMCdcdTIwMkMnXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBBRk4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmFfSVIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmFfSVIucHJvcGVydGllcwppbmRleCAxYjliNzBhLi43NjExM2ZiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZhX0lSLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mYV9JUi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyM7J1x1MjAyQSctIywjIzAuIyMjJ1x1MjAyQycKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gJ1x1MjAyQSclIywjIzAnXHUyMDJDJwotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0OydcdTIwMkEnLSMsIyMwLjAwJ1x1MjAyQycgXHUwMEE0CitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNDsnXHUyMDJBJy0jLCMjMC4wMCdcdTIwMkMnXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBJUlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmkucHJvcGVydGllcwppbmRleCBiNGUxM2Y4Li45NzEzNmI0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZpLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19maS5wcm9wZXJ0aWVzCkBAIC03LDExICs3LDExIEBACiBleHBvbmVudGlhbFN5bWJvbCA9IEUKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCitub3RBTnVtYmVyID0gZXBcdTAwRTRsdWt1CiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQogY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19maWwucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc2JQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19maWwucHJvcGVydGllcwppbmRleCBmMWRlYTVkLi4wMjAyYjQyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19maWwucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IFBIUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mby5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mby5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLjBhM2Y2NjQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZm8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZvLnByb3BlcnRpZXMKQEAgLTMsMTUgKzMsMTUgQEAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorbWludXNTaWduID0gXHUyMjEyCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDBENzEwXgogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNC0jLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gREtLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZvX0ZPLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZvX0ZPLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMDA3YjIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mb19GTy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNCAtIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IERLSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mci5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mci5wcm9wZXJ0aWVzCmluZGV4IDBmZGI5MjAuLjBlOTYwMWIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnIucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZyLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfQkUucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfQkUucHJvcGVydGllcwppbmRleCAzNWI2NzUwLi42OTRiYjUxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZyX0JFLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9CRS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9DQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9DQS5wcm9wZXJ0aWVzCmluZGV4IDcwNGFlNTguLmI2M2U5N2QgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfQ0EucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZyX0NBLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQ7KCMsIyMwLjAwXHUwMEE0KQorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQ7KCMsIyMwLjAwXHUwMEEwXHUwMEE0KQogZGVmQ3VycmVuY3lDb2RlID0gQ0FECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZyX0NILnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZyX0NILnByb3BlcnRpZXMKaW5kZXggNDkwMTFkZi4uM2I3YzM5YyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9DSC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfQ0gucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gJwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0LSMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDtcdTAwQTQtIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IENIRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9GUi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9GUi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmRiOTIwLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfRlIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfTFUucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfTFUucHJvcGVydGllcwppbmRleCAzNWI2NzUwLi42OTRiYjUxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZyX0xVLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9MVS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9NQy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9NQy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmRiOTIwLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfTUMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmlfRkkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfU04ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZpX0ZJLnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnJfU04ucHJvcGVydGllcwppbmRleCAwZmRiOTIwLi41ZDZmNzQwIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZpX0ZJLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mcl9TTi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBFVVIKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBYT0YKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnVyLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2Z1ci5wcm9wZXJ0aWVzCmluZGV4IGY4NjdkMTUuLjBkOWQzY2EgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZnVyLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mdXIucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IC4KK2RlY2ltYWxTZXBhcmF0b3IgPSAuCitncm91cGluZ1NlcGFyYXRvciA9ICwKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCittb25ldGFyeVNlcGFyYXRvciA9IC4KK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2Z1cl9JVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19mdXJfSVQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhMDliNS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2Z1cl9JVC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dhLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dhLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uN2M1YjA2MiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nYS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2EucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nYV9JRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nYV9JRS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2E0NTg4Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2FfSUUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dhYS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nYWEucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li44OTdlZTJkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dhYS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2FhLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBHSEMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2FhX0dILnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dhYV9HSC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDBkZDUzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2FhX0dILnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBHSEMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2V6LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dlei5wcm9wZXJ0aWVzCmluZGV4IGM0ZDk4YTIuLmYzMGY2MTcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2V6LnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nZXoucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKK2dyb3VwaW5nU2VwYXJhdG9yID0gXHUxMkM4CiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCkBAIC05LDkgKzksOSBAQAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTEyQzgKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVJOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dlel9FUi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nZXpfRVIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI2NWFiMi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dlel9FUi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUxMkM4Ci1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTEyQzgKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gRVJOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dlel9FVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nZXpfRVQucHJvcGVydGllcwppbmRleCAzZGY0N2Y5Li42NDg4ZWQ0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dlel9FVC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2V6X0VULnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MTJDOAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dsLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2dsLnByb3BlcnRpZXMKaW5kZXggMDRkZjIzMS4uNGQ2ZDkwNCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nbC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2wucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nbF9FUy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19nbF9FUy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWEwOWI1Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ2xfRVMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IC4KLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ndS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ndS5wcm9wZXJ0aWVzCmluZGV4IDFmM2NkNTEuLjM3ODc4MmIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ3UucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2d1LnByb3BlcnRpZXMKQEAgLTEsNyArMSw3IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLgogZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBwZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gXHUwQUU2Cit6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KIGV4cG9uZW50aWFsU3ltYm9sID0gRQpAQCAtMTAsOCArMTAsOCBAQAogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIworc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2d1X0lOLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2d1X0lOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYzk0M2MuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ndV9JTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IFx1MEFFNgotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ3YucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZ3YucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li4zOTM0MWNhIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2d2LnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ndi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gR0JQCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2d2X0dCLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2d2X0dCLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYmJiMTguLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ndl9HQi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBHQlAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGEucHJvcGVydGllcwppbmRleCA1ZDg1YjIyLi5hOTQ4NzIxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWE9GCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0FyYWIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfQXJhYi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFjMTc1Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfQXJhYi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0FyYWJfTkcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfQXJhYl9ORy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGIyMWYzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfQXJhYl9ORy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0FyYWJfU0QucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc2JQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9BcmFiX1NELnByb3BlcnRpZXMKaW5kZXggZjFkZWE1ZC4uNzg0MzNkZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfQXJhYl9TRC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gU0RECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0dILnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0dILnByb3BlcnRpZXMKaW5kZXggODQwZGQ1My4uODk3ZWUyZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9HSC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfR0gucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBHSEMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfTGF0bi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9MYXRuLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWMxNzUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9MYXRuLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfTGF0bl9HSC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9MYXRuX0dILnByb3BlcnRpZXMKaW5kZXggODQwZGQ1My4uODk3ZWUyZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9MYXRuX0dILnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9MYXRuX0dILnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gR0hDCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0xhdG5fTkUucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfTGF0bl9ORS5wcm9wZXJ0aWVzCmluZGV4IDVkODViMjIuLjM3MzFiNTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfTGF0bl9ORS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfTGF0bl9ORS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFhPRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9MYXRuX05HLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0xhdG5fTkcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiMjFmMy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX0xhdG5fTkcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9ORS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9ORS5wcm9wZXJ0aWVzCmluZGV4IDVkODViMjIuLjM3MzFiNTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfTkUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX05FLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gWE9GCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX05HLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX05HLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjIxZjMuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9ORy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhX1NELnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGFfU0QucHJvcGVydGllcwppbmRleCBmMWRlYTVkLi43ODQzM2RkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYV9TRC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gU0RECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhdy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oYXcucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li5kMDViMmZjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhdy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGF3LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCiBkZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGF3X1VTLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hhd19VUy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTM2ZWM2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGF3X1VTLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hlLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hlLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uNDhhYzA5NiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oZS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IElMUwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oaS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oaS5wcm9wZXJ0aWVzCmluZGV4IGYzZjUxYTMuLjI3OGYwZDggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hpLnByb3BlcnRpZXMKQEAgLTEwLDggKzEwLDggQEAKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2RlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGlfSU4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGlfSU4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmY2NiNy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hpX0lOLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gXHUwOTY2Ci1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oci5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oci5wcm9wZXJ0aWVzCmluZGV4IDk5ZGYwYWIuLmI0MDI4YTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaHIucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hyLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBCQU0KK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0Oy0jLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gSFJLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hyX0hSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hyX0hSLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4OGE3NTEuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ocl9IUi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSFJLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2h1LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2h1LnByb3BlcnRpZXMKaW5kZXggMmUwMWI3OC4uOWZlMWY1YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19odS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaHUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gU0lUCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gSFVGCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2h1X0hVLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2h1X0hVLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MzA1YjUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19odV9IVS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEhVRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oeS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oeS5wcm9wZXJ0aWVzCmluZGV4IGYxMDkzMTUuLjdmYWQwMWYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaHkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2h5LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMwJQotY3VycmVuY3lQYXR0ZXJuID0gIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBBWk0KK2N1cnJlbmN5UGF0dGVybiA9ICMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBBTUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaHlfQU0ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaHlfQU0ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwODZhYy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2h5X0FNLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMwJQotY3VycmVuY3lQYXR0ZXJuID0gIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBBTUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaHlfQU1fUkVWSVNFRC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oeV9BTV9SRVZJU0VELnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDg2YWMuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19oeV9BTV9SRVZJU0VELnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMwJQotY3VycmVuY3lQYXR0ZXJuID0gIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBBTUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaWEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaWEucHJvcGVydGllcwppbmRleCAwNGRmMjMxLi44MGMzOTY2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lhLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pYS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pZC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pZC5wcm9wZXJ0aWVzCmluZGV4IGU3MTYyMTYuLjhkNmFhODkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaWQucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lkLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorZGVmQ3VycmVuY3lDb2RlID0gSURSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lnLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lnLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uYTk0ODcyMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pZy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaWcucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pZ19ORy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pZ19ORy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGIyMWYzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaWdfTkcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9DTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19paS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfQ04ucHJvcGVydGllcwpyZW5hbWUgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19paS5wcm9wZXJ0aWVzCmluZGV4IGFlZmYyYWIuLjViZmZjNzIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfQ04ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lpLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBDTlkKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaWRfSUQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaW4ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lkX0lELnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaW4ucHJvcGVydGllcwppbmRleCBhMjBmODdjLi44ZDZhYTg5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lkX0lELnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pbi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBJRFIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXMucHJvcGVydGllcwppbmRleCAwNGRmMjMxLi44MGE0YTgxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pcy5wcm9wZXJ0aWVzCkBAIC0zLDE1ICszLDE1IEBACiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK21pbnVzU2lnbiA9IFx1MjIxMgorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTAwRDcxMF4KIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCitub3RBTnVtYmVyID0gRWlUYQogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IElTSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdC5wcm9wZXJ0aWVzCmluZGV4IDEyYWNkY2EuLmE2MGIzODggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXQucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2l0LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQ0hGCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2l0X0NILnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2l0X0NILnByb3BlcnRpZXMKaW5kZXggZmUyNzExNC4uOWMwZDlmYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdF9DSC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXRfQ0gucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gJwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDA7XHUwMEE0LSMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDtcdTAwQTQtIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IENIRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdF9JVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdF9JVC5wcm9wZXJ0aWVzCmluZGV4IGNjMzBmNmUuLjI3NjJmZjMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXRfSVQucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2l0X0lULnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2l1LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2l1LnByb3BlcnRpZXMKaW5kZXggY2Y0NWQzYS4uZmY1YzJjZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBDQUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaGVfSUwucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXcucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hlX0lMLnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXcucHJvcGVydGllcwppbmRleCA3MTUyZDExLi40OGFjMDk2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2hlX0lMLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19pdy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IElMUwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19qYS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19qYS5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLmNjM2NhMmQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfamEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2phLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBKUFkKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfamFfSlAucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfamFfSlAucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3ODY3YS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2phX0pQLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEpQWQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYS5wcm9wZXJ0aWVzCmluZGV4IDFlMjFmYTYuLjlmYWNmODEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2EucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKK2dyb3VwaW5nU2VwYXJhdG9yID0gLgogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwpAQCAtOSw5ICs5LDkgQEAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gR0VMCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thX0dFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thX0dFLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NTk4MTEuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYV9HRS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEdFTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYWoucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2FqLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uYTk0ODcyMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYWoucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thai5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thal9ORy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYWpfTkcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiMjFmMy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thal9ORy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thbS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rYW0ucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li5iNmFkYTU1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thbS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2FtLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBLRVMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2FtX0tFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2thbV9LRS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTNkNzgwLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2FtX0tFLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBLRVMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2NnLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tjZy5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLmE5NDg3MjEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2NnLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rY2cucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rY2dfTkcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2NnX05HLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjIxZjMuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rY2dfTkcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rZm8ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2ZvLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uYTk0ODcyMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rZm8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tmby5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tmb19DSS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzYlCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKY29weSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tmb19DSS5wcm9wZXJ0aWVzCmluZGV4IGYxZGVhNWQuLjM3MzFiNTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tmb19DSS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gWE9GCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tmb19ORy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rZm9fTkcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiMjFmMy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tmb19ORy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTkdOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2trLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2trLnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uMjI2NjRlYyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ray5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2sucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNDstIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IEtaVApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ra19LWi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ra19LWi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2RkY2JhLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2tfS1oucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Oy1cdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEtaVApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbC5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLmI1ZDQ3MDUgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa2wucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tsLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNC0jLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gREtLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tsX0dMLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tsX0dMLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMDA3YjIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbF9HTC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNCAtIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IERLSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbS5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLjZhNDlmZWMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa20ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ttLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBLSFIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa21fS0gucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa21fS0gucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5ZTU3Mi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ttX0tILnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEtIUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbi5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLmYyOTQxMTQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa24ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tuLnByb3BlcnRpZXMKQEAgLTEsNyArMSw3IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLgogZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBwZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAoremVyb0RpZ2l0ID0gXHUwQ0U2CiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KIGV4cG9uZW50aWFsU3ltYm9sID0gRQpAQCAtMTAsOCArMTAsOCBAQAogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIworc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tuX0lOLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tuX0lOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NTYyOGIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rbl9JTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tvLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tvLnByb3BlcnRpZXMKaW5kZXggYzRmZTI1YS4uZDc2Njc2NyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rby5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa28ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBLUFcKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa29fS1IucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa29fS1IucHJvcGVydGllcwppbmRleCBkYTlmNTkxLi45ODVjOWNmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tvX0tSLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rb19LUi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBLUlcKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa29rLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tvay5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLjM3ODc4MmIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa29rLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rb2sucHJvcGVydGllcwpAQCAtMTAsOCArMTAsOCBAQAogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIworc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tva19JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rb2tfSU4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1NjI4Yi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2tva19JTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2twZS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzYlCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKY29weSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2twZS5wcm9wZXJ0aWVzCmluZGV4IGYxZGVhNWQuLjFkZGY2ZDMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2twZS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gR05GCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2twZV9MUi5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcwpyZW5hbWUgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rcGVfTFIucHJvcGVydGllcwppbmRleCBmMWRlYTVkLi42YWMyYWZlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rcGVfTFIucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IExSRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdS5wcm9wZXJ0aWVzCmluZGV4IDRlMjk5ZDEuLjUxZTM3NmQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3UucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gSVFECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0FyYWIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfQXJhYi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFjMTc1Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfQXJhYi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0lRLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0lRLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMjk5ZDEuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdV9JUS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSVFECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0lSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0lSLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OGEyODIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdV9JUi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSVJSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0xhdG4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFjMTc1Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0xhdG5fSVEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9JUS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTI5OWQxLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9JUS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSVFECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0xhdG5fSVIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9JUi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODhhMjgyLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9JUi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSVJSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0xhdG5fU1kucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9TWS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGNmYzhmLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9TWS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gU1lQCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X0xhdG5fVFIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9UUi5wcm9wZXJ0aWVzCmluZGV4IDBhNTA0ODYuLjY1MzIyMjggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9UUi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfTGF0bl9UUi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFRSWQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdV9TWS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdV9TWS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGNmYzhmLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfU1kucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFNZUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdV9UUi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdV9UUi5wcm9wZXJ0aWVzCmluZGV4IDBhNTA0ODYuLjY1MzIyMjggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3VfVFIucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t1X1RSLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gVFJZCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t3LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t3LnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uMzkzNDFjYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rdy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3cucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IEdCUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rd19HQi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19rd19HQi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2JiYjE4Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3dfR0IucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gR0JQCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t5LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t5LnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uMjg4YWM0NSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19reS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfa3kucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gS0dTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t5X0tHLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2t5X0tHLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZDdiYWUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19reV9LRy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEtHUwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sbi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sbi5wcm9wZXJ0aWVzCmluZGV4IDFiMjk1MGUuLmUzOTdhYmMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbG4ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2xuLnByb3BlcnRpZXMKQEAgLTEsNCArMSw0IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAorZGVjaW1hbFNlcGFyYXRvciA9IC4KIGdyb3VwaW5nU2VwYXJhdG9yID0gLAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKK21vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBDREYKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbG5fQ0QucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbG5fQ0QucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFmOWZkZi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2xuX0NELnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBDREYKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbG5fQ0cucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbG5fQ0cucHJvcGVydGllcwppbmRleCAwNWQ1YmI2Li5hNWNhYTdiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2xuX0NHLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sbl9DRy5wcm9wZXJ0aWVzCkBAIC0xLDQgKzEsNCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKK2RlY2ltYWxTZXBhcmF0b3IgPSAuCiBncm91cGluZ1NlcGFyYXRvciA9ICwKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCkBAIC04LDEwICs4LDEwIEBACiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCittb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFhBRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sby5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sby5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLmU0OGUwMmEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbG8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2xvLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNC0jLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gTEFLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2xvX0xBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2xvX0xBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NjViMWIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sb19MQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwO1x1MDBBNC0jLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTEFLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2x0LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2x0LnByb3BlcnRpZXMKaW5kZXggMDRkZjIzMS4uNTAyODA0NiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbHQucHJvcGVydGllcwpAQCAtMywxNSArMywxNSBAQAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCittaW51c1NpZ24gPSBcdTIyMTIKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwMEQ3MTBeCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IExUTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdF9MVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdF9MVC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmIzNjg2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbHRfTFQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IC4KLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IExUTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdi5wcm9wZXJ0aWVzCmluZGV4IDFlMjFmYTYuLmY3MTk3YjkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbHYucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2x2LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IExWTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdl9MVi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19sdl9MVi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTgyNzAzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbHZfTFYucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBMVkwKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbWsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbWsucHJvcGVydGllcwppbmRleCAwNGRmMjMxLi5hYmNjOTc2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21rLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tay5wcm9wZXJ0aWVzCkBAIC0xMCw4ICsxMCw4IEBACiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIzsoIywjIzAuIyMjKQorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IE1LRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ta19NSy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ta19NSy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmY4YzhjLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbWtfTUsucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IC4KLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOygjLCMjMC4jIyMpCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE1LRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbC5wcm9wZXJ0aWVzCmluZGV4IDA5OWE5MGEuLmRjNmFjOGEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbWwucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21sLnByb3BlcnRpZXMKQEAgLTEsMTcgKzEsMTcgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAuCiBncm91cGluZ1NlcGFyYXRvciA9ICwKIHBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSBcdTBENjYKK3plcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQogZXhwb25lbnRpYWxTeW1ib2wgPSBFCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgorbm90QU51bWJlciA9IFx1MEQzOFx1MEQwMlx1MEQxNlx1MEQ0RFx1MEQyRlx1MEQyRlx1MEQzMlx1MEQ0RFx1MEQzMgogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIworc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjLCMjMC4wMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21sX0lOLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21sX0lOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODBmMTIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbF9JTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IFx1MEQ2NgotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbW4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbW4ucHJvcGVydGllcwppbmRleCAxZTIxZmE2Li4zNDI1ZTg3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21uLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBNTlQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmVfQlkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbW5fQ04ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc2JQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZV9CWS5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbl9DTi5wcm9wZXJ0aWVzCmluZGV4IGU3NzdjZTcuLjdkODdhNDkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmVfQlkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21uX0NOLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gQllSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gQ05ZCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21uX01OLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21uX01OLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOTBjNDAuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbl9NTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE1OVApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZV9CWS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tbl9Nb25nX0NOLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmVfQlkucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbW5fTW9uZ19DTi5wcm9wZXJ0aWVzCmluZGV4IGU3NzdjZTcuLjdkODdhNDkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYmVfQlkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21uX01vbmdfQ04ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBCWVIKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBDTlkKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfaXNfSVMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbW8ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lzX0lTLnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbW8ucHJvcGVydGllcwppbmRleCA1NzFhOWEzLi43NjM2MmNlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2lzX0lTLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tby5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gSVNLCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gTURMCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21yLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21yLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uMjc4ZjBkOCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tci5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXIucHJvcGVydGllcwpAQCAtMSw3ICsxLDcgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAuCiBncm91cGluZ1NlcGFyYXRvciA9ICwKIHBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCit6ZXJvRGlnaXQgPSBcdTA5NjYKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQogZXhwb25lbnRpYWxTeW1ib2wgPSBFCkBAIC0xMCw4ICsxMCw4IEBACiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2RlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXJfSU4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXJfSU4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1NjI4Yi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21yX0lOLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXMucHJvcGVydGllcwppbmRleCBjMDBmNmI5Li5iMmUwYTMxIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21zLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tcy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gQk5ECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitkZWZDdXJyZW5jeUNvZGUgPSBBVUQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXNfQk4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXNfQk4ucHJvcGVydGllcwppbmRleCBhNjdjMjQ1Li4xNDkzMGZlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21zX0JOLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tc19CTi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEJORApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tc19NWS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tc19NWS5wcm9wZXJ0aWVzCmluZGV4IGI0MTBlMTEuLjI4OWI5MzMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXNfTVkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX21zX01ZLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQogZGVmQ3VycmVuY3lDb2RlID0gTVlSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX210LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX210LnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uNzY1ZDVkMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tdC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IE1UTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19teS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzElCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKY29weSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX215LnByb3BlcnRpZXMKaW5kZXggZjFkZWE1ZC4uNDA0NmM0MiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbXkucHJvcGVydGllcwpAQCAtMSw3ICsxLDcgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAuCiBncm91cGluZ1NlcGFyYXRvciA9ICwKIHBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCit6ZXJvRGlnaXQgPSBcdTEwNDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQogZXhwb25lbnRpYWxTeW1ib2wgPSBFCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gTU1LCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25iLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25iLnByb3BlcnRpZXMKaW5kZXggZDAxZTQyMy4uNmQyYTNiZiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uYi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmIucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwICUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gTk9LCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25iX05PLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25iX05PLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMjAyYTUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uYl9OTy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAgJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBOT0sKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmUucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmUucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li43OTJkYjc1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25lLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uZS5wcm9wZXJ0aWVzCkBAIC0xLDcgKzEsNyBAQAogZGVjaW1hbFNlcGFyYXRvciA9IC4KIGdyb3VwaW5nU2VwYXJhdG9yID0gLAogcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKK3plcm9EaWdpdCA9IFx1MDk2NgogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCiBleHBvbmVudGlhbFN5bWJvbCA9IEUKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBOUFIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmVfSU4ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDcxJQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uZV9JTi5wcm9wZXJ0aWVzCmluZGV4IGYxZGVhNWQuLjc5ODM5YTQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25lX0lOLnByb3BlcnRpZXMKQEAgLTEsNyArMSw3IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLgogZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBwZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAoremVyb0RpZ2l0ID0gXHUwOTY2CiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KIGV4cG9uZW50aWFsU3ltYm9sID0gRQpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uZV9OUC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uZV9OUC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGExYTU2Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmVfTlAucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE5QUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubC5wcm9wZXJ0aWVzCmluZGV4IDgzMDRhZTMuLmQwNGY0MzMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmwucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25sLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBBTkcKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwO1x1MDBBNFx1MDBBMCMsIyMwLjAwLQorZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25sX0JFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25sX0JFLnByb3BlcnRpZXMKaW5kZXggOGFhMDliNS4uNGQ2ZDkwNCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubF9CRS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmxfQkUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmxfTkwucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbmxfTkwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE5OThkNi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25sX05MLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwO1x1MDBBNCAjLCMjMC4wMC0KLWRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubi5wcm9wZXJ0aWVzCmluZGV4IGQwMWU0MjMuLjM4M2I1MmEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbm4ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25uLnByb3BlcnRpZXMKQEAgLTMsMTUgKzMsMTUgQEAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorbWludXNTaWduID0gXHUyMjEyCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDBENzEwXgogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCitwZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IE5PSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubl9OTy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ubl9OTy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjIwMmE1Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbm5fTk8ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwICUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gTk9LCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZpX0ZJLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25vLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NyUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZmlfRkkucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbm8ucHJvcGVydGllcwppbmRleCAwZmRiOTIwLi42ZDJhM2JmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2ZpX0ZJLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uby5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBFVVIKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBOT0sKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnIucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li4xOGE3ODE3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uci5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNSBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAorZGVjaW1hbFNlcGFyYXRvciA9ICwKK2dyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCkBAIC04LDEwICs4LDEwIEBACiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAorbW9uZXRhcnlTZXBhcmF0b3IgPSAsCittb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25zby5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19uc28ucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li4xOGE3ODE3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25zby5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnNvLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitkZWNpbWFsU2VwYXJhdG9yID0gLAorZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCittb25ldGFyeVNlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBaQVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnNvX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25zb19aQS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRlYTVkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnNvX1pBLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBaQVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnkucHJvcGVydGllcwppbmRleCBmZDIzMTM3Li4yMzUyYzI1IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX255LnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ueS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTVpNCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gTVdLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX255X01XLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX255X01XLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmI5YzkuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ueV9NVy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gTVdLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX29tLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX29tLnByb3BlcnRpZXMKaW5kZXggMmQ3NmNmNS4uNGJlMTQ0MyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vbS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfb20ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBFVEIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfb21fRVQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfb21fRVQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFjMDRkZS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX29tX0VULnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEVUQgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vbV9LRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vbV9LRS5wcm9wZXJ0aWVzCmluZGV4IGFlMGQ4YjUuLjcwMjI5OTkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfb21fS0UucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX29tX0tFLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEtFUwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vci5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vci5wcm9wZXJ0aWVzCmluZGV4IDM2Y2ZlN2MuLmIzNjFlMzAgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfb3IucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX29yLnByb3BlcnRpZXMKQEAgLTEwLDggKzEwLDggQEAKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCitwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vcl9JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19vcl9JTi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQ3YzFlLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfb3JfSU4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSBcdTBCNjYKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhLnByb3BlcnRpZXMKaW5kZXggNjZhNjZlZi4uNzIzMjQ5NiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGEucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IElOUgorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IFBLUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9BcmFiLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhX0FyYWIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzMDc5Ny4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhX0FyYWIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSBcdTBBNjYKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhX0FyYWJfUEsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfQXJhYl9QSy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjBiMzIzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfQXJhYl9QSy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IFx1MEE2NgotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBQS1IKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfR3VydS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9HdXJ1LnByb3BlcnRpZXMKaW5kZXggYzAzMDc5Ny4uNWNjNTAxZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9HdXJ1LnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9HdXJ1LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfR3VydV9JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9HdXJ1X0lOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YTY2ZWYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9HdXJ1X0lOLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gXHUwQTY2Ci1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wYV9JTi5wcm9wZXJ0aWVzCmluZGV4IDliMGY1YmIuLjVjYzUwMWQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfSU4ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhX0lOLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfUEsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGFfUEsucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIwYjMyMy4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BhX1BLLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gXHUwQTY2Ci1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFBLUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wbC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wbC5wcm9wZXJ0aWVzCmluZGV4IDFlMjFmYTYuLjM3Y2JlMWQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGwucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BsLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IFBMTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wbF9QTC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wbF9QTC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzhhM2JkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcGxfUEwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBQTE4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcHMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcHMucHJvcGVydGllcwppbmRleCA3YTkzOTQ0Li5lMjYzMmU2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wcy5wcm9wZXJ0aWVzCkBAIC0xLDE3ICsxLDE3IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAorZGVjaW1hbFNlcGFyYXRvciA9IFx1MDY2QgorZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKK3BlcmNlbnQgPSBcdTA2NkEKK3plcm9EaWdpdCA9IFx1MDZGMAogcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK21pbnVzU2lnbiA9IFx1MjIxMgorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTAwRDdcdTA2RjFcdTA2RjBeCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAorbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gQUZOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BzX0FGLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3BzX0FGLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNDQwNTcuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wc19BRi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IFx1MDY2QgotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKLXBlcmNlbnQgPSBcdTA2NkEKLXplcm9EaWdpdCA9IFx1MDZGMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSBcdTIyMTIKLWV4cG9uZW50aWFsU3ltYm9sID0gXHUwMEQ3XHUwNkYxXHUwNkYwXgotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gXHUwNjZCCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwNjZDCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBBRk4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcHQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcHQucHJvcGVydGllcwppbmRleCBhYWZiMmRmLi43ZDlmMzhiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3B0LnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wdC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7KFx1MDBBNCMsIyMwLjAwKQogZGVmQ3VycmVuY3lDb2RlID0gQU9BCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3B0X0JSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3B0X0JSLnByb3BlcnRpZXMKaW5kZXggZDYxOTljZi4uZjkwYzk5YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wdF9CUi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcHRfQlIucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKIGRlZkN1cnJlbmN5Q29kZSA9IEJSTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wdF9QVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19wdF9QVC5wcm9wZXJ0aWVzCmluZGV4IDhhYTA5YjUuLmIyMGVhZmQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcHRfUFQucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3B0X1BULnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCitncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwpAQCAtOSw5ICs5LDkgQEAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCittb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19yby5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19yby5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLjc2MzYyY2UgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcm8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3JvLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBNREwKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcm9fUk8ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcm9fUk8ucHJvcGVydGllcwppbmRleCA5NDE3ZTA4Li5iMjUyYjAyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3JvX1JPLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19yb19STy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gUk9MCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gUk9OCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3Jvb3QucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcm9vdC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFjMTc1Li4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcm9vdC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3J1LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3J1LnByb3BlcnRpZXMKaW5kZXggODEwZTYzNi4uOTYzZmVkMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ydS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcnUucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTQKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCitwZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEJZUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ydV9SVS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ydV9SVS5wcm9wZXJ0aWVzCmluZGV4IDU4OGI2MWIuLmExMDIzM2QgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcnVfUlUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3J1X1JVLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEE0CitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBSVUIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcnVfVUEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcnVfVUEucHJvcGVydGllcwppbmRleCAxMzM0YzZlLi5lZjdkY2M3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3J1X1VBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ydV9VQS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCitwZXJjZW50UGF0dGVybiA9ICMsIyMwXHUwMEEwJQorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IFVBSApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ydy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ydy5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLjYxMDkxZDAgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcncucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3J3LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBSV0YKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcndfUlcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfcndfUlcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzZjRlNi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3J3X1JXLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBSV0YKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2EucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2EucHJvcGVydGllcwppbmRleCA3OGI4N2FjLi4zZWQzNTI2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NhLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zYS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2RlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zYV9JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zYV9JTi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDJiYWFhLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2FfSU4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSBcdTA5NjYKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2UucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2UucHJvcGVydGllcwppbmRleCA3NjU1YzhhLi4wZjdkOTM3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NlLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zZS5wcm9wZXJ0aWVzCkBAIC0xLDE3ICsxLDE3IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gXHUyMjEyCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwMEQ3MTBeCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IFx1MDBBNFx1MDBBNFx1MDBBNAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAorbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCAlCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKIGN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2VfTk8ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2VfTk8ucHJvcGVydGllcwppbmRleCBiYjRjYTkyLi5iZjZhMzJjIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NlX05PLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zZV9OTy5wcm9wZXJ0aWVzCkBAIC0xLDE3ICsxLDE3IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gXHUyMjEyCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwMEQ3MTBeCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IFx1MDBBNFx1MDBBNFx1MDBBNAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAorbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCAlCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjMFx1MDBBMCUKIGN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBOT0sKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2gucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2gucHJvcGVydGllcwppbmRleCA5OWRmMGFiLi5iMTZiMWMyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NoLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaC5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA0MzUKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gQkFNCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gUlNECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NoX0JBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NoX0JBLnByb3BlcnRpZXMKaW5kZXggNzFlZmU5Yy4uNzQ4MDAzOSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaF9CQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2hfQkEucHJvcGVydGllcwpAQCAtNCwxNCArNCwxNCBAQAogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwNDM1CiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBrbQorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEJBTQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaF9DUy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaF9DUy5wcm9wZXJ0aWVzCmluZGV4IGNjMzBmNmUuLjZhMDhiODAgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2hfQ1MucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NoX0NTLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NoX1lVLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NoX1lVLnByb3BlcnRpZXMKaW5kZXggM2Y3MGYzMi4uNTVkYjQ2OCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaF9ZVS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2hfWVUucHJvcGVydGllcwpAQCAtNCwxNCArNCwxNCBAQAogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwNDM1CiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBZVU0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfYm5fQkQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2kucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JuX0JELnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2kucHJvcGVydGllcwppbmRleCA2ODBmNjQ1Li42OWIwMjM4IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JuX0JELnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gQkRUCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjLCMjMC4wMDsoXHUwMEE0IywjIywjIzAuMDApCitkZWZDdXJyZW5jeUNvZGUgPSBMS1IKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2lkLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NpZC5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLjRiZTE0NDMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2lkLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaWQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IEVUQgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaWRfRVQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2lkX0VULnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYzA0ZGUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zaWRfRVQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NrLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NrLnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uZTZjOTA3ZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zay5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2sucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gU0tLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NrX1NLLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NrX1NLLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNGNkOGQuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19za19TSy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IFNLSwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zbC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zbC5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLjRkNmQ5MDQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2wucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NsLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2xfU0kucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc2xfU0kucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1M2M0Zi4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NsX1NJLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0Ci1kZWZDdXJyZW5jeUNvZGUgPSBTSVQKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc28ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc28ucHJvcGVydGllcwppbmRleCA5ODZlNDlhLi40YzQ5YjcyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zby5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IERKRgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zb19ESi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zb19ESi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmZiZmZhLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc29fREoucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gREpGCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvX0VULnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvX0VULnByb3BlcnRpZXMKaW5kZXggOGFjMDRkZS4uNGJlMTQ0MyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zb19FVC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc29fRVQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvX0tFLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvX0tFLnByb3BlcnRpZXMKaW5kZXggYWUwZDhiNS4uNzAyMjk5OSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zb19LRS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc29fS0UucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gS0VTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvX1NPLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NvX1NPLnByb3BlcnRpZXMKaW5kZXggNDNhNDdlMC4uODZhNjQwNCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zb19TTy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc29fU08ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gU09TCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NxLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NxLnByb3BlcnRpZXMKaW5kZXggNzE5YWNjZC4uZTE2YmY1NCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3EucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEFMTAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IE1LRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcV9BTC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcV9BTC5wcm9wZXJ0aWVzCmluZGV4IGRjOWEzYTkuLjc3YzYzNTcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3FfQUwucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NxX0FMLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEFMTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zci5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zci5wcm9wZXJ0aWVzCmluZGV4IDk5ZGYwYWIuLjc0ODAwMzkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3IucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gQkFNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0JBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0JBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOTBiNmUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9CQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDQzQVx1MDQzQwotZGVmQ3VycmVuY3lDb2RlID0gQkFNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0NTLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0NTLnByb3BlcnRpZXMKaW5kZXggY2MzMGY2ZS4uNmEwOGI4MCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DUy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ1MucHJvcGVydGllcwpAQCAtNCwxNCArNCwxNCBAQAogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwNDM1CiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ3lybC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsLnByb3BlcnRpZXMKaW5kZXggMDRkZjIzMS4uNmEwOGI4MCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CitkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ3lybF9CQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX0JBLnByb3BlcnRpZXMKaW5kZXggNGM5MGI2ZS4uNzQ4MDAzOSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX0JBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX0JBLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwNDNBXHUwNDNDCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gQkFNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsX1BPTFlUT05JLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0N5cmxfUlMucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsX1BPTFlUT05JLnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ3lybF9SUy5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLmViZGVhOTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWxfUE9MWVRPTkkucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0N5cmxfUlMucHJvcGVydGllcwpAQCAtNCwxNCArNCwxNCBAQAogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwNDM1CiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ3lybF9ZVS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX1lVLnByb3BlcnRpZXMKaW5kZXggM2Y3MGYzMi4uNTVkYjQ2OCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX1lVLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX1lVLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gWVVNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTGF0bi5wcm9wZXJ0aWVzCmluZGV4IDA0ZGYyMzEuLmViZGVhOTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTGF0bi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTGF0bi5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA0MzUKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9MYXRuX0JBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fQkEucHJvcGVydGllcwppbmRleCA3MWVmZTljLi43NDgwMDM5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fQkEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fQkEucHJvcGVydGllcwpAQCAtNCwxNCArNCwxNCBAQAogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwNDM1CiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBrbQorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IEJBTQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9MYXRuX0NTLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fQ1MucHJvcGVydGllcwppbmRleCBjYzMwZjZlLi42YTA4YjgwIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fQ1MucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fQ1MucHJvcGVydGllcwpAQCAtNCwxNCArNCwxNCBAQAogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCiBtaW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwNDM1CiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBFVVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ3lybF9DUy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9MYXRuX01FLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NSUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfQ3lybF9DUy5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9MYXRuX01FLnByb3BlcnRpZXMKaW5kZXggY2MzMGY2ZS4uMDFiMDU5YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX0NTLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9MYXRuX01FLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0xhdG5fWVUucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTGF0bl9ZVS5wcm9wZXJ0aWVzCmluZGV4IDNmNzBmMzIuLjU1ZGI0NjggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTGF0bl9ZVS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTGF0bl9ZVS5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA0MzUKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IFlVTQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX0NTLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX01FLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9DeXJsX0NTLnByb3BlcnRpZXMKcmVuYW1lIHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfTUUucHJvcGVydGllcwppbmRleCBjYzMwZjZlLi42YTA4YjgwIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX0N5cmxfQ1MucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX01FLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsX1BPTFlUT05JLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX1JTLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NSUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfZWxfUE9MWVRPTkkucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfUlMucHJvcGVydGllcwppbmRleCAwNGRmMjMxLi5lYmRlYTk2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2VsX1BPTFlUT05JLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9SUy5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA0MzUKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9ZVS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcl9ZVS5wcm9wZXJ0aWVzCmluZGV4IDNmNzBmMzIuLjU1ZGI0NjggMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3JfWVUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NyX1lVLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDQzNQogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IC4KIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gWVVNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NzLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NzLnByb3BlcnRpZXMKaW5kZXggYzUzMDlmYS4uMThhNzgxNyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zcy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3MucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKK2RlY2ltYWxTZXBhcmF0b3IgPSAsCitncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwpAQCAtOCwxMCArOCwxMCBAQAogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKK21vbmV0YXJ5U2VwYXJhdG9yID0gLAorbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFNaTAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IFpBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZV9CWS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zc19TWi5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggODYlCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JlX0JZLnByb3BlcnRpZXMKY29weSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3NzX1NaLnByb3BlcnRpZXMKaW5kZXggZTc3N2NlNy4uZmZmY2FmMiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZV9CWS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3NfU1oucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBCWVIKK2RlZkN1cnJlbmN5Q29kZSA9IFNaTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zc19aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zc19aQS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRlYTVkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3NfWkEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdC5wcm9wZXJ0aWVzCmluZGV4IGYxZGVhNWQuLjE4YTc4MTcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3QucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N0LnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitkZWNpbWFsU2VwYXJhdG9yID0gLAorZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCittb25ldGFyeVNlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX2JlX0JZLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N0X0xTLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZV9CWS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N0X0xTLnByb3BlcnRpZXMKaW5kZXggZTc3N2NlNy4uZDNiNDJiNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19iZV9CWS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3RfTFMucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBCWVIKK2RlZkN1cnJlbmN5Q29kZSA9IExTTApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdF9aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdF9aQS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRlYTVkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3RfWkEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdXBwbGVtZW50YWxEYXRhLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N1cHBsZW1lbnRhbERhdGEucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZhZmUyZS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N1cHBsZW1lbnRhbERhdGEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdi5wcm9wZXJ0aWVzCmluZGV4IDQzZjY4MjkuLjBmN2Q5MzcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3YucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N2LnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gXHUyMjEyCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwMEQ3MTBeCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IFx1MDBBNFx1MDBBNFx1MDBBNAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwICUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gRVVSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N2X0ZJLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N2X0ZJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZjY4MjkuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdl9GSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSBcdTIyMTIKLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBcdTAwQTRcdTAwQTRcdTAwQTQKLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IEVVUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdl9TRS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdl9TRS5wcm9wZXJ0aWVzCmluZGV4IDlmYzMxYjcuLmE5MWIzOWEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3ZfU0UucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N2X1NFLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gXHUyMjEyCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKK2V4cG9uZW50aWFsU3ltYm9sID0gXHUwMEQ3MTBeCiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IFx1MDBBNFx1MDBBNFx1MDBBNAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwICUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIzBcdTAwQTAlCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gU0VLCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N3LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N3LnByb3BlcnRpZXMKaW5kZXggMjUzZDc4MC4uNmM1NWUzMiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zdy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3cucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwXHUwMEEwXHUwMEE0CiBkZWZDdXJyZW5jeUNvZGUgPSBLRVMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3dfS0UucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3dfS0UucHJvcGVydGllcwppbmRleCBhZTBkOGI1Li43MDIyOTk5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N3X0tFLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zd19LRS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBLRVMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3dfVFoucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3dfVFoucHJvcGVydGllcwppbmRleCBmYTM1MzAwLi45YzA3N2EzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N3X1RaLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zd19UWi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IFRaUwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zeXIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3lyLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uMWNmYmQ0OCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zeXIucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3N5ci5wcm9wZXJ0aWVzCkBAIC0xMCw4ICsxMCw4IEBACiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIzsjLCMjMC4jIyMtCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMDtcdTAwQTRcdTAwQTAjLCMjMC4wMC0KK2RlZkN1cnJlbmN5Q29kZSA9IFNZUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zeXJfU1kucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfc3lyX1NZLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYzA1ODYuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19zeXJfU1kucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjOyMsIyMwLiMjIy0KLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMDtcdTAwQTQgIywjIzAuMDAtCi1kZWZDdXJyZW5jeUNvZGUgPSBTWVAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGEucHJvcGVydGllcwppbmRleCBhNzU2MjhiLi4zNzg3ODJiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RhLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190YS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190YV9JTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190YV9JTi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzU2MjhiLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGFfSU4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IElOUgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190ZS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190ZS5wcm9wZXJ0aWVzCmluZGV4IGQyOTU0ODcuLjM3ODc4MmIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RlLnByb3BlcnRpZXMKQEAgLTEsNyArMSw3IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLgogZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBwZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gXHUwQzY2Cit6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KIGV4cG9uZW50aWFsU3ltYm9sID0gRQpAQCAtMTAsOCArMTAsOCBAQAogbm90QU51bWJlciA9IE5hTgogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitkZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIworc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gIywjIywjIzAlCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gSU5SCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RlX0lOLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RlX0lOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTM4M2EuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190ZV9JTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IFx1MEM2NgotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGcucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGcucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li5mY2Q0MjU3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RnLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190Zy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gVEpTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RnX1RKLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RnX1RKLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzVjZTguLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190Z19USi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVEpTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RoLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RoLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uMzkxYjk2ZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190aC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGgucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7XHUwMEE0LSMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBUSEIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGhfVEgucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGhfVEgucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4MDEzZC4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RoX1RILnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDA7XHUwMEE0LSMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBUSEIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGkucHJvcGVydGllcwppbmRleCBjNGQ5OGEyLi5lZDE0M2E5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RpLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190aS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IEVSTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190aV9FUi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190aV9FUi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTcyOThkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGlfRVIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gRVJOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RpX0VULnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RpX0VULnByb3BlcnRpZXMKaW5kZXggOGFjMDRkZS4uNGJlMTQ0MyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190aV9FVC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGlfRVQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RpZy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190aWcucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li5lZDE0M2E5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RpZy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGlnLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBFUk4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGlnX0VSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RpZ19FUi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTcyOThkLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGlnX0VSLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IEVSTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190bC5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggNzYlCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKY29weSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RsLnByb3BlcnRpZXMKaW5kZXggZjFkZWE1ZC4uMDIwMmI0MiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdGwucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFpBUgorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IFBIUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190bi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190bi5wcm9wZXJ0aWVzCmluZGV4IDcwNDdjYTcuLjIxMTc0YzMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdG4ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RuLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitkZWNpbWFsU2VwYXJhdG9yID0gLAorZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCittb25ldGFyeVNlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQldQCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RuX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RuX1pBLnByb3BlcnRpZXMKaW5kZXggZjFkZWE1ZC4uMThhNzgxNyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190bl9aQS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdG5fWkEucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKK2RlY2ltYWxTZXBhcmF0b3IgPSAsCitncm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwpAQCAtOCwxMCArOCwxMCBAQAogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKK21vbmV0YXJ5U2VwYXJhdG9yID0gLAorbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBaQVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdG8ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDc2JQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19ucl9aQS5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190by5wcm9wZXJ0aWVzCmluZGV4IGYxZGVhNWQuLmI0YzdjODQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RvLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBaQVIKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBUT1AKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHIucHJvcGVydGllcwppbmRleCA3ZjIzYjRiLi5hYjAxYzhkIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RyLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190ci5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICUgIywjIzAKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKK3BlcmNlbnRQYXR0ZXJuID0gJVx1MDBBMCMsIyMwCitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gQ1lQCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RyX1RSLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RyX1RSLnByb3BlcnRpZXMKaW5kZXggZDE0YjMzZC4uYWE0ODEwZSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190cl9UUi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHJfVFIucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAlICMsIyMwCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCitwZXJjZW50UGF0dGVybiA9ICVcdTAwQTAjLCMjMAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKIGRlZkN1cnJlbmN5Q29kZSA9IFRSWQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW50X1RXLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3Rydi5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudF9UVy5wcm9wZXJ0aWVzCnJlbmFtZSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3Rydi5wcm9wZXJ0aWVzCmluZGV4IGE1YTNlYzcuLmE5Y2IxMTAgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudF9UVy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHJ2LnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBUV0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHMucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHMucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li4xOGE3ODE3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RzLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190cy5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNSBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAorZGVjaW1hbFNlcGFyYXRvciA9ICwKK2dyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCkBAIC04LDEwICs4LDEwIEBACiBwZXJNaWxsID0gXHUyMDMwCiBpbmZpbml0eSA9IFx1MjIxRQogbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAorbW9uZXRhcnlTZXBhcmF0b3IgPSAsCittb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RzX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3RzX1pBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZGVhNWQuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190c19aQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAuCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3R0LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3R0LnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uZmFiYzAyMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190dC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdHQucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gUlVCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3R0X1JVLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3R0X1JVLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OGI2MWIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c190dF9SVS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gUlVCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0NOLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VnLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA4MiUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfQ04ucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdWcucHJvcGVydGllcwppbmRleCBhZWZmMmFiLi41YmZmYzcyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0NOLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191Zy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQ05ZCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VrLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VrLnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uOTgwYzc1MiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191ay5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdWsucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gVUFICmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VrX1VBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VrX1VBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMzRjNmUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191a19VQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9ICwKLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IFVBSApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191ci5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191ci5wcm9wZXJ0aWVzCmluZGV4IDQzNTcyYjguLjQ4NTBmYzcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXIucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VyLnByb3BlcnRpZXMKQEAgLTQsMTQgKzQsMTQgQEAKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwogbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCitleHBvbmVudGlhbFN5bWJvbCA9IFx1MDY0MgogcGVyTWlsbCA9IFx1MjAzMAogaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KK25vdEFOdW1iZXIgPSBcdTA2Q0NcdTA2QzEgXHUwNjM5XHUwNjJGXHUwNjJGIFx1MDY0Nlx1MDZDMVx1MDZDQ1x1MDZCQQogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXJfSU4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXJfSU4ucHJvcGVydGllcwppbmRleCA0MzU3MmI4Li4xNDA5ODg3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VyX0lOLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191cl9JTi5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA2NDIKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCitub3RBTnVtYmVyID0gXHUwNkNDXHUwNkMxIFx1MDYzOVx1MDYyRlx1MDYyRiBcdTA2NDZcdTA2QzFcdTA2Q0NcdTA2QkEKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKK2RlY2ltYWxQYXR0ZXJuID0gIywjIywjIzAuIyMjCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAorcGVyY2VudFBhdHRlcm4gPSAjLCMjLCMjMCUKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMsIyMwLjAwCiBkZWZDdXJyZW5jeUNvZGUgPSBJTlIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXJfUEsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXJfUEsucHJvcGVydGllcwppbmRleCAyMmE1YTI2Li4wMWM5ZWY0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3VyX1BLLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191cl9QSy5wcm9wZXJ0aWVzCkBAIC00LDE0ICs0LDE0IEBACiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKIG1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQorZXhwb25lbnRpYWxTeW1ib2wgPSBcdTA2NDIKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCitub3RBTnVtYmVyID0gXHUwNkNDXHUwNkMxIFx1MDYzOVx1MDYyRlx1MDYyRiBcdTA2NDZcdTA2QzFcdTA2Q0NcdTA2QkEKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gUEtSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6LnByb3BlcnRpZXMKaW5kZXggMWUyMWZhNi4uN2Y4ZGQwMiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191ei5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXoucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gQUZOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0FGLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0FGLnByb3BlcnRpZXMKaW5kZXggYmY0NDA1Ny4uZTI2MzJlNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9BRi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQUYucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSBcdTA2NkIKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTA2NkMKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDAgXHUwMEE0CitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAogZGVmQ3VycmVuY3lDb2RlID0gQUZOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0FyYWIucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQXJhYi5wcm9wZXJ0aWVzCmluZGV4IGYxNWEyNjAuLmUyNjMyZTYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQXJhYi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQXJhYi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMCBcdTAwQTQKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gIywjIzAuMDBcdTAwQTBcdTAwQTQKK2RlZkN1cnJlbmN5Q29kZSA9IEFGTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9BcmFiX0FGLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0FyYWJfQUYucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY0NDA1Ny4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0FyYWJfQUYucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSBcdTA2NkIKLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUwNjZDCi1wZXJjZW50ID0gXHUwNjZBCi16ZXJvRGlnaXQgPSBcdTA2RjAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gXHUyMjEyCi1leHBvbmVudGlhbFN5bWJvbCA9IFx1MDBEN1x1MDZGMVx1MDZGMF4KLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IFx1MDY2QgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDY2QwotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gQUZOCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0N5cmwucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQ3lybC5wcm9wZXJ0aWVzCmluZGV4IDFlMjFmYTYuLmVkZjU4MGIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQ3lybC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQ3lybC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBVWlMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfQ3lybF9VWi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9DeXJsX1VaLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYzIzODAuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9DeXJsX1VaLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVpTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X0xhdG4ucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfTGF0bi5wcm9wZXJ0aWVzCmluZGV4IDFlMjFmYTYuLmVkZjU4MGIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfTGF0bi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfTGF0bi5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNFx1MDBBMCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBVWlMKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfTGF0bl9VWi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9MYXRuX1VaLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYzIzODAuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9MYXRuX1VaLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLAotZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9IFx1MDBBMAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVpTCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X1VaLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3V6X1VaLnByb3BlcnRpZXMKaW5kZXggMjNjMjM4MC4uZWRmNTgwYiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c191el9VWi5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdXpfVVoucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAsCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKIGRlZkN1cnJlbmN5Q29kZSA9IFVaUwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c192ZS5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c192ZS5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLjE4YTc4MTcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdmUucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3ZlLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitkZWNpbWFsU2VwYXJhdG9yID0gLAorZ3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIHBlcmNlbnQgPSAlCiB6ZXJvRGlnaXQgPSAwCiBwbHVzU2lnbiA9ICsKQEAgLTgsMTAgKzgsMTAgQEAKIHBlck1pbGwgPSBcdTIwMzAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCittb25ldGFyeVNlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKK2N1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCitkZWZDdXJyZW5jeUNvZGUgPSBaQVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdmVfWkEucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdmVfWkEucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkZWE1ZC4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3ZlX1pBLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBaQVIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdmkucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfdmkucHJvcGVydGllcwppbmRleCBmODY3ZDE1Li41NTkwOTNlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3ZpLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c192aS5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9ICwKIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAuCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSAjLCMjMC4wMFx1MDBBMFx1MDBBNAorZGVmQ3VycmVuY3lDb2RlID0gVk5ECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3ZpX1ZOLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3ZpX1ZOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MjFjZWEuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c192aV9WTi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLgotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLgotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9ICMsIyMwLjAwIFx1MDBBNAotZGVmQ3VycmVuY3lDb2RlID0gVk5ECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3dhbC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c193YWwucHJvcGVydGllcwppbmRleCBkNTFjMTc1Li42NDg4ZWQ0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3dhbC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfd2FsLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiBkZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCitncm91cGluZ1NlcGFyYXRvciA9IFx1MTJDOAogcGVyY2VudCA9ICUKIHplcm9EaWdpdCA9IDAKIHBsdXNTaWduID0gKwpAQCAtOSw5ICs5LDkgQEAKIGluZmluaXR5ID0gXHUyMjFFCiBub3RBTnVtYmVyID0gTmFOCiBtb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCittb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gXHUxMkM4CiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3dhbF9FVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c193YWxfRVQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmNDdmOS4uMDAwMDAwMAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3dhbF9FVC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9IC4KLWdyb3VwaW5nU2VwYXJhdG9yID0gXHUxMkM4Ci1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTEyQzgKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gRVRCCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3dvLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfbnJfWkEucHJvcGVydGllcwpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfd28ucHJvcGVydGllcwppbmRleCBmMWRlYTVkLi4zNzMxYjU2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX25yX1pBLnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c193by5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTRcdTAwQTAjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gWE9GCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3hoLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3hoLnByb3BlcnRpZXMKaW5kZXggMjU5MjU1Ny4uMThhNzgxNyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c194aC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfeGgucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKK2dyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCkBAIC05LDkgKzksOSBAQAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3hoX1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3hoX1pBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OTI1NTcuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c194aF9aQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3lvLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3lvLnByb3BlcnRpZXMKaW5kZXggZDUxYzE3NS4uYTk0ODcyMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c195by5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfeW8ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IFVTRAorY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0XHUwMEEwIywjIzAuMDAKK2RlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c195b19ORy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c195b19ORy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGIyMWYzLi4wMDAwMDAwCi0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfeW9fTkcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRlY2ltYWxTZXBhcmF0b3IgPSAuCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKLXBlcmNlbnQgPSAlCi16ZXJvRGlnaXQgPSAwCi1wbHVzU2lnbiA9ICsKLW1pbnVzU2lnbiA9IC0KLWV4cG9uZW50aWFsU3ltYm9sID0gRQotcGVyTWlsbCA9IFx1MjAzMAotaW5maW5pdHkgPSBcdTIyMUUKLW5vdEFOdW1iZXIgPSBOYU4KLW1vbmV0YXJ5U2VwYXJhdG9yID0gLgotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKLWRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKLXBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQgIywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE5HTgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aC5wcm9wZXJ0aWVzCmluZGV4IGJmZTJjYzMuLmVhODIzZDYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemgucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gQ05ZCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hLLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hLLnByb3BlcnRpZXMKaW5kZXggNmY3MWIzMi4uYzg2MmVhYiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9ISy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSEsucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCiBkZWZDdXJyZW5jeUNvZGUgPSBIS0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFucy5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWMxNzUuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBVU0QKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFuc19DTi5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zX0NOLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZmYyYWIuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zX0NOLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1kZWNpbWFsU2VwYXJhdG9yID0gLgotZ3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1wZXJjZW50ID0gJQotemVyb0RpZ2l0ID0gMAotcGx1c1NpZ24gPSArCi1taW51c1NpZ24gPSAtCi1leHBvbmVudGlhbFN5bWJvbCA9IEUKLXBlck1pbGwgPSBcdTIwMzAKLWluZmluaXR5ID0gXHUyMjFFCi1ub3RBTnVtYmVyID0gTmFOCi1tb25ldGFyeVNlcGFyYXRvciA9IC4KLW1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCi1kZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCi1wZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IENOWQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tdF9NVC5wcm9wZXJ0aWVzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zX0hLLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tdF9NVC5wcm9wZXJ0aWVzCnJlbmFtZSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnNfSEsucHJvcGVydGllcwppbmRleCBjMjc1OTI2Li40N2ZlMDNiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX210X01ULnByb3BlcnRpZXMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zX0hLLnByb3BlcnRpZXMKQEAgLTExLDcgKzExLDcgQEAKIG1vbmV0YXJ5U2VwYXJhdG9yID0gLgogbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQogY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0IywjIzAuMDAKLWRlZkN1cnJlbmN5Q29kZSA9IE1UTAorZGVmQ3VycmVuY3lDb2RlID0gSEtECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX210X01ULnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnNfTU8ucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDg1JQpjb3B5IGZyb20gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tdF9NVC5wcm9wZXJ0aWVzCmNvcHkgdG8gdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zX01PLnByb3BlcnRpZXMKaW5kZXggYzI3NTkyNi4uMWY3N2UzOCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c19tdF9NVC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFuc19NTy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwCi1kZWZDdXJyZW5jeUNvZGUgPSBNVEwKK2RlZkN1cnJlbmN5Q29kZSA9IE1PUApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW5zX1NHLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnNfU0cucHJvcGVydGllcwppbmRleCA0Yzc5MjM5Li44ZmNiMTg0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnNfU0cucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnNfU0cucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gU0dECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnQucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudC5wcm9wZXJ0aWVzCmluZGV4IGQ1MWMxNzUuLmQ4Nzc2YjAgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudC5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudC5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gVVNECitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAorZGVmQ3VycmVuY3lDb2RlID0gVFdECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnRfSEsucHJvcGVydGllcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudF9ISy5wcm9wZXJ0aWVzCmluZGV4IDZmNzFiMzIuLmM4NjJlYWIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudF9ISy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfSGFudF9ISy5wcm9wZXJ0aWVzCkBAIC0xMSw3ICsxMSw3IEBACiBtb25ldGFyeVNlcGFyYXRvciA9IC4KIG1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSAsCiBkZWNpbWFsUGF0dGVybiA9ICMsIyMwLiMjIwotc2NpZW50aWZpY1BhdHRlcm4gPSAwLiMjI0UwCitzY2llbnRpZmljUGF0dGVybiA9ICNFMAogcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKIGN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCMsIyMwLjAwOyhcdTAwQTQjLCMjMC4wMCkKIGRlZkN1cnJlbmN5Q29kZSA9IEhLRApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9IYW50X01PLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnRfTU8ucHJvcGVydGllcwppbmRleCA3OGM5MjA0Li4xZjc3ZTM4IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnRfTU8ucHJvcGVydGllcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX0hhbnRfTU8ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gTU9QCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX01PLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX01PLnByb3BlcnRpZXMKaW5kZXggNzhjOTIwNC4uMWY3N2UzOCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9NTy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfTU8ucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCi1jdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMDsoXHUwMEE0IywjIzAuMDApCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gTU9QCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX1NHLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX1NHLnByb3BlcnRpZXMKaW5kZXggNGM3OTIzOS4uOGZjYjE4NCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9TRy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfU0cucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gU0dECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX1RXLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3poX1RXLnByb3BlcnRpZXMKaW5kZXggYTVhM2VjNy4uZDg3NzZiMCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196aF9UVy5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfemhfVFcucHJvcGVydGllcwpAQCAtMTEsNyArMTEsNyBAQAogbW9uZXRhcnlTZXBhcmF0b3IgPSAuCiBtb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAogZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAorc2NpZW50aWZpY1BhdHRlcm4gPSAjRTAKIHBlcmNlbnRQYXR0ZXJuID0gIywjIzAlCiBjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gVFdECmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3p1LnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3p1LnByb3BlcnRpZXMKaW5kZXggMjU5MjU1Ny4uMThhNzgxNyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196dS5wcm9wZXJ0aWVzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L2NvbnN0YW50cy9OdW1iZXJDb25zdGFudHNfenUucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKIGRlY2ltYWxTZXBhcmF0b3IgPSAsCi1ncm91cGluZ1NlcGFyYXRvciA9ICwKK2dyb3VwaW5nU2VwYXJhdG9yID0gXHUwMEEwCiBwZXJjZW50ID0gJQogemVyb0RpZ2l0ID0gMAogcGx1c1NpZ24gPSArCkBAIC05LDkgKzksOSBAQAogaW5maW5pdHkgPSBcdTIyMUUKIG5vdEFOdW1iZXIgPSBOYU4KIG1vbmV0YXJ5U2VwYXJhdG9yID0gLAotbW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvciA9ICwKK21vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3IgPSBcdTAwQTAKIGRlY2ltYWxQYXR0ZXJuID0gIywjIzAuIyMjCi1zY2llbnRpZmljUGF0dGVybiA9IDAuIyMjRTAKK3NjaWVudGlmaWNQYXR0ZXJuID0gI0UwCiBwZXJjZW50UGF0dGVybiA9ICMsIyMwJQotY3VycmVuY3lQYXR0ZXJuID0gXHUwMEE0ICMsIyMwLjAwCitjdXJyZW5jeVBhdHRlcm4gPSBcdTAwQTQjLCMjMC4wMAogZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3p1X1pBLnByb3BlcnRpZXMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9jb25zdGFudHMvTnVtYmVyQ29uc3RhbnRzX3p1X1pBLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OTI1NTcuLjAwMDAwMDAKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvY29uc3RhbnRzL051bWJlckNvbnN0YW50c196dV9aQS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZGVjaW1hbFNlcGFyYXRvciA9ICwKLWdyb3VwaW5nU2VwYXJhdG9yID0gLAotcGVyY2VudCA9ICUKLXplcm9EaWdpdCA9IDAKLXBsdXNTaWduID0gKwotbWludXNTaWduID0gLQotZXhwb25lbnRpYWxTeW1ib2wgPSBFCi1wZXJNaWxsID0gXHUyMDMwCi1pbmZpbml0eSA9IFx1MjIxRQotbm90QU51bWJlciA9IE5hTgotbW9uZXRhcnlTZXBhcmF0b3IgPSAsCi1tb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yID0gLAotZGVjaW1hbFBhdHRlcm4gPSAjLCMjMC4jIyMKLXNjaWVudGlmaWNQYXR0ZXJuID0gMC4jIyNFMAotcGVyY2VudFBhdHRlcm4gPSAjLCMjMCUKLWN1cnJlbmN5UGF0dGVybiA9IFx1MDBBNCAjLCMjMC4wMAotZGVmQ3VycmVuY3lDb2RlID0gWkFSCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL3Rvb2xzL0kxOE5TeW5jLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9pMThuL3Rvb2xzL0kxOE5TeW5jLmphdmEKaW5kZXggMDZiZWQ5YS4uMmJiN2NmYiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvaTE4bi90b29scy9JMThOU3luYy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2kxOG4vdG9vbHMvSTE4TlN5bmMuamF2YQpAQCAtNjQsMTEgKzY0LDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CiAgICAgICByZXR1cm4gIklkZW50aWZpZXMgdGhlIENvbnN0YW50cy9NZXNzYWdlcyBjbGFzcyB0byBiZSBjcmVhdGVkLiAgRm9yIGV4YW1wbGUgY29tLmdvb2dsZS5zYW1wbGUuaTE4bi5jbGllbnQuQ29sb3JzIjsKICAgICB9CkBAIC04NiwxMiArODEsNiBAQAogICB9CiAKICAgcHJpdmF0ZSBjbGFzcyBvdXREaXJIYW5kbGVyIGV4dGVuZHMgQXJnSGFuZGxlclN0cmluZyB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CiAgICAgICByZXR1cm4gIkphdmEgc291cmNlIGRpcmVjdG9yeSwgZGVmYXVsdHMgdG8gdGhlIHJlc291cmNlJ3MgY2xhc3MgcGF0aC4iOwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvanVuaXQvSlVuaXRTaGVsbC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvanVuaXQvSlVuaXRTaGVsbC5qYXZhCmluZGV4IDM5NmRmM2QuLmJiNmY3MjEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2p1bml0L0pVbml0U2hlbGwuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9qdW5pdC9KVW5pdFNoZWxsLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KICAqIAogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CiAgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgpAQCAtMjgsNyArMjgsNyBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5jZmcuUHJvcGVydGllczsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5kZXYuY2ZnLlByb3BlcnR5OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi5qYXZhYy5Db21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnNoZWxsLkJyb3dzZXJXaWRnZXRIb3N0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRldi51dGlsLmFyZy5BcmdIYW5kbGVyTG9nTGV2ZWw7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZGV2LnV0aWwubG9nLlByaW50V3JpdGVyVHJlZUxvZ2dlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5qdW5pdC5jbGllbnQuVGltZW91dEV4Y2VwdGlvbjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5qdW5pdC5jbGllbnQuaW1wbC5HV1RSdW5uZXI7CkBAIC03Nyw2ICs3Nyw3IEBACiAgKiB7QGxpbmsgSlVuaXRNZXNzYWdlUXVldWV9LCB0aHVzIGNsb3NpbmcgdGhlIGxvb3AuCiAgKiA8L3A+CiAgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgY2xhc3MgSlVuaXRTaGVsbCBleHRlbmRzIEdXVFNoZWxsIHsKIAogICAvKioKQEAgLTkwLDYgKzkxLDE5OSBAQAogICAgIHZvaWQgcHJvY2Vzc1Jlc3VsdChUZXN0Q2FzZSB0ZXN0Q2FzZSwgSlVuaXRSZXN1bHQgcmVzdWx0KTsKICAgfQogCisgIGNsYXNzIEFyZ1Byb2Nlc3NvciBleHRlbmRzIEdXVFNoZWxsLkFyZ1Byb2Nlc3NvciB7CisKKyAgICBwdWJsaWMgQXJnUHJvY2Vzc29yKCkgeworICAgICAgc3VwZXIob3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAgIC8vIE92ZXJyaWRlIHBvcnQgdG8gc2V0IGF1dG8gYnkgZGVmYXVsdC4KKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlclBvcnQob3B0aW9ucykgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgeworICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyItcG9ydCIsICJhdXRvIn07CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICAvLyBPdmVycmlkZSBsb2cgbGV2ZWwgdG8gc2V0IFdBUk4gYnkgZGVmYXVsdC4uCisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJMb2dMZXZlbChvcHRpb25zKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgVHlwZSBnZXREZWZhdWx0TG9nTGV2ZWwoKSB7CisgICAgICAgICAgcmV0dXJuIFRyZWVMb2dnZXIuV0FSTjsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckZsYWcoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICAgICAgcmV0dXJuICJDYXVzZXMgeW91ciB0ZXN0IHRvIHJ1biBpbiB3ZWIgKGNvbXBpbGVkKSBtb2RlIChkZWZhdWx0cyB0byBob3N0ZWQgbW9kZSkiOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgICAgIHJldHVybiAiLXdlYiI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gc2V0RmxhZygpIHsKKyAgICAgICAgICBydW5TdHlsZSA9IG5ldyBSdW5TdHlsZUxvY2FsV2ViKEpVbml0U2hlbGwudGhpcyk7CisgICAgICAgICAgbnVtQ2xpZW50cyA9IDE7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdHJpbmcoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICAgICAgcmV0dXJuICJSdW5zIHdlYiBtb2RlIHZpYSBSTUkgdG8gYSBzZXQgb2YgQnJvd3Nlck1hbmFnZXJTZXJ2ZXJzOyAiCisgICAgICAgICAgICAgICsgImUuZy4gcm1pOi8vbG9jYWxob3N0L2llNixybWk6Ly9sb2NhbGhvc3QvZmlyZWZveCI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7CisgICAgICAgICAgcmV0dXJuICItcmVtb3Rld2ViIjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKKyAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsicm1pVXJsIn07CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNVbmRvY3VtZW50ZWQoKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBzdHIpIHsKKyAgICAgICAgICBTdHJpbmdbXSB1cmxzID0gc3RyLnNwbGl0KCIsIik7CisgICAgICAgICAgcnVuU3R5bGUgPSBSdW5TdHlsZVJlbW90ZVdlYi5jcmVhdGUoSlVuaXRTaGVsbC50aGlzLCB1cmxzKTsKKyAgICAgICAgICBudW1DbGllbnRzID0gdXJscy5sZW5ndGg7CisgICAgICAgICAgcmV0dXJuIHJ1blN0eWxlICE9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdHJpbmcoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICAgICAgcmV0dXJuICJSdW5zIHdlYiBtb2RlIHZpYSBIVFRQIHRvIGEgc2V0IG9mIFNlbGVuaXVtIHNlcnZlcnM7ICIKKyAgICAgICAgICAgICAgKyAiZS5nLiBsb2NhbGhvc3Q6NDQ0NC8qZmlyZWZveCxyZW1vdGVob3N0OjQ0NDQvKmlleHBsb3JlIjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgICAgICByZXR1cm4gIi1zZWxlbml1bSI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CisgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7InNlbGVuaXVtSG9zdCJ9OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgc3RyKSB7CisgICAgICAgICAgU3RyaW5nW10gdGFyZ2V0cyA9IHN0ci5zcGxpdCgiLCIpOworICAgICAgICAgIG51bUNsaWVudHMgPSB0YXJnZXRzLmxlbmd0aDsKKyAgICAgICAgICBydW5TdHlsZSA9IFJ1blN0eWxlU2VsZW5pdW0uY3JlYXRlKEpVbml0U2hlbGwudGhpcywgdGFyZ2V0cyk7CisgICAgICAgICAgcmV0dXJuIHJ1blN0eWxlICE9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdHJpbmcoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICAgICAgcmV0dXJuICJSdW4gZXh0ZXJuYWwgYnJvd3NlcnMgaW4gd2ViIG1vZGUgKHBhc3MgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBleGVjdXRhYmxlcy4pIjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgICAgICByZXR1cm4gIi1leHRlcm5hbGJyb3dzZXIiOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYWdBcmdzKCkgeworICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJicm93c2VyUGF0aHMifTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9jdW1lbnRlZCgpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIHN0cikgeworICAgICAgICAgIFN0cmluZ1tdIHBhdGhzID0gc3RyLnNwbGl0KCIsIik7CisgICAgICAgICAgcnVuU3R5bGUgPSBuZXcgUnVuU3R5bGVFeHRlcm5hbEJyb3dzZXIoSlVuaXRTaGVsbC50aGlzLCBwYXRocyk7CisgICAgICAgICAgbnVtQ2xpZW50cyA9IHBhdGhzLmxlbmd0aDsKKyAgICAgICAgICByZXR1cm4gcnVuU3R5bGUgIT0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICAgICAgcmV0dXJuICJDYXVzZXMgdGhlIHN5c3RlbSB0byB3YWl0IGZvciBhIHJlbW90ZSBicm93c2VyIHRvIGNvbm5lY3QiOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgICAgICAgIHJldHVybiAiLW1hbnVhbCI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CisgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7IltudW1DbGllbnRzXSJ9OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgaGFuZGxlKFN0cmluZ1tdIGFyZ3MsIGludCB0YWdJbmRleCkgeworICAgICAgICAgIGludCB2YWx1ZSA9IDE7CisgICAgICAgICAgaWYgKHRhZ0luZGV4ICsgMSA8IGFyZ3MubGVuZ3RoKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlIG5leHQgaXRlbSBpcyBhbiBpbnRlZ2VyLgorICAgICAgICAgICAgICB2YWx1ZSA9IEludGVnZXIucGFyc2VJbnQoYXJnc1t0YWdJbmRleCArIDFdKTsKKyAgICAgICAgICAgICAgaWYgKHZhbHVlID49IDEpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAvLyBmYWxsLXRocm91Z2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgc2V0SW50KDEpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0SW50KGludCB2YWx1ZSkgeworICAgICAgICAgIHJ1blN0eWxlID0gbmV3IFJ1blN0eWxlTWFudWFsKEpVbml0U2hlbGwudGhpcywgdmFsdWUpOworICAgICAgICAgIG51bUNsaWVudHMgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckZsYWcoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CisgICAgICAgICAgcmV0dXJuICJDYXVzZXMgdGhlIGxvZyB3aW5kb3cgYW5kIGJyb3dzZXIgd2luZG93cyB0byBiZSBkaXNwbGF5ZWQ7IHVzZWZ1bCBmb3IgZGVidWdnaW5nIjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgICAgICByZXR1cm4gIi1ub3RIZWFkbGVzcyI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gc2V0RmxhZygpIHsKKyAgICAgICAgICBzZXRIZWFkbGVzcyhmYWxzZSk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgfQorCiAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEpVbml0U3RyYXRlZ3kgaW1wbGVtZW50cyBTdHJhdGVneSB7CiAgICAgcHVibGljIFN0cmluZyBnZXRNb2R1bGVJbmhlcml0KCkgewogICAgICAgcmV0dXJuICJjb20uZ29vZ2xlLmd3dC5qdW5pdC5KVW5pdCI7CkBAIC0yMTIsOCArNDA2LDggQEAKICAgICAgIHVuaXRUZXN0U2hlbGwgPSBuZXcgSlVuaXRTaGVsbCgpOwogICAgICAgdW5pdFRlc3RTaGVsbC5sYXN0TGF1bmNoRmFpbGVkID0gdHJ1ZTsKICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB1bml0VGVzdFNoZWxsLnN5bnRoZXNpemVBcmdzKCk7Ci0gICAgICBpZiAoIXVuaXRUZXN0U2hlbGwucHJvY2Vzc0FyZ3MoYXJncykpIHsKLQorICAgICAgQXJnUHJvY2Vzc29yIGFyZ1Byb2Nlc3NvciA9IHVuaXRUZXN0U2hlbGwubmV3IEFyZ1Byb2Nlc3NvcigpOworICAgICAgaWYgKCFhcmdQcm9jZXNzb3IucHJvY2Vzc0FyZ3MoYXJncykpIHsKICAgICAgICAgdGhyb3cgbmV3IEpVbml0RmF0YWxMYXVuY2hFeGNlcHRpb24oIkVycm9yIHByb2Nlc3Npbmcgc2hlbGwgYXJndW1lbnRzIik7CiAgICAgICB9CiAKQEAgLTIyMyw2ICs0MTcsNyBAQAogICAgICAgaWYgKCF1bml0VGVzdFNoZWxsLnN0YXJ0VXAoKSkgewogICAgICAgICB0aHJvdyBuZXcgSlVuaXRGYXRhbExhdW5jaEV4Y2VwdGlvbigiU2hlbGwgZmFpbGVkIHRvIHN0YXJ0Iik7CiAgICAgICB9CisgICAgICAvLyBUT0RPOiBpbnN0YWxsIGEgc2h1dGRvd24gaG9vaz8gTm90IG5lY2Vzc2FyeSB3aXRoIEdXVFNoZWxsLgogICAgICAgdW5pdFRlc3RTaGVsbC5sYXN0TGF1bmNoRmFpbGVkID0gZmFsc2U7CiAgICAgfQogCkBAIC0yNTAsNiArNDQ1LDE2IEBACiAgIHByaXZhdGUgYm9vbGVhbiBsYXN0TGF1bmNoRmFpbGVkOwogCiAgIC8qKgorICAgKiBXZSBuZWVkIHRvIGtlZXAgYSBoYXJkIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBtb2R1bGUgdGhhdCB3YXMgbGF1bmNoZWQgdW50aWwKKyAgICogYWxsIGNsaWVudCBicm93c2VycyBoYXZlIHN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gdGhlIGN1cnJlbnQgbW9kdWxlLgorICAgKiBGYWlsdXJlIHRvIGRvIHNvIGFsbG93cyB0aGUgbGFzdCBtb2R1bGUgdG8gYmUgR0MnZCwgd2hpY2ggdHJhbnNpdGl2ZWx5CisgICAqIGtpbGxzIHRoZSB7QGxpbmsgY29tLmdvb2dsZS5nd3QuanVuaXQuc2VydmVyLkpVbml0SG9zdEltcGx9IHNlcnZsZXQuIElmIHRoZQorICAgKiBzZXJ2bGV0IGRpZXMsIHRoZSBjbGllbnQgYnJvd3NlcnMgd2lsbCBiZSB1bmFibGUgdG8gdHJhbnNpdGlvbi4KKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorICBwcml2YXRlIE1vZHVsZURlZiBsYXN0TW9kdWxlOworCisgIC8qKgogICAgKiBQb3J0YWwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VydmxldC4KICAgICovCiAgIHByaXZhdGUgSlVuaXRNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlOwpAQCAtMjc4LDIwOCArNDgzLDE4IEBACiAgIHByaXZhdGUgbG9uZyB0ZXN0QmVnaW5UaW1lb3V0OwogCiAgIC8qKgotICAgKiBUaW1lb3V0IGZvciBpbmRpdmlkdWFsIHRlc3QgbWV0aG9kLiAgSWYgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgaXMgbGF0ZXIgCi0gICAqIHRoYW4gdGhpcyB0aW1lc3RhbXAsIHRoZW4gd2UgbmVlZCB0byBwYWNrIHVwIGFuZCBnbyBob21lLiAgWmVybyBmb3IgIm5vdCAKLSAgICogeWV0IHNldCIgKGF0IHRoZSBzdGFydCBvZiBhIHRlc3QpLiAgVGhpcyBpbnRlcnZhbCBiZWdpbnMgd2hlbiB0aGUgCisgICAqIFRpbWVvdXQgZm9yIGluZGl2aWR1YWwgdGVzdCBtZXRob2QuICBJZiBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSBpcyBsYXRlcgorICAgKiB0aGFuIHRoaXMgdGltZXN0YW1wLCB0aGVuIHdlIG5lZWQgdG8gcGFjayB1cCBhbmQgZ28gaG9tZS4gIFplcm8gZm9yICJub3QKKyAgICogeWV0IHNldCIgKGF0IHRoZSBzdGFydCBvZiBhIHRlc3QpLiAgVGhpcyBpbnRlcnZhbCBiZWdpbnMgd2hlbiB0aGUKICAgICogdGVzdEJlZ2luVGltZW91dCBpbnRlcnZhbCBpcyBkb25lLgogICAgKi8KICAgcHJpdmF0ZSBsb25nIHRlc3RNZXRob2RUaW1lb3V0OwotICAKLSAgLyoqCi0gICAqIFdlIG5lZWQgdG8ga2VlcCBhIGhhcmQgcmVmZXJlbmNlIHRvIHRoZSBsYXN0IG1vZHVsZSB0aGF0IHdhcyBsYXVuY2hlZCB1bnRpbAotICAgKiBhbGwgY2xpZW50IGJyb3dzZXJzIGhhdmUgc3VjY2Vzc2Z1bGx5IHRyYW5zaXRpb25lZCB0byB0aGUgY3VycmVudCBtb2R1bGUuCi0gICAqIEZhaWx1cmUgdG8gZG8gc28gYWxsb3dzIHRoZSBsYXN0IG1vZHVsZSB0byBiZSBHQydkLCB3aGljaCB0cmFuc2l0aXZlbHkKLSAgICoga2lsbHMgdGhlIHtAbGluayBjb20uZ29vZ2xlLmd3dC5qdW5pdC5zZXJ2ZXIuSlVuaXRIb3N0SW1wbH0gc2VydmxldC4gSWYgdGhlCi0gICAqIHNlcnZsZXQgZGllcywgdGhlIGNsaWVudCBicm93c2VycyB3aWxsIGJlIHVuYWJsZSB0byB0cmFuc2l0aW9uLgotICAgKi8KLSAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gIHByaXZhdGUgTW9kdWxlRGVmIGxhc3RNb2R1bGU7CiAKICAgLyoqCiAgICAqIEVuZm9yY2UgdGhlIHNpbmdsZXRvbiBwYXR0ZXJuLiBUaGUgY2FsbCB0byB7QGxpbmsgR1dUU2hlbGx9J3MgY3RvciBmb3JjZXMKICAgICogc2VydmVyIG1vZGUgYW5kIGRpc2FibGVzIHByb2Nlc3NpbmcgZXh0cmEgYXJndW1lbnRzIGFzIFVSTHMgdG8gYmUgc2hvd24uCiAgICAqLwogICBwcml2YXRlIEpVbml0U2hlbGwoKSB7Ci0gICAgc3VwZXIodHJ1ZSwgdHJ1ZSk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJGbGFnKCkgewotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgICAgcmV0dXJuICJDYXVzZXMgeW91ciB0ZXN0IHRvIHJ1biBpbiB3ZWIgKGNvbXBpbGVkKSBtb2RlIChkZWZhdWx0cyB0byBob3N0ZWQgbW9kZSkiOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgewotICAgICAgICByZXR1cm4gIi13ZWIiOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIHNldEZsYWcoKSB7Ci0gICAgICAgIHJ1blN0eWxlID0gbmV3IFJ1blN0eWxlTG9jYWxXZWIoSlVuaXRTaGVsbC50aGlzKTsKLSAgICAgICAgbnVtQ2xpZW50cyA9IDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCi0gICAgfSk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXJTdHJpbmcoKSB7Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgICByZXR1cm4gIlJ1bnMgd2ViIG1vZGUgdmlhIFJNSSB0byBhIHNldCBvZiBCcm93c2VyTWFuYWdlclNlcnZlcnM7ICIKLSAgICAgICAgICAgICsgImUuZy4gcm1pOi8vbG9jYWxob3N0L2llNixybWk6Ly9sb2NhbGhvc3QvZmlyZWZveCI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICAgIHJldHVybiAiLXJlbW90ZXdlYiI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJybWlVcmwifTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9jdW1lbnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gc2V0U3RyaW5nKFN0cmluZyBzdHIpIHsKLSAgICAgICAgU3RyaW5nW10gdXJscyA9IHN0ci5zcGxpdCgiLCIpOwotICAgICAgICBydW5TdHlsZSA9IFJ1blN0eWxlUmVtb3RlV2ViLmNyZWF0ZShKVW5pdFNoZWxsLnRoaXMsIHVybHMpOwotICAgICAgICBudW1DbGllbnRzID0gdXJscy5sZW5ndGg7Ci0gICAgICAgIHJldHVybiBydW5TdHlsZSAhPSBudWxsOwotICAgICAgfQotICAgIH0pOwotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU3RyaW5nKCkgewotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgICAgcmV0dXJuICJSdW5zIHdlYiBtb2RlIHZpYSBIVFRQIHRvIGEgc2V0IG9mIFNlbGVuaXVtIHNlcnZlcnM7ICIKLSAgICAgICAgICAgICsgImUuZy4gbG9jYWxob3N0OjQ0NDQvKmZpcmVmb3gscmVtb3RlaG9zdDo0NDQ0LyppZXhwbG9yZSI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICAgIHJldHVybiAiLXNlbGVuaXVtIjsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7InNlbGVuaXVtSG9zdCJ9OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIHNldFN0cmluZyhTdHJpbmcgc3RyKSB7Ci0gICAgICAgIFN0cmluZ1tdIHRhcmdldHMgPSBzdHIuc3BsaXQoIiwiKTsKLSAgICAgICAgbnVtQ2xpZW50cyA9IHRhcmdldHMubGVuZ3RoOwotICAgICAgICBydW5TdHlsZSA9IFJ1blN0eWxlU2VsZW5pdW0uY3JlYXRlKEpVbml0U2hlbGwudGhpcywgdGFyZ2V0cyk7Ci0gICAgICAgIHJldHVybiBydW5TdHlsZSAhPSBudWxsOwotICAgICAgfQotICAgIH0pOwotCi0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyU3RyaW5nKCkgewotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVycG9zZSgpIHsKLSAgICAgICAgcmV0dXJuICJSdW4gZXh0ZXJuYWwgYnJvd3NlcnMgaW4gd2ViIG1vZGUgKHBhc3MgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBleGVjdXRhYmxlcy4pIjsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKLSAgICAgICAgcmV0dXJuICItZXh0ZXJuYWxicm93c2VyIjsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7ImJyb3dzZXJQYXRocyJ9OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIGlzVW5kb2N1bWVudGVkKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdHJpbmcoU3RyaW5nIHN0cikgewotICAgICAgICBTdHJpbmdbXSBwYXRocyA9IHN0ci5zcGxpdCgiLCIpOwotICAgICAgICBydW5TdHlsZSA9IG5ldyBSdW5TdHlsZUV4dGVybmFsQnJvd3NlcihKVW5pdFNoZWxsLnRoaXMsIHBhdGhzKTsKLSAgICAgICAgbnVtQ2xpZW50cyA9IHBhdGhzLmxlbmd0aDsKLSAgICAgICAgcmV0dXJuIHJ1blN0eWxlICE9IG51bGw7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZWdpc3RlckhhbmRsZXIobmV3IEFyZ0hhbmRsZXIoKSB7Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRBcmdzKCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7Ci0gICAgICAgIHJldHVybiAiQ2F1c2VzIHRoZSBzeXN0ZW0gdG8gd2FpdCBmb3IgYSByZW1vdGUgYnJvd3NlciB0byBjb25uZWN0IjsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKLSAgICAgICAgcmV0dXJuICItbWFudWFsIjsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0VGFnQXJncygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7IltudW1DbGllbnRzXSJ9OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQgaGFuZGxlKFN0cmluZ1tdIGFyZ3MsIGludCB0YWdJbmRleCkgewotICAgICAgICBpbnQgdmFsdWUgPSAxOwotICAgICAgICBpZiAodGFnSW5kZXggKyAxIDwgYXJncy5sZW5ndGgpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gU2VlIGlmIHRoZSBuZXh0IGl0ZW0gaXMgYW4gaW50ZWdlci4KLSAgICAgICAgICAgIHZhbHVlID0gSW50ZWdlci5wYXJzZUludChhcmdzW3RhZ0luZGV4ICsgMV0pOwotICAgICAgICAgICAgaWYgKHZhbHVlID49IDEpIHsKLSAgICAgICAgICAgICAgc2V0SW50KHZhbHVlKTsKLSAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIGZhbGwtdGhyb3VnaAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzZXRJbnQoMSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCBzZXRJbnQoaW50IHZhbHVlKSB7Ci0gICAgICAgIHJ1blN0eWxlID0gbmV3IFJ1blN0eWxlTWFudWFsKEpVbml0U2hlbGwudGhpcywgdmFsdWUpOwotICAgICAgICBudW1DbGllbnRzID0gdmFsdWU7Ci0gICAgICB9Ci0KLSAgICB9KTsKLQotICAgIHJlZ2lzdGVySGFuZGxlcihuZXcgQXJnSGFuZGxlckZsYWcoKSB7Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgICByZXR1cm4gIkNhdXNlcyB0aGUgbG9nIHdpbmRvdyBhbmQgYnJvd3NlciB3aW5kb3dzIHRvIGJlIGRpc3BsYXllZDsgdXNlZnVsIGZvciBkZWJ1Z2dpbmciOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgewotICAgICAgICByZXR1cm4gIi1ub3RIZWFkbGVzcyI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gc2V0RmxhZygpIHsKLSAgICAgICAgc2V0SGVhZGxlc3MoZmFsc2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9KTsKLQogICAgIHNldFJ1blRvbWNhdCh0cnVlKTsKICAgICBzZXRIZWFkbGVzcyh0cnVlKTsKIApAQCAtNDk4LDExICs1MTMsNiBAQAogICAgIH0KICAgfQogCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgVHlwZSBkb0dldERlZmF1bHRMb2dMZXZlbCgpIHsKLSAgICByZXR1cm4gVHlwZS5XQVJOOwotICB9Ci0KICAgLyoqCiAgICAqIE5ldmVyIGNoZWNrIGZvciB1cGRhdGVzIGluIEpVbml0IG1vZGUuCiAgICAqLwpAQCAtNTEyLDE2ICs1MjIsNiBAQAogICB9CiAKICAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCBBcmdIYW5kbGVyUG9ydCBnZXRBcmdIYW5kbGVyUG9ydCgpIHsKLSAgICByZXR1cm4gbmV3IEFyZ0hhbmRsZXJQb3J0KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyItcG9ydCIsICJhdXRvIn07Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIEBPdmVycmlkZQogICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplTG9nZ2VyKCkgewogICAgIGlmIChpc0hlYWRsZXNzKCkpIHsKICAgICAgIGNvbnNvbGVMb2dnZXIgPSBuZXcgUHJpbnRXcml0ZXJUcmVlTG9nZ2VyKCk7CkBAIC02MDksOSArNjA5LDcgQEAKICAgICAgICAgKChCaW5kaW5nUHJvcGVydHkpIHVzZXJBZ2VudCkuc2V0QWxsb3dlZFZhbHVlcyh1c2VyQWdlbnRTdHJpbmcpOwogICAgICAgfQogICAgIH0KLSAgICBCcm93c2VyV2lkZ2V0SG9zdCBicm93c2VySG9zdCA9IGdldEJyb3dzZXJIb3N0KCk7Ci0gICAgYXNzZXJ0IChicm93c2VySG9zdCAhPSBudWxsKTsKLSAgICBicm93c2VySG9zdC5jb21waWxlKG1vZHVsZSk7CisgICAgc3VwZXIuY29tcGlsZShnZXRUb3BMb2dnZXIoKSwgbW9kdWxlKTsKICAgfQogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvanVuaXQvcmVtb3RlL0Jyb3dzZXJNYW5hZ2VyU2VydmVyTGF1bmNoZXIuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2p1bml0L3JlbW90ZS9Ccm93c2VyTWFuYWdlclNlcnZlckxhdW5jaGVyLmphdmEKaW5kZXggYjM4M2I2Mi4uZTM4MmEwMCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvanVuaXQvcmVtb3RlL0Jyb3dzZXJNYW5hZ2VyU2VydmVyTGF1bmNoZXIuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9qdW5pdC9yZW1vdGUvQnJvd3Nlck1hbmFnZXJTZXJ2ZXJMYXVuY2hlci5qYXZhCkBAIC03NywxMiArNzcsNiBAQAogICAgKiBsaW5lLgogICAgKi8KICAgcHJpdmF0ZSBjbGFzcyBBcmdIYW5kbGVyUmVnaXN0cmF0aW9uIGV4dGVuZHMgQXJnSGFuZGxlciB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdEFyZ3MoKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIGdldFB1cnBvc2UoKSB7CiAgICAgICByZXR1cm4gIlNwZWNpZnkgdHdvIGFyZ3VtZW50czogYSByZWdpc3RyYXRpb24gaWQgdXNlZCBmb3IgdGhlICIKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2p1bml0L3Rvb2xzL0pVbml0LWhvc3RlZC5sYXVuY2hzcmMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9qdW5pdC90b29scy9KVW5pdC1ob3N0ZWQubGF1bmNoc3JjCmluZGV4IDQ5YTgzNDUuLmVlYTNhNmIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2p1bml0L3Rvb2xzL0pVbml0LWhvc3RlZC5sYXVuY2hzcmMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvanVuaXQvdG9vbHMvSlVuaXQtaG9zdGVkLmxhdW5jaHNyYwpAQCAtMTMsNiArMTMsNiBAQAogQGVjbGlwc2VFeHRyYUxhdW5jaFBhdGhzCiA8L2xpc3RBdHRyaWJ1dGU+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJAcHJvamVjdE5hbWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1EZ3d0LmFyZ3M9JnF1b3Q7LW91dCB3d3ctdGVzdCZxdW90OyAtWG14MjU2TSIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuVk1fQVJHVU1FTlRTIiB2YWx1ZT0iLURnd3QuYXJncz0mcXVvdDstb3V0IHd3dy10ZXN0JnF1b3Q7IC1YbXgyNTZNIEB2bWFyZ3MiLz4KIDxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5hcHBlbmRFbnZpcm9ubWVudFZhcmlhYmxlcyIgdmFsdWU9InRydWUiLz4KIDwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2p1bml0L3Rvb2xzL0pVbml0LXdlYi5sYXVuY2hzcmMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9qdW5pdC90b29scy9KVW5pdC13ZWIubGF1bmNoc3JjCmluZGV4IDU2ZjM1YWQuLjk3ZWZmNzIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2p1bml0L3Rvb2xzL0pVbml0LXdlYi5sYXVuY2hzcmMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvanVuaXQvdG9vbHMvSlVuaXQtd2ViLmxhdW5jaHNyYwpAQCAtMTMsNiArMTMsNiBAQAogQGVjbGlwc2VFeHRyYUxhdW5jaFBhdGhzCiA8L2xpc3RBdHRyaWJ1dGU+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJAcHJvamVjdE5hbWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNX0FSR1VNRU5UUyIgdmFsdWU9Ii1EZ3d0LmFyZ3M9JnF1b3Q7LXdlYiAtb3V0IHd3dy10ZXN0JnF1b3Q7IC1YbXgyNTZNIi8+Cis8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5WTV9BUkdVTUVOVFMiIHZhbHVlPSItRGd3dC5hcmdzPSZxdW90Oy13ZWIgLW91dCB3d3ctdGVzdCZxdW90OyAtWG14MjU2TSBAdm1hcmdzIi8+CiA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuYXBwZW5kRW52aXJvbm1lbnRWYXJpYWJsZXMiIHZhbHVlPSJ0cnVlIi8+CiA8L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL0h5cGVybGluay5nd3QueG1sIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9IeXBlcmxpbmsuZ3d0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3YzEzCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9IeXBlcmxpbmsuZ3d0LnhtbApAQCAtMCwwICsxLDE5IEBACis8bW9kdWxlPgorICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QuY29yZS5Db3JlIi8+CisgIDxpbmhlcml0cyBuYW1lPSJjb20uZ29vZ2xlLmd3dC51c2VyLlVzZXJBZ2VudCIvPgorCisgIDxyZXBsYWNlLXdpdGggY2xhc3M9ImNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLmltcGwuSHlwZXJsaW5rSW1wbE9wZXJhIj4KKyAgICA8d2hlbi10eXBlLWlzIGNsYXNzPSJjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5pbXBsLkh5cGVybGlua0ltcGwiLz4KKyAgICA8d2hlbi1wcm9wZXJ0eS1pcyBuYW1lPSJ1c2VyLmFnZW50IiB2YWx1ZT0ib3BlcmEiLz4KKyAgPC9yZXBsYWNlLXdpdGg+CisKKyAgPHJlcGxhY2Utd2l0aCBjbGFzcz0iY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuaW1wbC5IeXBlcmxpbmtJbXBsU2FmYXJpIj4KKyAgICA8d2hlbi10eXBlLWlzIGNsYXNzPSJjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5pbXBsLkh5cGVybGlua0ltcGwiLz4KKyAgICA8d2hlbi1wcm9wZXJ0eS1pcyBuYW1lPSJ1c2VyLmFnZW50IiB2YWx1ZT0ic2FmYXJpIi8+CisgIDwvcmVwbGFjZS13aXRoPgorCisgIDxyZXBsYWNlLXdpdGggY2xhc3M9ImNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLmltcGwuSHlwZXJsaW5rSW1wbElFIj4KKyAgICA8d2hlbi10eXBlLWlzIGNsYXNzPSJjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5pbXBsLkh5cGVybGlua0ltcGwiLz4KKyAgICA8d2hlbi1wcm9wZXJ0eS1pcyBuYW1lPSJ1c2VyLmFnZW50IiB2YWx1ZT0iaWU2Ii8+CisgIDwvcmVwbGFjZS13aXRoPgorPC9tb2R1bGU+CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL1VzZXIuZ3d0LnhtbCBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvVXNlci5nd3QueG1sCmluZGV4IDQ3NTAyNjYuLjUzOTMxYzQgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvVXNlci5nd3QueG1sCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvVXNlci5nd3QueG1sCkBAIC00MCw3ICs0MCw4IEBACiAgICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QudXNlci5DYXB0aW9uUGFuZWwiIC8+CiAgICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QudXNlci5XaW5kb3ciIC8+CiAgICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QudXNlci5UcmVlIi8+Ci0gICAgCisgICA8aW5oZXJpdHMgbmFtZT0iY29tLmdvb2dsZS5nd3QudXNlci5IeXBlcmxpbmsiLz4KKyAgIDxpbmhlcml0cyBuYW1lPSJjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuRGF0ZVBpY2tlciIvPgogICAgIDxzdXBlci1zb3VyY2UgcGF0aD0idHJhbnNsYXRhYmxlIi8+CiAgICAgPHNvdXJjZSBwYXRoPSJjbGllbnQiLz4KICAgICAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L1dpbmRvdy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvV2luZG93LmphdmEKaW5kZXggZGFlMjQxNi4uMzkyYmQwMSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvV2luZG93LmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvV2luZG93LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5DbG9zZUV2ZW50OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkNsb3NlSGFuZGxlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IYXNDbG9zZUhhbmRsZXJzOwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhhc0hhbmRsZXJzOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhhc1Jlc2l6ZUhhbmRsZXJzOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlJlc2l6ZUV2ZW50OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlJlc2l6ZUhhbmRsZXI7CkBAIC0yOCw2ICsyNyw3IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkd3dEV2ZW50OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyTWFuYWdlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuaHR0cC5jbGllbnQuVVJMOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LmltcGwuV2luZG93SW1wbDsKIApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvaW1wbC9IaXN0b3J5SW1wbC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvaW1wbC9IaXN0b3J5SW1wbC5qYXZhCmluZGV4IGQ1Yzg4MDAuLjYyZTdjNzUgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L2ltcGwvSGlzdG9yeUltcGwuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC9pbXBsL0hpc3RvcnlJbXBsLmphdmEKQEAgLTE3LDEyICsxNywxMiBAQAogCiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuR1dUOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkdXVC5VbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzSGFuZGxlcnM7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzVmFsdWVDaGFuZ2VIYW5kbGVyczsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUV2ZW50OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlZhbHVlQ2hhbmdlSGFuZGxlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlck1hbmFnZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhc0hhbmRsZXJzOwogCiAvKioKICAqIE5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGgKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0FjY2Vzc2liaWxpdHkuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0FjY2Vzc2liaWxpdHkuamF2YQppbmRleCBlNmNmMDU2Li5iNTIzZjE3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9BY2Nlc3NpYmlsaXR5LmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvQWNjZXNzaWJpbGl0eS5qYXZhCkBAIC01OSw2ICs1OSw3IEBACiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRFX0VYUEFOREVEID0gImFyaWEtZXhwYW5kZWQiOwogICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFURV9MRVZFTCA9ICJhcmlhLWxldmVsIjsKICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVEVfSEFTUE9QVVAgPSAiYXJpYS1oYXNwb3B1cCI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRFX1BSRVNTRUQgPSAiYXJpYS1wcmVzc2VkIjsKICAgCiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUVfUk9MRSA9ICJyb2xlIjsKIApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvQ2hlY2tCb3guamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0NoZWNrQm94LmphdmEKaW5kZXggYTllYmE0Zi4uYTQwNzAwYiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvQ2hlY2tCb3guamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9DaGVja0JveC5qYXZhCkBAIC0xMzUsNiArMTM1LDExIEBACiAgICAgcmV0dXJuIERPTS5nZXRJbm5lclRleHQobGFiZWxFbGVtKTsKICAgfQogCisgIC8qKgorICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBjaGVjayBib3ggaXMgY3VycmVudGx5IGNoZWNrZWQuCisgICAqIAorICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjaGVjayBib3ggaXMgY2hlY2tlZAorICAgKi8KICAgcHVibGljIEJvb2xlYW4gZ2V0VmFsdWUoKSB7CiAgICAgcmV0dXJuIGlzQ2hlY2tlZCgpOwogICB9CkBAIC0xNjMsNyArMTY4LDcgQEAKICAgICogQ2hlY2tzIG9yIHVuY2hlY2tzIHRoaXMgY2hlY2sgYm94LiBEb2VzIG5vdCBmaXJlIHtAbGluayBWYWx1ZUNoYW5nZUV2ZW50fS4KICAgICogKElmIHlvdSB3YW50IHRoZSBldmVudCB0byBmaXJlLCB1c2Uge0BsaW5rICNzZXRWYWx1ZShib29sZWFuLCBib29sZWFuKX0pCiAgICAqIAotICAgKiBAcGFyYW0gY2hlY2tlZCA8Y29kZT50cnVlPC9jb2RlPiB0byBjaGVjayB0aGUgY2hlY2sgYm94CisgICAqIEBwYXJhbSBjaGVja2VkIDxjb2RlPnRydWU8L2NvZGU+IHRvIGNoZWNrIHRoZSBjaGVjayBib3guCiAgICAqLwogICBwdWJsaWMgdm9pZCBzZXRDaGVja2VkKGJvb2xlYW4gY2hlY2tlZCkgewogICAgIERPTS5zZXRFbGVtZW50UHJvcGVydHlCb29sZWFuKGlucHV0RWxlbSwgImNoZWNrZWQiLCBjaGVja2VkKTsKQEAgLTIxNCwxMiArMjE5LDI5IEBACiAgICAgRE9NLnNldElubmVyVGV4dChsYWJlbEVsZW0sIHRleHQpOwogICB9CiAKKyAgLyoqCisgICAqIENoZWNrcyBvciB1bmNoZWNrcyB0aGUgdGV4dCBib3guIAorICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSB0byBjaGVjaywgZmFsc2UgdG8gdW5jaGVjay4gTXVzdCBub3QgYmUgbnVsbC4KKyAgICogQHRob3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB2YWx1ZSBpcyBudWxsCisgICAqLwogICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShCb29sZWFuIHZhbHVlKSB7CiAgICAgc2V0VmFsdWUodmFsdWUsIGZhbHNlKTsKICAgfQogCisgIC8qKgorICAgKiBDaGVja3Mgb3IgdW5jaGVja3MgdGhlIHRleHQgYm94LCBmaXJpbmcge0BsaW5rIFZhbHVlQ2hhbmdlRXZlbnR9CisgICAqIGlmIGFwcHJvcHJpYXRlLgorICAgKgorICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSB0byBjaGVjaywgZmFsc2UgdG8gdW5jaGVjay4gTXVzdCBub3QgYmUgbnVsbC4KKyAgICogQHBhcmFtIGZpcmVFdmVudHMgSWYgdHJ1ZSwgYW5kIHZhbHVlIGhhcyBjaGFuZ2VkLCBmaXJlIGEKKyAgICoge0BsaW5rIFZhbHVlQ2hhbmdlRXZlbnR9CisgICAqIEB0aG93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdmFsdWUgaXMgbnVsbAorICAgKi8KICAgcHVibGljIHZvaWQgc2V0VmFsdWUoQm9vbGVhbiB2YWx1ZSwgYm9vbGVhbiBmaXJlRXZlbnRzKSB7Ci0gICAgYXNzZXJ0IG51bGwgIT0gdmFsdWUgOiAiVmFsdWUgbXVzdCBub3QgYmUgbnVsbCI7CisgICAgaWYgKHZhbHVlID09IG51bGwpIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZhbHVlIG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICB9CisKICAgICBpZiAoaXNDaGVja2VkKCkgPT0gdmFsdWUpIHsKICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9DdXN0b21CdXR0b24uamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0N1c3RvbUJ1dHRvbi5qYXZhCmluZGV4IDM1YjQ4MTcuLjg5ZWZiOWIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0N1c3RvbUJ1dHRvbi5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0N1c3RvbUJ1dHRvbi5qYXZhCkBAIC02ODEsNiArNjgxLDkgQEAKICAgICAgIHN1cGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgY2xlYW51cENhcHR1cmVTdGF0ZSgpOworICAgICAgICBBY2Nlc3NpYmlsaXR5LnJlbW92ZVN0YXRlKGdldEVsZW1lbnQoKSwgQWNjZXNzaWJpbGl0eS5TVEFURV9QUkVTU0VEKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldEFyaWFQcmVzc2VkKGdldEN1cnJlbnRGYWNlKCkpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtODM3LDYgKzg0MCwxMCBAQAogICAgICAgY3VyRmFjZSA9IG5ld0ZhY2U7CiAgICAgICBzZXRDdXJyZW50RmFjZUVsZW1lbnQobmV3RmFjZS5nZXRGYWNlKCkpOwogICAgICAgYWRkU3R5bGVEZXBlbmRlbnROYW1lKGN1ckZhY2UuZ2V0TmFtZSgpKTsKKworICAgICAgaWYgKGlzRW5hYmxlZCgpKSB7CisgICAgICAgIHNldEFyaWFQcmVzc2VkKG5ld0ZhY2UpOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC05MDYsNiArOTEzLDEyIEBACiAgICAgfQogICB9CiAKKyAgcHJpdmF0ZSB2b2lkIHNldEFyaWFQcmVzc2VkKEZhY2UgbmV3RmFjZSkgeworICAgIGJvb2xlYW4gcHJlc3NlZCA9IChuZXdGYWNlLmdldEZhY2VJRCgpICYgRE9XTl9BVFRSSUJVVEUpID09IDE7CisgICAgQWNjZXNzaWJpbGl0eS5zZXRTdGF0ZShnZXRFbGVtZW50KCksIEFjY2Vzc2liaWxpdHkuU1RBVEVfUFJFU1NFRCwKKyAgICAgICAgcHJlc3NlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICB9CisKICAgLyoqCiAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmFjZSBiYXNlZCBvbiB0aGUgZmFjZUlELgogICAgKiAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0Rpc2Nsb3N1cmVQYW5lbC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGlzY2xvc3VyZVBhbmVsLmphdmEKaW5kZXggMzJlNmJlOC4uODdjYmJlYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGlzY2xvc3VyZVBhbmVsLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGlzY2xvc3VyZVBhbmVsLmphdmEKQEAgLTUwLDYgKzUwLDcgQEAKICAqIHNlbGVjdG9yOjxici8+IC5nd3QtRGlzY2xvc3VyZVBhbmVsLW9wZW4gLmhlYWRlciB7IC4uLiB9CiAgKiA8L3A+CiAgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgZmluYWwgY2xhc3MgRGlzY2xvc3VyZVBhbmVsIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKICAgICBGaXJlc0Rpc2Nsb3N1cmVFdmVudHMsIEhhc1dpZGdldHMsIEhhc0FuaW1hdGlvbiwKICAgICBIYXNPcGVuSGFuZGxlcnM8RGlzY2xvc3VyZVBhbmVsPiwgSGFzQ2xvc2VIYW5kbGVyczxEaXNjbG9zdXJlUGFuZWw+IHsKQEAgLTI2MSw4ICsyNjIsNyBAQAogCiAgIC8qKgogICAgKiB0b3AgbGV2ZWwgd2lkZ2V0LiBUaGUgZmlyc3QgY2hpbGQgd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB7QGxpbmsgI2hlYWRlcn0uCi0gICAqIFRoZSBzZWNvbmQgY2hpbGQgd2lsbCBlaXRoZXIgbm90IGV4aXN0IG9yIGJlIGEgbm9uLW51bGwgdG8gcmVmZXJlbmNlIHRvCi0gICAqIHtAbGluayAjY29udGVudH0uCisgICAqIFRoZSBzZWNvbmQgY2hpbGQgd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB7QGxpbmsgI2NvbnRlbnRXcmFwcGVyfS4KICAgICovCiAgIHByaXZhdGUgZmluYWwgVmVydGljYWxQYW5lbCBtYWluUGFuZWwgPSBuZXcgVmVydGljYWxQYW5lbCgpOwogCkBAIC0yNzYsMTEgKzI3Niw2IEBACiAgICAqLwogICBwcml2YXRlIGZpbmFsIENsaWNrYWJsZUhlYWRlciBoZWFkZXIgPSBuZXcgQ2xpY2thYmxlSGVhZGVyKCk7CiAKLSAgLyoqCi0gICAqIHRoZSBjb250ZW50IHdpZGdldCwgdGhpcyBjYW4gYmUgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgV2lkZ2V0IGNvbnRlbnQ7Ci0KICAgcHJpdmF0ZSBib29sZWFuIGlzQW5pbWF0aW9uRW5hYmxlZCA9IGZhbHNlOwogCiAgIHByaXZhdGUgYm9vbGVhbiBpc09wZW4gPSBmYWxzZTsKQEAgLTM5MSw3ICszODYsNyBAQAogICAgKiBAcmV0dXJuIHRoZSBwYW5lbCdzIGN1cnJlbnQgY29udGVudCB3aWRnZXQKICAgICovCiAgIHB1YmxpYyBXaWRnZXQgZ2V0Q29udGVudCgpIHsKLSAgICByZXR1cm4gY29udGVudDsKKyAgICByZXR1cm4gY29udGVudFdyYXBwZXIuZ2V0V2lkZ2V0KCk7CiAgIH0KIAogICAvKioKQEAgLTQ2Miw3ICs0NTcsNyBAQAogICAgKiBAcGFyYW0gY29udGVudCB0aGUgd2lkZ2V0IHRvIGJlIHVzZWQgYXMgdGhlIGNvbnRlbnQgcGFuZWwKICAgICovCiAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoV2lkZ2V0IGNvbnRlbnQpIHsKLSAgICBmaW5hbCBXaWRnZXQgY3VycmVudENvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7CisgICAgZmluYWwgV2lkZ2V0IGN1cnJlbnRDb250ZW50ID0gZ2V0Q29udGVudCgpOwogCiAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGNvbnRlbnQgd2lkZ2V0LgogICAgIGlmIChjdXJyZW50Q29udGVudCAhPSBudWxsKSB7CkBAIC00NzEsNyArNDY2LDYgQEAKICAgICB9CiAKICAgICAvLyBBZGQgbmV3IGNvbnRlbnQgd2lkZ2V0IGlmICE9IG51bGwuCi0gICAgdGhpcy5jb250ZW50ID0gY29udGVudDsKICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7CiAgICAgICBjb250ZW50V3JhcHBlci5zZXRXaWRnZXQoY29udGVudCk7CiAgICAgICBjb250ZW50LmFkZFN0eWxlTmFtZShTVFlMRU5BTUVfQ09OVEVOVCk7CkBAIC01NDQsNyArNTM4LDcgQEAKICAgICAgIGFkZFN0eWxlRGVwZW5kZW50TmFtZShTVFlMRU5BTUVfU1VGRklYX0NMT1NFRCk7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkgeworICAgIGlmIChnZXRDb250ZW50KCkgIT0gbnVsbCkgewogICAgICAgaWYgKGNvbnRlbnRBbmltYXRpb24gPT0gbnVsbCkgewogICAgICAgICBjb250ZW50QW5pbWF0aW9uID0gbmV3IENvbnRlbnRBbmltYXRpb24oKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0ZpcmVzRGlzY2xvc3VyZUV2ZW50cy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRmlyZXNEaXNjbG9zdXJlRXZlbnRzLmphdmEKaW5kZXggNmVhNDNiMi4uMjczMTExNyAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRmlyZXNEaXNjbG9zdXJlRXZlbnRzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRmlyZXNEaXNjbG9zdXJlRXZlbnRzLmphdmEKQEAgLTE1LDEyICsxNSwxOCBAQAogICovCiBwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpOwogCisKIC8qKgotICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGZpcmVzIHRoZSBldmVudHMgZGVmaW5lZCBieQotICogdGhlIHtAbGluayBEaXNjbG9zdXJlSGFuZGxlcn0gaW50ZXJmYWNlLgorICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGZpcmVzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKKyAqIHtAbGluayBEaXNjbG9zdXJlSGFuZGxlcn0gaW50ZXJmYWNlLgorICogCisgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhhc09wZW5IYW5kbGVyc30KKyAqICAgICAgICAgICAgIGFuZCB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzQ2xvc2VIYW5kbGVyc30KKyAqICAgICAgICAgICAgIGluc3RlYWQKICAqLworQERlcHJlY2F0ZWQKIHB1YmxpYyBpbnRlcmZhY2UgRmlyZXNEaXNjbG9zdXJlRXZlbnRzIHsKLSAgCisKICAgLyoqCiAgICAqIEFkZHMgYSBoYW5kbGVyIGludGVyZmFjZSB0byByZWNlaXZlIG9wZW4gZXZlbnRzLgogICAgKiAKQEAgLTI5LDcgKzM1LDcgQEAKICAgICovCiAgIEBEZXByZWNhdGVkCiAgIHZvaWQgYWRkRXZlbnRIYW5kbGVyKERpc2Nsb3N1cmVIYW5kbGVyIGhhbmRsZXIpOwotICAKKwogICAvKioKICAgICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBpbnRlcmZhY2UuCiAgICAqIApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRmlyZXNGb3JtRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9GaXJlc0Zvcm1FdmVudHMuamF2YQppbmRleCBhNGE2NTQxLi5hOTk1MzVlIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9GaXJlc0Zvcm1FdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9GaXJlc0Zvcm1FdmVudHMuamF2YQpAQCAtMTgsMTUgKzE4LDE5IEBACiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBmaXJlcyB0aGUgZXZlbnRzIGRlZmluZWQgYnkgdGhlCiAgKiB7QGxpbmsgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRm9ybUhhbmRsZXJ9IGludGVyZmFjZS4KKyAqIAorICogQGRlcHJlY2F0ZWQgT25seSB7QGxpbmsgRm9ybVBhbmVsfSB3YXMgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgaW50ZXJmYWNlLgorICogICAgICAgICAgICAgSW5zdGVhZCwgaXQgbm93IHVzZXMge0BsaW5rIEZvcm1QYW5lbC5TdWJtaXRDb21wbGV0ZUV2ZW50fSBhbmQKKyAqICAgICAgICAgICAgIHtAbGluayBTdWJtaXRFdmVudH0uCiAgKi8KLQorQERlcHJlY2F0ZWQKIHB1YmxpYyBpbnRlcmZhY2UgRmlyZXNGb3JtRXZlbnRzIHsKIAogICAvKioKICAgICogQWRkcyBhIGhhbmRsZXIgaW50ZXJmYWNlIHRvIHJlY2VpdmUgY2xpY2sgZXZlbnRzLgogICAgKiAKICAgICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBGb3JtUGFuZWwjYWRkU3VibWl0Q29tcGxldGVIYW5kbGVyfSBhbmQKLSAgICoge0BsaW5rIEZvcm1QYW5lbCNhZGRTdWJtaXRIYW5kbGVyfSBpbnN0ZWFkCisgICAqICAgICAgICAgICAgIHtAbGluayBGb3JtUGFuZWwjYWRkU3VibWl0SGFuZGxlcn0gaW5zdGVhZAogICAgKiBAcGFyYW0gaGFuZGxlciB0aGUgaGFuZGxlciBpbnRlcmZhY2UgdG8gYWRkCiAgICAqLwogICBARGVwcmVjYXRlZApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRmlyZXNTdWdnZXN0aW9uRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9GaXJlc1N1Z2dlc3Rpb25FdmVudHMuamF2YQppbmRleCAxZTI0ZDU3Li4wNjI3YTZmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9GaXJlc1N1Z2dlc3Rpb25FdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9GaXJlc1N1Z2dlc3Rpb25FdmVudHMuamF2YQpAQCAtMTgsNyArMTgsMTIgQEAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGZpcmVzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKICAqIHtAbGluayBTdWdnZXN0aW9uSGFuZGxlcn0gaW50ZXJmYWNlLgorICogCisgKiBAZGVwcmVjYXRlZCB1c2UKKyAqICAgICAgICAgICAgIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IYXNTZWxlY3Rpb25IYW5kbGVyc30KKyAqICAgICAgICAgICAgIGluc3RlYWQuCiAgKi8KK0BEZXByZWNhdGVkCiBwdWJsaWMgaW50ZXJmYWNlIEZpcmVzU3VnZ2VzdGlvbkV2ZW50cyB7CiAKICAgLyoqCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Gb2N1c1BhbmVsLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Gb2N1c1BhbmVsLmphdmEKaW5kZXggYThmZWI3NS4uYTA2NjVmNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRm9jdXNQYW5lbC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0ZvY3VzUGFuZWwuamF2YQpAQCAtNTAsNiArNTAsNyBAQAogICogQSBzaW1wbGUgcGFuZWwgdGhhdCBtYWtlcyBpdHMgY29udGVudHMgZm9jdXNhYmxlLCBhbmQgYWRkcyB0aGUgYWJpbGl0eSB0bwogICogY2F0Y2ggbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cy4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBGb2N1c1BhbmVsIGV4dGVuZHMgU2ltcGxlUGFuZWwgaW1wbGVtZW50cyBIYXNGb2N1cywKICAgICBTb3VyY2VzQ2xpY2tFdmVudHMsIFNvdXJjZXNNb3VzZUV2ZW50cywgU291cmNlc01vdXNlV2hlZWxFdmVudHMsCiAgICAgSGFzQWxsTW91c2VIYW5kbGVycywgSGFzQ2xpY2tIYW5kbGVycywgSGFzQWxsS2V5SGFuZGxlcnMsCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Gb2N1c1dpZGdldC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRm9jdXNXaWRnZXQuamF2YQppbmRleCAyYzA3NTdhLi43Y2RjYjEzIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Gb2N1c1dpZGdldC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0ZvY3VzV2lkZ2V0LmphdmEKQEAgLTUxLDYgKzUxLDcgQEAKIC8qKgogICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbW9zdCB3aWRnZXRzIHRoYXQgY2FuIHJlY2VpdmUga2V5Ym9hcmQgZm9jdXMuCiAgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRm9jdXNXaWRnZXQgZXh0ZW5kcyBXaWRnZXQgaW1wbGVtZW50cyBTb3VyY2VzQ2xpY2tFdmVudHMsCiAgICAgSGFzQ2xpY2tIYW5kbGVycywgSGFzRm9jdXMsIEhhc0FsbEZvY3VzSGFuZGxlcnMsIEhhc0FsbEtleUhhbmRsZXJzLAogICAgIEhhc0FsbE1vdXNlSGFuZGxlcnMsIFNvdXJjZXNNb3VzZUV2ZW50cyB7CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Gb3JtUGFuZWwuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0Zvcm1QYW5lbC5qYXZhCmluZGV4IDhiNDg5ZTMuLjYxOTg0OWUgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0Zvcm1QYW5lbC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0Zvcm1QYW5lbC5qYXZhCkBAIC01OSw2ICs1OSw3IEBACiAgKiB7QGV4YW1wbGUgY29tLmdvb2dsZS5nd3QuZXhhbXBsZXMuRm9ybVBhbmVsRXhhbXBsZX0KICAqIDwvcD4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBGb3JtUGFuZWwgZXh0ZW5kcyBTaW1wbGVQYW5lbCBpbXBsZW1lbnRzIEZpcmVzRm9ybUV2ZW50cywKICAgICBGb3JtUGFuZWxJbXBsSG9zdCB7CiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSFRNTFRhYmxlLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9IVE1MVGFibGUuamF2YQppbmRleCAwODk5YmU4Li43N2JkNWViIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9IVE1MVGFibGUuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9IVE1MVGFibGUuamF2YQpAQCAtMzcsNiArMzcsNyBAQAogICogPGltZyBjbGFzcz0nZ2FsbGVyeScgc3JjPSdUYWJsZS5wbmcnLz4KICAqIDwvcD4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBIVE1MVGFibGUgZXh0ZW5kcyBQYW5lbCBpbXBsZW1lbnRzIFNvdXJjZXNUYWJsZUV2ZW50cywKICAgICBIYXNDbGlja0hhbmRsZXJzIHsKICAgCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9IYXNGb2N1cy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSGFzRm9jdXMuamF2YQppbmRleCA2ZmI0Yjc1Li5jODY5YmQ0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9IYXNGb2N1cy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0hhc0ZvY3VzLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGNhbiByZWNlaXZlIGtleWJvYXJkIGZvY3VzLgogICovCitAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQogcHVibGljIGludGVyZmFjZSBIYXNGb2N1cyBleHRlbmRzIFNvdXJjZXNGb2N1c0V2ZW50cywgU291cmNlc0tleWJvYXJkRXZlbnRzIHsKIAogICAvKioKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0hhc1ZhbHVlLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9IYXNWYWx1ZS5qYXZhCmluZGV4IDBjN2QzNmYuLmQ4ZWMzODkgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0hhc1ZhbHVlLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSGFzVmFsdWUuamF2YQpAQCAtMTgsMTMgKzE4LDEwIEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzVmFsdWVDaGFuZ2VIYW5kbGVyczsKIAogLyoqCi0gKiBBbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHNob3VsZCBiZSBhIHVzZXIgaW5wdXQgd2lkZ2V0LCB3aGVyZQotICogdGhlIHVzZXIgYW5kIHByb2dyYW1tZXIgY2FuIGJvdGggc2V0IGFuZCBnZXQgdGhlIG9iamVjdCdzIHZhbHVlLgotICogPHA+Ci0gKiBJdCBpcyBhIHJlcXVpcmVtZW50IHRoYXQgYSB2YWx1ZSBwYXNzZWQgdG8ge0BsaW5rIHNldFZhbHVlfSBiZQotICoge0BsaW5rIE9iamVjdCNlcXVhbHN9IHRvIHRoYXQgcmV0dXJuZWQgYnkgYW4gaW1tZWRpYXRlbHkgc3VjY2VlZGluZyBjYWxsIHRvCi0gKiB7QGxpbmsgZ2V0VmFsdWV9LCBvciB0aGF0IGJvdGggYmUgbnVsbC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IGEgcmVxdWlyZW1lbnQKLSAqIHRoYXQgPGNvZGU+c2V0VmFsdWUobnVsbCk8L2NvZGU+IGJlIHN1cHBvcnRlZCBieSBhbGwgaW1wbGVtZW50b3JzLgorICogQW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBzaG91bGQgYmUgYSB1c2VyIGlucHV0CisgKiB3aWRnZXQsIHdoZXJlIHRoZSB1c2VyIGFuZCBwcm9ncmFtbWVyIGNhbiBib3RoIHNldCBhbmQgZ2V0IHRoZQorICogb2JqZWN0J3MgdmFsdWUuIEl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSB1bmlmaWVkIGludGVyZmFjZSB0bworICogd2lkZ2V0cyB3aXRoICJhdG9taWMiIHZhbHVlcywgbGlrZSBTdHJpbmdzIGFuZCBEYXRlcy4KICAqIAogICogQHBhcmFtIDxUPiB0aGUgdHlwZSBvZiB2YWx1ZS4KICAqLwpAQCAtNDMsNiArNDAsMTAgQEAKICAgICogPHA+CiAgICAqIEl0IGlzIGFjY2VwdGFibGUgdG8gZmFpbCBhc3NlcnRpb25zIG9yIHRocm93IChkb2N1bWVudGVkKSB1bmNoZWNrZWQKICAgICogZXhjZXB0aW9ucyBpbiByZXNwb25zZSB0byBiYWQgdmFsdWVzLgorICAgKiA8cD4KKyAgICogQnkgY29udmVudGlvbiwgR1dUIHdpZGdldHMgdGhhdCBjYW4gYmUgY2xlYXJlZCBhY2NlcHQgbnVsbCBmb3IKKyAgICogPGNvZGU+dmFsdWU8L2NvZGU+LCBidXQgaXQgaXMgYWNjZXB0YWJsZSBmb3Igd2lkZ2V0cyB0aGF0IGNhbm5vdAorICAgKiBiZSBjbGVhcmVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgbnVsbCB2YWx1ZXMuCiAgICAqIAogICAgKiBAcGFyYW0gdmFsdWUgdGhlIG9iamVjdCdzIG5ldyB2YWx1ZQogICAgKi8KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0h5cGVybGluay5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSHlwZXJsaW5rLmphdmEKaW5kZXggOTgxZWQ5ZS4uYzRjZWVhZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSHlwZXJsaW5rLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSHlwZXJsaW5rLmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aTsKIAoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkdXVDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5DbGlja0hhbmRsZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5IYXNDbGlja0hhbmRsZXJzOwpAQCAtMjMsNiArMjQsNyBAQAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkVsZW1lbnQ7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuRXZlbnQ7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuSGlzdG9yeTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5pbXBsLkh5cGVybGlua0ltcGw7CiAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBzZXJ2ZXMgYXMgYW4gImludGVybmFsIiBoeXBlcmxpbmsuIFRoYXQgaXMsIGl0IGlzIGEgbGluayB0bwpAQCAtNDksMjAgKzUxLDIwIEBACiAgKiA8aDM+RXhhbXBsZTwvaDM+IHtAZXhhbXBsZSBjb20uZ29vZ2xlLmd3dC5leGFtcGxlcy5IaXN0b3J5RXhhbXBsZX0KICAqIDwvcD4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBIeXBlcmxpbmsgZXh0ZW5kcyBXaWRnZXQgaW1wbGVtZW50cyBIYXNIVE1MLCBTb3VyY2VzQ2xpY2tFdmVudHMsCiAgICAgSGFzQ2xpY2tIYW5kbGVycyB7CiAKLSAgcHJpdmF0ZSBFbGVtZW50IGFuY2hvckVsZW07CisgIHByaXZhdGUgc3RhdGljIEh5cGVybGlua0ltcGwgaW1wbCA9IEdXVC5jcmVhdGUoSHlwZXJsaW5rSW1wbC5jbGFzcyk7CisgIAorICBwcml2YXRlIGZpbmFsIEVsZW1lbnQgYW5jaG9yRWxlbSA9IERPTS5jcmVhdGVBbmNob3IoKTsKICAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0SGlzdG9yeVRva2VuOwogCiAgIC8qKgogICAgKiBDcmVhdGVzIGFuIGVtcHR5IGh5cGVybGluay4KICAgICovCiAgIHB1YmxpYyBIeXBlcmxpbmsoKSB7Ci0gICAgc2V0RWxlbWVudChET00uY3JlYXRlRGl2KCkpOwotICAgIERPTS5hcHBlbmRDaGlsZChnZXRFbGVtZW50KCksIGFuY2hvckVsZW0gPSBET00uY3JlYXRlQW5jaG9yKCkpOwotICAgIHNpbmtFdmVudHMoRXZlbnQuT05DTElDSyk7Ci0gICAgc2V0U3R5bGVOYW1lKCJnd3QtSHlwZXJsaW5rIik7CisgICAgdGhpcyhET00uY3JlYXRlRGl2KCkpOwogICB9CiAKICAgLyoqCkBAIC05NCw2ICs5NiwxOCBAQAogICAgIHNldFRleHQodGV4dCk7CiAgICAgc2V0VGFyZ2V0SGlzdG9yeVRva2VuKHRhcmdldEhpc3RvcnlUb2tlbik7CiAgIH0KKyAgCisgIHByb3RlY3RlZCBIeXBlcmxpbmsoRWxlbWVudCBlbGVtKSB7CisgICAgaWYgKGVsZW0gPT0gbnVsbCkgeworICAgICAgc2V0RWxlbWVudChhbmNob3JFbGVtKTsKKyAgICB9IGVsc2UgeworICAgICAgc2V0RWxlbWVudChlbGVtKTsKKyAgICAgIERPTS5hcHBlbmRDaGlsZChnZXRFbGVtZW50KCksIGFuY2hvckVsZW0pOworICAgIH0KKworICAgIHNpbmtFdmVudHMoRXZlbnQuT05DTElDSyk7CisgICAgc2V0U3R5bGVOYW1lKCJnd3QtSHlwZXJsaW5rIik7CisgIH0KIAogICBwdWJsaWMgSGFuZGxlclJlZ2lzdHJhdGlvbiBhZGRDbGlja0hhbmRsZXIoQ2xpY2tIYW5kbGVyIGhhbmRsZXIpIHsKICAgICByZXR1cm4gYWRkSGFuZGxlcihoYW5kbGVyLCBDbGlja0V2ZW50LmdldFR5cGUoKSk7CkBAIC0xMjYsOCArMTQwLDExIEBACiAgIHB1YmxpYyB2b2lkIG9uQnJvd3NlckV2ZW50KEV2ZW50IGV2ZW50KSB7CiAgICAgaWYgKERPTS5ldmVudEdldFR5cGUoZXZlbnQpID09IEV2ZW50Lk9OQ0xJQ0spIHsKICAgICAgIHN1cGVyLm9uQnJvd3NlckV2ZW50KGV2ZW50KTsKLSAgICAgIEhpc3RvcnkubmV3SXRlbSh0YXJnZXRIaXN0b3J5VG9rZW4pOwotICAgICAgRE9NLmV2ZW50UHJldmVudERlZmF1bHQoZXZlbnQpOworICAgICAgCisgICAgICBpZiAoaW1wbC5oYW5kbGVBc0NsaWNrKGV2ZW50KSkgeworICAgICAgICBIaXN0b3J5Lm5ld0l0ZW0oZ2V0VGFyZ2V0SGlzdG9yeVRva2VuKCkpOworICAgICAgICBET00uZXZlbnRQcmV2ZW50RGVmYXVsdChldmVudCk7CisgICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0ltYWdlLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9JbWFnZS5qYXZhCmluZGV4IDA5ZDk2OGMuLjdkZGZlZmYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0ltYWdlLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvSW1hZ2UuamF2YQpAQCAtODUsNiArODUsNyBAQAogICoge0BleGFtcGxlIGNvbS5nb29nbGUuZ3d0LmV4YW1wbGVzLkltYWdlRXhhbXBsZX0KICAqIDwvcD4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBJbWFnZSBleHRlbmRzIFdpZGdldCBpbXBsZW1lbnRzIFNvdXJjZXNMb2FkRXZlbnRzLAogICAgIEhhc0xvYWRIYW5kbGVycywgSGFzRXJyb3JIYW5kbGVycywgU291cmNlc0NsaWNrRXZlbnRzLCBIYXNDbGlja0hhbmRsZXJzLAogICAgIEhhc0FsbE1vdXNlSGFuZGxlcnMsIFNvdXJjZXNNb3VzZUV2ZW50cyB7CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9JbmxpbmVIeXBlcmxpbmsuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0lubGluZUh5cGVybGluay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTQyY2IKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9JbmxpbmVIeXBlcmxpbmsuamF2YQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWk7CisKKy8qKgorICogQSB3aWRnZXQgdGhhdCBzZXJ2ZXMgYXMgYW4gImludGVybmFsIiBoeXBlcmxpbmsuIFRoYXQgaXMsIGl0IGlzIGEgbGluayB0bworICogYW5vdGhlciBzdGF0ZSBvZiB0aGUgcnVubmluZyBhcHBsaWNhdGlvbi4gSXQgc2hvdWxkIGJlaGF2ZSBleGFjdGx5IGxpa2UKKyAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IeXBlcmxpbmt9LCBzYXZlIHRoYXQgaXQgbGF5cyBvdXQKKyAqIGFzIGFuIGlubGluZSBlbGVtZW50LCBub3QgYmxvY2suCisgKiAKKyAqIDxoMz5DU1MgU3R5bGUgUnVsZXM8L2gzPgorICogPHVsIGNsYXNzPSdjc3MnPgorICogPGxpPi5nd3QtSW5saW5lSHlwZXJsaW5rIHsgfTwvbGk+CisgKiA8L3VsPgorICovCitwdWJsaWMgY2xhc3MgSW5saW5lSHlwZXJsaW5rIGV4dGVuZHMgSHlwZXJsaW5rIHsKKworICAvKioKKyAgICogQ3JlYXRlcyBhbiBlbXB0eSBoeXBlcmxpbmsuCisgICAqLworICBwdWJsaWMgSW5saW5lSHlwZXJsaW5rKCkgeworICAgIHN1cGVyKG51bGwpOworCisgICAgc2V0U3R5bGVOYW1lKCJnd3QtSW5saW5lSHlwZXJsaW5rIik7CisgIH0KKworICAvKioKKyAgICogQ3JlYXRlcyBhIGh5cGVybGluayB3aXRoIGl0cyB0ZXh0IGFuZCB0YXJnZXQgaGlzdG9yeSB0b2tlbiBzcGVjaWZpZWQuCisgICAqIAorICAgKiBAcGFyYW0gdGV4dCB0aGUgaHlwZXJsaW5rJ3MgdGV4dAorICAgKiBAcGFyYW0gYXNIVE1MIDxjb2RlPnRydWU8L2NvZGU+IHRvIHRyZWF0IHRoZSBzcGVjaWZpZWQgdGV4dCBhcyBodG1sCisgICAqIEBwYXJhbSB0YXJnZXRIaXN0b3J5VG9rZW4gdGhlIGhpc3RvcnkgdG9rZW4gdG8gd2hpY2ggaXQgd2lsbCBsaW5rCisgICAqIEBzZWUgI3NldFRhcmdldEhpc3RvcnlUb2tlbgorICAgKi8KKyAgcHVibGljIElubGluZUh5cGVybGluayhTdHJpbmcgdGV4dCwgYm9vbGVhbiBhc0hUTUwsIFN0cmluZyB0YXJnZXRIaXN0b3J5VG9rZW4pIHsKKyAgICB0aGlzKCk7CisKKyAgICBpZiAoYXNIVE1MKSB7CisgICAgICBzZXRIVE1MKHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICBzZXRUZXh0KHRleHQpOworICAgIH0KKyAgICBzZXRUYXJnZXRIaXN0b3J5VG9rZW4odGFyZ2V0SGlzdG9yeVRva2VuKTsKKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGVzIGEgaHlwZXJsaW5rIHdpdGggaXRzIHRleHQgYW5kIHRhcmdldCBoaXN0b3J5IHRva2VuIHNwZWNpZmllZC4KKyAgICogCisgICAqIEBwYXJhbSB0ZXh0IHRoZSBoeXBlcmxpbmsncyB0ZXh0CisgICAqIEBwYXJhbSB0YXJnZXRIaXN0b3J5VG9rZW4gdGhlIGhpc3RvcnkgdG9rZW4gdG8gd2hpY2ggaXQgd2lsbCBsaW5rCisgICAqLworICBwdWJsaWMgSW5saW5lSHlwZXJsaW5rKFN0cmluZyB0ZXh0LCBTdHJpbmcgdGFyZ2V0SGlzdG9yeVRva2VuKSB7CisgICAgdGhpcyh0ZXh0LCBmYWxzZSwgdGFyZ2V0SGlzdG9yeVRva2VuKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTGFiZWwuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0xhYmVsLmphdmEKaW5kZXggYjQ3MGZkOC4uODlhN2VmOSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTGFiZWwuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9MYWJlbC5qYXZhCkBAIC01Myw2ICs1Myw3IEBACiAgKiB7QGV4YW1wbGUgY29tLmdvb2dsZS5nd3QuZXhhbXBsZXMuSFRNTEV4YW1wbGV9CiAgKiA8L3A+CiAgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgY2xhc3MgTGFiZWwgZXh0ZW5kcyBXaWRnZXQgaW1wbGVtZW50cyBIYXNIb3Jpem9udGFsQWxpZ25tZW50LCBIYXNUZXh0LAogICAgIEhhc1dvcmRXcmFwLCBIYXNEaXJlY3Rpb24sIEhhc0NsaWNrSGFuZGxlcnMsIFNvdXJjZXNDbGlja0V2ZW50cywKICAgICBTb3VyY2VzTW91c2VFdmVudHMsIEhhc0FsbE1vdXNlSGFuZGxlcnMgewpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTGlzdEJveC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTGlzdEJveC5qYXZhCmluZGV4IDlhMTBmNTkuLmQ5NGMxZjMgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0xpc3RCb3guamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9MaXN0Qm94LmphdmEKQEAgLTQyLDYgKzQyLDcgQEAKICAqIHtAZXhhbXBsZSBjb20uZ29vZ2xlLmd3dC5leGFtcGxlcy5MaXN0Qm94RXhhbXBsZX0KICAqIDwvcD4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBMaXN0Qm94IGV4dGVuZHMgRm9jdXNXaWRnZXQgaW1wbGVtZW50cyBTb3VyY2VzQ2hhbmdlRXZlbnRzLAogICAgIEhhc0NoYW5nZUhhbmRsZXJzLCBIYXNOYW1lIHsKIApkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTGlzdGVuZXJXcmFwcGVyLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9MaXN0ZW5lcldyYXBwZXIuamF2YQppbmRleCBiZGYzMDI0Li5jZTYzOWI5IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9MaXN0ZW5lcldyYXBwZXIuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9MaXN0ZW5lcldyYXBwZXIuamF2YQpAQCAtOTEsNyArOTEsOCBAQAogQERlcHJlY2F0ZWQNCiBhYnN0cmFjdCBjbGFzcyBMaXN0ZW5lcldyYXBwZXI8VD4gaW1wbGVtZW50cyBFdmVudEhhbmRsZXIgew0KIA0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDaGFuZ2UgZXh0ZW5kcyBMaXN0ZW5lcldyYXBwZXI8Q2hhbmdlTGlzdGVuZXI+IGltcGxlbWVudHMgQ2hhbmdlSGFuZGxlciB7DQorICBwdWJsaWMgc3RhdGljIGNsYXNzIENoYW5nZSBleHRlbmRzIExpc3RlbmVyV3JhcHBlcjxDaGFuZ2VMaXN0ZW5lcj4gaW1wbGVtZW50cw0KKyAgICAgIENoYW5nZUhhbmRsZXIgew0KICAgICBARGVwcmVjYXRlZA0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkKEhhc0NoYW5nZUhhbmRsZXJzIHNvdXJjZSwgQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpIHsNCiAgICAgICBzb3VyY2UuYWRkQ2hhbmdlSGFuZGxlcihuZXcgQ2hhbmdlKGxpc3RlbmVyKSk7DQpAQCAtMTEwLDcgKzExMSw4IEBACiAgICAgfQ0KICAgfQ0KIA0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDbGljayBleHRlbmRzIExpc3RlbmVyV3JhcHBlcjxDbGlja0xpc3RlbmVyPiBpbXBsZW1lbnRzIENsaWNrSGFuZGxlciB7DQorICBwdWJsaWMgc3RhdGljIGNsYXNzIENsaWNrIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPENsaWNrTGlzdGVuZXI+IGltcGxlbWVudHMNCisgICAgICBDbGlja0hhbmRsZXIgew0KICAgICBARGVwcmVjYXRlZA0KICAgICBwdWJsaWMgc3RhdGljIENsaWNrIGFkZChIYXNDbGlja0hhbmRsZXJzIHNvdXJjZSwgQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lcikgew0KICAgICAgIENsaWNrIHJ0biA9IG5ldyBDbGljayhsaXN0ZW5lcik7DQpAQCAtMTMxLDggKzEzMyw4IEBACiAgICAgfQ0KICAgfQ0KIA0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBEaXNjbG9zdXJlIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPERpc2Nsb3N1cmVIYW5kbGVyPiBpbXBsZW1lbnRzDQotICAgICAgQ2xvc2VIYW5kbGVyPERpc2Nsb3N1cmVQYW5lbD4sIE9wZW5IYW5kbGVyPERpc2Nsb3N1cmVQYW5lbD4gew0KKyAgcHVibGljIHN0YXRpYyBjbGFzcyBEaXNjbG9zdXJlIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPERpc2Nsb3N1cmVIYW5kbGVyPg0KKyAgICAgIGltcGxlbWVudHMgQ2xvc2VIYW5kbGVyPERpc2Nsb3N1cmVQYW5lbD4sIE9wZW5IYW5kbGVyPERpc2Nsb3N1cmVQYW5lbD4gew0KIA0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkKERpc2Nsb3N1cmVQYW5lbCBzb3VyY2UsIERpc2Nsb3N1cmVIYW5kbGVyIGxpc3RlbmVyKSB7DQogICAgICAgRGlzY2xvc3VyZSBoYW5kbGVycyA9IG5ldyBEaXNjbG9zdXJlKGxpc3RlbmVyKTsNCkBAIC0xNjEsOCArMTYzLDggQEAKICAgLyoNCiAgICAqIEhhbmRsZXIgd3JhcHBlciBmb3Ige0BsaW5rIEZvY3VzTGlzdGVuZXJ9Lg0KICAgICovDQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEZvY3VzIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPEZvY3VzTGlzdGVuZXI+IGltcGxlbWVudHMgRm9jdXNIYW5kbGVyLA0KLSAgICAgIEJsdXJIYW5kbGVyIHsNCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRm9jdXMgZXh0ZW5kcyBMaXN0ZW5lcldyYXBwZXI8Rm9jdXNMaXN0ZW5lcj4gaW1wbGVtZW50cw0KKyAgICAgIEZvY3VzSGFuZGxlciwgQmx1ckhhbmRsZXIgew0KIA0KICAgICBwdWJsaWMgc3RhdGljIDxFdmVudFNvdXJjZVR5cGUgZXh0ZW5kcyBXaWRnZXQgJiBIYXNBbGxGb2N1c0hhbmRsZXJzPiBGb2N1cyBhZGQoDQogICAgICAgICBFdmVudFNvdXJjZVR5cGUgc291cmNlLCBGb2N1c0xpc3RlbmVyIGxpc3RlbmVyKSB7DQpAQCAtMjIxLDggKzIyMyw4IEBACiAgICAgfQ0KICAgfQ0KIA0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBMb2FkIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPExvYWRMaXN0ZW5lcj4gaW1wbGVtZW50cyBMb2FkSGFuZGxlciwNCi0gICAgICBFcnJvckhhbmRsZXIgew0KKyAgcHVibGljIHN0YXRpYyBjbGFzcyBMb2FkIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPExvYWRMaXN0ZW5lcj4gaW1wbGVtZW50cw0KKyAgICAgIExvYWRIYW5kbGVyLCBFcnJvckhhbmRsZXIgew0KIA0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkKEhhc0xvYWRIYW5kbGVycyBzb3VyY2UsIExvYWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KICAgICAgIHNvdXJjZS5hZGRMb2FkSGFuZGxlcihuZXcgTG9hZChsaXN0ZW5lcikpOw0KQEAgLTI4NSwyMyArMjg3LDExIEBACiAgICAgfQ0KIA0KICAgICBwdWJsaWMgdm9pZCBvbk1vdXNlT3V0KE1vdXNlT3V0RXZlbnQgZXZlbnQpIHsNCi0gICAgICAvLyBPbmx5IGZpcmUgdGhlIG1vdXNlTGVhdmUgZXZlbnQgaWYgaXQncyBhY3R1YWxseSBsZWF2aW5nIHRoaXMNCi0gICAgICAvLyB3aWRnZXQuDQotICAgICAgRWxlbWVudCB0byA9IGV2ZW50LmdldFRvRWxlbWVudCgpOw0KLSAgICAgIFdpZGdldCBzb3VyY2UgPSBzb3VyY2UoZXZlbnQpOw0KLSAgICAgIGlmICh0byA9PSBudWxsIHx8ICFzb3VyY2UuZ2V0RWxlbWVudCgpLmlzT3JIYXNDaGlsZCh0bykpIHsNCi0gICAgICAgIGxpc3RlbmVyLm9uTW91c2VMZWF2ZShzb3VyY2UoZXZlbnQpKTsNCi0gICAgICB9DQorICAgICAgbGlzdGVuZXIub25Nb3VzZUxlYXZlKHNvdXJjZShldmVudCkpOw0KICAgICB9DQogDQogICAgIHB1YmxpYyB2b2lkIG9uTW91c2VPdmVyKE1vdXNlT3ZlckV2ZW50IGV2ZW50KSB7DQotICAgICAgLy8gT25seSBmaXJlIHRoZSBtb3VzZUVudGVyIGV2ZW50IGlmIGl0J3MgY29taW5nIGZyb20gb3V0c2lkZSB0aGlzDQotICAgICAgLy8gd2lkZ2V0Lg0KLSAgICAgIEVsZW1lbnQgZnJvbSA9IGV2ZW50LmdldEZyb21FbGVtZW50KCk7DQotICAgICAgV2lkZ2V0IHNvdXJjZSA9IHNvdXJjZShldmVudCk7DQotICAgICAgaWYgKGZyb20gPT0gbnVsbCB8fCAhc291cmNlLmdldEVsZW1lbnQoKS5pc09ySGFzQ2hpbGQoZnJvbSkpIHsNCi0gICAgICAgIGxpc3RlbmVyLm9uTW91c2VFbnRlcihzb3VyY2UoZXZlbnQpKTsNCi0gICAgICB9DQorICAgICAgbGlzdGVuZXIub25Nb3VzZUVudGVyKHNvdXJjZShldmVudCkpOw0KICAgICB9DQogDQogICAgIHB1YmxpYyB2b2lkIG9uTW91c2VVcChNb3VzZVVwRXZlbnQgZXZlbnQpIHsNCkBAIC0zMTEsOSArMzAxLDEwIEBACiAgICAgICAgICAgZXZlbnQuZ2V0UmVsYXRpdmVZKGVsZW0pKTsNCiAgICAgfQ0KICAgfQ0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBNb3VzZVdoZWVsIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPE1vdXNlV2hlZWxMaXN0ZW5lcj4gaW1wbGVtZW50cw0KLSAgICAgIE1vdXNlV2hlZWxIYW5kbGVyIHsNCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZChIYXNNb3VzZVdoZWVsSGFuZGxlcnMgc291cmNlLCBNb3VzZVdoZWVsTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTW91c2VXaGVlbCBleHRlbmRzIExpc3RlbmVyV3JhcHBlcjxNb3VzZVdoZWVsTGlzdGVuZXI+DQorICAgICAgaW1wbGVtZW50cyBNb3VzZVdoZWVsSGFuZGxlciB7DQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGQoSGFzTW91c2VXaGVlbEhhbmRsZXJzIHNvdXJjZSwNCisgICAgICAgIE1vdXNlV2hlZWxMaXN0ZW5lciBsaXN0ZW5lcikgew0KICAgICAgIHNvdXJjZS5hZGRNb3VzZVdoZWVsSGFuZGxlcihuZXcgTW91c2VXaGVlbChsaXN0ZW5lcikpOw0KICAgICB9DQogDQpAQCAtMzM0LDcgKzMyNSw4IEBACiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUG9wdXAgZXh0ZW5kcyBMaXN0ZW5lcldyYXBwZXI8UG9wdXBMaXN0ZW5lcj4gaW1wbGVtZW50cw0KICAgICAgIENsb3NlSGFuZGxlcjxQb3B1cFBhbmVsPiB7DQogDQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGQoSGFzQ2xvc2VIYW5kbGVyczxQb3B1cFBhbmVsPiBzb3VyY2UsIFBvcHVwTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZChIYXNDbG9zZUhhbmRsZXJzPFBvcHVwUGFuZWw+IHNvdXJjZSwNCisgICAgICAgIFBvcHVwTGlzdGVuZXIgbGlzdGVuZXIpIHsNCiAgICAgICBzb3VyY2UuYWRkQ2xvc2VIYW5kbGVyKG5ldyBQb3B1cChsaXN0ZW5lcikpOw0KICAgICB9DQogDQpAQCAtMzUyLDcgKzM0NCw4IEBACiAgICAgfQ0KICAgfQ0KIA0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBTY3JvbGwgZXh0ZW5kcyBMaXN0ZW5lcldyYXBwZXI8U2Nyb2xsTGlzdGVuZXI+IGltcGxlbWVudHMgU2Nyb2xsSGFuZGxlciB7DQorICBwdWJsaWMgc3RhdGljIGNsYXNzIFNjcm9sbCBleHRlbmRzIExpc3RlbmVyV3JhcHBlcjxTY3JvbGxMaXN0ZW5lcj4gaW1wbGVtZW50cw0KKyAgICAgIFNjcm9sbEhhbmRsZXIgew0KIA0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkKEhhc1Njcm9sbEhhbmRsZXJzIHNvdXJjZSwgU2Nyb2xsTGlzdGVuZXIgbGlzdGVuZXIpIHsNCiAgICAgICBzb3VyY2UuYWRkU2Nyb2xsSGFuZGxlcihuZXcgU2Nyb2xsKGxpc3RlbmVyKSk7DQpAQCAtMzc1LDggKzM2OCw4IEBACiAgICAgfQ0KICAgfQ0KIA0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBTdWdnZXN0aW9uIGV4dGVuZHMgTGlzdGVuZXJXcmFwcGVyPFN1Z2dlc3Rpb25IYW5kbGVyPiBpbXBsZW1lbnRzDQotICAgICAgU2VsZWN0aW9uSGFuZGxlcjxTdWdnZXN0T3JhY2xlLlN1Z2dlc3Rpb24+IHsNCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3VnZ2VzdGlvbiBleHRlbmRzIExpc3RlbmVyV3JhcHBlcjxTdWdnZXN0aW9uSGFuZGxlcj4NCisgICAgICBpbXBsZW1lbnRzIFNlbGVjdGlvbkhhbmRsZXI8U3VnZ2VzdE9yYWNsZS5TdWdnZXN0aW9uPiB7DQogICAgIEBEZXByZWNhdGVkDQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGQoU3VnZ2VzdEJveCBzb3VyY2UsIFN1Z2dlc3Rpb25IYW5kbGVyIGxpc3RlbmVyKSB7DQogICAgICAgc291cmNlLmFkZFNlbGVjdGlvbkhhbmRsZXIobmV3IFN1Z2dlc3Rpb24obGlzdGVuZXIpKTsNCkBAIC00ODcsOCArNDgwLDggQEAKICAgICB9DQogICB9DQogDQotICBzdGF0aWMgY2xhc3MgS2V5Ym9hcmQgZXh0ZW5kcyBMaXN0ZW5lcldyYXBwZXI8S2V5Ym9hcmRMaXN0ZW5lcj4gaW1wbGVtZW50cyBLZXlEb3duSGFuZGxlciwNCi0gICAgICBLZXlVcEhhbmRsZXIsIEtleVByZXNzSGFuZGxlciB7DQorICBzdGF0aWMgY2xhc3MgS2V5Ym9hcmQgZXh0ZW5kcyBMaXN0ZW5lcldyYXBwZXI8S2V5Ym9hcmRMaXN0ZW5lcj4gaW1wbGVtZW50cw0KKyAgICAgIEtleURvd25IYW5kbGVyLCBLZXlVcEhhbmRsZXIsIEtleVByZXNzSGFuZGxlciB7DQogDQogICAgIHB1YmxpYyBzdGF0aWMgPEV2ZW50U291cmNlVHlwZSBleHRlbmRzIFdpZGdldCAmIEhhc0FsbEtleUhhbmRsZXJzPiB2b2lkIGFkZCgNCiAgICAgICAgIEV2ZW50U291cmNlVHlwZSBzb3VyY2UsIEtleWJvYXJkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCkBAIC01MDUsMTkgKzQ5OCwyNCBAQAogICAgIH0NCiANCiAgICAgcHVibGljIHZvaWQgb25LZXlEb3duKEtleURvd25FdmVudCBldmVudCkgew0KLSAgICAgIGxpc3RlbmVyLm9uS2V5RG93bihzb3VyY2UoZXZlbnQpLCAoY2hhcikgZXZlbnQuZ2V0TmF0aXZlS2V5Q29kZSgpLA0KKyAgICAgIGxpc3RlbmVyLm9uS2V5RG93bigNCisgICAgICAgICAgc291cmNlKGV2ZW50KSwNCisgICAgICAgICAgKGNoYXIpIGV2ZW50LmdldE5hdGl2ZUtleUNvZGUoKSwNCiAgICAgICAgICAgS2V5Ym9hcmRMaXN0ZW5lckNvbGxlY3Rpb24uZ2V0S2V5Ym9hcmRNb2RpZmllcnMoZXZlbnQuZ2V0TmF0aXZlRXZlbnQoKSkpOw0KICAgICB9DQogDQogICAgIHB1YmxpYyB2b2lkIG9uS2V5UHJlc3MoS2V5UHJlc3NFdmVudCBldmVudCkgew0KLSAgICAgIGxpc3RlbmVyLm9uS2V5UHJlc3Moc291cmNlKGV2ZW50KSwgDQotICAgICAgICAgIChjaGFyKSBldmVudC5nZXROYXRpdmVFdmVudCgpLmdldEtleUNvZGUoKSwgDQorICAgICAgbGlzdGVuZXIub25LZXlQcmVzcygNCisgICAgICAgICAgc291cmNlKGV2ZW50KSwNCisgICAgICAgICAgKGNoYXIpIGV2ZW50LmdldE5hdGl2ZUV2ZW50KCkuZ2V0S2V5Q29kZSgpLA0KICAgICAgICAgICBLZXlib2FyZExpc3RlbmVyQ29sbGVjdGlvbi5nZXRLZXlib2FyZE1vZGlmaWVycyhldmVudC5nZXROYXRpdmVFdmVudCgpKSk7DQogICAgIH0NCiANCiAgICAgcHVibGljIHZvaWQgb25LZXlVcChLZXlVcEV2ZW50IGV2ZW50KSB7DQogICAgICAgc291cmNlKGV2ZW50KTsNCi0gICAgICBsaXN0ZW5lci5vbktleVVwKHNvdXJjZShldmVudCksIChjaGFyKSBldmVudC5nZXROYXRpdmVLZXlDb2RlKCksIA0KKyAgICAgIGxpc3RlbmVyLm9uS2V5VXAoDQorICAgICAgICAgIHNvdXJjZShldmVudCksDQorICAgICAgICAgIChjaGFyKSBldmVudC5nZXROYXRpdmVLZXlDb2RlKCksDQogICAgICAgICAgIEtleWJvYXJkTGlzdGVuZXJDb2xsZWN0aW9uLmdldEtleWJvYXJkTW9kaWZpZXJzKGV2ZW50LmdldE5hdGl2ZUV2ZW50KCkpKTsNCiAgICAgfQ0KICAgfQ0KQEAgLTUzNiw3ICs1MzQsOCBAQAogICAgICAgICAvLyBXZSBhcmUgcmVtb3ZpbmcgdGhpbmdzIGFzIHdlIHRyYXZlcnNlLCBoYXZlIHRvIGdvIGJhY2t3YXJkDQogICAgICAgICBmb3IgKGludCBpID0gaGFuZGxlckNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsNCiAgICAgICAgICAgSCBoYW5kbGVyID0gbWFuYWdlci5nZXRIYW5kbGVyKGtleSwgaSk7DQotICAgICAgICAgIGlmIChoYW5kbGVyIGluc3RhbmNlb2YgTGlzdGVuZXJXcmFwcGVyICYmICgoTGlzdGVuZXJXcmFwcGVyKSBoYW5kbGVyKS5saXN0ZW5lci5lcXVhbHMobGlzdGVuZXIpKSB7DQorICAgICAgICAgIGlmIChoYW5kbGVyIGluc3RhbmNlb2YgTGlzdGVuZXJXcmFwcGVyDQorICAgICAgICAgICAgICAmJiAoKExpc3RlbmVyV3JhcHBlcikgaGFuZGxlcikubGlzdGVuZXIuZXF1YWxzKGxpc3RlbmVyKSkgew0KICAgICAgICAgICAgIG1hbmFnZXIucmVtb3ZlSGFuZGxlcihrZXksIGhhbmRsZXIpOw0KICAgICAgICAgICB9DQogICAgICAgICB9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTmFtZWRGcmFtZS5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvTmFtZWRGcmFtZS5qYXZhCmluZGV4IDllZmUxZjcuLjQwMjE1OGEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL05hbWVkRnJhbWUuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9OYW1lZEZyYW1lLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIAogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkdXVDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5KYXZhU2NyaXB0T2JqZWN0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRvbS5jbGllbnQuSUZyYW1lRWxlbWVudDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5ET007CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuRWxlbWVudDsKIApAQCAtNDMsNiArNDQsMzAgQEAKICAgICB9CiAgIH0KIAorICAvKioKKyAgICogQ3JlYXRlcyBhbiBIVE1MIElGUkFNRSBlbGVtZW50IHdpdGggYSBzcmMgYW5kIG5hbWUuCisgICAqIAorICAgKiBAcGFyYW0gc3JjIHRoZSBzcmMgb2YgdGhlIGZyYW1lCisgICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmcmFtZSwgd2hpY2ggbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZQorICAgKiAgICAgICAgICBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgYW5kIG11c3Qgbm90IGNvbnRhaW4gcmVzZXJ2ZWQgSFRNTCBtYXJrdXAKKyAgICogICAgICAgICAgY2hhcmFjdGVycyBzdWNoIGFzICc8Y29kZT4mbHQ7PC9jb2RlPicsICc8Y29kZT4mZ3Q7PC9jb2RlPicsCisgICAqICAgICAgICAgIG9yICc8Y29kZT4mYW1wOzwvY29kZT4nCisgICAqIEByZXR1cm4gdGhlIG5ld2x5LWNyZWF0ZWQgZWxlbWVudAorICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgc3VwcGxpZWQgbmFtZSBpcyBub3QgYWxsb3dlZCAKKyAgICovCisgIHByaXZhdGUgc3RhdGljIElGcmFtZUVsZW1lbnQgY3JlYXRlSUZyYW1lKFN0cmluZyBzcmMsIFN0cmluZyBuYW1lKSB7CisgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCAhaXNWYWxpZE5hbWUobmFtZS50cmltKCkpKSB7CisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICJleHBlY3Rpbmcgb25lIG9yIG1vcmUgbm9uLXdoaXRlc3BhY2UgY2hhcnMgd2l0aCBubyAnPCcsICc+Jywgb3IgJyYnIik7CisgICAgfQorCisgICAgLy8gVXNlIGlubmVySFRNTCB0byBpbXBsaWNpdGx5IGNyZWF0ZSB0aGUgPGlmcmFtZT4uIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgLy8gYmVjYXVzZSBtb3N0IGJyb3dzZXJzIHdpbGwgbm90IHJlc3BlY3QgYSBkeW5hbWljYWxseS1zZXQgaWZyYW1lIG5hbWUuCisgICAgRWxlbWVudCBkaXYgPSBET00uY3JlYXRlRGl2KCk7CisgICAgZGl2LnNldElubmVySFRNTCgiPGlmcmFtZSBzcmM9XCIiICsgc3JjICsgIlwiIG5hbWU9JyIgKyBuYW1lICsgIic+Iik7CisgICAgcmV0dXJuIGRpdi5nZXRGaXJzdENoaWxkKCkuY2FzdCgpOworICB9CisKICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgaW5pdFN0YXRpY3MoKSAvKi17CiAgICAgQGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLk5hbWVkRnJhbWU6OlBBVFRFUk5fTkFNRSA9IC9eW148PiZcJ1wiXSskLzsKICAgfS0qLzsKQEAgLTY3LDE4ICs5Miw5IEBACiAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBzdXBwbGllZCBuYW1lIGlzIG5vdCBhbGxvd2VkIAogICAgKi8KICAgcHVibGljIE5hbWVkRnJhbWUoU3RyaW5nIG5hbWUpIHsKLSAgICBpZiAobmFtZSA9PSBudWxsIHx8ICFpc1ZhbGlkTmFtZShuYW1lLnRyaW0oKSkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgImV4cGVjdGluZyBvbmUgb3IgbW9yZSBub24td2hpdGVzcGFjZSBjaGFycyB3aXRoIG5vICc8JywgJz4nLCBvciAnJiciKTsKLSAgICB9Ci0KLSAgICAvLyBVc2UgaW5uZXJIVE1MIHRvIGltcGxpY2l0bHkgY3JlYXRlIHRoZSA8aWZyYW1lPi4gVGhpcyBpcyBuZWNlc3NhcnkKLSAgICAvLyBiZWNhdXNlIG1vc3QgYnJvd3NlcnMgd2lsbCBub3QgcmVzcGVjdCBhIGR5bmFtaWNhbGx5LXNldCBpZnJhbWUgbmFtZS4KLSAgICBFbGVtZW50IGRpdiA9IERPTS5jcmVhdGVEaXYoKTsKLSAgICBET00uc2V0SW5uZXJIVE1MKGRpdiwgIjxpZnJhbWUgbmFtZT0nIiArIG5hbWUgKyAiJz4iKTsKLQotICAgIEVsZW1lbnQgaWZyYW1lID0gRE9NLmdldEZpcnN0Q2hpbGQoZGl2KTsKLSAgICByZXBsYWNlRWxlbWVudChpZnJhbWUpOworICAgIC8vIFNldHRpbmcgYSBzcmMgcHJldmVudHMgbWl4ZWQtY29udGVudCB3YXJuaW5ncy4KKyAgICAvLyBodHRwOi8vd2VibG9ncy5hc3AubmV0L2JsZXJveS9hcmNoaXZlLzIwMDUvMDgvMDkvaG93LXRvLXB1dC1hLWRpdi1vdmVyLWEtc2VsZWN0LWluLWllLmFzcHgKKyAgICBzdXBlcihjcmVhdGVJRnJhbWUoImphdmFzY3JpcHQ6JyciLCBuYW1lKSk7CiAgICAgc2V0U3R5bGVOYW1lKERFRkFVTFRfU1RZTEVOQU1FKTsKICAgfQogCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Qb3B1cFBhbmVsLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Qb3B1cFBhbmVsLmphdmEKaW5kZXggNDE3MTM0ZC4uOGNmZWViYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvUG9wdXBQYW5lbC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1BvcHVwUGFuZWwuamF2YQpAQCAtNjAsNiArNjAsNyBAQAogICogPGxpPi5nd3QtUG9wdXBQYW5lbCAucG9wdXBDb250ZW50IHsgdGhlIHdyYXBwZXIgYXJvdW5kIHRoZSBjb250ZW50IH08L2xpPgogICogPC91bD4KICAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBQb3B1cFBhbmVsIGV4dGVuZHMgU2ltcGxlUGFuZWwgaW1wbGVtZW50cyBTb3VyY2VzUG9wdXBFdmVudHMsCiAgICAgRXZlbnRQcmV2aWV3LCBIYXNBbmltYXRpb24sIEhhc0Nsb3NlSGFuZGxlcnM8UG9wdXBQYW5lbD4gewogCkBAIC0yNzIsNiArMjczLDggQEAKICAgcHJpdmF0ZSBTdHJpbmcgZGVzaXJlZFdpZHRoOwogCiAgIHByaXZhdGUgYm9vbGVhbiBpc0FuaW1hdGlvbkVuYWJsZWQgPSBmYWxzZTsKKyAgCisgIHByaXZhdGUgRWxlbWVudCBhdXRvSGlkZVBhcnRuZXI7CiAKICAgLyoqCiAgICAqIFRoZSB7QGxpbmsgUmVzaXplQW5pbWF0aW9ufSB1c2VkIHRvIG9wZW4gYW5kIGNsb3NlIHRoZSB7QGxpbmsgUG9wdXBQYW5lbH1zLgpAQCAtMzUzLDEwICszNTYsMTYgQEAKICAgICBzZXRQb3B1cFBvc2l0aW9uKFdpbmRvdy5nZXRTY3JvbGxMZWZ0KCkgKyBsZWZ0LCBXaW5kb3cuZ2V0U2Nyb2xsVG9wKCkgKyB0b3ApOwogCiAgICAgaWYgKCFpbml0aWFsbHlTaG93aW5nKSB7Ci0gICAgICBoaWRlKCk7Ci0gICAgICBzZXRWaXNpYmxlKHRydWUpOwogICAgICAgc2V0QW5pbWF0aW9uRW5hYmxlZChpbml0aWFsbHlBbmltYXRlZCk7Ci0gICAgICBzaG93KCk7CisgICAgICAvLyBSdW4gdGhlIGFuaW1hdGlvbi4gIFRoZSBwb3B1cCBpcyBhbHJlYWR5IHZpc2libGUsIHNvIHdlIGNhbiBza2lwIHRoZQorICAgICAgLy8gY2FsbCB0byBzZXRTdGF0ZS4KKyAgICAgIGlmIChpbml0aWFsbHlBbmltYXRlZCkgeworICAgICAgICBpbXBsLnNldENsaXAoZ2V0RWxlbWVudCgpLCAicmVjdCgwcHgsIDBweCwgMHB4LCAwcHgpIik7CisgICAgICAgIHNldFZpc2libGUodHJ1ZSk7CisgICAgICAgIHJlc2l6ZUFuaW1hdGlvbi5ydW4oQU5JTUFUSU9OX0RVUkFUSU9OKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldFZpc2libGUodHJ1ZSk7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTQ1NCw2ICs0NjMsNyBAQAogICAgIHJldHVybiBtb2RhbDsKICAgfQogCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiAgIHB1YmxpYyBib29sZWFuIG9uRXZlbnRQcmV2aWV3KEV2ZW50IGV2ZW50KSB7CiAgICAgRWxlbWVudCB0YXJnZXQgPSBET00uZXZlbnRHZXRUYXJnZXQoZXZlbnQpOwogCkBAIC00ODUsNyArNDk1LDcgQEAKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZXZlbnRUYXJnZXRzUG9wdXAgJiYgYXV0b0hpZGUpIHsKKyAgICAgICAgaWYgKCFldmVudFRhcmdldHNQb3B1cCAmJiBzaG91bGRBdXRvSGlkZShldmVudCkpIHsKICAgICAgICAgICBoaWRlKHRydWUpOwogICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC01MDMsNyArNTEzLDggQEAKICAgICAgICAgLy8gSWYgaXQncyBhbiBvdXRzaWRlIGNsaWNrIGFuZCBhdXRvLWhpZGUgaXMgZW5hYmxlZDoKICAgICAgICAgLy8gaGlkZSB0aGUgcG9wdXAgYW5kIF9kb24ndF8gZWF0IHRoZSBldmVudC4gT05NT1VTRURPV04gaXMgdXNlZCB0bwogICAgICAgICAvLyBwcmV2ZW50IHByb2JsZW1zIHdpdGggc2hvd2luZyBhIHBvcHVwIGluIHJlc3BvbnNlIHRvIGEgbW91c2Vkb3duLgotICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0c1BvcHVwICYmIGF1dG9IaWRlICYmICh0eXBlID09IEV2ZW50Lk9OTU9VU0VET1dOKSkgeworICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0c1BvcHVwICYmIHNob3VsZEF1dG9IaWRlKGV2ZW50KQorICAgICAgICAgICAgJiYgKHR5cGUgPT0gRXZlbnQuT05NT1VTRURPV04pKSB7CiAgICAgICAgICAgaGlkZSh0cnVlKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNTgxLDYgKzU5MiwxNSBAQAogICB9CiAKICAgLyoqCisgICAqIElmIHRoZSBhdXRvIGhpZGUgcGFydG5lciBpcyBub24gbnVsbCwgaXRzIG1vdXNlIGV2ZW50cyB3aWxsIAorICAgKiBub3QgaGlkZSBhIHBhbmVsIHNldCB0byBhdXRvaGlkZS4KKyAgICogQHBhcmFtIGVsZW1lbnQgbmV3IGF1dG8gaGlkZSBwYXJ0bmVyCisgICAqLworICBwdWJsaWMgdm9pZCBzZXRBdXRvSGlkZVBhcnRuZXIoRWxlbWVudCBlbGVtZW50KSB7CisgICAgdGhpcy5hdXRvSGlkZVBhcnRuZXIgPSBlbGVtZW50OworICB9CisKKyAgLyoqCiAgICAqIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgcGFuZWwncyBjaGlsZCB3aWRnZXQuIElmIHRoZSBwYW5lbCdzIGNoaWxkIHdpZGdldAogICAgKiBoYXMgbm90IGJlZW4gc2V0LCB0aGUgaGVpZ2h0IHBhc3NlZCBpbiB3aWxsIGJlIGNhY2hlZCBhbmQgdXNlZCB0byBzZXQgdGhlCiAgICAqIGhlaWdodCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY2hpbGQgd2lkZ2V0IGlzIHNldC4KQEAgLTYxMyw3ICs2MzMsNyBAQAogICBwdWJsaWMgdm9pZCBzZXRNb2RhbChib29sZWFuIG1vZGFsKSB7CiAgICAgdGhpcy5tb2RhbCA9IG1vZGFsOwogICB9Ci0KKyAgCiAgIC8qKgogICAgKiBTZXRzIHRoZSBwb3B1cCdzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBicm93c2VyJ3MgY2xpZW50IGFyZWEuIFRoZQogICAgKiBwb3B1cCdzIHBvc2l0aW9uIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcge0BsaW5rICNzaG93KCl9LgpAQCAtNzI4LDYgKzc0OCwyNSBAQAogICAgIHJlc2l6ZUFuaW1hdGlvbi5zZXRTdGF0ZSh0cnVlKTsKICAgfQogCisgIC8qKgorICAgKiBOb3JtYWxseSwgdGhlIHBvcHVwIGlzIHBvc2l0aW9uZWQgZGlyZWN0bHkgYmVsb3cgdGhlIHJlbGF0aXZlIHRhcmdldCwgd2l0aAorICAgKiBpdHMgbGVmdCBlZGdlIGFsaWduZWQgd2l0aCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0YXJnZXQuIERlcGVuZGluZyBvbiB0aGUKKyAgICogd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgcG9wdXAgYW5kIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0YXJnZXQgdG8gdGhlCisgICAqIGJvdHRvbSBhbmQgcmlnaHQgZWRnZXMgb2YgdGhlIHdpbmRvdywgdGhlIHBvcHVwIG1heSBiZSBkaXNwbGF5ZWQgZGlyZWN0bHkKKyAgICogYWJvdmUgdGhlIHRhcmdldCwgYW5kL29yIGl0cyByaWdodCBlZGdlIG1heSBiZSBhbGlnbmVkIHdpdGggdGhlIHJpZ2h0IGVkZ2UKKyAgICogb2YgdGhlIHRhcmdldC4KKyAgICogCisgICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCB0byBzaG93IHRoZSBwb3B1cCBiZWxvdworICAgKi8KKyAgcHVibGljIGZpbmFsIHZvaWQgc2hvd1JlbGF0aXZlVG8oZmluYWwgVUlPYmplY3QgdGFyZ2V0KSB7CisgICAgLy8gU2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgcmlnaHQgYmVmb3JlIGl0IGlzIHNob3duLgorICAgIHNldFBvcHVwUG9zaXRpb25BbmRTaG93KG5ldyBQb3NpdGlvbkNhbGxiYWNrKCkgeworICAgICAgcHVibGljIHZvaWQgc2V0UG9zaXRpb24oaW50IG9mZnNldFdpZHRoLCBpbnQgb2Zmc2V0SGVpZ2h0KSB7CisgICAgICAgIHBvc2l0aW9uKHRhcmdldCwgb2Zmc2V0V2lkdGgsIG9mZnNldEhlaWdodCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKwogICBAT3ZlcnJpZGUKICAgcHJvdGVjdGVkIEVsZW1lbnQgZ2V0Q29udGFpbmVyRWxlbWVudCgpIHsKICAgICByZXR1cm4gaW1wbC5nZXRDb250YWluZXJFbGVtZW50KERPTS5nZXRGaXJzdENoaWxkKHN1cGVyLmdldENvbnRhaW5lckVsZW1lbnQoKSkpOwpAQCAtODAxLDQgKzg0MCwxNDQgQEAKICAgICAgIGVsdC5ibHVyKCk7CiAgICAgfQogICB9LSovOworCisgIHByaXZhdGUgYm9vbGVhbiBldmVudEluUGFydG5lcihFdmVudCBldmVudCkgeworICAgIHJldHVybiBhdXRvSGlkZVBhcnRuZXIgIT0gbnVsbAorICAgICAgJiYgYXV0b0hpZGVQYXJ0bmVyLmlzT3JIYXNDaGlsZChldmVudC5nZXRUYXJnZXQoKSk7CisgIH0KKworICAvKioKKyAgICogUG9zaXRpb25zIHRoZSBwb3B1cCwgY2FsbGVkIGFmdGVyIHRoZSBvZmZzZXQgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgcG9wdXAgYXJlIGtub3duLgorICAgKiAKKyAgICogQHBhcmFtIHJlbGF0aXZlT2JqZWN0IHRoZSB1aSBvYmplY3QgdG8gcG9zaXRpb24gcmVsYXRpdmUgdG8KKyAgICogQHBhcmFtIG9mZnNldFdpZHRoIHRoZSBkcm9wIGRvd24ncyBvZmZzZXQgd2lkdGgKKyAgICogQHBhcmFtIG9mZnNldEhlaWdodCB0aGUgZHJvcCBkb3duJ3Mgb2Zmc2V0IGhlaWdodAorICAgKi8KKyAgcHJpdmF0ZSB2b2lkIHBvc2l0aW9uKGZpbmFsIFVJT2JqZWN0IHJlbGF0aXZlT2JqZWN0LCBpbnQgb2Zmc2V0V2lkdGgsCisgICAgICBpbnQgb2Zmc2V0SGVpZ2h0KSB7CisgICAgLy8gQ2FsY3VsYXRlIGxlZnQgcG9zaXRpb24gZm9yIHRoZSBwb3B1cC4gVGhlIGNvbXB1dGF0aW9uIGZvcgorICAgIC8vIHRoZSBsZWZ0IHBvc2l0aW9uIGlzIGJpZGktc2Vuc2l0aXZlLgorCisgICAgaW50IHRleHRCb3hPZmZzZXRXaWR0aCA9IHJlbGF0aXZlT2JqZWN0LmdldE9mZnNldFdpZHRoKCk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHBvcHVwJ3Mgd2lkdGggYW5kIHRoZQorICAgIC8vIHRleHRib3gncyB3aWR0aAorICAgIGludCBvZmZzZXRXaWR0aERpZmYgPSBvZmZzZXRXaWR0aCAtIHRleHRCb3hPZmZzZXRXaWR0aDsKKworICAgIGludCBsZWZ0OworCisgICAgaWYgKExvY2FsZUluZm8uZ2V0Q3VycmVudExvY2FsZSgpLmlzUlRMKCkpIHsgLy8gUlRMIGNhc2UKKworICAgICAgaW50IHRleHRCb3hBYnNvbHV0ZUxlZnQgPSByZWxhdGl2ZU9iamVjdC5nZXRBYnNvbHV0ZUxlZnQoKTsKKworICAgICAgLy8gUmlnaHQtYWxpZ24gdGhlIHBvcHVwLiBOb3RlIHRoYXQgdGhpcyBjb21wdXRhdGlvbiBpcworICAgICAgLy8gdmFsaWQgaW4gdGhlIGNhc2Ugd2hlcmUgb2Zmc2V0V2lkdGhEaWZmIGlzIG5lZ2F0aXZlLgorICAgICAgbGVmdCA9IHRleHRCb3hBYnNvbHV0ZUxlZnQgLSBvZmZzZXRXaWR0aERpZmY7CisKKyAgICAgIC8vIElmIHRoZSBzdWdnZXN0aW9uIHBvcHVwIGlzIG5vdCBhcyB3aWRlIGFzIHRoZSB0ZXh0IGJveCwgYWx3YXlzCisgICAgICAvLyBhbGlnbiB0byB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdGV4dCBib3guIE90aGVyd2lzZSwgZmlndXJlIG91dCB3aGV0aGVyCisgICAgICAvLyB0byByaWdodC1hbGlnbiBvciBsZWZ0LWFsaWduIHRoZSBwb3B1cC4KKyAgICAgIGlmIChvZmZzZXRXaWR0aERpZmYgPiAwKSB7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHNjcm9sbGluZyBpcyB0YWtlbiBpbnRvIGFjY291bnQsIHNpbmNlCisgICAgICAgIC8vIGJveC5nZXRBYnNvbHV0ZUxlZnQoKSB0YWtlcyBzY3JvbGxpbmcgaW50byBhY2NvdW50LgorICAgICAgICBpbnQgd2luZG93UmlnaHQgPSBXaW5kb3cuZ2V0Q2xpZW50V2lkdGgoKSArIFdpbmRvdy5nZXRTY3JvbGxMZWZ0KCk7CisgICAgICAgIGludCB3aW5kb3dMZWZ0ID0gV2luZG93LmdldFNjcm9sbExlZnQoKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBsZWZ0IHZhbHVlIGZvciB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdGV4dGJveAorICAgICAgICBpbnQgdGV4dEJveExlZnRWYWxGb3JSaWdodEVkZ2UgPSB0ZXh0Qm94QWJzb2x1dGVMZWZ0CisgICAgICAgICAgICArIHRleHRCb3hPZmZzZXRXaWR0aDsKKworICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHRoZSByaWdodCBlZGdlIG9mIHRoZSB0ZXh0IGJveCB0byB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiB0aGUgd2luZG93CisgICAgICAgIGludCBkaXN0YW5jZVRvV2luZG93UmlnaHQgPSB3aW5kb3dSaWdodCAtIHRleHRCb3hMZWZ0VmFsRm9yUmlnaHRFZGdlOworCisgICAgICAgIC8vIERpc3RhbmNlIGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHRleHQgYm94IHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlCisgICAgICAgIC8vIHdpbmRvdworICAgICAgICBpbnQgZGlzdGFuY2VGcm9tV2luZG93TGVmdCA9IHRleHRCb3hMZWZ0VmFsRm9yUmlnaHRFZGdlIC0gd2luZG93TGVmdDsKKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGZvciB0aGUgb3ZlcmZsb3cgb2YgdGhlIHBvcHVwJ3MKKyAgICAgICAgLy8gd2lkdGggdG8gdGhlIHJpZ2h0IG9mIHRoZSB0ZXh0IGJveCBhbmQgdGhlcmUgSVMgZW5vdWdoIHNwYWNlIGZvciB0aGUKKyAgICAgICAgLy8gb3ZlcmZsb3cgdG8gdGhlIHJpZ2h0IG9mIHRoZSB0ZXh0IGJveCwgdGhlbiBsZWZ0LWFsaWduIHRoZSBwb3B1cC4KKyAgICAgICAgLy8gSG93ZXZlciwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBvbiBlaXRoZXIgc2lkZSwgc3RpY2sgd2l0aAorICAgICAgICAvLyByaWdodC1hbGlnbm1lbnQuCisgICAgICAgIGlmIChkaXN0YW5jZUZyb21XaW5kb3dMZWZ0IDwgb2Zmc2V0V2lkdGgKKyAgICAgICAgICAgICYmIGRpc3RhbmNlVG9XaW5kb3dSaWdodCA+PSBvZmZzZXRXaWR0aERpZmYpIHsKKyAgICAgICAgICAvLyBBbGlnbiB3aXRoIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHRleHQgYm94LgorICAgICAgICAgIGxlZnQgPSB0ZXh0Qm94QWJzb2x1dGVMZWZ0OworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsgLy8gTFRSIGNhc2UKKworICAgICAgLy8gTGVmdC1hbGlnbiB0aGUgcG9wdXAuCisgICAgICBsZWZ0ID0gcmVsYXRpdmVPYmplY3QuZ2V0QWJzb2x1dGVMZWZ0KCk7CisKKyAgICAgIC8vIElmIHRoZSBzdWdnZXN0aW9uIHBvcHVwIGlzIG5vdCBhcyB3aWRlIGFzIHRoZSB0ZXh0IGJveCwgYWx3YXlzIGFsaWduIHRvCisgICAgICAvLyB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0ZXh0IGJveC4gT3RoZXJ3aXNlLCBmaWd1cmUgb3V0IHdoZXRoZXIgdG8KKyAgICAgIC8vIGxlZnQtYWxpZ24gb3IgcmlnaHQtYWxpZ24gdGhlIHBvcHVwLgorICAgICAgaWYgKG9mZnNldFdpZHRoRGlmZiA+IDApIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHNjcm9sbGluZyBpcyB0YWtlbiBpbnRvIGFjY291bnQsIHNpbmNlCisgICAgICAgIC8vIGJveC5nZXRBYnNvbHV0ZUxlZnQoKSB0YWtlcyBzY3JvbGxpbmcgaW50byBhY2NvdW50LgorICAgICAgICBpbnQgd2luZG93UmlnaHQgPSBXaW5kb3cuZ2V0Q2xpZW50V2lkdGgoKSArIFdpbmRvdy5nZXRTY3JvbGxMZWZ0KCk7CisgICAgICAgIGludCB3aW5kb3dMZWZ0ID0gV2luZG93LmdldFNjcm9sbExlZnQoKTsKKworICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHRleHQgYm94IHRvIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIHRoZSB3aW5kb3cKKyAgICAgICAgaW50IGRpc3RhbmNlVG9XaW5kb3dSaWdodCA9IHdpbmRvd1JpZ2h0IC0gbGVmdDsKKworICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHRleHQgYm94IHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlCisgICAgICAgIC8vIHdpbmRvdworICAgICAgICBpbnQgZGlzdGFuY2VGcm9tV2luZG93TGVmdCA9IGxlZnQgLSB3aW5kb3dMZWZ0OworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgZm9yIHRoZSBvdmVyZmxvdyBvZiB0aGUgcG9wdXAncworICAgICAgICAvLyB3aWR0aCB0byB0aGUgcmlnaHQgb2YgaHRlIHRleHQgYm94LCBhbmQgdGhlcmUgSVMgZW5vdWdoIHNwYWNlIGZvciB0aGUKKyAgICAgICAgLy8gb3ZlcmZsb3cgdG8gdGhlIGxlZnQgb2YgdGhlIHRleHQgYm94LCB0aGVuIHJpZ2h0LWFsaWduIHRoZSBwb3B1cC4KKyAgICAgICAgLy8gSG93ZXZlciwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBvbiBlaXRoZXIgc2lkZSwgdGhlbiBzdGljayB3aXRoCisgICAgICAgIC8vIGxlZnQtYWxpZ25tZW50LgorICAgICAgICBpZiAoZGlzdGFuY2VUb1dpbmRvd1JpZ2h0IDwgb2Zmc2V0V2lkdGgKKyAgICAgICAgICAgICYmIGRpc3RhbmNlRnJvbVdpbmRvd0xlZnQgPj0gb2Zmc2V0V2lkdGhEaWZmKSB7CisgICAgICAgICAgLy8gQWxpZ24gd2l0aCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdGV4dCBib3guCisgICAgICAgICAgbGVmdCAtPSBvZmZzZXRXaWR0aERpZmY7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDYWxjdWxhdGUgdG9wIHBvc2l0aW9uIGZvciB0aGUgcG9wdXAKKworICAgIGludCB0b3AgPSByZWxhdGl2ZU9iamVjdC5nZXRBYnNvbHV0ZVRvcCgpOworCisgICAgLy8gTWFrZSBzdXJlIHNjcm9sbGluZyBpcyB0YWtlbiBpbnRvIGFjY291bnQsIHNpbmNlCisgICAgLy8gYm94LmdldEFic29sdXRlVG9wKCkgdGFrZXMgc2Nyb2xsaW5nIGludG8gYWNjb3VudC4KKyAgICBpbnQgd2luZG93VG9wID0gV2luZG93LmdldFNjcm9sbFRvcCgpOworICAgIGludCB3aW5kb3dCb3R0b20gPSBXaW5kb3cuZ2V0U2Nyb2xsVG9wKCkgKyBXaW5kb3cuZ2V0Q2xpZW50SGVpZ2h0KCk7CisKKyAgICAvLyBEaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgd2luZG93IHRvIHRoZSB0b3AgZWRnZSBvZiB0aGUKKyAgICAvLyB0ZXh0IGJveAorICAgIGludCBkaXN0YW5jZUZyb21XaW5kb3dUb3AgPSB0b3AgLSB3aW5kb3dUb3A7CisKKyAgICAvLyBEaXN0YW5jZSBmcm9tIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgd2luZG93IHRvIHRoZSBib3R0b20gZWRnZSBvZgorICAgIC8vIHRoZSB0ZXh0IGJveAorICAgIGludCBkaXN0YW5jZVRvV2luZG93Qm90dG9tID0gd2luZG93Qm90dG9tCisgICAgICAgIC0gKHRvcCArIHJlbGF0aXZlT2JqZWN0LmdldE9mZnNldEhlaWdodCgpKTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgZm9yIHRoZSBwb3B1cCdzIGhlaWdodCBiZWxvdyB0aGUgdGV4dAorICAgIC8vIGJveCBhbmQgdGhlcmUgSVMgZW5vdWdoIHNwYWNlIGZvciB0aGUgcG9wdXAncyBoZWlnaHQgYWJvdmUgdGhlIHRleHQKKyAgICAvLyBib3gsIHRoZW4gdGhlbiBwb3NpdGlvbiB0aGUgcG9wdXAgYWJvdmUgdGhlIHRleHQgYm94LiBIb3dldmVyLCBpZiB0aGVyZQorICAgIC8vIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb24gZWl0aGVyIHNpZGUsIHRoZW4gc3RpY2sgd2l0aCBkaXNwbGF5aW5nIHRoZQorICAgIC8vIHBvcHVwIGJlbG93IHRoZSB0ZXh0IGJveC4KKyAgICBpZiAoZGlzdGFuY2VUb1dpbmRvd0JvdHRvbSA8IG9mZnNldEhlaWdodAorICAgICAgICAmJiBkaXN0YW5jZUZyb21XaW5kb3dUb3AgPj0gb2Zmc2V0SGVpZ2h0KSB7CisgICAgICB0b3AgLT0gb2Zmc2V0SGVpZ2h0OworICAgIH0gZWxzZSB7CisgICAgICAvLyBQb3NpdGlvbiBhYm92ZSB0aGUgdGV4dCBib3gKKyAgICAgIHRvcCArPSByZWxhdGl2ZU9iamVjdC5nZXRPZmZzZXRIZWlnaHQoKTsKKyAgICB9CisgICAgc2V0UG9wdXBQb3NpdGlvbihsZWZ0LCB0b3ApOworICB9CisgIAorICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkQXV0b0hpZGUoRXZlbnQgZXZlbnQpIHsKKyAgICBib29sZWFuIHNob3VsZEF1dG9IaWRlID0gYXV0b0hpZGUgJiYgIWV2ZW50SW5QYXJ0bmVyKGV2ZW50KTsKKyAgICByZXR1cm4gc2hvdWxkQXV0b0hpZGU7CisgIH0KKwogfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvUmljaFRleHRBcmVhLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9SaWNoVGV4dEFyZWEuamF2YQppbmRleCA4NmZhYTk0Li4xYjk4NjBmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9SaWNoVGV4dEFyZWEuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9SaWNoVGV4dEFyZWEuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogICogPGxpPi5nd3QtUmljaFRleHRBcmVhIHsgfTwvbGk+CiAgKiA8L3VsPgogICovCitAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQogcHVibGljIGNsYXNzIFJpY2hUZXh0QXJlYSBleHRlbmRzIEZvY3VzV2lkZ2V0IGltcGxlbWVudHMgSGFzSFRNTCwKICAgICBTb3VyY2VzTW91c2VFdmVudHMsIEhhc0FsbE1vdXNlSGFuZGxlcnMgewogCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9TY3JvbGxQYW5lbC5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU2Nyb2xsUGFuZWwuamF2YQppbmRleCAyMTQ1Zjc4Li43NjY5ODQ0IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9TY3JvbGxQYW5lbC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1Njcm9sbFBhbmVsLmphdmEKQEAgLTI1LDYgKzI1LDcgQEAKIC8qKgogICogQSBzaW1wbGUgcGFuZWwgdGhhdCB3cmFwcyBpdHMgY29udGVudHMgaW4gYSBzY3JvbGxhYmxlIGFyZWEuCiAgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgY2xhc3MgU2Nyb2xsUGFuZWwgZXh0ZW5kcyBTaW1wbGVQYW5lbCBpbXBsZW1lbnRzIFNvdXJjZXNTY3JvbGxFdmVudHMsCiAgICAgSGFzU2Nyb2xsSGFuZGxlcnMgewogCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzQ2hhbmdlRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzQ2hhbmdlRXZlbnRzLmphdmEKaW5kZXggNTdiNzFiYy4uMjdmNmMxNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0NoYW5nZUV2ZW50cy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNDaGFuZ2VFdmVudHMuamF2YQpAQCAtMTgsOCArMTgsMTEgQEAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHNvdXJjZXMgdGhlIGV2ZW50cyBkZWZpbmVkIGJ5IHRoZQogICoge0BsaW5rIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkNoYW5nZUxpc3RlbmVyfSBpbnRlcmZhY2UuCisgKiAKKyAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5IYXNDaGFuZ2VIYW5kbGVyc30KKyAqICAgICAgICAgICAgIGluc3RlYWQKICAqLwotCitARGVwcmVjYXRlZAogcHVibGljIGludGVyZmFjZSBTb3VyY2VzQ2hhbmdlRXZlbnRzIHsKIAogICAvKioKQEAgLTM0LDcgKzM3LDcgQEAKICAgLyoqCiAgICAqIFJlbW92ZXMgYSBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVyIGludGVyZmFjZS4KICAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgaW50ZXJmYWNlIHRvIHJlbW92ZSAKKyAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciBpbnRlcmZhY2UgdG8gcmVtb3ZlCiAgICAqLwogICBARGVwcmVjYXRlZAogICB2b2lkIHJlbW92ZUNoYW5nZUxpc3RlbmVyKENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKTsKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNDbGlja0V2ZW50cy5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0NsaWNrRXZlbnRzLmphdmEKaW5kZXggM2VlODRjZi4uMzZkMmMzNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0NsaWNrRXZlbnRzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0NsaWNrRXZlbnRzLmphdmEKQEAgLTE4LDcgKzE4LDExIEBACiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBzb3VyY2VzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKICAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5DbGlja0xpc3RlbmVyfSBpbnRlcmZhY2UuCisgKiAKKyAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5IYXNDbGlja0hhbmRsZXJzfQorICogICAgICAgICAgICAgaW5zdGVhZAogICovCitARGVwcmVjYXRlZAogcHVibGljIGludGVyZmFjZSBTb3VyY2VzQ2xpY2tFdmVudHMgewogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0ZvY3VzRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzRm9jdXNFdmVudHMuamF2YQppbmRleCA0NGVhODNkLi42ZjU2YWRiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzRm9jdXNFdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzRm9jdXNFdmVudHMuamF2YQpAQCAtMTksNyArMTksMTAgQEAKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBzb3VyY2VzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKICAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5Gb2N1c0xpc3RlbmVyfSBpbnRlcmZhY2UuCiAgKiAKKyAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5IYXNBbGxGb2N1c0hhbmRsZXJzfQorICogICAgICAgICAgICAgaW5zdGVhZAogICovCitARGVwcmVjYXRlZAogcHVibGljIGludGVyZmFjZSBTb3VyY2VzRm9jdXNFdmVudHMgewogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0tleWJvYXJkRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzS2V5Ym9hcmRFdmVudHMuamF2YQppbmRleCA4ZTdkNGYzLi4zN2YwZmYyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzS2V5Ym9hcmRFdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzS2V5Ym9hcmRFdmVudHMuamF2YQpAQCAtMTgsMTQgKzE4LDIxIEBACiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBzb3VyY2VzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKICAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5LZXlib2FyZExpc3RlbmVyfSBpbnRlcmZhY2UuCisgKiAKKyAqIEBkZXByZWNhdGVkIHVzZQorICogICAgICAgICAgICAge0BsaW5rIGNvbS5nb29nbGUuZ3d0LmNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuSGFzQWxsS2V5SGFuZGxlcnN9CisgKiAgICAgICAgICAgICBpbnN0ZWFkCiAgKi8KK0BEZXByZWNhdGVkCiBwdWJsaWMgaW50ZXJmYWNlIFNvdXJjZXNLZXlib2FyZEV2ZW50cyB7CiAKICAgLyoqCiAgICAqIEFkZHMgYSBsaXN0ZW5lciBpbnRlcmZhY2UgdG8gcmVjZWl2ZSBrZXlib2FyZCBldmVudHMuCiAgICAqIAogICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIGludGVyZmFjZSB0byBhZGQKLSAgICogQGRlcHJlY2F0ZWQgdXNlIDxjb2RlPmFkZEtleVByZXNzSGFuZGxlci9hZGRLZXlEb3duS2V5RG93bkhhbmRsZXIvYWRkS2V5VXBIYW5kbGVyPC9jb2RlPiBpbnN0ZWFkCisgICAqIEBkZXByZWNhdGVkIHVzZQorICAgKiAgICAgICAgICAgICA8Y29kZT5hZGRLZXlQcmVzc0hhbmRsZXIvYWRkS2V5RG93bktleURvd25IYW5kbGVyL2FkZEtleVVwSGFuZGxlcjwvY29kZT4KKyAgICogICAgICAgICAgICAgaW5zdGVhZAogICAgKi8KICAgQERlcHJlY2F0ZWQKICAgdm9pZCBhZGRLZXlib2FyZExpc3RlbmVyKEtleWJvYXJkTGlzdGVuZXIgbGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0xvYWRFdmVudHMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNMb2FkRXZlbnRzLmphdmEKaW5kZXggYThjOTQ4NC4uMTUzNmU1NSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc0xvYWRFdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzTG9hZEV2ZW50cy5qYXZhCkBAIC0xOCw3ICsxOCwxMSBAQAogLyoqCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2Ugc291cmNlcyB0aGUgZXZlbnRzIGRlZmluZWQgYnkgdGhlCiAgKiB7QGxpbmsgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuTG9hZExpc3RlbmVyfSBpbnRlcmZhY2UuCisgKiAKKyAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5IYXNFcnJvckhhbmRsZXJzfSBhbmQKKyAqICAgICAgICAgICAgIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Lkhhc0xvYWRIYW5kbGVyc30gaW5zdGVhZAogICovCitARGVwcmVjYXRlZAogcHVibGljIGludGVyZmFjZSBTb3VyY2VzTG9hZEV2ZW50cyB7CiAKICAgLyoqCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzTW91c2VFdmVudHMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNNb3VzZUV2ZW50cy5qYXZhCmluZGV4IDNjMDUzOWYuLmNlM2M2MGEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNNb3VzZUV2ZW50cy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNNb3VzZUV2ZW50cy5qYXZhCkBAIC0xOCwxNCArMTgsMTkgQEAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHNvdXJjZXMgdGhlIGV2ZW50cyBkZWZpbmVkIGJ5IHRoZQogICoge0BsaW5rIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLk1vdXNlTGlzdGVuZXJ9IGludGVyZmFjZS4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Lkhhc0FsbE1vdXNlSGFuZGxlcnNzfQorICogICAgICAgICAgICAgaW5zdGVhZAogICovCitARGVwcmVjYXRlZAogcHVibGljIGludGVyZmFjZSBTb3VyY2VzTW91c2VFdmVudHMgewogCiAgIC8qKgogICAgKiBBZGRzIGEgbGlzdGVuZXIgaW50ZXJmYWNlIHRvIHJlY2VpdmUgbW91c2UgZXZlbnRzLgogICAgKiAKICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciBpbnRlcmZhY2UgdG8gYWRkCi0gICAqIEBkZXByZWNhdGVkIHVzZSA8Y29kZT5hZGRNb3VzZShEb3duL1VwL092ZXIvT3V0L01vdmUvU2Nyb2xsKUhhbmRsZXI8L2NvZGU+IGluc3RlYWQKKyAgICogQGRlcHJlY2F0ZWQgdXNlIDxjb2RlPmFkZE1vdXNlKERvd24vVXAvT3Zlci9PdXQvTW92ZS9TY3JvbGwpSGFuZGxlcjwvY29kZT4KKyAgICogICAgICAgICAgICAgaW5zdGVhZAogICAgKi8KICAgQERlcHJlY2F0ZWQKICAgdm9pZCBhZGRNb3VzZUxpc3RlbmVyKE1vdXNlTGlzdGVuZXIgbGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc01vdXNlV2hlZWxFdmVudHMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNNb3VzZVdoZWVsRXZlbnRzLmphdmEKaW5kZXggYjhmZjkyMS4uYzAwM2RhNiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc01vdXNlV2hlZWxFdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzTW91c2VXaGVlbEV2ZW50cy5qYXZhCkBAIC0xLDEyICsxLDEyIEBACiAvKgogICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4KLSAqCisgKiAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAogICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKICAqIHRoZSBMaWNlbnNlIGF0Ci0gKgorICogCiAgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCisgKiAKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKICAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQpAQCAtMTgsMTIgKzE4LDE1IEBACiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBzb3VyY2VzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKICAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5Nb3VzZVdoZWVsTGlzdGVuZXJ9IGludGVyZmFjZS4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Lkhhc01vdXNlRG93bkhhbmRsZXJzfQorICogICAgICAgICAgICAgaW5zdGVhZAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFNvdXJjZXNNb3VzZVdoZWVsRXZlbnRzIHsKIAogICAvKioKICAgICogQWRkcyBhIGxpc3RlbmVyIGludGVyZmFjZSB0byByZWNlaXZlIG1vdXNlIGV2ZW50cy4KLSAgICoKKyAgICogCiAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgaW50ZXJmYWNlIHRvIGFkZAogICAgKiBAZGVwcmVjYXRlZCB1c2UgPGNvZGU+YWRkTW91c2VXaGVlbEhhbmRsZXI8L2NvZGU+CiAgICAqLwpAQCAtMzIsNyArMzUsNyBAQAogCiAgIC8qKgogICAgKiBSZW1vdmVzIGEgcHJldmlvdXNseSBhZGRlZCBsaXN0ZW5lciBpbnRlcmZhY2UuCi0gICAqCisgICAqIAogICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIGludGVyZmFjZSB0byByZW1vdmUKICAgICovCiAgIEBEZXByZWNhdGVkCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzUG9wdXBFdmVudHMuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNQb3B1cEV2ZW50cy5qYXZhCmluZGV4IDgyNzYxNjAuLjZiM2VjNjEgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNQb3B1cEV2ZW50cy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNQb3B1cEV2ZW50cy5qYXZhCkBAIC0xOCw3ICsxOCwxMSBAQAogLyoqCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2Ugc291cmNlcyB0aGUgZXZlbnRzIGRlZmluZWQgYnkgdGhlCiAgKiB7QGxpbmsgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuUG9wdXBMaXN0ZW5lcn0gaW50ZXJmYWNlLgorICogCisgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhhc0Nsb3NlSGFuZGxlcnN9CisgKiAgICAgICAgICAgICBpbnN0ZWFkCiAgKi8KK0BEZXByZWNhdGVkCiBwdWJsaWMgaW50ZXJmYWNlIFNvdXJjZXNQb3B1cEV2ZW50cyB7CiAKICAgLyoqCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzU2Nyb2xsRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzU2Nyb2xsRXZlbnRzLmphdmEKaW5kZXggMTc4YWVmZi4uZmQ3ODVlMiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc1Njcm9sbEV2ZW50cy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNTY3JvbGxFdmVudHMuamF2YQpAQCAtMTgsNyArMTgsMTEgQEAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHNvdXJjZXMgdGhlIGV2ZW50cyBkZWZpbmVkIGJ5IHRoZQogICoge0BsaW5rIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlNjcm9sbExpc3RlbmVyfSBpbnRlcmZhY2UuCisgKiAKKyAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5IYXNTY3JvbGxIYW5kbGVyc30KKyAqICAgICAgICAgICAgIGluc3RlYWQKICAqLworQERlcHJlY2F0ZWQKIHB1YmxpYyBpbnRlcmZhY2UgU291cmNlc1Njcm9sbEV2ZW50cyB7CiAKICAgLyoqCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzVGFiRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzVGFiRXZlbnRzLmphdmEKaW5kZXggMWYzY2YxOS4uNzA5ZDk4ZSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc1RhYkV2ZW50cy5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNUYWJFdmVudHMuamF2YQpAQCAtMTUsMTAgKzE1LDE3IEBACiAgKi8KIHBhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWk7CiAKKwogLyoqCiAgKiBBIHdpZGdldCB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2Ugc291cmNlcyB0aGUgZXZlbnRzIGRlZmluZWQgYnkgdGhlCiAgKiB7QGxpbmsgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuVGFiTGlzdGVuZXJ9IGludGVyZmFjZS4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5TZWxlY3Rpb25IYW5kbGVyfQorICogICAgICAgICAgICAgYW5kCisgKiAgICAgICAgICAgICB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzQmVmb3JlU2VsZWN0aW9uSGFuZGxlcnN9CisgKiAgICAgICAgICAgICBpbnN0ZWFkCiAgKi8KK0BEZXByZWNhdGVkCiBwdWJsaWMgaW50ZXJmYWNlIFNvdXJjZXNUYWJFdmVudHMgewogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc1RhYmxlRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzVGFibGVFdmVudHMuamF2YQppbmRleCAwM2UwNWExLi42ZmZkN2QwIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzVGFibGVFdmVudHMuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzVGFibGVFdmVudHMuamF2YQpAQCAtMTgsNyArMTgsMTIgQEAKIC8qKgogICogQSB3aWRnZXQgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHNvdXJjZXMgdGhlIGV2ZW50cyBkZWZpbmVkIGJ5IHRoZQogICoge0BsaW5rIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlRhYmxlTGlzdGVuZXJ9IGludGVyZmFjZS4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50Lkhhc0NsaWNrSGFuZGxlcnN9CisgKiAgICAgICAgICAgICBpbnN0ZWFkLiBFdmVudCBzb3VyY2VzIHNob3VsZCBpbXBsZW1lbnQgbWV0aG9kcyBzaW1pbGFyIHRvCisgKiAgICAgICAgICAgICB7QGxpbmsgSFRNTFRhYmxlI2dldENlbGxGb3JFdmVudChjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQpfQogICovCitARGVwcmVjYXRlZAogcHVibGljIGludGVyZmFjZSBTb3VyY2VzVGFibGVFdmVudHMgewogCiAgIC8qKgpAQCAtMzcsNCArNDIsNCBAQAogICAgKi8KICAgQERlcHJlY2F0ZWQKICAgdm9pZCByZW1vdmVUYWJsZUxpc3RlbmVyKFRhYmxlTGlzdGVuZXIgbGlzdGVuZXIpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNUcmVlRXZlbnRzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Tb3VyY2VzVHJlZUV2ZW50cy5qYXZhCmluZGV4IDUxOWUxNDguLjRmN2U4ZmUgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1NvdXJjZXNUcmVlRXZlbnRzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU291cmNlc1RyZWVFdmVudHMuamF2YQpAQCAtMTgsMTQgKzE4LDIyIEBACiAvKioKICAqIEEgd2lkZ2V0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBzb3VyY2VzIHRoZSBldmVudHMgZGVmaW5lZCBieSB0aGUKICAqIHtAbGluayBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5UcmVlTGlzdGVuZXJ9IGludGVyZmFjZS4KKyAqIAorICogQGRlcHJlY2F0ZWQgdXNlCisgKiAgICAgICAgICAgICB7QGxpbmsgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzQmVmb3JlU2VsZWN0aW9uSGFuZGxlcnN9CisgKiAgICAgICAgICAgICAsIHtAbGluayBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IYXNPcGVuSGFuZGxlcnN9LAorICogICAgICAgICAgICAge0BsaW5rIGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhhc0NsaWNrSGFuZGxlcnN9CisgKiAgICAgICAgICAgICBpbnN0ZWFkCiAgKi8KK0BEZXByZWNhdGVkCiBwdWJsaWMgaW50ZXJmYWNlIFNvdXJjZXNUcmVlRXZlbnRzIHsKIAogICAvKioKICAgICogQWRkcyBhIGxpc3RlbmVyIGludGVyZmFjZSB0byByZWNlaXZlIHRyZWUgZXZlbnRzLgogICAgKiAKICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciBpbnRlcmZhY2UgdG8gYWRkCi0gICAqIEBkZXByZWNhdGVkIHVzZSBhZGRTZWxlY3Rpb25IYW5kbGVyLGFkZE9wZW5IYW5kbGVyLCBhbmQgYWRkQ2xvc2VIYW5kbGVyIGluc3RlYWQKKyAgICogQGRlcHJlY2F0ZWQgdXNlIGFkZFNlbGVjdGlvbkhhbmRsZXIsYWRkT3BlbkhhbmRsZXIsIGFuZCBhZGRDbG9zZUhhbmRsZXIKKyAgICogICAgICAgICAgICAgaW5zdGVhZAogICAgKi8KICAgQERlcHJlY2F0ZWQKICAgdm9pZCBhZGRUcmVlTGlzdGVuZXIoVHJlZUxpc3RlbmVyIGxpc3RlbmVyKTsKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1N1Z2dlc3RCb3guamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1N1Z2dlc3RCb3guamF2YQppbmRleCBmOWVjN2RhLi44ZmQ1OWIyIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9TdWdnZXN0Qm94LmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvU3VnZ2VzdEJveC5qYXZhCkBAIC0xMjEsNiArMTIxLDcgQEAKICAqIEBzZWUgTXVsdGlXb3JkU3VnZ2VzdE9yYWNsZQogICogQHNlZSBUZXh0Qm94QmFzZQogICovCitAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQogcHVibGljIGNsYXNzIFN1Z2dlc3RCb3ggZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cyBIYXNUZXh0LCBIYXNGb2N1cywKICAgICBIYXNBbmltYXRpb24sIFNvdXJjZXNDbGlja0V2ZW50cywgU291cmNlc0ZvY3VzRXZlbnRzLCBTb3VyY2VzQ2hhbmdlRXZlbnRzLAogICAgIFNvdXJjZXNLZXlib2FyZEV2ZW50cywgRmlyZXNTdWdnZXN0aW9uRXZlbnRzLCBIYXNBbGxLZXlIYW5kbGVycywKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1RhYkJhci5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGFiQmFyLmphdmEKaW5kZXggNDgyNjU4Yi4uNTViYWVjNCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGFiQmFyLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGFiQmFyLmphdmEKQEAgLTY5LDcgKzY5LDEzIEBACiAgICAqIE5vdGUgdGhhdCB0aGlzIHNldCBtaWdodCBleHBhbmQgb3ZlciB0aW1lLCBzbyBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgYXQKICAgICogeW91ciBvd24gcmlzay4KICAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgVGFiIGV4dGVuZHMgSGFzQWxsS2V5SGFuZGxlcnMsIEhhc0NsaWNrSGFuZGxlcnMgeworICBwdWJsaWMgaW50ZXJmYWNlIFRhYiBleHRlbmRzIEhhc0FsbEtleUhhbmRsZXJzLCBIYXNDbGlja0hhbmRsZXJzLCBIYXNXb3JkV3JhcCB7CisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgd2lkZ2V0IGltcGxlbWVudHMge0BsaW5rIEhhc1dvcmRXcmFwfS4KKyAgICAgKiAgCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB3aWRnZXQgaW1wbGVtZW50cyB7QGxpbmsgSGFzV29yZFdyYXB9CisgICAgICovCisgICAgYm9vbGVhbiBoYXNXb3JkV3JhcCgpOwogICB9CiAKICAgLyoqCkBAIC0xMTcsNiArMTIzLDE4IEBACiAgICAgICByZXR1cm4gZm9jdXNhYmxlUGFuZWw7CiAgICAgfQogCisgICAgcHVibGljIGJvb2xlYW4gZ2V0V29yZFdyYXAoKSB7CisgICAgICBpZiAoaGFzV29yZFdyYXAoKSkgeworICAgICAgICByZXR1cm4gKChIYXNXb3JkV3JhcCkgZm9jdXNhYmxlUGFuZWwuZ2V0V2lkZ2V0KCkpLmdldFdvcmRXcmFwKCk7CisgICAgICB9CisgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgIldpZGdldCBkb2VzIG5vdCBpbXBsZW1lbnQgSGFzV29yZFdyYXAiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNXb3JkV3JhcCgpIHsKKyAgICAgIHJldHVybiBmb2N1c2FibGVQYW5lbC5nZXRXaWRnZXQoKSBpbnN0YW5jZW9mIEhhc1dvcmRXcmFwOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKICAgICAgIHJldHVybiBlbmFibGVkOwogICAgIH0KQEAgLTE0OCw2ICsxNjYsMTUgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewogICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDsKICAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRXb3JkV3JhcChib29sZWFuIHdyYXApIHsKKyAgICAgIGlmIChoYXNXb3JkV3JhcCgpKSB7CisgICAgICAgICgoSGFzV29yZFdyYXApIGZvY3VzYWJsZVBhbmVsLmdldFdpZGdldCgpKS5zZXRXb3JkV3JhcCh3cmFwKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICJXaWRnZXQgZG9lcyBub3QgaW1wbGVtZW50IEhhc1dvcmRXcmFwIik7CisgICAgICB9CisgICAgfQogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFTkFNRV9ERUZBVUxUID0gImd3dC1UYWJCYXJJdGVtIjsKQEAgLTM0NywxMiArMzc0LDE0IEBACiAgICAqIHlvdSBuZWVkIHRvIGFjY2VzcyB0byB0aGUgaW5kaXZpZHVhbCB0YWJzLCBhZGQgYSBjbGljayBoYW5kbGVyIHRvIGVhY2gKICAgICoge0BsaW5rIFRhYn0gZWxlbWVudCBpbnN0ZWFkLgogICAgKi8KKyAgQERlcHJlY2F0ZWQKICAgcHVibGljIHZvaWQgb25DbGljayhXaWRnZXQgc2VuZGVyKSB7CiAgIH0KIAogICAvKioKICAgICogQGRlcHJlY2F0ZWQgYWRkIGEga2V5IGRvd24gaGFuZGxlciB0byB0aGUgaW5kaXZpZHVhbCB0YWIgd3JhcHBlcnMgaW5zdGVhZC4KICAgICovCisgIEBEZXByZWNhdGVkCiAgIHB1YmxpYyB2b2lkIG9uS2V5RG93bihXaWRnZXQgc2VuZGVyLCBjaGFyIGtleUNvZGUsIGludCBtb2RpZmllcnMpIHsKICAgfQogCkBAIC0zNjEsNiArMzkwLDcgQEAKICAgICogaWYgd2hhdCB5b3Ugd2FudGVkIHRvIGRvIHdhcyB0byBsaXN0ZW4gdG8ga2V5IHByZXNzIGV2ZW50cyBvbiB0YWJzLCBhZGQgdGhlCiAgICAqIGtleSBwcmVzcyBoYW5kbGVyIHRvIHRoZSBpbmRpdmlkdWFsIHRhYiB3cmFwcGVycyBpbnN0ZWFkLgogICAgKi8KKyAgQERlcHJlY2F0ZWQKICAgcHVibGljIHZvaWQgb25LZXlQcmVzcyhXaWRnZXQgc2VuZGVyLCBjaGFyIGtleUNvZGUsIGludCBtb2RpZmllcnMpIHsKICAgfQogCkBAIC0zNzAsNiArNDAwLDcgQEAKICAgICoga2V5IHVwIGhhbmRsZXIgdG8gdGhlIGluZGl2aWR1YWwgdGFiIHdyYXBwZXJzIGluc3RlYWQuCiAgICAqIAogICAgKi8KKyAgQERlcHJlY2F0ZWQKICAgcHVibGljIHZvaWQgb25LZXlVcChXaWRnZXQgc2VuZGVyLCBjaGFyIGtleUNvZGUsIGludCBtb2RpZmllcnMpIHsKICAgfQogCkBAIC00NTUsNyArNDg2LDcgQEAKIAogICAgIENsaWNrRGVsZWdhdGVQYW5lbCBkZWxQYW5lbCA9IChDbGlja0RlbGVnYXRlUGFuZWwpIHBhbmVsLmdldFdpZGdldChpbmRleCArIDEpOwogICAgIFNpbXBsZVBhbmVsIGZvY3VzYWJsZVBhbmVsID0gZGVsUGFuZWwuZ2V0Rm9jdXNhYmxlUGFuZWwoKTsKLSAgICBmb2N1c2FibGVQYW5lbC5zZXRXaWRnZXQobmV3IEhUTUwoaHRtbCkpOworICAgIGZvY3VzYWJsZVBhbmVsLnNldFdpZGdldChuZXcgSFRNTChodG1sLCBmYWxzZSkpOwogICB9CiAKICAgLyoqCkBAIC00NzMsNyArNTA0LDcgQEAKICAgICAvLyBJdCBpcyBub3Qgc2FmZSB0byBjaGVjayBpZiB0aGUgY3VycmVudCB3aWRnZXQgaXMgYW4gaW5zdGFuY2VvZiBMYWJlbCBhbmQKICAgICAvLyByZXVzZSBpdCBoZXJlIGJlY2F1c2UgSFRNTCBpcyBhbiBpbnN0YW5jZW9mIExhYmVsLiBMZWF2aW5nIGFuIEhUTUwgd291bGQKICAgICAvLyB0aHJvdyBvZmYgdGhlIHJlc3VsdHMgb2YgZ2V0VGFiSFRNTChpbnQpLgotICAgIGZvY3VzYWJsZVBhbmVsLnNldFdpZGdldChuZXcgTGFiZWwodGV4dCkpOworICAgIGZvY3VzYWJsZVBhbmVsLnNldFdpZGdldChuZXcgTGFiZWwodGV4dCwgZmFsc2UpKTsKICAgfQogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGV4dEJveEJhc2UuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1RleHRCb3hCYXNlLmphdmEKaW5kZXggM2Y3NjYwYS4uNjJhNmQ5YSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGV4dEJveEJhc2UuamF2YQorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UZXh0Qm94QmFzZS5qYXZhCkBAIC0zMCw2ICszMCw3IEBACiAvKioKICAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0IGVudHJ5IHdpZGdldHMuCiAgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgY2xhc3MgVGV4dEJveEJhc2UgZXh0ZW5kcyBGb2N1c1dpZGdldCBpbXBsZW1lbnRzIFNvdXJjZXNDaGFuZ2VFdmVudHMsCiAgICAgSGFzQ2hhbmdlSGFuZGxlcnMsIEhhc1RleHQsIEhhc05hbWUsIEhhc1ZhbHVlPFN0cmluZz4gewogCkBAIC0zMDEsNyArMzAyLDYgQEAKICAgfQogCiAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSwgYm9vbGVhbiBmaXJlRXZlbnRzKSB7Ci0gICAgYXNzZXJ0IG51bGwgIT0gdmFsdWUgOiAiVmFsdWUgbXVzdCBub3QgYmUgbnVsbCI7CiAgICAgU3RyaW5nIG9sZFZhbHVlID0gZ2V0VGV4dCgpOwogICAgIHNldFRleHQodmFsdWUpOwogICAgIGlmIChmaXJlRXZlbnRzKSB7CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UcmVlLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UcmVlLmphdmEKaW5kZXggMjkyYmRmYi4uM2Y3OTRiYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVHJlZS5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1RyZWUuamF2YQpAQCAtODIsNiArODIsNyBAQAogICoge0BleGFtcGxlIGNvbS5nb29nbGUuZ3d0LmV4YW1wbGVzLlRyZWVFeGFtcGxlfQogICogPC9wPgogICovCitAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQogcHVibGljIGNsYXNzIFRyZWUgZXh0ZW5kcyBXaWRnZXQgaW1wbGVtZW50cyBIYXNXaWRnZXRzLCBTb3VyY2VzVHJlZUV2ZW50cywKICAgICBIYXNGb2N1cywgSGFzQW5pbWF0aW9uLCBIYXNBbGxLZXlIYW5kbGVycywgSGFzQWxsRm9jdXNIYW5kbGVycywKICAgICBIYXNTZWxlY3Rpb25IYW5kbGVyczxUcmVlSXRlbT4sIEhhc09wZW5IYW5kbGVyczxUcmVlSXRlbT4sCkBAIC02MzgsMjIgKzYzOSw2IEBACiAgIH0KIAogICAvKioKLSAgICogU2V0cyB0aGUgYmFzZSBVUkwgdW5kZXIgd2hpY2ggdGhpcyB0cmVlIHdpbGwgZmluZCBpdHMgZGVmYXVsdCBpbWFnZXMuIFRoZXNlCi0gICAqIGltYWdlcyBtdXN0IGJlIG5hbWVkICJ0cmVlX3doaXRlLmdpZiIsICJ0cmVlX29wZW4uZ2lmIiwgYW5kCi0gICAqICJ0cmVlX2Nsb3NlZC5naWYiLgotICAgKiAKLSAgICogQHBhcmFtIGJhc2VVcmwKLSAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjVHJlZShUcmVlSW1hZ2VzKX0gYXMgaXQgcHJvdmlkZXMgYSBtb3JlIGVmZmljZW50Ci0gICAqICAgICAgICAgICAgIGFuZCBtYW5hZ2VhYmxlIHdheSB0byBzdXBwbHkgYSBzZXQgb2YgaW1hZ2VzIHRvIGJlIHVzZWQgd2l0aGluCi0gICAqICAgICAgICAgICAgIGEgdHJlZS4KLSAgICovCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyB2b2lkIHNldEltYWdlQmFzZShTdHJpbmcgYmFzZVVybCkgewotICAgIGltYWdlcyA9IG5ldyBJbWFnZXNGcm9tSW1hZ2VCYXNlKGJhc2VVcmwpOwotICAgIHJvb3QudXBkYXRlU3RhdGVSZWN1cnNpdmUoKTsKLSAgfQotCi0gIC8qKgogICAgKiBTZWxlY3RzIGEgc3BlY2lmaWVkIGl0ZW0uCiAgICAqIAogICAgKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBiZSBzZWxlY3RlZCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8gZGVzZWxlY3QgYWxsCkBAIC04MjIsNiArODA3LDggQEAKICAgdm9pZCBzaG93TGVhZkltYWdlKFRyZWVJdGVtIHRyZWVJdGVtKSB7CiAgICAgaWYgKHVzZUxlYWZJbWFnZXMgfHwgdHJlZUl0ZW0uaXNGdWxsTm9kZSgpKSB7CiAgICAgICBzaG93SW1hZ2UodHJlZUl0ZW0sIGltYWdlcy50cmVlTGVhZigpKTsKKyAgICB9IGVsc2UgaWYgKExvY2FsZUluZm8uZ2V0Q3VycmVudExvY2FsZSgpLmlzUlRMKCkpIHsKKyAgICAgIERPTS5zZXRTdHlsZUF0dHJpYnV0ZSh0cmVlSXRlbS5nZXRFbGVtZW50KCksICJwYWRkaW5nUmlnaHQiLCBpbmRlbnRWYWx1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgIERPTS5zZXRTdHlsZUF0dHJpYnV0ZSh0cmVlSXRlbS5nZXRFbGVtZW50KCksICJwYWRkaW5nTGVmdCIsIGluZGVudFZhbHVlKTsKICAgICB9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9XaWRnZXQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1dpZGdldC5qYXZhCmluZGV4IDhhNzQxMWUuLjdkMDcyNWUgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1dpZGdldC5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1dpZGdldC5qYXZhCkBAIC0xNSwxMiArMTUsMTMgQEAKICAqLwogcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aTsKIAoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRvbS5jbGllbnQuRWxlbWVudDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkRvbUV2ZW50OwotaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhhc0hhbmRsZXJzOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5FdmVudEhhbmRsZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkd3dEV2ZW50OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyTWFuYWdlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuRE9NOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkV2ZW50OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkV2ZW50TGlzdGVuZXI7CkBAIC04OCw4ICs4OSwyNSBAQAogICAgIHJldHVybiBoYW5kbGVyTWFuYWdlciAhPSBudWxsICYmIGhhbmRsZXJNYW5hZ2VyLmlzRXZlbnRIYW5kbGVkKHR5cGUpOwogICB9CiAKLSAgcHVibGljIHZvaWQgb25Ccm93c2VyRXZlbnQoRXZlbnQgbmF0aXZlRXZlbnQpIHsKLSAgICBEb21FdmVudC5maXJlTmF0aXZlRXZlbnQobmF0aXZlRXZlbnQsIGhhbmRsZXJNYW5hZ2VyKTsKKyAgcHVibGljIHZvaWQgb25Ccm93c2VyRXZlbnQoRXZlbnQgZXZlbnQpIHsKKyAgICBzd2l0Y2ggKERPTS5ldmVudEdldFR5cGUoZXZlbnQpKSB7CisgICAgICBjYXNlIEV2ZW50Lk9OTU9VU0VPVkVSOgorICAgICAgICAvLyBPbmx5IGZpcmUgdGhlIG1vdXNlIG92ZXIgZXZlbnQgaWYgaXQncyBjb21pbmcgZnJvbSBvdXRzaWRlIHRoaXMKKyAgICAgICAgLy8gd2lkZ2V0LgorICAgICAgICBFbGVtZW50IGZyb20gPSBldmVudC5nZXRGcm9tRWxlbWVudCgpOworICAgICAgICBpZiAoZnJvbSAhPSBudWxsICYmIGdldEVsZW1lbnQoKS5pc09ySGFzQ2hpbGQoZnJvbSkpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEV2ZW50Lk9OTU9VU0VPVVQ6CisgICAgICAgIC8vIE9ubHkgZmlyZSB0aGUgbW91c2Ugb3V0IGV2ZW50IGlmIGl0J3MgYWN0dWFsbHkgbGVhdmluZyB0aGlzCisgICAgICAgIC8vIHdpZGdldC4KKyAgICAgICAgRWxlbWVudCB0byA9IGV2ZW50LmdldFRvRWxlbWVudCgpOworICAgICAgICBpZiAodG8gIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkuaXNPckhhc0NoaWxkKHRvKSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBEb21FdmVudC5maXJlTmF0aXZlRXZlbnQoZXZlbnQsIGhhbmRsZXJNYW5hZ2VyKTsKICAgfQogCiAgIC8qKgpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvaW1wbC9IeXBlcmxpbmtJbXBsLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9pbXBsL0h5cGVybGlua0ltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQwNDJlCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvaW1wbC9IeXBlcmxpbmtJbXBsLmphdmEKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLmltcGw7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5FdmVudDsKKworLyoqCisgKiBNZXRob2RzIHRoYXQgbmVlZCBicm93c2VyLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgSHlwZXJsaW5rLgorICogQnkgZGVmYXVsdCwgd2UncmUgdmVyeSBjb25zZXJ2YXRpdmUgYW5kIGxldCB0aGUgYnJvd3NlciBoYW5kbGUgYW55IGNsaWNrcworICogd2l0aCBub24tbGVmdCBidXR0b25zIG9yIHdpdGggbW9kaWZpZXIga2V5cy4gVGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjb3JyZWN0CisgKiBiZWhhdmlvciBmb3IgRmlyZWZveC4KKyAqLworcHVibGljIGNsYXNzIEh5cGVybGlua0ltcGwgeworCisgIC8qKgorICAgKiBEZWZhdWx0IHZlcnNpb24sIHVzZWZ1bCBmb3IgRmlyZWZveC4gRG9uJ3QgZmlyZSBpZiBpdCdzIGEgcmlnaHRjbGljaywKKyAgICogbWlkZGxlY2xpY2ssIG9yIGlmIGFueSBtb2RpZmllcnMgYXJlIGhlbGQgZG93bi4KKyAgICovCisgIHB1YmxpYyBib29sZWFuIGhhbmRsZUFzQ2xpY2soRXZlbnQgZXZlbnQpIHsgICAKKyAgICBpbnQgbW91c2VCdXR0b25zID0gZXZlbnQuZ2V0QnV0dG9uKCk7CisgICAgYm9vbGVhbiBhbHQgPSBldmVudC5nZXRBbHRLZXkoKTsKKyAgICBib29sZWFuIGN0cmwgPSBldmVudC5nZXRDdHJsS2V5KCk7CisgICAgYm9vbGVhbiBtZXRhID0gZXZlbnQuZ2V0TWV0YUtleSgpOworICAgIGJvb2xlYW4gc2hpZnQgPSBldmVudC5nZXRTaGlmdEtleSgpOyAgICAKKyAgICBib29sZWFuIG1vZGlmaWVycyA9IGFsdCB8fCBjdHJsIHx8IG1ldGEgfHwgc2hpZnQ7CisgICAgYm9vbGVhbiBtaWRkbGUgPSBtb3VzZUJ1dHRvbnMgPT0gRXZlbnQuQlVUVE9OX01JRERMRTsKKyAgICBib29sZWFuIHJpZ2h0ID0gbW91c2VCdXR0b25zID09IEV2ZW50LkJVVFRPTl9SSUdIVDsKKworICAgIHJldHVybiAhbW9kaWZpZXJzICYmICFtaWRkbGUgJiYgIXJpZ2h0OworICB9Cit9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9pbXBsL0h5cGVybGlua0ltcGxJRS5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvaW1wbC9IeXBlcmxpbmtJbXBsSUUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU4M2EzCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvaW1wbC9IeXBlcmxpbmtJbXBsSUUuamF2YQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuaW1wbDsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkV2ZW50OworCisvKioKKyAqIElFIHZlcnNpb24gb2YgSHlwZXJsaW5rSW1wbC4gSUU2IGFuZCBJRTcgYWN0dWFsbHkgaGF2ZSBkaWZmZXJlbnQKKyAqIGJlaGF2aW9yOyBib3RoIGhhdmUgc3BlY2lhbCBiZWhhdmlvciBmb3Igc2hpZnQtY2xpY2ssIGJ1dCBJRTcgYWxzbyBvcGVucworICogaW4gYSBuZXcgdGFiIG9uIGN0cmwtY2xpY2suIElFNiB0cmVhdHMgY3RybC1jbGljayBhcyBhIHN0YW5kYXJkIGNsaWNrLgorICovCitwdWJsaWMgY2xhc3MgSHlwZXJsaW5rSW1wbElFIGV4dGVuZHMgSHlwZXJsaW5rSW1wbCB7CisgIAorICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGN0cmxpc01vZGlmaWVyID0gKGdldEludGVybmV0RXhwbG9yZXJWZXJzaW9uKCkgPj0gNyk7CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgSW50ZXJuZXQgRXhwbG9yZXIgb3IgYSAtMSwgKGluZGljYXRpbmcgdGhlIHVzZSBvZgorICAgKiBhbm90aGVyIGJyb3dzZXIpLiBCYXNlZCBvbiBjb2RlIGZyb20gTVNETi4KKyAgICogaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNzUwOS5hc3B4CisgICAqLworICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IGdldEludGVybmV0RXhwbG9yZXJWZXJzaW9uKCkgLyoteworICAgIHZhciBydiA9IC0xOyAvLyBBc3N1bWUgdGhhdCB3ZSdyZSBub3QgSUUuCisgICAgICAgICAgIAorICAgIGlmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSAnTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyJykgeworICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKKyAgICAgIHZhciByZSAgPSBuZXcgUmVnRXhwKCJNU0lFIChbMC05XXsxLH1bXC4wLTldezAsfSkiKTsKKyAgICAgIGlmIChyZS5leGVjKHVhKSAhPSBudWxsKQorICAgICAgICBydiA9IHBhcnNlRmxvYXQoIFJlZ0V4cC4kMSApOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcnY7CisgIH0tKi87CisgIAorICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaGFuZGxlQXNDbGljayhFdmVudCBldmVudCkgeworICAgIGludCBtb3VzZUJ1dHRvbnMgPSBldmVudC5nZXRCdXR0b24oKTsKKyAgICBib29sZWFuIGN0cmwgPSBldmVudC5nZXRDdHJsS2V5KCk7CisgICAgYm9vbGVhbiBzaGlmdCA9IGV2ZW50LmdldFNoaWZ0S2V5KCk7CisgICAgYm9vbGVhbiBtaWRkbGUgPSBtb3VzZUJ1dHRvbnMgPT0gRXZlbnQuQlVUVE9OX01JRERMRTsKKyAgICBib29sZWFuIHJpZ2h0ID0gbW91c2VCdXR0b25zID09IEV2ZW50LkJVVFRPTl9SSUdIVDsKKyAgICBib29sZWFuIG1vZGlmaWVyczsKKyAgICAKKyAgICBpZiAoY3RybGlzTW9kaWZpZXIpIHsKKyAgICAgIG1vZGlmaWVycyA9IHNoaWZ0IHx8IGN0cmw7CisgICAgfSBlbHNlIHsKKyAgICAgIG1vZGlmaWVycyA9IHNoaWZ0OyAgCisgICAgfQorCisgICAgcmV0dXJuICFtb2RpZmllcnMgJiYgIW1pZGRsZSAmJiAhcmlnaHQ7CisgIH0KK30KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL2ltcGwvSHlwZXJsaW5rSW1wbE9wZXJhLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9pbXBsL0h5cGVybGlua0ltcGxPcGVyYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9pbXBsL0h5cGVybGlua0ltcGxPcGVyYS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5pbXBsOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuRXZlbnQ7CisKKy8qKgorICogT3BlcmEgdmVyc2lvbiBvZiBIeXBlcmxpbmtJbXBsLiBBcyBvZiBPcGVyYSA5LCB0aGUgb25seSBtb2RpZmllciBrZXkKKyAqIHRoYXQgY2hhbmdlcyBjbGljayBiZWhhdmlvciBvbiBsaW5rcyBpcyBzaGlmdC4KKyAqLworcHVibGljIGNsYXNzIEh5cGVybGlua0ltcGxPcGVyYSBleHRlbmRzIEh5cGVybGlua0ltcGwgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaGFuZGxlQXNDbGljayhFdmVudCBldmVudCkgeworICAgIGludCBtb3VzZUJ1dHRvbnMgPSBldmVudC5nZXRCdXR0b24oKTsKKyAgICBib29sZWFuIHNoaWZ0ID0gZXZlbnQuZ2V0U2hpZnRLZXkoKTsKKyAgICBib29sZWFuIG1pZGRsZSA9IG1vdXNlQnV0dG9ucyA9PSBFdmVudC5CVVRUT05fTUlERExFOworICAgIGJvb2xlYW4gcmlnaHQgPSBtb3VzZUJ1dHRvbnMgPT0gRXZlbnQuQlVUVE9OX1JJR0hUOworCisgICAgcmV0dXJuICFzaGlmdCAmJiAhbWlkZGxlICYmICFyaWdodDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvaW1wbC9IeXBlcmxpbmtJbXBsU2FmYXJpLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9pbXBsL0h5cGVybGlua0ltcGxTYWZhcmkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjRlY2UxCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvaW1wbC9IeXBlcmxpbmtJbXBsU2FmYXJpLmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLmltcGw7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5FdmVudDsKKworLyoqCisgKiBIeXBlcmxpbmtJbXBsIGZvciBTYWZhcmkgYW5kIEdvb2dsZSBDaHJvbWUuIFNhZmFyaSBoYXMgc3BlY2lhbCBiZWhhdmlvciBmb3IKKyAqIGFsbCB0aGUgbW9kaWZpZXIga2V5cyBleGNlcHQgc2hpZnQsIHdoaWNoIGJlaGF2ZXMgbGlrZSBhIHJlZ3VsYXIgY2xpY2suCisgKiBDaHJvbWUsIGhvd2V2ZXIsIG9wZW5zIGEgbmV3IHdpbmRvdyBvbiBhIHNoaWZ0LWNsaWNrLgorICovCitwdWJsaWMgY2xhc3MgSHlwZXJsaW5rSW1wbFNhZmFyaSBleHRlbmRzIEh5cGVybGlua0ltcGwgeworCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2hpZnRJc01vZGlmaWVyID0gb25DaHJvbWUoKTsKKworICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBvbkNocm9tZSgpIC8qLXsKKyAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUiKSAhPSAtMTsKKyAgfS0qLzsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaGFuZGxlQXNDbGljayhFdmVudCBldmVudCkgeworICAgIGludCBtb3VzZUJ1dHRvbnMgPSBldmVudC5nZXRCdXR0b24oKTsKKyAgICBib29sZWFuIGFsdCA9IGV2ZW50LmdldEFsdEtleSgpOworICAgIGJvb2xlYW4gY3RybCA9IGV2ZW50LmdldEN0cmxLZXkoKTsKKyAgICBib29sZWFuIG1ldGEgPSBldmVudC5nZXRNZXRhS2V5KCk7CisgICAgYm9vbGVhbiBzaGlmdCA9IGV2ZW50LmdldFNoaWZ0S2V5KCk7CisgICAgYm9vbGVhbiBtaWRkbGUgPSBtb3VzZUJ1dHRvbnMgPT0gRXZlbnQuQlVUVE9OX01JRERMRTsKKyAgICBib29sZWFuIHJpZ2h0ID0gbW91c2VCdXR0b25zID09IEV2ZW50LkJVVFRPTl9SSUdIVDsKKworICAgIGJvb2xlYW4gbW9kaWZpZXJzID0gYWx0IHx8IGN0cmwgfHwgbWV0YTsKKyAgICBpZiAoc2hpZnRJc01vZGlmaWVyKSB7CisgICAgICBtb2RpZmllcnMgfD0gc2hpZnQ7CisgICAgfQorICAgIAorICAgIHJldHVybiAhbW9kaWZpZXJzICYmICFtaWRkbGUgJiYgIXJpZ2h0OworICB9Cit9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvRGF0ZVBpY2tlci5nd3QueG1sIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL0RhdGVQaWNrZXIuZ3d0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGFjYzlkCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL0RhdGVQaWNrZXIuZ3d0LnhtbApAQCAtMCwwICsxLDMgQEAKKzxtb2R1bGU+ICANCis8L21vZHVsZT4NCisNCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0NhbGVuZGFyTW9kZWwuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvQ2FsZW5kYXJNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGRkMGIKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0NhbGVuZGFyTW9kZWwuamF2YQpAQCAtMCwwICsxLDIwMSBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5EYXRlVGltZUZvcm1hdDsNCisNCitpbXBvcnQgamF2YS51dGlsLkRhdGU7DQorDQorLyoqDQorICogTW9kZWwgdXNlZCB0byBnZXQgY2FsZW5kYXIgaW5mb3JtYXRpb24gZm9yIHtAbGluayBEYXRlUGlja2VyfSBhbmQgaXRzDQorICogc3ViY2xhc3Nlcy4NCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygvKiBSZXF1aXJlZCB0byB1c2UgRGF0ZSBBUEkgaW4gZ3d0ICoveyJkZXByZWNhdGlvbiJ9KQ0KK3B1YmxpYyBjbGFzcyBDYWxlbmRhck1vZGVsIHsNCisNCisgIC8qKg0KKyAgICogVGhlIG51bWJlciBvZiB3ZWVrcyBub3JtYWxseSBkaXNwbGF5ZWQgaW4gYSBtb250aC4NCisgICAqLw0KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0VFS1NfSU5fTU9OVEggPSA2Ow0KKw0KKyAgLyoqDQorICAgKiBOdW1iZXIgb2YgZGF5cyBub3JtYWxseSBkaXNwbGF5ZWQgaW4gYSB3ZWVrLg0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVlTX0lOX1dFRUsgPSA3Ow0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gZGF5T2ZXZWVrTmFtZXMgPSBuZXcgU3RyaW5nWzddOw0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGF0ZVRpbWVGb3JtYXQgZGF5T2ZNb250aEZvcm1hdHRlciA9IERhdGVUaW1lRm9ybWF0LmdldEZvcm1hdCgiZCIpOw0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGF0ZVRpbWVGb3JtYXQgZGF5T2ZXZWVrRm9ybWF0dGVyID0gRGF0ZVRpbWVGb3JtYXQuZ2V0Rm9ybWF0KCJjY2NjYyIpOw0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGF0ZVRpbWVGb3JtYXQgbW9udGhBbmRZZWFyRm9ybWF0dGVyID0gRGF0ZVRpbWVGb3JtYXQuZ2V0Rm9ybWF0KCJNTU0geXl5eSIpOw0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZGF5T2ZNb250aE5hbWVzID0gbmV3IFN0cmluZ1szMl07DQorDQorICBwcml2YXRlIGZpbmFsIERhdGUgY3VycmVudE1vbnRoOw0KKw0KKyAgLyoqDQorICAgKiBDb25zdHJ1Y3Rvci4NCisgICAqLw0KKyAgcHVibGljIENhbGVuZGFyTW9kZWwoKSB7DQorICAgIGN1cnJlbnRNb250aCA9IG5ldyBEYXRlKCk7DQorDQorICAgIENhbGVuZGFyVXRpbC5zZXRUb0ZpcnN0RGF5T2ZNb250aChjdXJyZW50TW9udGgpOw0KKw0KKyAgICAvLyBGaW5kaW5nIGRheSBvZiB3ZWVrIG5hbWVzDQorICAgIERhdGUgZGF0ZSA9IG5ldyBEYXRlKCk7DQorICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDc7IGkrKykgew0KKyAgICAgIGRhdGUuc2V0RGF0ZShpKTsNCisgICAgICBpbnQgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTsNCisgICAgICBkYXlPZldlZWtOYW1lc1tkYXlPZldlZWtdID0gZ2V0RGF5T2ZXZWVrRm9ybWF0dGVyKCkuZm9ybWF0KGRhdGUpOw0KKyAgICB9DQorDQorICAgIC8vIEZpbmRpbmcgZGF5IG9mIG1vbnRoIG5hbWVzDQorICAgIGRhdGUuc2V0TW9udGgoMCk7DQorDQorICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzI7ICsraSkgew0KKyAgICAgIGRhdGUuc2V0RGF0ZShpKTsNCisgICAgICBkYXlPZk1vbnRoTmFtZXNbaV0gPSBnZXREYXlPZk1vbnRoRm9ybWF0dGVyKCkuZm9ybWF0KGRhdGUpOw0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIEZvcm1hdHMgdGhlIGN1cnJlbnQgc3BlY2lmaWVkIG1vbnRoLiBGb3IgZXhhbXBsZSAiU2VwIi4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgZm9ybWF0dGVkIG1vbnRoDQorICAgKi8NCisgIHB1YmxpYyBTdHJpbmcgZm9ybWF0Q3VycmVudE1vbnRoKCkgew0KKyAgICByZXR1cm4gZ2V0TW9udGhBbmRZZWFyRm9ybWF0dGVyKCkuZm9ybWF0KGN1cnJlbnRNb250aCk7DQorICB9DQorDQorICAvKioNCisgICAqIEZvcm1hdHMgYSBkYXRlJ3MgZGF5IG9mIG1vbnRoLiBGb3IgZXhhbXBsZSAiMSIuDQorICAgKiANCisgICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlDQorICAgKiBAcmV0dXJuIHRoZSBmb3JtYXRlZCBkYXkgb2YgbW9udGgNCisgICAqLw0KKyAgcHVibGljIFN0cmluZyBmb3JtYXREYXlPZk1vbnRoKERhdGUgZGF0ZSkgew0KKyAgICByZXR1cm4gZGF5T2ZNb250aE5hbWVzW2RhdGUuZ2V0RGF0ZSgpXTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogRm9ybWF0IGEgZGF5IGluIHRoZSB3ZWVrLiBTbywgZm9yIGV4YW1wbGUgIk1vbmRheSIuDQorICAgKiANCisgICAqIEBwYXJhbSBkYXlJbldlZWsgdGhlIGRheSBpbiB3ZWVrIHRvIGZvcm1hdA0KKyAgICogQHJldHVybiB0aGUgZm9ybWF0dGVkIGRheSBpbiB3ZWVrDQorICAgKi8NCisgIHB1YmxpYyBTdHJpbmcgZm9ybWF0RGF5T2ZXZWVrKGludCBkYXlJbldlZWspIHsNCisgICAgcmV0dXJuIGRheU9mV2Vla05hbWVzW2RheUluV2Vla107DQorICB9DQorDQorICAvKioNCisgICAqIEdldHMgdGhlIGZpcnN0IGRheSBvZiB0aGUgZmlyc3Qgd2VlayBpbiB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBtb250aC4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgZmlyc3QgZGF5DQorICAgKi8NCisgIHB1YmxpYyBEYXRlIGdldEN1cnJlbnRGaXJzdERheU9mRmlyc3RXZWVrKCkgew0KKyAgICBpbnQgd2tEYXlPZk1vbnRoMXN0ID0gY3VycmVudE1vbnRoLmdldERheSgpOw0KKyAgICBpbnQgc3RhcnQgPSBDYWxlbmRhclV0aWwuZ2V0U3RhcnRpbmdEYXlPZldlZWsoKTsNCisgICAgaWYgKHdrRGF5T2ZNb250aDFzdCA9PSBzdGFydCkgew0KKyAgICAgIC8vIGFsd2F5cyByZXR1cm4gYSBjb3B5IHRvIGFsbG93IFNpbXBsZUNhbGVuZGFyVmlldyB0byBhZGp1c3QgZmlyc3QNCisgICAgICAvLyBkaXNwbGF5IGRhdGUNCisgICAgICByZXR1cm4gbmV3IERhdGUoY3VycmVudE1vbnRoLmdldFRpbWUoKSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgRGF0ZSBkID0gbmV3IERhdGUoY3VycmVudE1vbnRoLmdldFRpbWUoKSk7DQorICAgICAgaW50IG9mZnNldCA9IHdrRGF5T2ZNb250aDFzdCAtIHN0YXJ0ID4gMCA/IHdrRGF5T2ZNb250aDFzdCAtIHN0YXJ0DQorICAgICAgICAgIDogREFZU19JTl9XRUVLIC0gKHN0YXJ0IC0gd2tEYXlPZk1vbnRoMXN0KTsNCisgICAgICBDYWxlbmRhclV0aWwuYWRkRGF5c1RvRGF0ZShkLCAtb2Zmc2V0KTsNCisgICAgICByZXR1cm4gZDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBkYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIG1vbnRoLiBVc2VkIHRvDQorICAgKiBhY2Nlc3MgYm90aCB0aGUgbW9udGggYW5kIHllYXIgaW5mb3JtYXRpb24uDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIG1vbnRoIGFuZCB5ZWFyDQorICAgKi8NCisgIHB1YmxpYyBEYXRlIGdldEN1cnJlbnRNb250aCgpIHsNCisgICAgcmV0dXJuIGN1cnJlbnRNb250aDsNCisgIH0NCisNCisgIC8qKg0KKyAgICogSXMgYSBkYXRlIGluIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIG1vbnRoPw0KKyAgICogDQorICAgKiBAcGFyYW0gZGF0ZSB0aGUgZGF0ZQ0KKyAgICogQHJldHVybiBkYXRlDQorICAgKi8NCisgIHB1YmxpYyBib29sZWFuIGlzSW5DdXJyZW50TW9udGgoRGF0ZSBkYXRlKSB7DQorICAgIHJldHVybiBjdXJyZW50TW9udGguZ2V0TW9udGgoKSA9PSBkYXRlLmdldE1vbnRoKCk7DQorICB9DQorDQorICAvKioNCisgICAqIFNldHMgdGhlIGN1cnJlbnRseSBzcGVjaWZpZWQgZGF0ZS4NCisgICAqIA0KKyAgICogQHBhcmFtIGN1cnJlbnREYXRlIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIGRhdGUNCisgICAqLw0KKyAgcHVibGljIHZvaWQgc2V0Q3VycmVudE1vbnRoKERhdGUgY3VycmVudERhdGUpIHsNCisgICAgdGhpcy5jdXJyZW50TW9udGguc2V0WWVhcihjdXJyZW50RGF0ZS5nZXRZZWFyKCkpOw0KKyAgICB0aGlzLmN1cnJlbnRNb250aC5zZXRNb250aChjdXJyZW50RGF0ZS5nZXRNb250aCgpKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogU2hpZnRzIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIGRhdGUgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBtb250aHMuIFRoZSBkYXkNCisgICAqIG9mIHRoZSBtb250aCB3aWxsIGJlIHBpbm5lZCB0byB0aGUgb3JpZ2luYWwgdmFsdWUgYXMgZmFyIGFzIHBvc3NpYmxlLg0KKyAgICogDQorICAgKiBAcGFyYW0gZGVsdGFNb250aHMgLSBudW1iZXIgb2YgbW9udGhzIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGRhdGUNCisgICAqLw0KKyAgcHVibGljIHZvaWQgc2hpZnRDdXJyZW50TW9udGgoaW50IGRlbHRhTW9udGhzKSB7DQorICAgIENhbGVuZGFyVXRpbC5hZGRNb250aHNUb0RhdGUoY3VycmVudE1vbnRoLCBkZWx0YU1vbnRocyk7DQorICAgIHJlZnJlc2goKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0cyB0aGUgZGF0ZSBvZiBtb250aCBmb3JtYXR0ZXIuDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIGRheSBvZiBtb250aCBmb3JtYXR0ZXINCisgICAqLw0KKyAgcHJvdGVjdGVkIERhdGVUaW1lRm9ybWF0IGdldERheU9mTW9udGhGb3JtYXR0ZXIoKSB7DQorICAgIHJldHVybiBkYXlPZk1vbnRoRm9ybWF0dGVyOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBkYXkgb2Ygd2VlayBmb3JtYXR0ZXIuDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIGRheSBvZiB3ZWVrIGZvcm1hdHRlcg0KKyAgICovDQorICBwcm90ZWN0ZWQgRGF0ZVRpbWVGb3JtYXQgZ2V0RGF5T2ZXZWVrRm9ybWF0dGVyKCkgew0KKyAgICByZXR1cm4gZGF5T2ZXZWVrRm9ybWF0dGVyOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBtb250aCBhbmQgeWVhciBmb3JtYXR0ZXIuDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIG1vbnRoIGFuZCB5ZWFyIGZvcm1hdHRlcg0KKyAgICovDQorICBwcm90ZWN0ZWQgRGF0ZVRpbWVGb3JtYXQgZ2V0TW9udGhBbmRZZWFyRm9ybWF0dGVyKCkgew0KKyAgICByZXR1cm4gbW9udGhBbmRZZWFyRm9ybWF0dGVyOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZWZyZXNoIHRoZSBjdXJyZW50IG1vZGVsIGFzIG5lZWRlZC4NCisgICAqLw0KKyAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaCgpIHsNCisgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9DYWxlbmRhclV0aWwuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvQ2FsZW5kYXJVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmMDQyNwotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvQ2FsZW5kYXJVdGlsLmphdmEKQEAgLTAsMCArMSwxNjggQEAKKy8qDQorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4NCisgKiANCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QNCisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZg0KKyAqIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQNCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUNCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcg0KKyAqIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudDsNCisNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuR1dUOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5jb25zdGFudHMuRGF0ZVRpbWVDb25zdGFudHM7DQorDQoraW1wb3J0IGphdmEudXRpbC5EYXRlOw0KKw0KKy8qKg0KKyAqIFVzZWZ1bCB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIHZpZXdzIG9mIGEgY2FsZW5kYXIuDQorICovDQorcHVibGljIGNsYXNzIENhbGVuZGFyVXRpbCB7DQorDQorICBzdGF0aWMgRGF0ZVRpbWVDb25zdGFudHMgaW50bENvbnN0YW50czsNCisNCisgIHByaXZhdGUgc3RhdGljIGludCBmaXJzdERheU9mV2Vla2VuZDsNCisNCisgIHByaXZhdGUgc3RhdGljIGludCBsYXN0RGF5T2ZXZWVrZW5kOw0KKyAgcHJpdmF0ZSBzdGF0aWMgaW50IHN0YXJ0aW5nRGF5Ow0KKw0KKyAgc3RhdGljIHsNCisgICAgaWYgKEdXVC5pc0NsaWVudCgpKSB7DQorICAgICAgaW50bENvbnN0YW50cyA9IChEYXRlVGltZUNvbnN0YW50cykgR1dULmNyZWF0ZShEYXRlVGltZUNvbnN0YW50cy5jbGFzcyk7DQorICAgICAgLy8gRmluZGluZyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB3ZWVrZW5kDQorICAgICAgZmlyc3REYXlPZldlZWtlbmQgPSBJbnRlZ2VyLnBhcnNlSW50KGludGxDb25zdGFudHMud2Vla2VuZFJhbmdlKClbMF0pIC0gMTsNCisgICAgICBsYXN0RGF5T2ZXZWVrZW5kID0gSW50ZWdlci5wYXJzZUludChpbnRsQ29uc3RhbnRzLndlZWtlbmRSYW5nZSgpWzFdKSAtIDE7DQorICAgICAgc3RhcnRpbmdEYXkgPSBJbnRlZ2VyLnBhcnNlSW50KENhbGVuZGFyVXRpbC5pbnRsQ29uc3RhbnRzLmZpcnN0RGF5T2ZUaGVXZWVrKCkpIC0gMTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBBZGRzIHRoZSBnaXZlbiBudW1iZXIgb2YgZGF5cyB0byBhIGRhdGUuDQorICAgKiANCisgICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlDQorICAgKiBAcGFyYW0gZGF5cyBudW1iZXIgb2YgZGF5cw0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkRGF5c1RvRGF0ZShEYXRlIGRhdGUsIGludCBkYXlzKSB7DQorICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBBZGRzIHRoZSBnaXZlbiBudW1iZXIgb2YgbW9udGhzIHRvIGEgZGF0ZS4NCisgICAqIA0KKyAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUNCisgICAqIEBwYXJhbSBtb250aHMgbnVtYmVyIG9mIG1vbnRocw0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkTW9udGhzVG9EYXRlKERhdGUgZGF0ZSwgaW50IG1vbnRocykgew0KKyAgICBpZiAobW9udGhzICE9IDApIHsNCisgICAgICBpbnQgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7DQorICAgICAgaW50IHllYXIgPSBkYXRlLmdldFllYXIoKTsNCisNCisgICAgICBpbnQgcmVzdWx0TW9udGhDb3VudCA9IHllYXIgKiAxMiArIG1vbnRoICsgbW9udGhzOw0KKyAgICAgIGludCByZXN1bHRZZWFyID0gcmVzdWx0TW9udGhDb3VudCAvIDEyOw0KKyAgICAgIGludCByZXN1bHRNb250aCA9IHJlc3VsdE1vbnRoQ291bnQgLSByZXN1bHRZZWFyICogMTI7DQorDQorICAgICAgZGF0ZS5zZXRNb250aChyZXN1bHRNb250aCk7DQorICAgICAgZGF0ZS5zZXRZZWFyKHJlc3VsdFllYXIpOw0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIENvcGllcyBhIGRhdGUuDQorICAgKiANCisgICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlDQorICAgKiBAcmV0dXJuIHRoZSBjb3B5DQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgRGF0ZSBjb3B5RGF0ZShEYXRlIGRhdGUpIHsNCisgICAgaWYgKGRhdGUgPT0gbnVsbCkgew0KKyAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorICAgIERhdGUgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7DQorICAgIG5ld0RhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSk7DQorICAgIHJldHVybiBuZXdEYXRlOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMuIFRpbWUgaXMgaWdub3JlZC4NCisgICAqIA0KKyAgICogQHBhcmFtIHN0YXJ0IHN0YXJ0aW5nIGRhdGUNCisgICAqIEBwYXJhbSBmaW5pc2ggZW5kaW5nIGRhdGUNCisgICAqIEByZXR1cm4gdGhlIGRpZmZlcmVudA0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIGludCBnZXREYXlzQmV0d2VlbihEYXRlIHN0YXJ0LCBEYXRlIGZpbmlzaCkgew0KKyAgICBpZiAoaGFzVGltZShzdGFydCkpIHsNCisgICAgICBzdGFydCA9IGNvcHlEYXRlKHN0YXJ0KTsNCisgICAgICByZXNldFRpbWUoc3RhcnQpOw0KKyAgICB9DQorDQorICAgIGlmIChoYXNUaW1lKGZpbmlzaCkpIHsNCisgICAgICBmaW5pc2ggPSBjb3B5RGF0ZShmaW5pc2gpOw0KKyAgICAgIHJlc2V0VGltZShmaW5pc2gpOw0KKyAgICB9DQorDQorICAgIGxvbmcgYVRpbWUgPSBzdGFydC5nZXRUaW1lKCk7DQorICAgIGxvbmcgYlRpbWUgPSBmaW5pc2guZ2V0VGltZSgpOw0KKw0KKyAgICBsb25nIGFkanVzdCA9IDYwICogNjAgKiAxMDAwOw0KKyAgICBhZGp1c3QgPSAoYlRpbWUgPiBhVGltZSkgPyBhZGp1c3QgOiAtYWRqdXN0Ow0KKw0KKyAgICByZXR1cm4gKGludCkgKChiVGltZSAtIGFUaW1lICsgYWRqdXN0KSAvICgyNCAqIDYwICogNjAgKiAxMDAwKSk7DQorICB9DQorDQorICAvKioNCisgICAqIFJldHVybnMgdGhlIGRheSBvZiB0aGUgd2VlayBvbiB3aGljaCB3ZWVrIHN0YXJ0cyBpbiB0aGUgY3VycmVudCBsb2NhbGUuIFRoZQ0KKyAgICogcmFuZ2UgYmV0d2VlbiAwIGZvciBTdW5kYXkgYW5kIDYgZm9yIFNhdHVyZGF5Lg0KKyAgICogDQorICAgKiBAcmV0dXJuIHRoZSBkYXkgb2YgdGhlIHdlZWsNCisgICAqLw0KKyAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3RhcnRpbmdEYXlPZldlZWsoKSB7DQorICAgIHJldHVybiBzdGFydGluZ0RheTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogU2V0cyBhIGRhdGUgb2JqZWN0IHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1vbnRoIGFuZCBubyB0aW1lDQorICAgKiBzcGVjaWZpZWQuDQorICAgKiANCisgICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUb0ZpcnN0RGF5T2ZNb250aChEYXRlIGRhdGUpIHsNCisgICAgcmVzZXRUaW1lKGRhdGUpOw0KKyAgICBkYXRlLnNldERhdGUoMSk7DQorICB9DQorDQorICBzdGF0aWMgYm9vbGVhbiBoYXNUaW1lKERhdGUgc3RhcnQpIHsNCisgICAgcmV0dXJuIHN0YXJ0LmdldEhvdXJzKCkgIT0gMCB8fCBzdGFydC5nZXRNaW51dGVzKCkgIT0gMA0KKyAgICAgICAgfHwgc3RhcnQuZ2V0U2Vjb25kcygpICE9IDA7DQorICB9DQorDQorICAvKioNCisgICAqIElzIGEgZGF5IGluIHRoZSB3ZWVrIGEgd2Vla2VuZD8NCisgICAqIA0KKyAgICogQHBhcmFtIGRheU9mV2VlayBkYXkgb2Ygd2Vlaw0KKyAgICogQHJldHVybiBpcyB0aGUgZGF5IG9mIHdlZWsgYSB3ZWVrZW5kPw0KKyAgICovDQorICBzdGF0aWMgYm9vbGVhbiBpc1dlZWtlbmQoaW50IGRheU9mV2Vlaykgew0KKyAgICByZXR1cm4gZGF5T2ZXZWVrID09IGZpcnN0RGF5T2ZXZWVrZW5kIHx8IGRheU9mV2VlayA9PSBsYXN0RGF5T2ZXZWVrZW5kOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZXNldHMgdGhlIGRhdGUgdG8gaGF2ZSBubyB0aW1lIG1vZGlmaWVycy4NCisgICAqIA0KKyAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUNCisgICAqLw0KKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZXNldFRpbWUoRGF0ZSBkYXRlKSB7DQorICAgIGxvbmcgbXNlYyA9IGRhdGUuZ2V0VGltZSgpOw0KKyAgICBtc2VjID0gKG1zZWMgLyAxMDAwKSAqIDEwMDA7DQorICAgIGRhdGUuc2V0VGltZShtc2VjKTsNCisNCisgICAgZGF0ZS5zZXRIb3VycygwKTsNCisgICAgZGF0ZS5zZXRNaW51dGVzKDApOw0KKyAgICBkYXRlLnNldFNlY29uZHMoMCk7DQorICB9DQorfQ0KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvQ2FsZW5kYXJWaWV3LmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0NhbGVuZGFyVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYWExOWEKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0NhbGVuZGFyVmlldy5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKKy8qDQorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4NCisgKiANCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QNCisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZg0KKyAqIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQNCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUNCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcg0KKyAqIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudDsNCisNCitpbXBvcnQgamF2YS51dGlsLkRhdGU7DQorDQorLyoqDQorICogVGhlIENhbGVuZGFyVmlldyBpcyBhIGNhbGVuZGFyIGdyaWQgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHZpZXcgb2YgYQ0KKyAqIHtAbGluayBEYXRlUGlja2VyfS4gTm90ZSwgdGhlIGNhbGVuZGFyIHZpZXcgb25seSBkZWFscyB3aXRoIHRoZSBjdXJyZW50bHkNCisgKiB2aXNpYmxlIGRhdGVzIGFuZCBhbGwgc3RhdGUgaXMgZmx1c2hlZCB3aGVuIHRoZSBjYWxlbmRhciB2aWV3IGlzIHJlZnJlc2hlZC4NCisgKiANCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2FsZW5kYXJWaWV3IGV4dGVuZHMgRGF0ZVBpY2tlckNvbXBvbmVudCB7DQorDQorICAvKioNCisgICAqIENvbnN0cnVjdG9yLg0KKyAgICovDQorICBwdWJsaWMgQ2FsZW5kYXJWaWV3KCkgew0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBBZGRzIGEgc3R5bGUgbmFtZSB0byB0aGUgY2VsbCBvZiB0aGUgc3VwcGxpZWQgZGF0ZS4gVGhpcyBzdHlsZSBpcyBvbmx5IHNldA0KKyAgICogdW50aWwgdGhlIG5leHQgdGltZSB0aGUge0BsaW5rIENhbGVuZGFyVmlld30gaXMgcmVmcmVzaGVkLg0KKyAgICogDQorICAgKiBAcGFyYW0gc3R5bGVOYW1lIHN0eWxlIG5hbWUgdG8gYWRkDQorICAgKiBAcGFyYW0gZGF0ZSBkYXRlIHRoYXQgd2lsbCBoYXZlIHRoZSBzdXBwbGllZCBzdHlsZSBhZGRlZA0KKyAgICovDQorICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRTdHlsZVRvRGF0ZShTdHJpbmcgc3R5bGVOYW1lLCBEYXRlIGRhdGUpOw0KKw0KKyAgLyoqDQorICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBkYXRlIHRoYXQgaXMgY3VycmVudGx5IHNob3duIGJ5IHRoZSBjYWxlbmRhci4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgZmlyc3QgZGF0ZS4NCisgICAqLw0KKyAgcHVibGljIGFic3RyYWN0IERhdGUgZ2V0Rmlyc3REYXRlKCk7DQorDQorICAvKioNCisgICAqIFJldHVybnMgdGhlIGxhc3QgZGF0ZSB0aGF0IGlzIGN1cnJlbnRseSBzaG93biBieSB0aGUgY2FsZW5kYXIuDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIGxhc3QgZGF0ZS4NCisgICAqLw0KKyAgcHVibGljIGFic3RyYWN0IERhdGUgZ2V0TGFzdERhdGUoKTsNCisNCisgIC8qKg0KKyAgICogSXMgdGhlIGNlbGwgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBkYXRlIGVuYWJsZWQ/DQorICAgKiANCisgICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlDQorICAgKiBAcmV0dXJuIGlzIHRoZSBkYXRlIGVuYWJsZWQNCisgICAqLw0KKyAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNEYXRlRW5hYmxlZChEYXRlIGRhdGUpOw0KKw0KKyAgLyoqDQorICAgKiBSZW1vdmVzIGEgdmlzaWJsZSBzdHlsZSBuYW1lIGZyb20gdGhlIGNlbGwgb2YgdGhlIHN1cHBsaWVkIGRhdGUuDQorICAgKiANCisgICAqIEBwYXJhbSBzdHlsZU5hbWUgc3R5bGUgbmFtZSB0byByZW1vdmUNCisgICAqIEBwYXJhbSBkYXRlIGRhdGUgdGhhdCB3aWxsIGhhdmUgdGhlIHN1cHBsaWVkIHN0eWxlIGFkZGVkDQorICAgKi8NCisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZVN0eWxlRnJvbURhdGUoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlKTsNCisNCisgIC8qKg0KKyAgICogRW5hYmxlcyBvciBEaXNhYmxlcyBhIHBhcnRpY3VsYXIgZGF0ZS4gYnkgZGVmYXVsdCBhbGwgdmFsaWQgZGF0ZXMgYXJlDQorICAgKiBlbmFibGVkIGFmdGVyIGEgcmVuZGVyaW5nIGV2ZW50LiBEaXNhYmxlZCBkYXRlcyBjYW5ub3QgYmUgc2VsZWN0ZWQuDQorICAgKiANCisgICAqIEBwYXJhbSBlbmFibGVkIHRydWUgZm9yIGVuYWJsZWQsIGZhbHNlIGZvciBkaXNhYmxlZA0KKyAgICogQHBhcmFtIGRhdGUgZGF0ZSB0byBlbmFibGUgb3IgZGlzYWJsZQ0KKyAgICovDQorICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRFbmFibGVkT25EYXRlKGJvb2xlYW4gZW5hYmxlZCwgRGF0ZSBkYXRlKTsNCisNCisgIC8qKg0KKyAgICogQWxsb3dzIHRoZSBjYWxlbmRhciB2aWV3IHRvIHVwZGF0ZSB0aGUgZGF0ZSBwaWNrZXIncyBoaWdobGlnaHRlZCBkYXRlLg0KKyAgICogDQorICAgKiBAcGFyYW0gZGF0ZSB0aGUgaGlnaGxpZ2h0ZWQgZGF0ZQ0KKyAgICovDQorICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRIaWdobGlnaHRlZERhdGUoRGF0ZSBkYXRlKSB7DQorICAgIGdldERhdGVQaWNrZXIoKS5zZXRIaWdobGlnaHRlZERhdGUoZGF0ZSk7DQorICB9DQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvQ2VsbEdyaWRJbXBsLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0NlbGxHcmlkSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzAxNjUKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0NlbGxHcmlkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjcyIEBACisvKg0KKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuDQorICogDQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90DQorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YNCisgKiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUDQorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlDQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXINCisgKiB0aGUgTGljZW5zZS4NCisgKi8NCisNCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnVzZXIuZGF0ZXBpY2tlci5jbGllbnQ7DQorDQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRvbS5jbGllbnQuRWxlbWVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5LZXlEb3duRXZlbnQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuS2V5Q29kZXM7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkRPTTsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuRXZlbnQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkdyaWQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlVJT2JqZWN0Ow0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQorDQorLyoqDQorICogSGlnaGxpZ2h0aW5nLCBzZWxlY3RhYmxlIGNlbGwgZ3JpZC4gVXNlZCB0byBoZWxwIGNvbnN0cnVjdCB0aGUgZGVmYXVsdA0KKyAqIGNhbGVuZGFyIHZpZXcuDQorICogDQorICogQHBhcmFtIDxWPiB0eXBlIG9mIHZhbHVlIGluIGdyaWQuDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpDQorYWJzdHJhY3QgY2xhc3MgQ2VsbEdyaWRJbXBsPFY+IGV4dGVuZHMgR3JpZCB7DQorDQorICAvKioNCisgICAqIENlbGwgdHlwZS4NCisgICAqLw0KKyAgYWJzdHJhY3QgY2xhc3MgQ2VsbCBleHRlbmRzIFVJT2JqZWN0IHsNCisgICAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZWQgPSB0cnVlOw0KKyAgICBwcml2YXRlIFYgdmFsdWU7DQorICAgIHByaXZhdGUgaW50IGluZGV4Ow0KKw0KKyAgICAvKioNCisgICAgICogQ3JlYXRlIGEgY2VsbCBncmlkLg0KKyAgICAgKiANCisgICAgICogQHBhcmFtIGVsZW0gdGhlIHdyYXBwZWQgZWxlbWVudA0KKyAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlDQorICAgICAqLw0KKyAgICBwdWJsaWMgQ2VsbChFbGVtZW50IGVsZW0sIFYgdmFsdWUpIHsNCisgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7DQorICAgICAgQ2VsbCBjdXJyZW50ID0gdGhpczsNCisgICAgICBpbmRleCA9IGNlbGxMaXN0LnNpemUoKTsNCisgICAgICBjZWxsTGlzdC5hZGQoY3VycmVudCk7DQorDQorICAgICAgc2V0RWxlbWVudChlbGVtKTsNCisgICAgICBlbGVtZW50VG9DZWxsLnB1dChjdXJyZW50KTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgViBnZXRWYWx1ZSgpIHsNCisgICAgICByZXR1cm4gdmFsdWU7DQorICAgIH0NCisNCisgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgew0KKyAgICAgIHJldHVybiBlbmFibGVkOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBib29sZWFuIGlzSGlnaGxpZ2h0ZWQoKSB7DQorICAgICAgcmV0dXJuIHRoaXMgPT0gaGlnaGxpZ2h0ZWRDZWxsOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBib29sZWFuIGlzU2VsZWN0ZWQoKSB7DQorICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbCA9PSB0aGlzOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7DQorICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDsNCisgICAgICBvbkVuYWJsZWQoZW5hYmxlZCk7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgdmVydGljYWxOYXZpZ2F0aW9uKGludCBrZXlDb2RlKSB7DQorICAgICAgc3dpdGNoIChrZXlDb2RlKSB7DQorICAgICAgICBjYXNlIEtleUNvZGVzLktFWV9VUDoNCisgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWQocHJldmlvdXNJdGVtKCkpOw0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgS2V5Q29kZXMuS0VZX0RPV046DQorICAgICAgICAgIHNldEhpZ2hsaWdodGVkKG5leHRJdGVtKCkpOw0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgS2V5Q29kZXMuS0VZX0VTQ0FQRToNCisgICAgICAgICAgLy8gRmlndXJlIG91dCBuZXcgZXZlbnQgZm9yIHRoaXMuDQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSBLZXlDb2Rlcy5LRVlfRU5URVI6DQorICAgICAgICAgIHNldFNlbGVjdGVkKHRoaXMpOw0KKyAgICAgICAgICBicmVhazsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgcHJvdGVjdGVkIENlbGwgbmV4dEl0ZW0oKSB7DQorICAgICAgaWYgKGluZGV4ID09IGdldExhc3RJbmRleCgpKSB7DQorICAgICAgICByZXR1cm4gY2VsbExpc3QuZ2V0KDApOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICByZXR1cm4gY2VsbExpc3QuZ2V0KGluZGV4ICsgMSk7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCB2b2lkIG9uRW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsNCisgICAgICB1cGRhdGVTdHlsZSgpOw0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCB2b2lkIG9uSGlnaGxpZ2h0ZWQoYm9vbGVhbiBoaWdobGlnaHRlZCkgew0KKyAgICAgIHVwZGF0ZVN0eWxlKCk7DQorICAgIH0NCisNCisgICAgcHJvdGVjdGVkIHZvaWQgb25TZWxlY3RlZChib29sZWFuIHNlbGVjdGVkKSB7DQorICAgICAgdXBkYXRlU3R5bGUoKTsNCisgICAgfQ0KKw0KKyAgICBwcm90ZWN0ZWQgQ2VsbCBwcmV2aW91c0l0ZW0oKSB7DQorICAgICAgaWYgKGluZGV4ICE9IDApIHsNCisgICAgICAgIHJldHVybiBjZWxsTGlzdC5nZXQoaW5kZXggLSAxKTsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgcmV0dXJuIGNlbGxMaXN0LmdldChnZXRMYXN0SW5kZXgoKSk7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHVwZGF0ZVN0eWxlKCk7DQorDQorICAgIHByaXZhdGUgaW50IGdldExhc3RJbmRleCgpIHsNCisgICAgICByZXR1cm4gY2VsbExpc3Quc2l6ZSgpIC0gMTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcHJpdmF0ZSBDZWxsIGhpZ2hsaWdodGVkQ2VsbDsNCisNCisgIHByaXZhdGUgQ2VsbCBzZWxlY3RlZENlbGw7DQorICBwcml2YXRlIEVsZW1lbnRNYXBwZXI8Q2VsbD4gZWxlbWVudFRvQ2VsbCA9IG5ldyBFbGVtZW50TWFwcGVyPENlbGw+KCk7DQorICBwcml2YXRlIEFycmF5TGlzdDxDZWxsPiBjZWxsTGlzdCA9IG5ldyBBcnJheUxpc3Q8Q2VsbD4oKTsNCisNCisgIHByb3RlY3RlZCBDZWxsR3JpZEltcGwoKSB7DQorICAgIHNldENlbGxQYWRkaW5nKDApOw0KKyAgICBzZXRDZWxsU3BhY2luZygwKTsNCisgICAgc2V0Qm9yZGVyV2lkdGgoMCk7DQorICAgIHNpbmtFdmVudHMoRXZlbnQuT05DTElDSyB8IEV2ZW50Lk9OTU9VU0VPVkVSIHwgRXZlbnQuT05NT1VTRU9VVCk7DQorICB9DQorDQorICBwdWJsaWMgQ2VsbCBnZXRDZWxsKEVsZW1lbnQgZWxlbWVudCkgew0KKyAgICByZXR1cm4gZWxlbWVudFRvQ2VsbC5nZXQoKGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkVsZW1lbnQpIGVsZW1lbnQpOw0KKyAgfQ0KKw0KKyAgcHVibGljIENlbGwgZ2V0Q2VsbChFdmVudCBlKSB7DQorICAgIC8vIEZpbmQgb3V0IHdoaWNoIGNlbGwgd2FzIGFjdHVhbGx5IGNsaWNrZWQuDQorICAgIEVsZW1lbnQgdGQgPSBnZXRFdmVudFRhcmdldENlbGwoZSk7DQorICAgIHJldHVybiB0ZCAhPSBudWxsDQorICAgICAgICA/IGVsZW1lbnRUb0NlbGwuZ2V0KChjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5FbGVtZW50KSB0ZCkgOiBudWxsOw0KKyAgfQ0KKw0KKyAgcHVibGljIENlbGwgZ2V0Q2VsbChpbnQgaSkgew0KKyAgICByZXR1cm4gY2VsbExpc3QuZ2V0KGkpOw0KKyAgfQ0KKw0KKyAgcHVibGljIEl0ZXJhdG9yIGdldENlbGxzKCkgew0KKyAgICByZXR1cm4gY2VsbExpc3QuaXRlcmF0b3IoKTsNCisgIH0NCisNCisgIHB1YmxpYyBDZWxsIGdldEhpZ2hsaWdodGVkQ2VsbCgpIHsNCisgICAgcmV0dXJuIGhpZ2hsaWdodGVkQ2VsbDsNCisgIH0NCisNCisgIHB1YmxpYyBpbnQgZ2V0TnVtQ2VsbHMoKSB7DQorICAgIHJldHVybiBjZWxsTGlzdC5zaXplKCk7DQorICB9DQorDQorICBwdWJsaWMgQ2VsbCBnZXRTZWxlY3RlZENlbGwoKSB7DQorICAgIHJldHVybiBzZWxlY3RlZENlbGw7DQorICB9DQorDQorICBwdWJsaWMgViBnZXRTZWxlY3RlZFZhbHVlKCkgew0KKyAgICByZXR1cm4gZ2V0VmFsdWUoc2VsZWN0ZWRDZWxsKTsNCisgIH0NCisNCisgIHB1YmxpYyBWIGdldFZhbHVlKENlbGwgY2VsbCkgew0KKyAgICByZXR1cm4gKGNlbGwgPT0gbnVsbCA/IG51bGwgOiBjZWxsLmdldFZhbHVlKCkpOw0KKyAgfQ0KKw0KKyAgQE92ZXJyaWRlDQorICBwdWJsaWMgdm9pZCBvbkJyb3dzZXJFdmVudChFdmVudCBldmVudCkgew0KKyAgICBzd2l0Y2ggKERPTS5ldmVudEdldFR5cGUoZXZlbnQpKSB7DQorICAgICAgY2FzZSBFdmVudC5PTkNMSUNLOiB7DQorICAgICAgICBDZWxsIGNlbGwgPSBnZXRDZWxsKGV2ZW50KTsNCisgICAgICAgIGlmIChpc0FjdGl2ZShjZWxsKSkgew0KKyAgICAgICAgICBzZXRTZWxlY3RlZChjZWxsKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICAgICBjYXNlIEV2ZW50Lk9OTU9VU0VPVVQ6IHsNCisgICAgICAgIEVsZW1lbnQgZSA9IERPTS5ldmVudEdldEZyb21FbGVtZW50KGV2ZW50KTsNCisgICAgICAgIGlmIChlICE9IG51bGwpIHsNCisgICAgICAgICAgQ2VsbCBjZWxsID0gZWxlbWVudFRvQ2VsbC5nZXQoKGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkVsZW1lbnQpIGUpOw0KKyAgICAgICAgICBpZiAoY2VsbCA9PSBoaWdobGlnaHRlZENlbGwpIHsNCisgICAgICAgICAgICBzZXRIaWdobGlnaHRlZChudWxsKTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKyAgICAgIGNhc2UgRXZlbnQuT05NT1VTRU9WRVI6IHsNCisgICAgICAgIEVsZW1lbnQgZSA9IERPTS5ldmVudEdldFRvRWxlbWVudChldmVudCk7DQorICAgICAgICBpZiAoZSAhPSBudWxsKSB7DQorICAgICAgICAgIENlbGwgY2VsbCA9IGVsZW1lbnRUb0NlbGwuZ2V0KChjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5FbGVtZW50KSBlKTsNCisgICAgICAgICAgaWYgKGlzQWN0aXZlKGNlbGwpKSB7DQorICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWQoY2VsbCk7DQorICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKw0KKyAgQE92ZXJyaWRlDQorICBwdWJsaWMgdm9pZCBvblVubG9hZCgpIHsNCisgICAgc2V0SGlnaGxpZ2h0ZWQobnVsbCk7DQorICB9DQorDQorICBwdWJsaWMgZmluYWwgdm9pZCBzZXRIaWdobGlnaHRlZChDZWxsIG5leHRIaWdobGlnaHRlZCkgew0KKyAgICBpZiAobmV4dEhpZ2hsaWdodGVkID09IGhpZ2hsaWdodGVkQ2VsbCkgew0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBDZWxsIG9sZEhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0ZWRDZWxsOw0KKyAgICBoaWdobGlnaHRlZENlbGwgPSBuZXh0SGlnaGxpZ2h0ZWQ7DQorICAgIGlmIChvbGRIaWdobGlnaHRlZCAhPSBudWxsKSB7DQorICAgICAgb2xkSGlnaGxpZ2h0ZWQub25IaWdobGlnaHRlZChmYWxzZSk7DQorICAgIH0NCisgICAgaWYgKGhpZ2hsaWdodGVkQ2VsbCAhPSBudWxsKSB7DQorICAgICAgaGlnaGxpZ2h0ZWRDZWxsLm9uSGlnaGxpZ2h0ZWQodHJ1ZSk7DQorICAgIH0NCisgIH0NCisNCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNlbGVjdGVkKENlbGwgY2VsbCkgew0KKyAgICBDZWxsIGxhc3QgPSBnZXRTZWxlY3RlZENlbGwoKTsNCisgICAgc2VsZWN0ZWRDZWxsID0gY2VsbDsNCisNCisgICAgaWYgKGxhc3QgIT0gbnVsbCkgew0KKyAgICAgIGxhc3Qub25TZWxlY3RlZChmYWxzZSk7DQorICAgIH0NCisgICAgaWYgKHNlbGVjdGVkQ2VsbCAhPSBudWxsKSB7DQorICAgICAgc2VsZWN0ZWRDZWxsLm9uU2VsZWN0ZWQodHJ1ZSk7DQorICAgIH0NCisgICAgb25TZWxlY3RlZChsYXN0LCBzZWxlY3RlZENlbGwpOw0KKyAgfQ0KKw0KKyAgcHJvdGVjdGVkIHZvaWQgb25LZXlEb3duKENlbGwgbGFzdEhpZ2hsaWdodGVkLCBLZXlEb3duRXZlbnQgZXZlbnQpIHsNCisgICAgaWYgKGV2ZW50LmlzQW55TW9kaWZpZXJLZXlEb3duKCkpIHsNCisgICAgICByZXR1cm47DQorICAgIH0NCisgICAgaW50IGtleUNvZGUgPSBldmVudC5nZXROYXRpdmVLZXlDb2RlKCk7DQorICAgIGlmIChsYXN0SGlnaGxpZ2h0ZWQgPT0gbnVsbCkgew0KKyAgICAgIGlmIChrZXlDb2RlID09IEtleUNvZGVzLktFWV9ET1dOICYmIGNlbGxMaXN0LnNpemUoKSA+IDApIHsNCisgICAgICAgIHNldEhpZ2hsaWdodGVkKGNlbGxMaXN0LmdldCgwKSk7DQorICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgIGxhc3RIaWdobGlnaHRlZC52ZXJ0aWNhbE5hdmlnYXRpb24oa2V5Q29kZSk7DQorICAgIH0NCisgIH0NCisNCisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIG9uU2VsZWN0ZWQoQ2VsbCBsYXN0U2VsZWN0ZWQsIENlbGwgY2VsbCk7DQorDQorICBwcml2YXRlIGJvb2xlYW4gaXNBY3RpdmUoQ2VsbCBjZWxsKSB7DQorICAgIHJldHVybiBjZWxsICE9IG51bGwgJiYgY2VsbC5pc0VuYWJsZWQoKTsNCisgIH0NCit9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EYXRlQm94LmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0RhdGVCb3guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWZjODNkCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EYXRlQm94LmphdmEKQEAgLTAsMCArMSw0OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50OworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5CbHVyRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5CbHVySGFuZGxlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5DbGlja0hhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5Gb2N1c0V2ZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuRm9jdXNIYW5kbGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuS2V5Q29kZXM7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5LZXlEb3duRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5LZXlEb3duSGFuZGxlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5DbG9zZUV2ZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkNsb3NlSGFuZGxlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUV2ZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLlZhbHVlQ2hhbmdlSGFuZGxlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5EYXRlVGltZUZvcm1hdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5Db21tYW5kOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkRlZmVycmVkQ29tbWFuZDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5Db21wb3NpdGU7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSGFzVmFsdWU7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuUG9wdXBQYW5lbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5UZXh0Qm94OworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKKy8qKgorICogQSB0ZXh0IGJveCB0aGF0IHNob3dzIGEge0BsaW5rIERhdGVQaWNrZXJ9IHdoZW4gdGhlIHVzZXIgZm9jdXNlcyBvbiBpdC4KKyAqIAorICogPGgzPkNTUyBTdHlsZSBSdWxlczwvaDM+CisgKiAKKyAqIDxkbD4KKyAqIDxkdD4uZ3d0LURhdGVCb3g8L2R0PgorICogPGRkPmRlZmF1bHQgc3R5bGUgbmFtZTwvZGQ+CisgKiA8ZHQ+LmRhdGVCb3hQb3B1cDwvZHQ+CisgKiA8ZGQ+QXBwbGllZCB0byB0aGUgcG9wdXAgYXJvdW5kIHRoZSBEYXRlUGlja2VyPC9kZD4KKyAqIDxkdD4uZGF0ZUJveEZvcm1hdEVycm9yPC9kdD4KKyAqIDxkZD5EZWZhdWx0IHN0eWxlIGZvciB3aGVuIHRoZSBkYXRlIGJveCBoYXMgYmFkIGlucHV0LiBBcHBsaWVkIGJ5CisgKiB7QGxpbmsgRGF0ZUJveC5EZWZhdWx0Rm9ybWF0fSB3aGVuIHRoZSB0ZXh0IGRvZXMgbm90IHJlcHJlc2VudCBhIGRhdGUgdGhhdAorICogY2FuIGJlIHBhcnNlZDwvZGQ+CisgKiA8L2RsPgorICogCisgKiA8cD4KKyAqIDxoMz5FeGFtcGxlPC9oMz4KKyAqIHtAZXhhbXBsZSBjb20uZ29vZ2xlLmd3dC5leGFtcGxlcy5EYXRlQm94RXhhbXBsZX0KKyAqIDwvcD4KKyAqLworcHVibGljIGNsYXNzIERhdGVCb3ggZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cyBIYXNWYWx1ZTxEYXRlPiB7CisgIC8qKgorICAgKiBEZWZhdWx0IHtAbGluayBEYXRlQm94LkZvcm1hdH0gY2xhc3MuIFRoZSBkYXRlIGlzIGZpcnN0IHBhcnNlZCB1c2luZyB0aGUKKyAgICoge0BsaW5rIERhdGVUaW1lRm9ybWF0fSBzdXBwbGllZCBieSB0aGUgdXNlciwgb3IKKyAgICoge0BsaW5rIERhdGVUaW1lRm9ybWF0I2dldE1lZGl1bURhdGVGb3JtYXQoKX0gYnkgZGVmYXVsdC4KKyAgICogPHA+CisgICAqIElmIHRoYXQgZmFpbHMsIHdlIHRoZW4gdHJ5IHRvIHBhcnNlIGFnYWluIHVzaW5nIHRoZSBkZWZhdWx0IGJyb3dzZXIgZGF0ZQorICAgKiBwYXJzaW5nLgorICAgKiA8L3A+CisgICAqIElmIHRoYXQgZmFpbHMsIHRoZSA8Y29kZT5kYXRlQm94Rm9ybWF0RXJyb3I8L2NvZGU+IGNzcyBzdHlsZSBpcworICAgKiBhcHBsaWVkIHRvIHRoZSB7QGxpbmsgRGF0ZUJveH0uIFRoZSBzdHlsZSB3aWxsIGJlIHJlbW92ZWQgd2hlbiBlaXRoZXIgYQorICAgKiBzdWNjZXNzZnVsIHtAbGluayAjcGFyc2UoRGF0ZUJveCxTdHJpbmcsIGJvb2xlYW4pfSBpcyBjYWxsZWQgb3IKKyAgICoge0BsaW5rICNmb3JtYXQoRGF0ZUJveCxEYXRlKX0gaXMgY2FsbGVkLgorICAgKiA8cD4KKyAgICogVXNlIGEgZGlmZmVyZW50IHtAbGluayBEYXRlQm94LkZvcm1hdH0gaW5zdGFuY2UgdG8gY2hhbmdlIHRoYXQgYmVoYXZpb3IuCisgICAqIDwvcD4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRGVmYXVsdEZvcm1hdCBpbXBsZW1lbnRzIEZvcm1hdCB7CisKKyAgICBwcml2YXRlIGZpbmFsIERhdGVUaW1lRm9ybWF0IGRhdGVUaW1lRm9ybWF0OworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBkZWZhdWx0IGZvcm1hdCBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRGVmYXVsdEZvcm1hdCgpIHsKKyAgICAgIGRhdGVUaW1lRm9ybWF0ID0gRGF0ZVRpbWVGb3JtYXQuZ2V0TWVkaXVtRGF0ZVRpbWVGb3JtYXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRlZmF1bHQgZm9ybWF0IGluc3RhbmNlLgorICAgICAqIAorICAgICAqIEBwYXJhbSBkYXRlVGltZUZvcm1hdCB0aGUge0BsaW5rIERhdGVUaW1lRm9ybWF0fSB0byB1c2Ugd2l0aCB0aGlzCisgICAgICogICAgICAgICAge0BsaW5rIEZvcm1hdH0uCisgICAgICovCisgICAgcHVibGljIERlZmF1bHRGb3JtYXQoRGF0ZVRpbWVGb3JtYXQgZGF0ZVRpbWVGb3JtYXQpIHsKKyAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXQgPSBkYXRlVGltZUZvcm1hdDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGZvcm1hdChEYXRlQm94IGJveCwgRGF0ZSBkYXRlKSB7CisgICAgICBpZiAoZGF0ZSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBkYXRlVGltZUZvcm1hdC5mb3JtYXQoZGF0ZSk7CisgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGF0ZSB0aW1lIGZvcm1hdC4KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoZSBkYXRlIHRpbWUgZm9ybWF0CisgICAgICovCisgICAgcHVibGljIERhdGVUaW1lRm9ybWF0IGdldERhdGVUaW1lRm9ybWF0KCkgeworICAgICAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0OworICAgIH0KKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisgICAgcHVibGljIERhdGUgcGFyc2UoRGF0ZUJveCBkYXRlQm94LCBTdHJpbmcgZGF0ZVRleHQsIGJvb2xlYW4gcmVwb3J0RXJyb3IpIHsKKyAgICAgIERhdGUgZGF0ZSA9IG51bGw7CisgICAgICB0cnkgeworICAgICAgICBpZiAoZGF0ZVRleHQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgZGF0ZSA9IGRhdGVUaW1lRm9ybWF0LnBhcnNlKGRhdGVUZXh0KTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICB0cnkgeworICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlVGV4dCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgaWYgKHJlcG9ydEVycm9yKSB7CisgICAgICAgICAgICBkYXRlQm94LmFkZFN0eWxlTmFtZShEQVRFX0JPWF9GT1JNQVRfRVJST1IpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIGRhdGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVzZXQoRGF0ZUJveCBkYXRlQm94LCBib29sZWFuIGFiYW5kb24pIHsKKyAgICAgIGRhdGVCb3gucmVtb3ZlU3R5bGVOYW1lKERBVEVfQk9YX0ZPUk1BVF9FUlJPUik7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIEltcGxlbWVudGVkIGJ5IGEgZGVsZWdhdGUgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGFuZCBmb3JtYXRpbmcgb2YgZGF0ZQorICAgKiB2YWx1ZXMuIFRoZSBkZWZhdWx0IHtAbGluayBGb3JtYXR9IHVzZXMgYSBuZXcge0BsaW5rIERlZmF1bHRGb3JtYXR9CisgICAqIGluc3RhbmNlLgorICAgKi8KKyAgcHVibGljIGludGVyZmFjZSBGb3JtYXQgeworCisgICAgLyoqCisgICAgICogRm9ybWF0cyB0aGUgcHJvdmlkZWQgZGF0ZS4gTm90ZSwgYSBudWxsIGRhdGUgaXMgYSBwb3NzaWJsZSBpbnB1dC4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZGF0ZUJveCB0aGUgZGF0ZSBib3ggeW91IGFyZSBmb3JtYXR0aW5nCisgICAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUgdG8gZm9ybWF0CisgICAgICogQHJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgYXMgYSBzdHJpbmcKKyAgICAgKi8KKyAgICBTdHJpbmcgZm9ybWF0KERhdGVCb3ggZGF0ZUJveCwgRGF0ZSBkYXRlKTsKKworICAgIC8qKgorICAgICAqIFBhcnNlcyB0aGUgcHJvdmlkZWQgc3RyaW5nIGFzIGEgZGF0ZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZGF0ZUJveCB0aGUgZGF0ZSBib3gKKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRhdGUKKyAgICAgKiBAcGFyYW0gcmVwb3J0RXJyb3Igc2hvdWxkIHRoZSBmb3JtYXR0ZXIgaW5kaWNhdGUgYSBwYXJzZSBlcnJvciB0byB0aGUKKyAgICAgKiAgICAgICAgICB1c2VyPworICAgICAqIEByZXR1cm4gdGhlIGRhdGUgY3JlYXRlZCwgb3IgbnVsbCBpZiB0aGVyZSB3YXMgYSBwYXJzZSBlcnJvcgorICAgICAqLworICAgIERhdGUgcGFyc2UoRGF0ZUJveCBkYXRlQm94LCBTdHJpbmcgdGV4dCwgYm9vbGVhbiByZXBvcnRFcnJvcik7CisKKyAgICAvKioKKyAgICAgKiBJZiB0aGUgZm9ybWF0IGRpZCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGF0ZSBib3gncyBzdHlsaW5nLCByZXNldCB0aGVtCisgICAgICogbm93LgorICAgICAqIAorICAgICAqIEBwYXJhbSBhYmFuZG9uIHRydWUgd2hlbiB0aGUgY3VycmVudCBmb3JtYXQgaXMgYmVpbmcgcmVwbGFjZWQgYnkgYW5vdGhlcgorICAgICAqIEBwYXJhbSBkYXRlQm94IHRoZSBkYXRlIGJveAorICAgICAqLworICAgIHZvaWQgcmVzZXQoRGF0ZUJveCBkYXRlQm94LCBib29sZWFuIGFiYW5kb24pOworICB9CisKKyAgcHJpdmF0ZSBjbGFzcyBEYXRlQm94SGFuZGxlciBpbXBsZW1lbnRzIFZhbHVlQ2hhbmdlSGFuZGxlcjxEYXRlPiwKKyAgICAgIEZvY3VzSGFuZGxlciwgQmx1ckhhbmRsZXIsIENsaWNrSGFuZGxlciwgS2V5RG93bkhhbmRsZXIsCisgICAgICBDbG9zZUhhbmRsZXI8UG9wdXBQYW5lbD4geworCisgICAgcHVibGljIHZvaWQgb25CbHVyKEJsdXJFdmVudCBldmVudCkgeworICAgICAgaWYgKGlzRGF0ZVBpY2tlclZpc2libGUoKSA9PSBmYWxzZSkgeworICAgICAgICB1cGRhdGVEYXRlRnJvbVRleHRCb3goKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKENsaWNrRXZlbnQgZXZlbnQpIHsKKyAgICAgIHNob3dEYXRlUGlja2VyKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25DbG9zZShDbG9zZUV2ZW50PFBvcHVwUGFuZWw+IGV2ZW50KSB7CisgICAgICAvLyBJZiB3ZSBhcmUgbm90IGNsb3NpbmcgYmVjYXVzZSB3ZSBoYXZlIHBpY2tlZCBhIG5ldyB2YWx1ZSwgbWFrZSBzdXJlIHRoZQorICAgICAgLy8gY3VycmVudCB2YWx1ZSBpcyB1cGRhdGVkLgorICAgICAgaWYgKGFsbG93RFBTaG93KSB7CisgICAgICAgIHVwZGF0ZURhdGVGcm9tVGV4dEJveCgpOworICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uRm9jdXMoRm9jdXNFdmVudCBldmVudCkgeworICAgICAgaWYgKGFsbG93RFBTaG93ICYmIGlzRGF0ZVBpY2tlclZpc2libGUoKSA9PSBmYWxzZSkgeworICAgICAgICBzaG93RGF0ZVBpY2tlcigpOworICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uS2V5RG93bihLZXlEb3duRXZlbnQgZXZlbnQpIHsKKyAgICAgIHN3aXRjaCAoZXZlbnQuZ2V0TmF0aXZlS2V5Q29kZSgpKSB7CisgICAgICAgIGNhc2UgS2V5Q29kZXMuS0VZX0VOVEVSOgorICAgICAgICBjYXNlIEtleUNvZGVzLktFWV9UQUI6CisgICAgICAgICAgdXBkYXRlRGF0ZUZyb21UZXh0Qm94KCk7CisgICAgICAgICAgLy8gRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2gKKyAgICAgICAgY2FzZSBLZXlDb2Rlcy5LRVlfRVNDQVBFOgorICAgICAgICBjYXNlIEtleUNvZGVzLktFWV9VUDoKKyAgICAgICAgICBoaWRlRGF0ZVBpY2tlcigpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleUNvZGVzLktFWV9ET1dOOgorICAgICAgICAgIHNob3dEYXRlUGlja2VyKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShWYWx1ZUNoYW5nZUV2ZW50PERhdGU+IGV2ZW50KSB7CisgICAgICBzZXRWYWx1ZShldmVudC5nZXRWYWx1ZSgpKTsKKyAgICAgIGhpZGVEYXRlUGlja2VyKCk7CisgICAgICBwcmV2ZW50RGF0ZVBpY2tlclBvcHVwKCk7CisgICAgICBib3guc2V0Rm9jdXModHJ1ZSk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIERlZmF1bHQgc3R5bGUgbmFtZSBhZGRlZCB3aGVuIHRoZSBkYXRlIGJveCBoYXMgYSBmb3JtYXQgZXJyb3IuCisgICAqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFURV9CT1hfRk9STUFUX0VSUk9SID0gImRhdGVCb3hGb3JtYXRFcnJvciI7CisKKyAgLyoqCisgICAqIERlZmF1bHQgc3R5bGUgbmFtZS4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU1RZTEVOQU1FID0gImd3dC1EYXRlQm94IjsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVmYXVsdEZvcm1hdCBERUZBVUxUX0ZPUk1BVCA9IG5ldyBEZWZhdWx0Rm9ybWF0KCk7CisgIHByaXZhdGUgZmluYWwgUG9wdXBQYW5lbCBwb3B1cDsKKyAgcHJpdmF0ZSBmaW5hbCBUZXh0Qm94IGJveCA9IG5ldyBUZXh0Qm94KCk7CisgIHByaXZhdGUgZmluYWwgRGF0ZVBpY2tlciBwaWNrZXI7CisgIHByaXZhdGUgRm9ybWF0IGZvcm1hdDsKKyAgcHJpdmF0ZSBib29sZWFuIGFsbG93RFBTaG93ID0gdHJ1ZTsKKworICAvKioKKyAgICogQ3JlYXRlIGEgZGF0ZSBib3ggd2l0aCBhIG5ldyB7QGxpbmsgRGF0ZVBpY2tlcn0uCisgICAqLworICBwdWJsaWMgRGF0ZUJveCgpIHsKKyAgICB0aGlzKG5ldyBEYXRlUGlja2VyKCksIG51bGwsIERFRkFVTFRfRk9STUFUKTsKKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGUgYSBuZXcgZGF0ZSBib3guCisgICAqIAorICAgKiBAcGFyYW0gZGF0ZSB0aGUgZGVmYXVsdCBkYXRlLgorICAgKiBAcGFyYW0gcGlja2VyIHRoZSBwaWNrZXIgdG8gZHJvcCBkb3duIGZyb20gdGhlIGRhdGUgYm94CisgICAqIEBwYXJhbSBmb3JtYXQgdG8gdXNlIHRvIHBhcnNlIGFuZCBmb3JtYXQgZGF0ZXMKKyAgICovCisgIHB1YmxpYyBEYXRlQm94KERhdGVQaWNrZXIgcGlja2VyLCBEYXRlIGRhdGUsIEZvcm1hdCBmb3JtYXQpIHsKKyAgICB0aGlzLnBpY2tlciA9IHBpY2tlcjsKKyAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwUGFuZWwoKTsKKyAgICBhc3NlcnQgZm9ybWF0ICE9IG51bGwgOiAiWW91IG1heSBub3QgY29uc3RydWN0IGEgZGF0ZSBib3ggd2l0aCBhIG51bGwgZm9ybWF0IjsKKyAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDsKKworICAgIHBvcHVwLnNldEF1dG9IaWRlRW5hYmxlZCh0cnVlKTsKKyAgICBwb3B1cC5zZXRBdXRvSGlkZVBhcnRuZXIoYm94LmdldEVsZW1lbnQoKSk7CisgICAgcG9wdXAuc2V0V2lkZ2V0KHBpY2tlcik7CisgICAgcG9wdXAuc2V0U3R5bGVOYW1lKCJkYXRlQm94UG9wdXAiKTsKKworICAgIGluaXRXaWRnZXQoYm94KTsKKyAgICBzZXRTdHlsZU5hbWUoREVGQVVMVF9TVFlMRU5BTUUpOworCisgICAgRGF0ZUJveEhhbmRsZXIgaGFuZGxlciA9IG5ldyBEYXRlQm94SGFuZGxlcigpOworICAgIHBpY2tlci5hZGRWYWx1ZUNoYW5nZUhhbmRsZXIoaGFuZGxlcik7CisgICAgYm94LmFkZEZvY3VzSGFuZGxlcihoYW5kbGVyKTsKKyAgICBib3guYWRkQmx1ckhhbmRsZXIoaGFuZGxlcik7CisgICAgYm94LmFkZENsaWNrSGFuZGxlcihoYW5kbGVyKTsKKyAgICBib3guYWRkS2V5RG93bkhhbmRsZXIoaGFuZGxlcik7CisgICAgcG9wdXAuYWRkQ2xvc2VIYW5kbGVyKGhhbmRsZXIpOworICAgIHNldFZhbHVlKGRhdGUpOworICB9CisKKyAgcHVibGljIEhhbmRsZXJSZWdpc3RyYXRpb24gYWRkVmFsdWVDaGFuZ2VIYW5kbGVyKAorICAgICAgVmFsdWVDaGFuZ2VIYW5kbGVyPERhdGU+IGhhbmRsZXIpIHsKKyAgICByZXR1cm4gYWRkSGFuZGxlcihoYW5kbGVyLCBWYWx1ZUNoYW5nZUV2ZW50LmdldFR5cGUoKSk7CisgIH0KKworICAvKioKKyAgICogR2V0cyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGRhdGUgYm94LgorICAgKiAKKyAgICogQHJldHVybiB0aGUgY3Vyc29yIHBvc2l0aW9uCisgICAqIAorICAgKi8KKyAgcHVibGljIGludCBnZXRDdXJzb3JQb3MoKSB7CisgICAgcmV0dXJuIGJveC5nZXRDdXJzb3JQb3MoKTsKKyAgfQorCisgIC8qKgorICAgKiBHZXRzIHRoZSBkYXRlIHBpY2tlci4KKyAgICogCisgICAqIEByZXR1cm4gdGhlIGRhdGUgcGlja2VyCisgICAqLworICBwdWJsaWMgRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCkgeworICAgIHJldHVybiBwaWNrZXI7CisgIH0KKworICAvKioKKyAgICogR2V0cyB0aGUgZm9ybWF0IGluc3RhbmNlIHVzZWQgdG8gY29udHJvbCBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIG9mIHRoaXMKKyAgICoge0BsaW5rIERhdGVCb3h9LgorICAgKiAKKyAgICogQHJldHVybiB0aGUgZm9ybWF0CisgICAqLworICBwdWJsaWMgRm9ybWF0IGdldEZvcm1hdCgpIHsKKyAgICByZXR1cm4gdGhpcy5mb3JtYXQ7CisgIH0KKworICAvKioKKyAgICogR2V0cyB0aGUgZGF0ZSBib3gncyBwb3NpdGlvbiBpbiB0aGUgdGFiIGluZGV4LgorICAgKiAKKyAgICogQHJldHVybiB0aGUgZGF0ZSBib3gncyB0YWIgaW5kZXgKKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0VGFiSW5kZXgoKSB7CisgICAgcmV0dXJuIGJveC5nZXRUYWJJbmRleCgpOworICB9CisKKyAgLyoqCisgICAqIEdldCB0ZXh0IGJveC4KKyAgICogCisgICAqIEByZXR1cm4gdGhlIHRleHQgYm94IHVzZWQgdG8gZW50ZXIgdGhlIGZvcm1hdHRlZCBkYXRlCisgICAqLworICBwdWJsaWMgVGV4dEJveCBnZXRUZXh0Qm94KCkgeworICAgIHJldHVybiBib3g7CisgIH0KKworICAvKioKKyAgICogR2V0IHRoZSBkYXRlIGRpc3BsYXllZCwgb3IgbnVsbCBpZiB0aGUgdGV4dCBib3ggaXMgZW1wdHksIG9yIGNhbm5vdCBiZQorICAgKiBpbnRlcnByZXRlZC4KKyAgICogCisgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZSB2YWx1ZQorICAgKi8KKyAgcHVibGljIERhdGUgZ2V0VmFsdWUoKSB7CisgICAgcmV0dXJuIHBhcnNlRGF0ZSh0cnVlKTsKKyAgfQorCisgIC8qKgorICAgKiBIaWRlIHRoZSBkYXRlIHBpY2tlci4KKyAgICovCisgIHB1YmxpYyB2b2lkIGhpZGVEYXRlUGlja2VyKCkgeworICAgIHBvcHVwLmhpZGUoKTsKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuIHRydWUgaWYgZGF0ZSBwaWNrZXIgaXMgY3VycmVudGx5IHZpc2libGUsIGZhbHNlIGlmIG5vdAorICAgKi8KKyAgcHVibGljIGJvb2xlYW4gaXNEYXRlUGlja2VyVmlzaWJsZSgpIHsKKyAgICByZXR1cm4gcG9wdXAuaXNWaXNpYmxlKCk7CisgIH0KKworICAvKioKKyAgICogU2V0cyB0aGUgZGF0ZSBib3gncyAnYWNjZXNzIGtleScuIFRoaXMga2V5IGlzIHVzZWQgKGluIGNvbmp1bmN0aW9uIHdpdGggYQorICAgKiBicm93c2VyLXNwZWNpZmljIG1vZGlmaWVyIGtleSkgdG8gYXV0b21hdGljYWxseSBmb2N1cyB0aGUgd2lkZ2V0LgorICAgKiAKKyAgICogQHBhcmFtIGtleSB0aGUgZGF0ZSBib3gncyBhY2Nlc3Mga2V5CisgICAqLworICBwdWJsaWMgdm9pZCBzZXRBY2Nlc3NLZXkoY2hhciBrZXkpIHsKKyAgICBib3guc2V0QWNjZXNzS2V5KGtleSk7CisgIH0KKworICAvKioKKyAgICogU2V0cyB3aGV0aGVyIHRoZSBkYXRlIGJveCBpcyBlbmFibGVkLgorICAgKiAKKyAgICogQHBhcmFtIGVuYWJsZWQgaXMgdGhlIGJveCBlbmFibGVkCisgICAqLworICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworICAgIGJveC5zZXRFbmFibGVkKGVuYWJsZWQpOworICB9CisKKyAgLyoqCisgICAqIEV4cGxpY2l0bHkgZm9jdXMvdW5mb2N1cyB0aGlzIHdpZGdldC4gT25seSBvbmUgd2lkZ2V0IGNhbiBoYXZlIGZvY3VzIGF0IGEKKyAgICogdGltZSwgYW5kIHRoZSB3aWRnZXQgdGhhdCBkb2VzIHdpbGwgcmVjZWl2ZSBhbGwga2V5Ym9hcmQgZXZlbnRzLgorICAgKiAKKyAgICogQHBhcmFtIGZvY3VzZWQgd2hldGhlciB0aGlzIHdpZGdldCBzaG91bGQgdGFrZSBmb2N1cyBvciByZWxlYXNlIGl0CisgICAqLworICBwdWJsaWMgdm9pZCBzZXRGb2N1cyhib29sZWFuIGZvY3VzZWQpIHsKKyAgICBib3guc2V0Rm9jdXMoZm9jdXNlZCk7CisgIH0KKworICAvKioKKyAgICogU2V0cyB0aGUgZm9ybWF0IHVzZWQgdG8gY29udHJvbCBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIG9mIGRhdGVzIGluIHRoaXMKKyAgICoge0BsaW5rIERhdGVCb3h9LiBJZiB0aGlzIHtAbGluayBEYXRlQm94fSBpcyBub3QgZW1wdHksIHRoZSBjb250ZW50cyBvZiBkYXRlCisgICAqIGJveCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggY3VycmVudCBjb250ZW50cyBpbiB0aGUgbmV3IGZvcm1hdC4KKyAgICogCisgICAqIEBwYXJhbSBmb3JtYXQgdGhlIG5ldyBkYXRlIGZvcm1hdAorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0Rm9ybWF0KEZvcm1hdCBmb3JtYXQpIHsKKyAgICBhc3NlcnQgZm9ybWF0ICE9IG51bGwgOiAiQSBEYXRlIGJveCBtYXkgbm90IGhhdmUgYSBudWxsIGZvcm1hdCI7CisgICAgaWYgKHRoaXMuZm9ybWF0ICE9IGZvcm1hdCkgeworICAgICAgRGF0ZSBkYXRlID0gZ2V0VmFsdWUoKTsKKworICAgICAgLy8gVGhpcyBjYWxsIGxldHMgdGhlIGZvcm1hdHRlciBkbyB3aGF0ZXZlciBvdGhlciBjbGVhbiB1cCBpcyByZXF1aXJlZCB0bworICAgICAgLy8gc3dpdGNoIGZvcm1hdHRlcnMuCisgICAgICAvLworICAgICAgdGhpcy5mb3JtYXQucmVzZXQodGhpcywgdHJ1ZSk7CisKKyAgICAgIC8vIE5vdyB1cGRhdGUgdGhlIGZvcm1hdCBhbmQgc2hvdyB0aGUgY3VycmVudCBkYXRlIHVzaW5nIHRoZSBuZXcgZm9ybWF0LgorICAgICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7CisgICAgICBzZXRWYWx1ZShkYXRlKTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogU2V0cyB0aGUgZGF0ZSBib3gncyBwb3NpdGlvbiBpbiB0aGUgdGFiIGluZGV4LiBJZiBtb3JlIHRoYW4gb25lIHdpZGdldCBoYXMKKyAgICogdGhlIHNhbWUgdGFiIGluZGV4LCBlYWNoIHN1Y2ggd2lkZ2V0IHdpbGwgcmVjZWl2ZSBmb2N1cyBpbiBhbiBhcmJpdHJhcnkKKyAgICogb3JkZXIuIFNldHRpbmcgdGhlIHRhYiBpbmRleCB0byA8Y29kZT4tMTwvY29kZT4gd2lsbCBjYXVzZSB0aGlzIHdpZGdldCB0bworICAgKiBiZSByZW1vdmVkIGZyb20gdGhlIHRhYiBvcmRlci4KKyAgICogCisgICAqIEBwYXJhbSBpbmRleCB0aGUgZGF0ZSBib3gncyB0YWIgaW5kZXgKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldFRhYkluZGV4KGludCBpbmRleCkgeworICAgIGJveC5zZXRUYWJJbmRleChpbmRleCk7CisgIH0KKworICAvKioKKyAgICogU2V0IHRoZSBkYXRlLgorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0VmFsdWUoRGF0ZSBkYXRlKSB7CisgICAgc2V0VmFsdWUoZGF0ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0VmFsdWUoRGF0ZSBkYXRlLCBib29sZWFuIGZpcmVFdmVudHMpIHsKKyAgICBEYXRlIG9sZERhdGUgPSBwYXJzZURhdGUoZmFsc2UpOworICAgIGlmIChkYXRlICE9IG51bGwpIHsKKyAgICAgIHBpY2tlci5zZXRDdXJyZW50TW9udGgoZGF0ZSk7CisgICAgfQorICAgIHBpY2tlci5zZXRWYWx1ZShkYXRlLCBmYWxzZSk7CisgICAgc2V0RGF0ZShkYXRlKTsKKworICAgIGlmIChmaXJlRXZlbnRzKSB7CisgICAgICBEYXRlQ2hhbmdlRXZlbnQuZmlyZUlmTm90RXF1YWxEYXRlcyh0aGlzLCBvbGREYXRlLCBkYXRlKTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogUGFyc2VzIHRoZSBjdXJyZW50IGRhdGUgYm94J3MgdmFsdWUgYW5kIHNob3dzIHRoYXQgZGF0ZS4KKyAgICovCisgIHB1YmxpYyB2b2lkIHNob3dEYXRlUGlja2VyKCkgeworICAgIERhdGUgY3VycmVudCA9IHBhcnNlRGF0ZShmYWxzZSk7CisgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgeworICAgICAgY3VycmVudCA9IG5ldyBEYXRlKCk7CisgICAgfQorICAgIHBpY2tlci5zZXRDdXJyZW50TW9udGgoY3VycmVudCk7CisgICAgcG9wdXAuc2hvd1JlbGF0aXZlVG8odGhpcyk7CisgIH0KKworICBwcml2YXRlIERhdGUgcGFyc2VEYXRlKGJvb2xlYW4gcmVwb3J0RXJyb3IpIHsKKyAgICBpZiAocmVwb3J0RXJyb3IpIHsKKyAgICAgIGdldEZvcm1hdCgpLnJlc2V0KHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgU3RyaW5nIHRleHQgPSBib3guZ2V0VGV4dCgpLnRyaW0oKTsKKyAgICByZXR1cm4gZ2V0Rm9ybWF0KCkucGFyc2UodGhpcywgdGV4dCwgcmVwb3J0RXJyb3IpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHByZXZlbnREYXRlUGlja2VyUG9wdXAoKSB7CisgICAgYWxsb3dEUFNob3cgPSBmYWxzZTsKKyAgICBEZWZlcnJlZENvbW1hbmQuYWRkQ29tbWFuZChuZXcgQ29tbWFuZCgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7CisgICAgICAgIGFsbG93RFBTaG93ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgKiBEb2VzIHRoZSBhY3R1YWwgd29yayBvZiBzZXR0aW5nIHRoZSBkYXRlLiBQZXJmb3JtcyBubyB2YWxpZGF0aW9uLCBmaXJlcyBubworICAgKiBldmVudHMuCisgICAqLworICBwcml2YXRlIHZvaWQgc2V0RGF0ZShEYXRlIHZhbHVlKSB7CisgICAgZm9ybWF0LnJlc2V0KHRoaXMsIGZhbHNlKTsKKyAgICBib3guc2V0VGV4dChnZXRGb3JtYXQoKS5mb3JtYXQodGhpcywgdmFsdWUpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCB1cGRhdGVEYXRlRnJvbVRleHRCb3goKSB7CisgICAgRGF0ZSBwYXJzZWREYXRlID0gcGFyc2VEYXRlKHRydWUpOworICAgIGlmIChwYXJzZWREYXRlICE9IG51bGwpIHsKKyAgICAgIHNldFZhbHVlKHBhcnNlZERhdGUpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EYXRlQ2hhbmdlRXZlbnQuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvRGF0ZUNoYW5nZUV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwNjM3YQotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvRGF0ZUNoYW5nZUV2ZW50LmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IYXNWYWx1ZUNoYW5nZUhhbmRsZXJzOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFzSGFuZGxlcnM7DQorDQoraW1wb3J0IGphdmEudXRpbC5EYXRlOw0KKw0KKy8qKg0KKyAqIENyZWF0ZXMgYSBuZXcgdmFsdWUgZXZlcnkgdGltZSBhIGRhdGUgaXMgYWNjZXNzZWQuDQorICovDQorY2xhc3MgRGF0ZUNoYW5nZUV2ZW50IGV4dGVuZHMgVmFsdWVDaGFuZ2VFdmVudDxEYXRlPiB7DQorDQorICAvKioNCisgICAqIEZpcmVzIHZhbHVlIGNoYW5nZSBldmVudCBpZiB0aGUgb2xkIHZhbHVlIGlzIG5vdCBlcXVhbCB0byB0aGUgbmV3IHZhbHVlLg0KKyAgICogVXNlIHRoaXMgY2FsbCByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGRlY2lzaW9uIHRvIHNob3J0IGNpcmN1aXQgeW91cnNlbGYgZm9yDQorICAgKiBzYWZlIGhhbmRsaW5nIG9mIG51bGwuDQorICAgKiANCisgICAqIEBwYXJhbSA8ST4gdGhlIG9sZCB2YWx1ZSB0eXBlDQorICAgKiBAcGFyYW0gPFM+IFRoZSBldmVudCBzb3VyY2UNCisgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgaGFuZGxlcnMNCisgICAqIEBwYXJhbSBvbGRWYWx1ZSB0aGUgb2xkVmFsdWUsIG1heSBiZSBudWxsDQorICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG5ld1ZhbHVlLCBtYXkgYmUgbnVsbA0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIDxTIGV4dGVuZHMgSGFzVmFsdWVDaGFuZ2VIYW5kbGVyczxEYXRlPiAmIEhhc0hhbmRsZXJzPiB2b2lkIGZpcmVJZk5vdEVxdWFsRGF0ZXMoDQorICAgICAgUyBzb3VyY2UsIERhdGUgb2xkVmFsdWUsIERhdGUgbmV3VmFsdWUpIHsNCisgICAgaWYgKFZhbHVlQ2hhbmdlRXZlbnQuc2hvdWxkRmlyZShzb3VyY2UsIG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHsNCisgICAgICBzb3VyY2UuZ2V0SGFuZGxlcnMoKS5maXJlRXZlbnQobmV3IERhdGVDaGFuZ2VFdmVudChuZXdWYWx1ZSkpOw0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIENyZWF0ZXMgYSBuZXcgZGF0ZSB2YWx1ZSBjaGFuZ2UgZXZlbnQuDQorICAgKiANCisgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgICAqLw0KKyAgcHJvdGVjdGVkIERhdGVDaGFuZ2VFdmVudChEYXRlIHZhbHVlKSB7DQorICAgIHN1cGVyKHZhbHVlKTsNCisgIH0NCisNCisgIHB1YmxpYyBEYXRlIGdldFZhbHVlKCkgew0KKyAgICByZXR1cm4gQ2FsZW5kYXJVdGlsLmNvcHlEYXRlKHN1cGVyLmdldFZhbHVlKCkpOw0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0RhdGVQaWNrZXIuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvRGF0ZVBpY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGFjZmIKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0RhdGVQaWNrZXIuamF2YQpAQCAtMCwwICsxLDY2MyBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IYXNIaWdobGlnaHRIYW5kbGVyczsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuSGFzU2hvd1JhbmdlSGFuZGxlcnM7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwuc2hhcmVkLkhpZ2hsaWdodEV2ZW50Ow0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5IaWdobGlnaHRIYW5kbGVyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5TaG93UmFuZ2VFdmVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuU2hvd1JhbmdlSGFuZGxlcjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VFdmVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VIYW5kbGVyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQuSGFuZGxlclJlZ2lzdHJhdGlvbjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuQ29tcG9zaXRlOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IYXNWYWx1ZTsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuVmVydGljYWxQYW5lbDsNCisNCitpbXBvcnQgamF2YS51dGlsLkRhdGU7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KKy8qKg0KKyAqIFN0YW5kYXJkIEdXVCBkYXRlIHBpY2tlci4NCisgKiANCisgKiA8aDM+Q1NTIFN0eWxlIFJ1bGVzPC9oMz4NCisgKiANCisgKiA8dWwgY2xhc3M9ImNzcyI+DQorICogDQorICogPGxpPi5nd3QtRGF0ZVBpY2tlciB7IH08L2xpPg0KKyAqIA0KKyAqIDxsaT4uZGF0ZVBpY2tlck1vbnRoU2VsZWN0b3IgeyB0aGUgbW9udGggc2VsZWN0b3Igd2lkZ2V0IH08L2xpPg0KKyAqIA0KKyAqIDxsaT4uZGF0ZVBpY2tlck1vbnRoIHsgdGhlIG1vbnRoIGluIHRoZSBtb250aCBzZWxlY3RvciB3aWRnZXQgfSA8bGk+DQorICogDQorICogPGxpPi5kYXRlUGlja2VyUHJldmlvdXNCdXR0b24geyB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIH0gPGxpPg0KKyAqIA0KKyAqIDxsaT4uZGF0ZVBpY2tlck5leHRCdXR0b24geyB0aGUgbmV4dCBtb250aCBidXR0b24gfSA8bGk+DQorICogDQorICogPGxpPi5kYXRlUGlja2VyRGF5cyB7IHRoZSBwb3J0aW9uIG9mIHRoZSBwaWNrZXIgdGhhdCBzaG93cyB0aGUgZGF5cyB9PC9saT4NCisgKiANCisgKiA8bGk+LmRhdGVQaWNrZXJXZWVrZGF5TGFiZWwgeyB0aGUgbGFiZWwgb3ZlciB3ZWVrZGF5cyB9PC9saT4NCisgKiANCisgKiA8bGk+LmRhdGVQaWNrZXJXZWVrZW5kTGFiZWwgeyB0aGUgbGFiZWwgb3ZlciB3ZWVrZW5kcyB9PC9saT4NCisgKiANCisgKiA8bGk+LmRhdGVQaWNrZXJEYXkgeyBhIHNpbmdsZSBkYXkgfTwvbGk+DQorICogDQorICogPGxpPi5kYXRlUGlja2VyRGF5SXNUb2RheSB7IHRvZGF5J3MgZGF0ZSB9PC9saT4NCisgKiANCisgKiA8bGk+LmRhdGVQaWNrZXJEYXlJc1dlZWtlbmQgeyBhIHdlZWtlbmQgZGF5IH08L2xpPg0KKyAqIA0KKyAqIDxsaT4uZGF0ZVBpY2tlckRheUlzRmlsbGVyIHsgYSBkYXkgaW4gYW5vdGhlciBtb250aCB9PC9saT4NCisgKiANCisgKiA8bGk+LmRhdGVQaWNrZXJEYXlJc1ZhbHVlIHsgdGhlIHNlbGVjdGVkIGRheSB9PC9saT4NCisgKiANCisgKiA8bGk+LmRhdGVQaWNrZXJEYXlJc0Rpc2FibGVkIHsgYSBkaXNhYmxlZCBkYXkgfTwvbGk+DQorICogDQorICogPGxpPi5kYXRlUGlja2VyRGF5SXNIaWdobGlnaHRlZCB7IHRoZSBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgZGF5IH08L2xpPg0KKyAqIA0KKyAqIDxsaT4uZGF0ZVBpY2tlckRheUlzVmFsdWVBbmRIaWdobGlnaHRlZCB7IHRoZSBoaWdobGlnaHRlZCBkYXkgaWYgaXQgaXMgYWxzbw0KKyAqIHNlbGVjdGVkIH08L2xpPg0KKyAqIA0KKyAqIDwvdWw+DQorICogDQorICogPHA+DQorICogPGgzPkV4YW1wbGU8L2gzPg0KKyAqIHtAZXhhbXBsZSBjb20uZ29vZ2xlLmd3dC5leGFtcGxlcy5EYXRlUGlja2VyRXhhbXBsZX0NCisgKiA8L3A+DQorICovDQorcHVibGljIGNsYXNzIERhdGVQaWNrZXIgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cw0KKyAgICBIYXNIaWdobGlnaHRIYW5kbGVyczxEYXRlPiwgSGFzU2hvd1JhbmdlSGFuZGxlcnM8RGF0ZT4sIEhhc1ZhbHVlPERhdGU+IHsNCisNCisgIC8qKg0KKyAgICogQ29udmVuaWVuY2UgY2xhc3MgdG8gZ3JvdXAgY3NzIHN0eWxlIG5hbWVzLg0KKyAgICovDQorICBzdGF0aWMgY2xhc3MgU3RhbmRhcmRDc3Mgew0KKw0KKyAgICBzdGF0aWMgU3RhbmRhcmRDc3MgREVGQVVMVCA9IG5ldyBTdGFuZGFyZENzcygiZ3d0LURhdGVQaWNrZXIiLCAiZGF0ZVBpY2tlciIpOw0KKw0KKyAgICBwcml2YXRlIFN0cmluZyBiYXNlTmFtZTsNCisgICAgcHJpdmF0ZSBTdHJpbmcgd2lkZ2V0TmFtZTsNCisNCisgICAgcHVibGljIFN0YW5kYXJkQ3NzKFN0cmluZyB3aWRnZXROYW1lLCBTdHJpbmcgYmFzZU5hbWUpIHsNCisgICAgICB0aGlzLndpZGdldE5hbWUgPSB3aWRnZXROYW1lOw0KKyAgICAgIHRoaXMuYmFzZU5hbWUgPSBiYXNlTmFtZTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRhdGVQaWNrZXIoKSB7DQorICAgICAgcmV0dXJuIGdldFdpZGdldFN0eWxlTmFtZSgpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBTdHJpbmcgZGF5KCkgew0KKyAgICAgIHJldHVybiB3cmFwKCJEYXkiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRheShTdHJpbmcgZGF5TW9kaWZpZXIpIHsNCisgICAgICByZXR1cm4gZGF5KCkgKyAiSXMiICsgZGF5TW9kaWZpZXI7DQorICAgIH0NCisNCisgICAgcHVibGljIFN0cmluZyBkYXlJc0Rpc2FibGVkKCkgew0KKyAgICAgIHJldHVybiBkYXkoIkRpc2FibGVkIik7DQorICAgIH0NCisNCisgICAgcHVibGljIFN0cmluZyBkYXlJc0ZpbGxlcigpIHsNCisgICAgICByZXR1cm4gZGF5KCJGaWxsZXIiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRheUlzSGlnaGxpZ2h0ZWQoKSB7DQorICAgICAgcmV0dXJuIGRheSgiSGlnaGxpZ2h0ZWQiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRheUlzVG9kYXkoKSB7DQorICAgICAgcmV0dXJuIGRheSgiVG9kYXkiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRheUlzVmFsdWUoKSB7DQorICAgICAgcmV0dXJuIGRheSgiVmFsdWUiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRheUlzVmFsdWVBbmRIaWdobGlnaHRlZCgpIHsNCisgICAgICByZXR1cm4gZGF5SXNWYWx1ZSgpICsgIkFuZEhpZ2hsaWdodGVkIjsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGRheUlzV2Vla2VuZCgpIHsNCisgICAgICByZXR1cm4gZGF5KCJXZWVrZW5kIik7DQorICAgIH0NCisNCisgICAgcHVibGljIFN0cmluZyBkYXlzKCkgew0KKyAgICAgIHJldHVybiB3cmFwKCJEYXlzIik7DQorICAgIH0NCisNCisgICAgcHVibGljIFN0cmluZyBkYXlzTGFiZWwoKSB7DQorICAgICAgcmV0dXJuIHdyYXAoIkRheXNMYWJlbCIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0QmFzZVN0eWxlTmFtZSgpIHsNCisgICAgICByZXR1cm4gYmFzZU5hbWU7DQorICAgIH0NCisNCisgICAgcHVibGljIFN0cmluZyBnZXRXaWRnZXRTdHlsZU5hbWUoKSB7DQorICAgICAgcmV0dXJuIHdpZGdldE5hbWU7DQorICAgIH0NCisNCisgICAgcHVibGljIFN0cmluZyBtb250aCgpIHsNCisgICAgICByZXR1cm4gd3JhcCgiTW9udGgiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIG1vbnRoU2VsZWN0b3IoKSB7DQorICAgICAgcmV0dXJuIHdyYXAoIk1vbnRoU2VsZWN0b3IiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIG5leHRCdXR0b24oKSB7DQorICAgICAgcmV0dXJuIHdyYXAoIk5leHRCdXR0b24iKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIHByZXZpb3VzQnV0dG9uKCkgew0KKyAgICAgIHJldHVybiB3cmFwKCJQcmV2aW91c0J1dHRvbiIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBTdHJpbmcgd2Vla2RheUxhYmVsKCkgew0KKyAgICAgIHJldHVybiB3cmFwKCJXZWVrZGF5TGFiZWwiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIHdlZWtlbmRMYWJlbCgpIHsNCisgICAgICByZXR1cm4gd3JhcCgiV2Vla2VuZExhYmVsIik7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFByZXBlbmRzIHRoZSBiYXNlIG5hbWUgdG8gdGhlIGdpdmVuIHN0eWxlLg0KKyAgICAgKiANCisgICAgICogQHBhcmFtIHN0eWxlIHN0eWxlIG5hbWUNCisgICAgICogQHJldHVybiBzdHlsZSBuYW1lDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIHdyYXAoU3RyaW5nIHN0eWxlKSB7DQorICAgICAgcmV0dXJuIGJhc2VOYW1lICsgc3R5bGU7DQorICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogQSBkYXRlIGhpZ2hsaWdodGVkIGV2ZW50IHRoYXQgY29waWVkIG9uIHJlYWQuDQorICAgKi8NCisgIHByaXZhdGUgY2xhc3MgRGF0ZUhpZ2hsaWdodEV2ZW50IGV4dGVuZHMgSGlnaGxpZ2h0RXZlbnQ8RGF0ZT4gew0KKyAgICBwcm90ZWN0ZWQgRGF0ZUhpZ2hsaWdodEV2ZW50KERhdGUgaGlnaGxpZ2h0ZWQpIHsNCisgICAgICBzdXBlcihoaWdobGlnaHRlZCk7DQorICAgIH0NCisNCisgICAgQE92ZXJyaWRlDQorICAgIHB1YmxpYyBEYXRlIGdldEhpZ2hsaWdodGVkKCkgew0KKyAgICAgIHJldHVybiBDYWxlbmRhclV0aWwuY29weURhdGUoc3VwZXIuZ2V0SGlnaGxpZ2h0ZWQoKSk7DQorICAgIH0NCisgIH0NCisNCisgIHByaXZhdGUgY2xhc3MgRGF0ZVN0eWxlciB7DQorICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBpbmZvID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7DQorDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVOYW1lKERhdGUgZCkgew0KKyAgICAgIHJldHVybiBpbmZvLmdldChnZW5LZXkoZCkpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHNldFN0eWxlTmFtZShEYXRlIGQsIFN0cmluZyBzdHlsZU5hbWUsIGJvb2xlYW4gYWRkKSB7DQorICAgICAgLy8gQ29kZSBpcyBlYXNpZXIgdG8gbWFpbnRhaW4gaWYgc3Vycm91bmRlZCBieSAiICIsIGFuZCBvbiBhbGwgYnJvd3NlcnMNCisgICAgICAvLyB0aGlzIGlzIGEgbm8tb3AuDQorICAgICAgc3R5bGVOYW1lID0gIiAiICsgc3R5bGVOYW1lICsgIiAiOw0KKyAgICAgIFN0cmluZyBrZXkgPSBnZW5LZXkoZCk7DQorICAgICAgU3RyaW5nIGN1cnJlbnQgPSBpbmZvLmdldChrZXkpOw0KKw0KKyAgICAgIGlmIChhZGQpIHsNCisgICAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIHsNCisgICAgICAgICAgaW5mby5wdXQoa2V5LCBzdHlsZU5hbWUpOw0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmluZGV4T2Yoc3R5bGVOYW1lKSA9PSAtMSkgew0KKyAgICAgICAgICBpbmZvLnB1dChrZXksIGN1cnJlbnQgKyBzdHlsZU5hbWUpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7DQorICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZSA9IGN1cnJlbnQucmVwbGFjZUFsbChzdHlsZU5hbWUsICIiKTsNCisgICAgICAgICAgaWYgKG5ld1ZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKSB7DQorICAgICAgICAgICAgaW5mby5yZW1vdmUoa2V5KTsNCisgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBpbmZvLnB1dChrZXksIG5ld1ZhbHVlKTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQ0KKyAgICBwcml2YXRlIFN0cmluZyBnZW5LZXkoRGF0ZSBkKSB7DQorICAgICAgcmV0dXJuIGQuZ2V0WWVhcigpICsgIi8iICsgZC5nZXRNb250aCgpICsgIi8iICsgZC5nZXREYXRlKCk7DQorICAgIH0NCisgIH0NCisNCisgIHByaXZhdGUgZmluYWwgRGF0ZVN0eWxlciBzdHlsZXIgPSBuZXcgRGF0ZVN0eWxlcigpOw0KKw0KKyAgcHJpdmF0ZSBmaW5hbCBNb250aFNlbGVjdG9yIG1vbnRoU2VsZWN0b3I7DQorICBwcml2YXRlIGZpbmFsIENhbGVuZGFyVmlldyB2aWV3Ow0KKyAgcHJpdmF0ZSBmaW5hbCBDYWxlbmRhck1vZGVsIG1vZGVsOw0KKyAgcHJpdmF0ZSBEYXRlIHZhbHVlOw0KKyAgcHJpdmF0ZSBEYXRlIGhpZ2hsaWdodGVkOw0KKyAgcHJpdmF0ZSBTdGFuZGFyZENzcyBjc3MgPSBTdGFuZGFyZENzcy5ERUZBVUxUOw0KKw0KKyAgLyoqDQorICAgKiBDcmVhdGUgYSBuZXcgZGF0ZSBwaWNrZXIuDQorICAgKi8NCisgIHB1YmxpYyBEYXRlUGlja2VyKCkgew0KKyAgICB0aGlzKG5ldyBEZWZhdWx0TW9udGhTZWxlY3RvcigpLCBuZXcgRGVmYXVsdENhbGVuZGFyVmlldygpLA0KKyAgICAgICAgbmV3IENhbGVuZGFyTW9kZWwoKSk7DQorICB9DQorDQorICAvKioNCisgICAqIENyZWF0ZXMgYSBuZXcgZGF0ZSBwaWNrZXIuDQorICAgKiANCisgICAqIEBwYXJhbSBtb250aFNlbGVjdG9yIHRoZSBtb250aCBzZWxlY3Rvcg0KKyAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcNCisgICAqIEBwYXJhbSBtb2RlbCB0aGUgbW9kZWwNCisgICAqLw0KKw0KKyAgcHJvdGVjdGVkIERhdGVQaWNrZXIoTW9udGhTZWxlY3RvciBtb250aFNlbGVjdG9yLCBDYWxlbmRhclZpZXcgdmlldywNCisgICAgICBDYWxlbmRhck1vZGVsIG1vZGVsKSB7DQorDQorICAgIHRoaXMubW9kZWwgPSBtb2RlbDsNCisgICAgdGhpcy5tb250aFNlbGVjdG9yID0gbW9udGhTZWxlY3RvcjsNCisgICAgbW9udGhTZWxlY3Rvci5zZXREYXRlUGlja2VyKHRoaXMpOw0KKyAgICB0aGlzLnZpZXcgPSB2aWV3Ow0KKyAgICB2aWV3LnNldERhdGVQaWNrZXIodGhpcyk7DQorDQorICAgIHZpZXcuc2V0dXAoKTsNCisgICAgbW9udGhTZWxlY3Rvci5zZXR1cCgpOw0KKyAgICB0aGlzLnNldHVwKCk7DQorDQorICAgIHNldEN1cnJlbnRNb250aChuZXcgRGF0ZSgpKTsNCisgICAgYWRkU3R5bGVUb0RhdGVzKGNzcygpLmRheUlzVG9kYXkoKSwgbmV3IERhdGUoKSk7DQorICB9DQorDQorICBwdWJsaWMgSGFuZGxlclJlZ2lzdHJhdGlvbiBhZGRIaWdobGlnaHRIYW5kbGVyKEhpZ2hsaWdodEhhbmRsZXI8RGF0ZT4gaGFuZGxlcikgew0KKyAgICByZXR1cm4gYWRkSGFuZGxlcihoYW5kbGVyLCBIaWdobGlnaHRFdmVudC5nZXRUeXBlKCkpOw0KKyAgfQ0KKw0KKyAgcHVibGljIEhhbmRsZXJSZWdpc3RyYXRpb24gYWRkU2hvd1JhbmdlSGFuZGxlcihTaG93UmFuZ2VIYW5kbGVyPERhdGU+IGhhbmRsZXIpIHsNCisgICAgcmV0dXJuIGFkZEhhbmRsZXIoaGFuZGxlciwgU2hvd1JhbmdlRXZlbnQuZ2V0VHlwZSgpKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogQWRkcyBhIHNob3cgcmFuZ2UgaGFuZGxlciBhbmQgaW1tZWRpYXRlbHkgYWN0aXZhdGUgdGhlIGhhbmRsZXIgb24gdGhlDQorICAgKiBjdXJyZW50IHZpZXcuDQorICAgKiANCisgICAqIEBwYXJhbSBoYW5kbGVyIHRoZSBoYW5kbGVyDQorICAgKiBAcmV0dXJuIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbg0KKyAgICovDQorICBwdWJsaWMgSGFuZGxlclJlZ2lzdHJhdGlvbiBhZGRTaG93UmFuZ2VIYW5kbGVyQW5kRmlyZSgNCisgICAgICBTaG93UmFuZ2VIYW5kbGVyPERhdGU+IGhhbmRsZXIpIHsNCisgICAgU2hvd1JhbmdlRXZlbnQ8RGF0ZT4gZXZlbnQgPSBuZXcgU2hvd1JhbmdlRXZlbnQ8RGF0ZT4oDQorICAgICAgICBnZXRWaWV3KCkuZ2V0Rmlyc3REYXRlKCksIGdldFZpZXcoKS5nZXRMYXN0RGF0ZSgpKSB7DQorICAgIH07DQorICAgIGhhbmRsZXIub25TaG93UmFuZ2UoZXZlbnQpOw0KKyAgICByZXR1cm4gYWRkU2hvd1JhbmdlSGFuZGxlcihoYW5kbGVyKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogQWRkIGEgc3R5bGUgbmFtZSB0byB0aGUgZ2l2ZW4gZGF0ZXMuDQorICAgKi8NCisgIHB1YmxpYyB2b2lkIGFkZFN0eWxlVG9EYXRlcyhTdHJpbmcgc3R5bGVOYW1lLCBEYXRlIGRhdGUpIHsNCisgICAgc3R5bGVyLnNldFN0eWxlTmFtZShkYXRlLCBzdHlsZU5hbWUsIHRydWUpOw0KKyAgICBpZiAoaXNEYXRlVmlzaWJsZShkYXRlKSkgew0KKyAgICAgIGdldFZpZXcoKS5hZGRTdHlsZVRvRGF0ZShzdHlsZU5hbWUsIGRhdGUpOw0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIEFkZCBhIHN0eWxlIG5hbWUgdG8gdGhlIGdpdmVuIGRhdGVzLg0KKyAgICovDQorICBwdWJsaWMgdm9pZCBhZGRTdHlsZVRvRGF0ZXMoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlLCBEYXRlLi4uIG1vcmVEYXRlcykgew0KKyAgICBhZGRTdHlsZVRvRGF0ZXMoc3R5bGVOYW1lLCBkYXRlKTsNCisgICAgZm9yIChEYXRlIGQgOiBtb3JlRGF0ZXMpIHsNCisgICAgICBhZGRTdHlsZVRvRGF0ZXMoc3R5bGVOYW1lLCBkKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBBZGQgYSBzdHlsZSBuYW1lIHRvIHRoZSBnaXZlbiBkYXRlcy4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgYWRkU3R5bGVUb0RhdGVzKFN0cmluZyBzdHlsZU5hbWUsIEl0ZXJhYmxlPERhdGU+IGRhdGVzKSB7DQorICAgIGZvciAoRGF0ZSBkIDogZGF0ZXMpIHsNCisgICAgICBhZGRTdHlsZVRvRGF0ZXMoc3R5bGVOYW1lLCBkKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBBZGRzIHRoZSBnaXZlbiBzdHlsZSBuYW1lIHRvIHRoZSBzcGVjaWZpZWQgZGF0ZXMsIHdoaWNoIG11c3QgYmUgdmlzaWJsZS4NCisgICAqIFRoaXMgaXMgb25seSBzZXQgdW50aWwgdGhlIG5leHQgdGltZSB0aGUgRGF0ZVBpY2tlciBpcyByZWZyZXNoZWQuDQorICAgKi8NCisgIHB1YmxpYyB2b2lkIGFkZFRyYW5zaWVudFN0eWxlVG9EYXRlcyhTdHJpbmcgc3R5bGVOYW1lLCBEYXRlIGRhdGUpIHsNCisgICAgYXNzZXJ0IGlzRGF0ZVZpc2libGUoZGF0ZSkgOiBkYXRlICsgIiBtdXN0IGJlIHZpc2libGUiOw0KKyAgICBnZXRWaWV3KCkuYWRkU3R5bGVUb0RhdGUoc3R5bGVOYW1lLCBkYXRlKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogQWRkcyB0aGUgZ2l2ZW4gc3R5bGUgbmFtZSB0byB0aGUgc3BlY2lmaWVkIGRhdGVzLCB3aGljaCBtdXN0IGJlIHZpc2libGUuDQorICAgKiBUaGlzIGlzIG9ubHkgc2V0IHVudGlsIHRoZSBuZXh0IHRpbWUgdGhlIERhdGVQaWNrZXIgaXMgcmVmcmVzaGVkLg0KKyAgICovDQorICBwdWJsaWMgZmluYWwgdm9pZCBhZGRUcmFuc2llbnRTdHlsZVRvRGF0ZXMoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlLA0KKyAgICAgIERhdGUuLi4gbW9yZURhdGVzKSB7DQorICAgIGFkZFRyYW5zaWVudFN0eWxlVG9EYXRlcyhzdHlsZU5hbWUsIGRhdGUpOw0KKyAgICBmb3IgKERhdGUgZCA6IG1vcmVEYXRlcykgew0KKyAgICAgIGFkZFRyYW5zaWVudFN0eWxlVG9EYXRlcyhzdHlsZU5hbWUsIGQpOw0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIEFkZHMgdGhlIGdpdmVuIHN0eWxlIG5hbWUgdG8gdGhlIHNwZWNpZmllZCBkYXRlcywgd2hpY2ggbXVzdCBiZSB2aXNpYmxlLg0KKyAgICogVGhpcyBpcyBvbmx5IHNldCB1bnRpbCB0aGUgbmV4dCB0aW1lIHRoZSBEYXRlUGlja2VyIGlzIHJlZnJlc2hlZC4NCisgICAqLw0KKyAgcHVibGljIGZpbmFsIHZvaWQgYWRkVHJhbnNpZW50U3R5bGVUb0RhdGVzKFN0cmluZyBzdHlsZU5hbWUsDQorICAgICAgSXRlcmFibGU8RGF0ZT4gZGF0ZXMpIHsNCisgICAgZm9yIChEYXRlIGQgOiBkYXRlcykgew0KKyAgICAgIGFkZFRyYW5zaWVudFN0eWxlVG9EYXRlcyhzdHlsZU5hbWUsIGQpOw0KKyAgICB9DQorICB9DQorDQorICBwdWJsaWMgSGFuZGxlclJlZ2lzdHJhdGlvbiBhZGRWYWx1ZUNoYW5nZUhhbmRsZXIoDQorICAgICAgVmFsdWVDaGFuZ2VIYW5kbGVyPERhdGU+IGhhbmRsZXIpIHsNCisgICAgcmV0dXJuIGFkZEhhbmRsZXIoaGFuZGxlciwgVmFsdWVDaGFuZ2VFdmVudC5nZXRUeXBlKCkpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBjdXJyZW50IG1vbnRoIHRoZSBkYXRlIHBpY2tlciBpcyBzaG93aW5nLg0KKyAgICogDQorICAgKiA8cD4NCisgICAqIEEgZGF0ZXBpY2tlciA8Yj4gbWF5IDwvYj4gc2hvdyBkYXlzIG5vdCBpbiB0aGUgY3VycmVudCBtb250aC4gSXQNCisgICAqIDxiPm11c3Q8L2I+IHNob3cgYWxsIGRheXMgaW4gdGhlIGN1cnJlbnQgbW9udGguDQorICAgKiA8L3A+DQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgbW9udGgNCisgICAqIA0KKyAgICovDQorICBwdWJsaWMgRGF0ZSBnZXRDdXJyZW50TW9udGgoKSB7DQorICAgIHJldHVybiBnZXRNb2RlbCgpLmdldEN1cnJlbnRNb250aCgpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBzaG93biBkYXRlLg0KKyAgICogDQorICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBkYXRlLg0KKyAgICovDQorICAvLyBGaW5hbCBiZWNhdXNlIHRoZSB2aWV3IHNob3VsZCBhbHdheXMgY29udHJvbCB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGRhdGUuDQorICBwdWJsaWMgZmluYWwgRGF0ZSBnZXRGaXJzdERhdGUoKSB7DQorICAgIHJldHVybiB2aWV3LmdldEZpcnN0RGF0ZSgpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBoaWdobGlnaHRlZCBkYXRlICh0aGUgb25lIHRoZSBtb3VzZSBpcyBob3ZlcmluZyBvdmVyKSwgaWYgYW55Lg0KKyAgICogDQorICAgKiBAcmV0dXJuIHRoZSBoaWdobGlnaHRlZCBkYXRlDQorICAgKi8NCisgIHB1YmxpYyBmaW5hbCBEYXRlIGdldEhpZ2hsaWdodGVkRGF0ZSgpIHsNCisgICAgcmV0dXJuIENhbGVuZGFyVXRpbC5jb3B5RGF0ZShoaWdobGlnaHRlZCk7DQorICB9DQorDQorICAvKioNCisgICAqIFJldHVybnMgdGhlIGxhc3Qgc2hvd24gZGF0ZS4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgbGFzdCBkYXRlLg0KKyAgICovDQorICAvLyBGaW5hbCBiZWNhdXNlIHRoZSB2aWV3IHNob3VsZCBhbHdheXMgY29udHJvbCB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZGF0ZS4NCisgIHB1YmxpYyBmaW5hbCBEYXRlIGdldExhc3REYXRlKCkgew0KKyAgICByZXR1cm4gdmlldy5nZXRMYXN0RGF0ZSgpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBzdHlsZSBhc3NvY2lhdGVkIHdpdGggYSBkYXRlIChkb2VzIG5vdCBpbmNsdWRlIHN0eWxlcyBzZXQgdmlhDQorICAgKiB7QGxpbmsgI2FkZFRyYW5zaWVudFN0eWxlVG9EYXRlc30pLg0KKyAgICogDQorICAgKiBAcGFyYW0gZGF0ZSB0aGUgZGF0ZQ0KKyAgICogQHJldHVybiB0aGUgc3R5bGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGUNCisgICAqLw0KKyAgcHVibGljIFN0cmluZyBnZXRTdHlsZU9mRGF0ZShEYXRlIGRhdGUpIHsNCisgICAgcmV0dXJuIHN0eWxlci5nZXRTdHlsZU5hbWUoZGF0ZSk7DQorICB9DQorDQorICAvKioNCisgICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGRhdGUsIG9yIG51bGwgaWYgbm9uZSBpcyBzZWxlY3RlZC4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgc2VsZWN0ZWQgZGF0ZSwgb3IgbnVsbA0KKyAgICovDQorICBwdWJsaWMgZmluYWwgRGF0ZSBnZXRWYWx1ZSgpIHsNCisgICAgcmV0dXJuIENhbGVuZGFyVXRpbC5jb3B5RGF0ZSh2YWx1ZSk7DQorICB9DQorDQorICAvKioNCisgICAqIElzIHRoZSB2aXNpYmxlIGRhdGUgZW5hYmxlZD8NCisgICAqIA0KKyAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUsIHdoaWNoIG11c3QgYmUgdmlzaWJsZQ0KKyAgICogQHJldHVybiBpcyB0aGUgZGF0ZSBlbmFibGVkPw0KKyAgICovDQorICBwdWJsaWMgYm9vbGVhbiBpc0RhdGVFbmFibGVkKERhdGUgZGF0ZSkgew0KKyAgICBhc3NlcnQgaXNEYXRlVmlzaWJsZShkYXRlKSA6IGRhdGUgKyAiIGlzIG5vdCB2aXNpYmxlIjsNCisgICAgcmV0dXJuIGdldFZpZXcoKS5pc0RhdGVFbmFibGVkKGRhdGUpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBJcyB0aGUgZGF0ZSBjdXJyZW50bHkgc2hvd24gaW4gdGhlIGRhdGUgcGlja2VyPw0KKyAgICogDQorICAgKiBAcGFyYW0gZGF0ZQ0KKyAgICogQHJldHVybiBpcyB0aGUgZGF0ZSBjdXJyZW50bHkgc2hvd24NCisgICAqLw0KKyAgcHVibGljIGJvb2xlYW4gaXNEYXRlVmlzaWJsZShEYXRlIGRhdGUpIHsNCisgICAgQ2FsZW5kYXJWaWV3IHIgPSBnZXRWaWV3KCk7DQorICAgIERhdGUgZmlyc3QgPSByLmdldEZpcnN0RGF0ZSgpOw0KKyAgICBEYXRlIGxhc3QgPSByLmdldExhc3REYXRlKCk7DQorICAgIHJldHVybiAoZGF0ZSAhPSBudWxsICYmIChmaXJzdC5lcXVhbHMoZGF0ZSkgfHwgbGFzdC5lcXVhbHMoZGF0ZSkgfHwgKGZpcnN0LmJlZm9yZShkYXRlKSAmJiBsYXN0LmFmdGVyKGRhdGUpKSkpOw0KKyAgfQ0KKw0KKyAgQE92ZXJyaWRlDQorICBwdWJsaWMgdm9pZCBvbkxvYWQoKSB7DQorICAgIFNob3dSYW5nZUV2ZW50LmZpcmUodGhpcywgZ2V0Rmlyc3REYXRlKCksIGdldExhc3REYXRlKCkpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZW1vdmVzIHRoZSBzdHlsZU5hbWUgZnJvbSB0aGUgZ2l2ZW4gZGF0ZXMgKGV2ZW4gaWYgaXQgaXMgdHJhbnNpZW50KS4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgcmVtb3ZlU3R5bGVGcm9tRGF0ZXMoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlKSB7DQorICAgIHN0eWxlci5zZXRTdHlsZU5hbWUoZGF0ZSwgc3R5bGVOYW1lLCBmYWxzZSk7DQorICAgIGlmIChpc0RhdGVWaXNpYmxlKGRhdGUpKSB7DQorICAgICAgZ2V0VmlldygpLnJlbW92ZVN0eWxlRnJvbURhdGUoc3R5bGVOYW1lLCBkYXRlKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZW1vdmVzIHRoZSBzdHlsZU5hbWUgZnJvbSB0aGUgZ2l2ZW4gZGF0ZXMgKGV2ZW4gaWYgaXQgaXMgdHJhbnNpZW50KS4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgcmVtb3ZlU3R5bGVGcm9tRGF0ZXMoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlLA0KKyAgICAgIERhdGUuLi4gbW9yZURhdGVzKSB7DQorICAgIHJlbW92ZVN0eWxlRnJvbURhdGVzKHN0eWxlTmFtZSwgZGF0ZSk7DQorICAgIGZvciAoRGF0ZSBkIDogbW9yZURhdGVzKSB7DQorICAgICAgcmVtb3ZlU3R5bGVGcm9tRGF0ZXMoc3R5bGVOYW1lLCBkKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZW1vdmVzIHRoZSBzdHlsZU5hbWUgZnJvbSB0aGUgZ2l2ZW4gZGF0ZXMgKGV2ZW4gaWYgaXQgaXMgdHJhbnNpZW50KS4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgcmVtb3ZlU3R5bGVGcm9tRGF0ZXMoU3RyaW5nIHN0eWxlTmFtZSwgSXRlcmFibGU8RGF0ZT4gZGF0ZXMpIHsNCisgICAgZm9yIChEYXRlIGQgOiBkYXRlcykgew0KKyAgICAgIHJlbW92ZVN0eWxlRnJvbURhdGVzKHN0eWxlTmFtZSwgZCk7DQorICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogU2V0cyB0aGUgZGF0ZSBwaWNrZXIgdG8gc2hvdyB0aGUgZ2l2ZW4gbW9udGgsIHVzZSB7QGxpbmsgI2dldEZpcnN0RGF0ZSgpfQ0KKyAgICogYW5kIHtAbGluayAjZ2V0TGFzdERhdGUoKX0gdG8gYWNjZXNzIHRoZSBleGFjdCBkYXRlIHJhbmdlIHRoZSBkYXRlIHBpY2tlcg0KKyAgICogY2hvc2UgdG8gZGlzcGxheS4NCisgICAqIDxwPg0KKyAgICogQSBkYXRlcGlja2VyIDxiPiBtYXkgPC9iPiBzaG93IGRheXMgbm90IGluIHRoZSBjdXJyZW50IG1vbnRoLiBJdA0KKyAgICogPGI+bXVzdDwvYj4gc2hvdyBhbGwgZGF5cyBpbiB0aGUgY3VycmVudCBtb250aC4NCisgICAqIDwvcD4NCisgICAqIA0KKyAgICogQHBhcmFtIG1vbnRoIHRoZSBtb250aCB0byBzaG93DQorICAgKi8NCisgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRNb250aChEYXRlIG1vbnRoKSB7DQorICAgIGdldE1vZGVsKCkuc2V0Q3VycmVudE1vbnRoKG1vbnRoKTsNCisgICAgcmVmcmVzaEFsbCgpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIHRoZSBkYXRlIHBpY2tlciBzdHlsZSBuYW1lLg0KKyAgICovDQorICBAT3ZlcnJpZGUNCisgIHB1YmxpYyB2b2lkIHNldFN0eWxlTmFtZShTdHJpbmcgc3R5bGVOYW1lKSB7DQorICAgIGNzcyA9IG5ldyBTdGFuZGFyZENzcyhzdHlsZU5hbWUsICJkYXRlUGlja2VyIik7DQorICAgIHN1cGVyLnNldFN0eWxlTmFtZShzdHlsZU5hbWUpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIGEgdmlzaWJsZSBkYXRlIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgb25seSBzZXQgdW50aWwgdGhlDQorICAgKiBuZXh0IHRpbWUgdGhlIERhdGVQaWNrZXIgaXMgcmVmcmVzaGVkLg0KKyAgICovDQorICBwdWJsaWMgZmluYWwgdm9pZCBzZXRUcmFuc2llbnRFbmFibGVkT25EYXRlcyhib29sZWFuIGVuYWJsZWQsIERhdGUgZGF0ZSkgew0KKyAgICBhc3NlcnQgaXNEYXRlVmlzaWJsZShkYXRlKSA6IGRhdGUgKyAiIG11c3QgYmUgdmlzaWJsZSI7DQorICAgIGdldFZpZXcoKS5zZXRFbmFibGVkT25EYXRlKGVuYWJsZWQsIGRhdGUpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIGEgdmlzaWJsZSBkYXRlIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgb25seSBzZXQgdW50aWwgdGhlDQorICAgKiBuZXh0IHRpbWUgdGhlIERhdGVQaWNrZXIgaXMgcmVmcmVzaGVkLg0KKyAgICovDQorICBwdWJsaWMgZmluYWwgdm9pZCBzZXRUcmFuc2llbnRFbmFibGVkT25EYXRlcyhib29sZWFuIGVuYWJsZWQsIERhdGUgZGF0ZSwNCisgICAgICBEYXRlLi4uIG1vcmVEYXRlcykgew0KKyAgICBzZXRUcmFuc2llbnRFbmFibGVkT25EYXRlcyhlbmFibGVkLCBkYXRlKTsNCisgICAgZm9yIChEYXRlIGQgOiBtb3JlRGF0ZXMpIHsNCisgICAgICBzZXRUcmFuc2llbnRFbmFibGVkT25EYXRlcyhlbmFibGVkLCBkKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIGEgZ3JvdXAgb2YgdmlzaWJsZSBkYXRlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIGlzIG9ubHkgc2V0DQorICAgKiB1bnRpbCB0aGUgbmV4dCB0aW1lIHRoZSBEYXRlUGlja2VyIGlzIHJlZnJlc2hlZC4NCisgICAqLw0KKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0VHJhbnNpZW50RW5hYmxlZE9uRGF0ZXMoYm9vbGVhbiBlbmFibGVkLA0KKyAgICAgIEl0ZXJhYmxlPERhdGU+IGRhdGVzKSB7DQorICAgIGZvciAoRGF0ZSBkIDogZGF0ZXMpIHsNCisgICAgICBzZXRUcmFuc2llbnRFbmFibGVkT25EYXRlcyhlbmFibGVkLCBkKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIHRoZSB7QGxpbmsgRGF0ZVBpY2tlcn0ncyB2YWx1ZS4NCisgICAqIA0KKyAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBuZXcgdmFsdWUNCisgICAqLw0KKyAgcHVibGljIGZpbmFsIHZvaWQgc2V0VmFsdWUoRGF0ZSBuZXdWYWx1ZSkgew0KKyAgICBzZXRWYWx1ZShuZXdWYWx1ZSwgZmFsc2UpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIHRoZSB7QGxpbmsgRGF0ZVBpY2tlcn0ncyB2YWx1ZS4NCisgICAqIA0KKyAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBuZXcgdmFsdWUgZm9yIHRoaXMgZGF0ZSBwaWNrZXINCisgICAqIEBwYXJhbSBmaXJlRXZlbnRzIHNob3VsZCBldmVudHMgYmUgZmlyZWQuDQorICAgKi8NCisgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZhbHVlKERhdGUgbmV3VmFsdWUsIGJvb2xlYW4gZmlyZUV2ZW50cykgew0KKyAgICBEYXRlIG9sZFZhbHVlID0gdmFsdWU7DQorDQorICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsKSB7DQorICAgICAgcmVtb3ZlU3R5bGVGcm9tRGF0ZXMoY3NzKCkuZGF5SXNWYWx1ZSgpLCBvbGRWYWx1ZSk7DQorICAgIH0NCisNCisgICAgdmFsdWUgPSBDYWxlbmRhclV0aWwuY29weURhdGUobmV3VmFsdWUpOw0KKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgew0KKyAgICAgIGFkZFN0eWxlVG9EYXRlcyhjc3MoKS5kYXlJc1ZhbHVlKCksIHZhbHVlKTsNCisgICAgfQ0KKyAgICBpZiAoZmlyZUV2ZW50cykgew0KKyAgICAgIERhdGVDaGFuZ2VFdmVudC5maXJlSWZOb3RFcXVhbERhdGVzKHRoaXMsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7DQorICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0cyB0aGUge0BsaW5rIENhbGVuZGFyTW9kZWx9IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGUgcGlja2VyLg0KKyAgICogDQorICAgKiBAcmV0dXJuIHRoZSBtb2RlbA0KKyAgICovDQorICBwcm90ZWN0ZWQgZmluYWwgQ2FsZW5kYXJNb2RlbCBnZXRNb2RlbCgpIHsNCisgICAgcmV0dXJuIG1vZGVsOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSB7QGxpbmsgTW9udGhTZWxlY3Rvcn0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZSBwaWNrZXIuDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIG1vbnRoIHNlbGVjdG9yDQorICAgKi8NCisgIHByb3RlY3RlZCBmaW5hbCBNb250aFNlbGVjdG9yIGdldE1vbnRoU2VsZWN0b3IoKSB7DQorICAgIHJldHVybiBtb250aFNlbGVjdG9yOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSB7QGxpbmsgQ2FsZW5kYXJWaWV3fSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRlIHBpY2tlci4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgdmlldw0KKyAgICovDQorICBwcm90ZWN0ZWQgZmluYWwgQ2FsZW5kYXJWaWV3IGdldFZpZXcoKSB7DQorICAgIHJldHVybiB2aWV3Ow0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZWZyZXNoZXMgYWxsIGNvbXBvbmVudHMgb2YgdGhpcyBkYXRlIHBpY2tlci4NCisgICAqLw0KKyAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVmcmVzaEFsbCgpIHsNCisgICAgaGlnaGxpZ2h0ZWQgPSBudWxsOw0KKyAgICBnZXRNb2RlbCgpLnJlZnJlc2goKTsNCisNCisgICAgZ2V0VmlldygpLnJlZnJlc2goKTsNCisgICAgZ2V0TW9udGhTZWxlY3RvcigpLnJlZnJlc2goKTsNCisgICAgaWYgKGlzQXR0YWNoZWQoKSkgew0KKyAgICAgIFNob3dSYW5nZUV2ZW50LmZpcmUodGhpcywgZ2V0Rmlyc3REYXRlKCksIGdldExhc3REYXRlKCkpOw0KKyAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIFNldHMgdXAgdGhlIGRhdGUgcGlja2VyLg0KKyAgICovDQorICBwcm90ZWN0ZWQgdm9pZCBzZXR1cCgpIHsNCisgICAgLyoNCisgICAgICogVXNlIGEgdGFibGUgKFZlcnRpY2FsUGFuZWwpIHRvIGdldCBzaHJpbmstdG8tZml0IGJlaGF2aW9yLiBEaXZzIGV4cGFuZCB0bw0KKyAgICAgKiBmaWxsIHRoZSBhdmFpbGFibGUgd2lkdGgsIHNvIHdlJ2QgbmVlZCB0byBnaXZlIGl0IGEgc2l6ZS4NCisgICAgICovDQorICAgIFZlcnRpY2FsUGFuZWwgcGFuZWwgPSBuZXcgVmVydGljYWxQYW5lbCgpOw0KKyAgICBpbml0V2lkZ2V0KHBhbmVsKTsNCisgICAgc2V0U3R5bGVOYW1lKHBhbmVsLmdldEVsZW1lbnQoKSwgY3NzLmRhdGVQaWNrZXIoKSk7DQorICAgIHNldFN0eWxlTmFtZShjc3MoKS5kYXRlUGlja2VyKCkpOw0KKyAgICBwYW5lbC5hZGQodGhpcy5nZXRNb250aFNlbGVjdG9yKCkpOw0KKyAgICBwYW5lbC5hZGQodGhpcy5nZXRWaWV3KCkpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXRzIHRoZSBjc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZSBwaWNrZXIgZm9yIHVzZSBieSBleHRlbmRlZCBtb250aCBhbmQNCisgICAqIGNlbGwgZ3JpZHMuDQorICAgKiANCisgICAqIEByZXR1cm4gdGhlIGNzcy4NCisgICAqLw0KKyAgZmluYWwgU3RhbmRhcmRDc3MgY3NzKCkgew0KKyAgICByZXR1cm4gY3NzOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXRzIHRoZSBoaWdobGlnaHRlZCBkYXRlLg0KKyAgICogDQorICAgKiBAcGFyYW0gaGlnaGxpZ2h0ZWQgaGlnaGxpZ2h0ZWQgZGF0ZQ0KKyAgICovDQorICB2b2lkIHNldEhpZ2hsaWdodGVkRGF0ZShEYXRlIGhpZ2hsaWdodGVkKSB7DQorICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSBoaWdobGlnaHRlZDsNCisgICAgZmlyZUV2ZW50KG5ldyBEYXRlSGlnaGxpZ2h0RXZlbnQoaGlnaGxpZ2h0ZWQpKTsNCisgIH0NCit9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EYXRlUGlja2VyQ29tcG9uZW50LmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0RhdGVQaWNrZXJDb21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjUwMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EYXRlUGlja2VyQ29tcG9uZW50LmphdmEKQEAgLTAsMCArMSw2OSBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5Db21wb3NpdGU7DQorDQorLyoqDQorICogUGFja2FnZSBwcm90ZWN0ZWQgY2xhc3MgdXNlZCB0byBjb21iaW5lIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZQ0KKyAqIHtAbGluayBNb250aFNlbGVjdG9yfSBhbmQge0BsaW5rIENhbGVuZGFyVmlld30gY29tcG9uZW50cy4NCisgKiANCisgKi8NCithYnN0cmFjdCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9zaXRlIHsNCisgIHByaXZhdGUgRGF0ZVBpY2tlciBkYXRlUGlja2VyOw0KKw0KKyAgcHVibGljIENhbGVuZGFyTW9kZWwgZ2V0TW9kZWwoKSB7DQorICAgIHJldHVybiBkYXRlUGlja2VyLmdldE1vZGVsKCk7DQorICB9DQorDQorICBwcm90ZWN0ZWQgdm9pZCBhZGRNb250aHMoaW50IG51bU1vbnRocykgew0KKyAgICBnZXRNb2RlbCgpLnNoaWZ0Q3VycmVudE1vbnRoKG51bU1vbnRocyk7DQorICAgIGdldERhdGVQaWNrZXIoKS5yZWZyZXNoQWxsKCk7DQorICB9DQorDQorICBwcm90ZWN0ZWQgRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCkgew0KKyAgICByZXR1cm4gZGF0ZVBpY2tlcjsNCisgIH0NCisNCisgIC8qKg0KKyAgICogUmVmcmVzaCB0aGUgY29tcG9uZW50LiBVc3VhbGx5IGNhbGxlZCBiZWNhdXNlIHRoZSBtb2RlbCdzIGN1cnJlbnQgZGF0ZSBoYXMNCisgICAqIGNoYW5nZWQuIEluIGdlbmVyYWwsIG9ubHkgc2hvdWxkIGJlIGNhbGxlZCBieSB7QGxpbmsgRGF0ZVBpY2tlcn0uIFVzZQ0KKyAgICogcmVmcmVzaEFsbCgpIGlmIHlvdSBuZWVkIHRvIHJlZnJlc2ggYWxsIGNvbXBvbmVudHMuDQorICAgKi8NCisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJlZnJlc2goKTsNCisNCisgIC8qKg0KKyAgICogUmVmcmVzaGVzIHRoZSB7QGxpbmsgRGF0ZVBpY2tlcn0sIHtAbGluayBDYWxlbmRhclZpZXd9LCBhbmQNCisgICAqIHtAbGluayBDYWxlbmRhck1vZGVsfS4NCisgICAqLw0KKyAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaEFsbCgpIHsNCisgICAgZ2V0RGF0ZVBpY2tlcigpLnJlZnJlc2hBbGwoKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogU2V0IHVwIHRoZSBjb21wb25lbnQuDQorICAgKi8NCisgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHNldHVwKCk7DQorDQorICBEYXRlUGlja2VyLlN0YW5kYXJkQ3NzIGNzcygpIHsNCisgICAgcmV0dXJuIGRhdGVQaWNrZXIuY3NzKCk7DQorICB9DQorDQorICB2b2lkIHNldERhdGVQaWNrZXIoRGF0ZVBpY2tlciBtZSkgew0KKyAgICB0aGlzLmRhdGVQaWNrZXIgPSBtZTsNCisgIH0NCit9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EZWZhdWx0Q2FsZW5kYXJWaWV3LmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0RlZmF1bHRDYWxlbmRhclZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjcyZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EZWZhdWx0Q2FsZW5kYXJWaWV3LmphdmEKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudDsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LkRPTTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5FbGVtZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkhUTUxUYWJsZS5DZWxsRm9ybWF0dGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuZGF0ZXBpY2tlci5jbGllbnQuRGVmYXVsdENhbGVuZGFyVmlldy5DZWxsR3JpZC5EYXRlQ2VsbDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCisvKioKKyAqIFNpbXBsZSBjYWxlbmRhciB2aWV3LiBOb3QgZXh0ZW5zaWJsZSBhcyB3ZSB3aXNoIHRvIGV2b2x2ZSBpdCBmcmVlbHkgb3ZlcgorICogdGltZS4KKyAqLworCitAU3VwcHJlc3NXYXJuaW5ncygvKiBEYXRlIG1hbmlwdWxhdGlvbiByZXF1aXJlZCAqL3siZGVwcmVjYXRpb24ifSkKK3B1YmxpYyBmaW5hbCBjbGFzcyBEZWZhdWx0Q2FsZW5kYXJWaWV3IGV4dGVuZHMgQ2FsZW5kYXJWaWV3IHsKKworICAvKioKKyAgICogQ2VsbCBncmlkLgorICAgKi8KKyAgLy8gSmF2YWMgYnVnIHJlcXVpcmVzIHRoYXQgZGF0ZSBiZSBmdWxseSBzcGVjaWZpZWQgaGVyZS4KKyAgY2xhc3MgQ2VsbEdyaWQgZXh0ZW5kcyBDZWxsR3JpZEltcGw8amF2YS51dGlsLkRhdGU+IHsKKyAgICAvKioKKyAgICAgKiBBIGNlbGwgcmVwcmVzZW50aW5nIGEgZGF0ZS4KKyAgICAgKi8KKyAgICBjbGFzcyBEYXRlQ2VsbCBleHRlbmRzIENlbGwgeworICAgICAgcHJpdmF0ZSBTdHJpbmcgY2VsbFN0eWxlOworICAgICAgcHJpdmF0ZSBTdHJpbmcgZGF0ZVN0eWxlOworCisgICAgICBEYXRlQ2VsbChFbGVtZW50IHRkLCBib29sZWFuIGlzV2Vla2VuZCkgeworICAgICAgICBzdXBlcih0ZCwgbmV3IERhdGUoKSk7CisgICAgICAgIGNlbGxTdHlsZSA9IGNzcygpLmRheSgpOworICAgICAgICBpZiAoaXNXZWVrZW5kKSB7CisgICAgICAgICAgY2VsbFN0eWxlICs9ICIgIiArIGNzcygpLmRheUlzV2Vla2VuZCgpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgYWRkU3R5bGVOYW1lKFN0cmluZyBzdHlsZU5hbWUpIHsKKyAgICAgICAgaWYgKGRhdGVTdHlsZS5pbmRleE9mKCIgIiArIHN0eWxlTmFtZSArICIgIikgPT0gLTEpIHsKKyAgICAgICAgICBkYXRlU3R5bGUgKz0gc3R5bGVOYW1lICsgIiAiOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVN0eWxlKCk7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyBib29sZWFuIGlzRmlsbGVyKCkgeworICAgICAgICByZXR1cm4gIWdldE1vZGVsKCkuaXNJbkN1cnJlbnRNb250aChnZXRWYWx1ZSgpKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBvbkhpZ2hsaWdodGVkKGJvb2xlYW4gaGlnaGxpZ2h0ZWQpIHsKKyAgICAgICAgc2V0SGlnaGxpZ2h0ZWREYXRlKGdldFZhbHVlKCkpOworICAgICAgICB1cGRhdGVTdHlsZSgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIG9uU2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKKyAgICAgICAgICBnZXREYXRlUGlja2VyKCkuc2V0VmFsdWUoZ2V0VmFsdWUoKSwgdHJ1ZSk7CisgICAgICAgICAgaWYgKGlzRmlsbGVyKCkpIHsKKyAgICAgICAgICAgIGdldERhdGVQaWNrZXIoKS5zZXRDdXJyZW50TW9udGgoZ2V0VmFsdWUoKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHVwZGF0ZVN0eWxlKCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcmVtb3ZlU3R5bGVOYW1lKFN0cmluZyBzdHlsZU5hbWUpIHsKKyAgICAgICAgZGF0ZVN0eWxlID0gZGF0ZVN0eWxlLnJlcGxhY2UoIiAiICsgc3R5bGVOYW1lICsgIiAiLCAiICIpOworICAgICAgICB1cGRhdGVTdHlsZSgpOworICAgICAgfQorCisgICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoRGF0ZSBjdXJyZW50KSB7CisgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIGdldFZhbHVlKCkuc2V0VGltZShjdXJyZW50LmdldFRpbWUoKSk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldE1vZGVsKCkuZm9ybWF0RGF5T2ZNb250aChnZXRWYWx1ZSgpKTsKKyAgICAgICAgc2V0VGV4dCh2YWx1ZSk7CisgICAgICAgIGRhdGVTdHlsZSA9IGNlbGxTdHlsZTsKKyAgICAgICAgaWYgKGlzRmlsbGVyKCkpIHsKKyAgICAgICAgICBkYXRlU3R5bGUgKz0gIiAiICsgY3NzKCkuZGF5SXNGaWxsZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBTdHJpbmcgZXh0cmFTdHlsZSA9IGdldERhdGVQaWNrZXIoKS5nZXRTdHlsZU9mRGF0ZShjdXJyZW50KTsKKyAgICAgICAgICBpZiAoZXh0cmFTdHlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBkYXRlU3R5bGUgKz0gIiAiICsgZXh0cmFTdHlsZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gV2Ugd2FudCB0byBjZXJ0aWZ5IHRoYXQgYWxsIGRhdGUgc3R5bGVzIGhhdmUgIiAiIGJlZm9yZSBhbmQgYWZ0ZXIKKyAgICAgICAgLy8gdGhlbSBmb3IgZWFzZSBvZiBhZGRpbmcgdG8gYW5kIHJlcGxhY2luZyB0aGVtLgorICAgICAgICBkYXRlU3R5bGUgKz0gIiAiOworICAgICAgICB1cGRhdGVTdHlsZSgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN0eWxlKCkgeworICAgICAgICBTdHJpbmcgYWNjdW0gPSBkYXRlU3R5bGU7CisKKyAgICAgICAgaWYgKGlzSGlnaGxpZ2h0ZWQoKSkgeworICAgICAgICAgIGFjY3VtICs9ICIgIiArIGNzcygpLmRheUlzSGlnaGxpZ2h0ZWQoKTsKKworICAgICAgICAgIGlmIChpc0hpZ2hsaWdodGVkKCkgJiYgaXNTZWxlY3RlZCgpKSB7CisgICAgICAgICAgICBhY2N1bSArPSAiICIgKyBjc3MoKS5kYXlJc1ZhbHVlQW5kSGlnaGxpZ2h0ZWQoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0VuYWJsZWQoKSkgeworICAgICAgICAgIGFjY3VtICs9ICIgIiArIGNzcygpLmRheUlzRGlzYWJsZWQoKTsKKyAgICAgICAgfQorICAgICAgICBzZXRTdHlsZU5hbWUoYWNjdW0pOworICAgICAgfQorCisgICAgICBwcml2YXRlIHZvaWQgc2V0VGV4dChTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgRE9NLnNldElubmVyVGV4dChnZXRFbGVtZW50KCksIHZhbHVlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBDZWxsR3JpZCgpIHsKKyAgICAgIHJlc2l6ZShDYWxlbmRhck1vZGVsLldFRUtTX0lOX01PTlRIICsgMSwgQ2FsZW5kYXJNb2RlbC5EQVlTX0lOX1dFRUspOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uU2VsZWN0ZWQoQ2VsbCBsYXN0U2VsZWN0ZWQsIENlbGwgY2VsbCkgeworICAgIH0KKyAgfQorCisgIHByaXZhdGUgQ2VsbEdyaWQgZ3JpZCA9IG5ldyBDZWxsR3JpZCgpOworCisgIHByaXZhdGUgRGF0ZSBmaXJzdERpc3BsYXllZDsKKworICBwcml2YXRlIERhdGUgbGFzdERpc3BsYXllZCA9IG5ldyBEYXRlKCk7CisKKyAgLyoqCisgICAqIENvbnN0cnVjdG9yLgorICAgKi8KKyAgcHVibGljIERlZmF1bHRDYWxlbmRhclZpZXcoKSB7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgYWRkU3R5bGVUb0RhdGUoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlKSB7CisgICAgYXNzZXJ0IGdldERhdGVQaWNrZXIoKS5pc0RhdGVWaXNpYmxlKGRhdGUpIDogIllvdSB0cmllZCB0byBhZGQgc3R5bGUgIiArIHN0eWxlTmFtZSArICIgdG8gIgorICAgICAgICArIGRhdGUgKyAiLiBUaGUgY2FsZW5kYXIgaXMgY3VycmVudGx5IHNob3dpbmcgIiArIGdldEZpcnN0RGF0ZSgpCisgICAgICAgICsgIiB0byAiICsgZ2V0TGFzdERhdGUoKTsKKyAgICBnZXRDZWxsKGRhdGUpLmFkZFN0eWxlTmFtZShzdHlsZU5hbWUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBEYXRlIGdldEZpcnN0RGF0ZSgpIHsKKyAgICByZXR1cm4gZmlyc3REaXNwbGF5ZWQ7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIERhdGUgZ2V0TGFzdERhdGUoKSB7CisgICAgcmV0dXJuIGxhc3REaXNwbGF5ZWQ7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gaXNEYXRlRW5hYmxlZChEYXRlIGQpIHsKKyAgICByZXR1cm4gZ2V0Q2VsbChkKS5pc0VuYWJsZWQoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworICAgIGZpcnN0RGlzcGxheWVkID0gZ2V0TW9kZWwoKS5nZXRDdXJyZW50Rmlyc3REYXlPZkZpcnN0V2VlaygpOworCisgICAgaWYgKGZpcnN0RGlzcGxheWVkLmdldERhdGUoKSA9PSAxKSB7CisgICAgICAvLyBzaG93IG9uZSBlbXB0eSB3ZWVrIGlmIGRhdGUgaXMgTW9uZGF5IGlzIHRoZSBmaXJzdCBpbiBtb250aC4KKyAgICAgIENhbGVuZGFyVXRpbC5hZGREYXlzVG9EYXRlKGZpcnN0RGlzcGxheWVkLCAtNyk7CisgICAgfQorCisgICAgbGFzdERpc3BsYXllZC5zZXRUaW1lKGZpcnN0RGlzcGxheWVkLmdldFRpbWUoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyaWQuZ2V0TnVtQ2VsbHMoKTsgaSsrKSB7CisgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgIENhbGVuZGFyVXRpbC5hZGREYXlzVG9EYXRlKGxhc3REaXNwbGF5ZWQsIDEpOworICAgICAgfQorICAgICAgRGF0ZUNlbGwgY2VsbCA9IChEYXRlQ2VsbCkgZ3JpZC5nZXRDZWxsKGkpOworICAgICAgY2VsbC51cGRhdGUobGFzdERpc3BsYXllZCk7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHJlbW92ZVN0eWxlRnJvbURhdGUoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlKSB7CisgICAgZ2V0Q2VsbChkYXRlKS5yZW1vdmVTdHlsZU5hbWUoc3R5bGVOYW1lKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkT25EYXRlKGJvb2xlYW4gZW5hYmxlZCwgRGF0ZSBkYXRlKSB7CisgICAgZ2V0Q2VsbChkYXRlKS5zZXRFbmFibGVkKGVuYWJsZWQpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHNldHVwKCkgeworICAgIC8vIFByZXBhcmF0aW9uCisgICAgQ2VsbEZvcm1hdHRlciBmb3JtYXR0ZXIgPSBncmlkLmdldENlbGxGb3JtYXR0ZXIoKTsKKyAgICBpbnQgd2Vla2VuZFN0YXJ0Q29sdW1uID0gLTE7CisgICAgaW50IHdlZWtlbmRFbmRDb2x1bW4gPSAtMTsKKworICAgIC8vIFNldCB1cCB0aGUgZGF5IGxhYmVscy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IENhbGVuZGFyTW9kZWwuREFZU19JTl9XRUVLOyBpKyspIHsKKyAgICAgIGludCBzaGlmdCA9IENhbGVuZGFyVXRpbC5nZXRTdGFydGluZ0RheU9mV2VlaygpOworICAgICAgaW50IGRheUlkeCA9IGkgKyBzaGlmdCA8IENhbGVuZGFyTW9kZWwuREFZU19JTl9XRUVLID8gaSArIHNoaWZ0IDogaQorICAgICAgICAgICsgc2hpZnQgLSBDYWxlbmRhck1vZGVsLkRBWVNfSU5fV0VFSzsKKyAgICAgIGdyaWQuc2V0VGV4dCgwLCBpLCBnZXRNb2RlbCgpLmZvcm1hdERheU9mV2VlayhkYXlJZHgpKTsKKworICAgICAgaWYgKENhbGVuZGFyVXRpbC5pc1dlZWtlbmQoZGF5SWR4KSkgeworICAgICAgICBmb3JtYXR0ZXIuc2V0U3R5bGVOYW1lKDAsIGksIGNzcygpLndlZWtlbmRMYWJlbCgpKTsKKyAgICAgICAgaWYgKHdlZWtlbmRTdGFydENvbHVtbiA9PSAtMSkgeworICAgICAgICAgIHdlZWtlbmRTdGFydENvbHVtbiA9IGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgd2Vla2VuZEVuZENvbHVtbiA9IGk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvcm1hdHRlci5zZXRTdHlsZU5hbWUoMCwgaSwgY3NzKCkud2Vla2RheUxhYmVsKCkpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCB1cCB0aGUgY2FsZW5kYXIgZ3JpZC4KKyAgICBmb3IgKGludCByb3cgPSAxOyByb3cgPD0gQ2FsZW5kYXJNb2RlbC5XRUVLU19JTl9NT05USDsgcm93KyspIHsKKyAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IENhbGVuZGFyTW9kZWwuREFZU19JTl9XRUVLOyBjb2x1bW4rKykgeworICAgICAgICAvLyBzZXQgdXAgZm9ybWF0dGVyLgorICAgICAgICBFbGVtZW50IGUgPSBmb3JtYXR0ZXIuZ2V0RWxlbWVudChyb3csIGNvbHVtbik7CisgICAgICAgIGdyaWQubmV3IERhdGVDZWxsKGUsIGNvbHVtbiA9PSB3ZWVrZW5kU3RhcnRDb2x1bW4KKyAgICAgICAgICAgIHx8IGNvbHVtbiA9PSB3ZWVrZW5kRW5kQ29sdW1uKTsKKyAgICAgIH0KKyAgICB9CisgICAgaW5pdFdpZGdldChncmlkKTsKKyAgICBncmlkLnNldFN0eWxlTmFtZShjc3MoKS5kYXlzKCkpOworICB9CisKKyAgcHJpdmF0ZSBEYXRlQ2VsbCBnZXRDZWxsKERhdGUgZCkgeworICAgIGludCBpbmRleCA9IENhbGVuZGFyVXRpbC5nZXREYXlzQmV0d2VlbihmaXJzdERpc3BsYXllZCwgZCk7CisgICAgYXNzZXJ0IChpbmRleCA+PSAwKTsKKworICAgIERhdGVDZWxsIGNlbGwgPSAoRGF0ZUNlbGwpIGdyaWQuZ2V0Q2VsbChpbmRleCk7CisgICAgaWYgKGNlbGwuZ2V0VmFsdWUoKS5nZXREYXRlKCkgIT0gZC5nZXREYXRlKCkpIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZCArICIgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBjZWxsICIKKyAgICAgICAgICArIGNlbGwgKyAiIGFzIGl0IGhhcyBkYXRlICIgKyBjZWxsLmdldFZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gY2VsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EZWZhdWx0TW9udGhTZWxlY3Rvci5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EZWZhdWx0TW9udGhTZWxlY3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMWIzNTQKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0RlZmF1bHRNb250aFNlbGVjdG9yLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuQ2xpY2tIYW5kbGVyOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5HcmlkOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5QdXNoQnV0dG9uOw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IVE1MVGFibGUuQ2VsbEZvcm1hdHRlcjsNCisNCisvKioNCisgKiBBIHNpbXBsZSB7QGxpbmsgTW9udGhTZWxlY3Rvcn0gdXNlZCBmb3IgdGhlIGRlZmF1bHQgZGF0ZSBwaWNrZXIuIE5vdA0KKyAqIGV4dGVuc2libGUgYXMgd2Ugd2lzaCB0byBldm9sdmUgaXQgZnJlZWx5IG92ZXIgdGltZS4NCisgKi8NCisNCitwdWJsaWMgZmluYWwgY2xhc3MgRGVmYXVsdE1vbnRoU2VsZWN0b3IgZXh0ZW5kcyBNb250aFNlbGVjdG9yIHsNCisNCisgIHByaXZhdGUgUHVzaEJ1dHRvbiBiYWNrd2FyZHM7DQorICBwcml2YXRlIFB1c2hCdXR0b24gZm9yd2FyZHM7DQorICBwcml2YXRlIEdyaWQgZ3JpZDsNCisNCisgIC8qKg0KKyAgICogQ29uc3RydWN0b3IuDQorICAgKi8NCisgIHB1YmxpYyBEZWZhdWx0TW9udGhTZWxlY3RvcigpIHsNCisgIH0NCisgDQorICBAT3ZlcnJpZGUNCisgIHByb3RlY3RlZCB2b2lkIHJlZnJlc2goKSB7DQorICAgIFN0cmluZyBmb3JtYXR0ZWRNb250aCA9IGdldE1vZGVsKCkuZm9ybWF0Q3VycmVudE1vbnRoKCk7DQorICAgIGdyaWQuc2V0VGV4dCgwLCAxLCBmb3JtYXR0ZWRNb250aCk7DQorICB9DQorDQorICBAT3ZlcnJpZGUNCisgIHByb3RlY3RlZCB2b2lkIHNldHVwKCkgew0KKyAgICAvLyBTZXQgdXAgYmFja3dhcmRzLg0KKyAgICBiYWNrd2FyZHMgPSBuZXcgUHVzaEJ1dHRvbigpOw0KKyAgICBiYWNrd2FyZHMuYWRkQ2xpY2tIYW5kbGVyKG5ldyBDbGlja0hhbmRsZXIoKSB7DQorICAgICAgcHVibGljIHZvaWQgb25DbGljayhDbGlja0V2ZW50IGV2ZW50KSB7DQorICAgICAgICBhZGRNb250aHMoLTEpOw0KKyAgICAgIH0NCisgICAgfSk7DQorDQorICAgIGJhY2t3YXJkcy5nZXRVcEZhY2UoKS5zZXRIVE1MKCImbGFxdW87Iik7DQorICAgIGJhY2t3YXJkcy5zZXRTdHlsZU5hbWUoY3NzKCkucHJldmlvdXNCdXR0b24oKSk7DQorDQorICAgIGZvcndhcmRzID0gbmV3IFB1c2hCdXR0b24oKTsNCisgICAgZm9yd2FyZHMuZ2V0VXBGYWNlKCkuc2V0SFRNTCgiJnJhcXVvOyIpOw0KKyAgICBmb3J3YXJkcy5zZXRTdHlsZU5hbWUoY3NzKCkubmV4dEJ1dHRvbigpKTsNCisgICAgZm9yd2FyZHMuYWRkQ2xpY2tIYW5kbGVyKG5ldyBDbGlja0hhbmRsZXIoKSB7DQorICAgICAgcHVibGljIHZvaWQgb25DbGljayhDbGlja0V2ZW50IGV2ZW50KSB7DQorICAgICAgICBhZGRNb250aHMoKzEpOw0KKyAgICAgIH0NCisgICAgfSk7DQorDQorICAgIC8vIFNldCB1cCBncmlkLg0KKyAgICBncmlkID0gbmV3IEdyaWQoMSwgMyk7DQorICAgIGdyaWQuc2V0V2lkZ2V0KDAsIDAsIGJhY2t3YXJkcyk7DQorICAgIGdyaWQuc2V0V2lkZ2V0KDAsIDIsIGZvcndhcmRzKTsNCisNCisgICAgQ2VsbEZvcm1hdHRlciBmb3JtYXR0ZXIgPSBncmlkLmdldENlbGxGb3JtYXR0ZXIoKTsNCisgICAgZm9ybWF0dGVyLnNldFN0eWxlTmFtZSgwLCAxLCBjc3MoKS5tb250aCgpKTsNCisgICAgZm9ybWF0dGVyLnNldFdpZHRoKDAsIDAsICIxIik7DQorICAgIGZvcm1hdHRlci5zZXRXaWR0aCgwLCAxLCAiMTAwJSIpOw0KKyAgICBmb3JtYXR0ZXIuc2V0V2lkdGgoMCwgMiwgIjEiKTsNCisgICAgZ3JpZC5zZXRTdHlsZU5hbWUoY3NzKCkubW9udGhTZWxlY3RvcigpKTsNCisgICAgaW5pdFdpZGdldChncmlkKTsNCisgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9FbGVtZW50TWFwcGVyLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL2RhdGVwaWNrZXIvY2xpZW50L0VsZW1lbnRNYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk1ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9FbGVtZW50TWFwcGVyLmphdmEKQEAgLTAsMCArMSwxMDUgQEAKKy8qDQorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4NCisgKiANCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QNCisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZg0KKyAqIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQNCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUNCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcg0KKyAqIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudDsNCisNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQuRWxlbWVudDsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuVUlPYmplY3Q7DQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQorDQorLyoqDQorICogQ3JlYXRlcyBhIG1hcHBpbmcgZnJvbSBlbGVtZW50cyB0byB0aGVpciBhc3NvY2lhdGVkIHVpIG9iamVjdHMuDQorICogDQorICogQHBhcmFtIDxUPiB0aGUgdHlwZSB0aGF0IHRoZSBlbGVtZW50IGlzIG1hcHBlZCB0bw0KKyAqLw0KK2NsYXNzIEVsZW1lbnRNYXBwZXI8VCBleHRlbmRzIFVJT2JqZWN0PiB7DQorDQorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGcmVlTm9kZSB7DQorICAgIGludCBpbmRleDsNCisgICAgRWxlbWVudE1hcHBlci5GcmVlTm9kZSBuZXh0Ow0KKw0KKyAgICBwdWJsaWMgRnJlZU5vZGUoaW50IGluZGV4LCBFbGVtZW50TWFwcGVyLkZyZWVOb2RlIG5leHQpIHsNCisgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7DQorICAgICAgdGhpcy5uZXh0ID0gbmV4dDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgY2xlYXJJbmRleChFbGVtZW50IGVsZW0pIC8qLXsNCisgICAgZWxlbVsiX191aU9iamVjdElEIl0gPSBudWxsOw0KKyAgfS0qLzsNCisNCisgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgZ2V0SW5kZXgoRWxlbWVudCBlbGVtKSAvKi17DQorICAgIHZhciBpbmRleCA9IGVsZW1bIl9fdWlPYmplY3RJRCJdOw0KKyAgICByZXR1cm4gKGluZGV4ID09IG51bGwpID8gLTEgOiBpbmRleDsNCisgIH0tKi87DQorDQorICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBzZXRJbmRleChFbGVtZW50IGVsZW0sIGludCBpbmRleCkgLyotew0KKyAgICBlbGVtWyJfX3VpT2JqZWN0SUQiXSA9IGluZGV4Ow0KKyAgfS0qLzsNCisNCisgIHByaXZhdGUgRWxlbWVudE1hcHBlci5GcmVlTm9kZSBmcmVlTGlzdCA9IG51bGw7DQorDQorICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxUPiB1aU9iamVjdExpc3QgPSBuZXcgQXJyYXlMaXN0PFQ+KCk7DQorDQorICAvKioNCisgICAqIFJldHVybnMgdGhlIHVpT2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC4NCisgICAqIA0KKyAgICogQHBhcmFtIGVsZW0gdWlPYmplY3QncyBlbGVtZW50DQorICAgKiBAcmV0dXJuIHRoZSB1aU9iamVjdA0KKyAgICovDQorICBwdWJsaWMgVCBnZXQoRWxlbWVudCBlbGVtKSB7DQorICAgIGludCBpbmRleCA9IGdldEluZGV4KGVsZW0pOw0KKyAgICBpZiAoaW5kZXggPCAwKSB7DQorICAgICAgcmV0dXJuIG51bGw7DQorICAgIH0NCisgICAgcmV0dXJuIHVpT2JqZWN0TGlzdC5nZXQoaW5kZXgpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBBZGRzIHRoZSBNYXBwZWRUeXBlLg0KKyAgICogDQorICAgKiBAcGFyYW0gdWlPYmplY3QgdWlPYmplY3QgdG8gYWRkDQorICAgKi8NCisgIHB1YmxpYyB2b2lkIHB1dChUIHVpT2JqZWN0KSB7DQorICAgIGludCBpbmRleDsNCisgICAgaWYgKGZyZWVMaXN0ID09IG51bGwpIHsNCisgICAgICBpbmRleCA9IHVpT2JqZWN0TGlzdC5zaXplKCk7DQorICAgICAgdWlPYmplY3RMaXN0LmFkZCh1aU9iamVjdCk7DQorICAgIH0gZWxzZSB7DQorICAgICAgaW5kZXggPSBmcmVlTGlzdC5pbmRleDsNCisgICAgICB1aU9iamVjdExpc3Quc2V0KGluZGV4LCB1aU9iamVjdCk7DQorICAgICAgZnJlZUxpc3QgPSBmcmVlTGlzdC5uZXh0Ow0KKyAgICB9DQorICAgIHNldEluZGV4KHVpT2JqZWN0LmdldEVsZW1lbnQoKSwgaW5kZXgpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBSZW1vdmUgdGhlIHVpT2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC4NCisgICAqIA0KKyAgICogQHBhcmFtIGVsZW0gdGhlIHVpT2JqZWN0J3MgZWxlbWVudA0KKyAgICovDQorICBwdWJsaWMgdm9pZCByZW1vdmVCeUVsZW1lbnQoRWxlbWVudCBlbGVtKSB7DQorICAgIGludCBpbmRleCA9IGdldEluZGV4KGVsZW0pOw0KKyAgICByZW1vdmVJbXBsKGVsZW0sIGluZGV4KTsNCisgIH0NCisNCisgIHByaXZhdGUgdm9pZCByZW1vdmVJbXBsKEVsZW1lbnQgZWxlbSwgaW50IGluZGV4KSB7DQorICAgIGNsZWFySW5kZXgoZWxlbSk7DQorICAgIHVpT2JqZWN0TGlzdC5zZXQoaW5kZXgsIG51bGwpOw0KKyAgICBmcmVlTGlzdCA9IG5ldyBGcmVlTm9kZShpbmRleCwgZnJlZUxpc3QpOw0KKyAgfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YSBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvTW9udGhTZWxlY3Rvci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC9ldmVudC9zaGFyZWQvSGFzSGFuZGxlck1hbmFnZXIuamF2YQpjb3B5IHRvIHVzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvTW9udGhTZWxlY3Rvci5qYXZhCmluZGV4IDkwNjI1OGIuLjI1ZTNkYzcgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L2V2ZW50L3NoYXJlZC9IYXNIYW5kbGVyTWFuYWdlci5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvTW9udGhTZWxlY3Rvci5qYXZhCkBAIC0xMywyMCArMTMsMTAgQEAKICAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQogICogdGhlIExpY2Vuc2UuDQogICovDQotDQotcGFja2FnZSBjb20uZ29vZ2xlLmd3dC5ldmVudC5zaGFyZWQ7DQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KIA0KIC8qKg0KLSAqIA0KLSAqIENoYXJhY3RlcmlzdGljIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGdpdmVuIHdpZGdldCBmaXJlcyBldmVudHMgdmlhIGENCi0gKiB7QGxpbmsgSGFuZGxlck1hbmFnZXJ9Lg0KLSAqIA0KKyAqIEFic3RyYWN0IG1vbnRoIHNlbGVjdG9yIHdpZGdldC4NCiAgKi8NCi1wdWJsaWMgaW50ZXJmYWNlIEhhc0hhbmRsZXJNYW5hZ2VyIHsNCi0gIC8qKg0KLSAgICogR2V0cyB0aGlzIHdpZGdldCdzIGhhbmRsZXIgbWFuYWdlci4NCi0gICAqIA0KLSAgICogQHJldHVybiB0aGUgbWFuYWdlcg0KLSAgICovDQotICBIYW5kbGVyTWFuYWdlciBnZXRIYW5kbGVyTWFuYWdlcigpOw0KLX0NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTW9udGhTZWxlY3RvciBleHRlbmRzIERhdGVQaWNrZXJDb21wb25lbnQgew0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL2Nocm9tZS9wdWJsaWMvZ3d0L2Nocm9tZS9jaHJvbWUuY3NzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9jaHJvbWUvcHVibGljL2d3dC9jaHJvbWUvY2hyb21lLmNzcwppbmRleCBjMTA5MDA4Li5mOWVkMGE2IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL2Nocm9tZS9wdWJsaWMvZ3d0L2Nocm9tZS9jaHJvbWUuY3NzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvY2hyb21lL3B1YmxpYy9nd3QvY2hyb21lL2Nocm9tZS5jc3MKQEAgLTU4Miw3ICs1ODIsNiBAQAogfQogCiAuZ3d0LVJhZGlvQnV0dG9uIHsKLSAgcGFkZGluZzogNHB4IDRweCAzcHggM3B4OwogfQogLmd3dC1SYWRpb0J1dHRvbi1kaXNhYmxlZCB7CiAgIGNvbG9yOiAjODg4OwpAQCAtMTA4MywzICsxMDgyLDk0IEBACiAuZ3d0LVRyZWUgLmd3dC1UcmVlSXRlbS1zZWxlY3RlZCB7CiAgIGJhY2tncm91bmQ6ICM5M2MyZjEgdXJsKGltYWdlcy9oYm9yZGVyLnBuZykgcmVwZWF0LXggMHB4IC0xNDYzcHg7CiB9CisuZ3d0LVRyZWVJdGVtIC5nd3QtUmFkaW9CdXR0b24gaW5wdXQsCisuZ3d0LVRyZWVJdGVtIC5nd3QtQ2hlY2tCb3ggaW5wdXQgeworICBtYXJnaW4tbGVmdDogMHB4OworfQorKiBodG1sIC5nd3QtVHJlZUl0ZW0gLmd3dC1SYWRpb0J1dHRvbiBpbnB1dCwKKyogaHRtbCAuZ3d0LVRyZWVJdGVtIC5nd3QtQ2hlY2tCb3ggaW5wdXQgeworICBtYXJnaW4tbGVmdDogLTRweDsKK30KKworLmd3dC1EYXRlQm94IGlucHV0IHsKKyAgd2lkdGg6IDhlbTsKK30KKy5kYXRlQm94Rm9ybWF0RXJyb3IgeworICBiYWNrZ3JvdW5kOiAjZWVkNmQ2OworfQorLmRhdGVCb3hQb3B1cCB7Cit9CisKKy5nd3QtRGF0ZVBpY2tlciB7CisgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5nd3QtRGF0ZVBpY2tlciB0ZCwKKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB0ZDpmb2N1cyB7CisgIG91dGxpbmU6IG5vbmUKK30KKy5kYXRlUGlja2VyRGF5cyB7CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKy5kYXRlUGlja2VyRGF5LAorLmRhdGVQaWNrZXJXZWVrZGF5TGFiZWwsCisuZGF0ZVBpY2tlcldlZWtlbmRMYWJlbCB7CisgIGZvbnQtc2l6ZTogNzUlOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHBhZGRpbmc6IDRweDsKKyAgb3V0bGluZTogbm9uZTsKK30KKy5kYXRlUGlja2VyV2Vla2RheUxhYmVsLAorLmRhdGVQaWNrZXJXZWVrZW5kTGFiZWwgeworICBiYWNrZ3JvdW5kOiAjYzFjMWMxOworICBwYWRkaW5nOiAwcHggNHB4IDJweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQorLmRhdGVQaWNrZXJEYXkgeworICBwYWRkaW5nOiA0cHg7CisgIGN1cnNvcjogaGFuZDsKKyAgY3Vyc29yOiBwb2ludGVyOworfQorLmRhdGVQaWNrZXJEYXlJc1RvZGF5IHsKKyAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDNweDsKK30KKy5kYXRlUGlja2VyRGF5SXNXZWVrZW5kIHsKKyAgYmFja2dyb3VuZDogI0VFRUVFRTsKK30KKy5kYXRlUGlja2VyRGF5SXNGaWxsZXIgeworICBjb2xvcjogIzg4ODg4ODsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZSB7CisgIGJhY2tncm91bmQ6ICNhYmY7Cit9CisuZGF0ZVBpY2tlckRheUlzRGlzYWJsZWQgeworICBjb2xvcjogI0FBQUFBQTsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmRhdGVQaWNrZXJEYXlJc0hpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogI2RkZTsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZUFuZEhpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogI2NjZjsKK30KKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB7CisgIGJhY2tncm91bmQ6ICNjMWMxYzE7CisgIHdpZHRoOiAxMDAlOworfQordGQuZGF0ZVBpY2tlck1vbnRoIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB2ZXJ0aWNhbC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICBmb250LXNpemU6IDcwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisuZGF0ZVBpY2tlclByZXZpb3VzQnV0dG9uLAorLmRhdGVQaWNrZXJOZXh0QnV0dG9uIHsKKyAgZm9udC1zaXplOiAxMjAlOworICBsaW5lLWhlaWdodDogMWVtOworICBjdXJzb3I6IGhhbmQ7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgcGFkZGluZzogMHB4IDRweDsKK30KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvY2hyb21lL3B1YmxpYy9nd3QvY2hyb21lL2Nocm9tZV9ydGwuY3NzIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9jaHJvbWUvcHVibGljL2d3dC9jaHJvbWUvY2hyb21lX3J0bC5jc3MKaW5kZXggM2U0NjQ2Ny4uNjkzYzQxZiAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9jaHJvbWUvcHVibGljL2d3dC9jaHJvbWUvY2hyb21lX3J0bC5jc3MKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9jaHJvbWUvcHVibGljL2d3dC9jaHJvbWUvY2hyb21lX3J0bC5jc3MKQEAgLTU4Miw3ICs1ODIsNiBAQAogfQogCiAuZ3d0LVJhZGlvQnV0dG9uIHsKLSAgcGFkZGluZzogNHB4IDNweCAzcHggNHB4OwogfQogLmd3dC1SYWRpb0J1dHRvbi1kaXNhYmxlZCB7CiAgIGNvbG9yOiAjODg4OwpAQCAtMTA3OSw3ICsxMDc4LDk5IEBACiAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgIGN1cnNvcjogaGFuZDsKICAgY3Vyc29yOiBwb2ludGVyOworICB6b29tOiAxOwogfQogLmd3dC1UcmVlIC5nd3QtVHJlZUl0ZW0tc2VsZWN0ZWQgewogICBiYWNrZ3JvdW5kOiAjOTNjMmYxIHVybChpbWFnZXMvaGJvcmRlci5wbmcpIHJlcGVhdC14IDBweCAtMTQ2M3B4OwogfQorLmd3dC1UcmVlSXRlbSAuZ3d0LVJhZGlvQnV0dG9uIGlucHV0LAorLmd3dC1UcmVlSXRlbSAuZ3d0LUNoZWNrQm94IGlucHV0IHsKKyAgbWFyZ2luLXJpZ2h0OiAwcHg7Cit9CisqIGh0bWwgLmd3dC1UcmVlSXRlbSAuZ3d0LVJhZGlvQnV0dG9uIGlucHV0LAorKiBodG1sIC5nd3QtVHJlZUl0ZW0gLmd3dC1DaGVja0JveCBpbnB1dCB7CisgIG1hcmdpbi1yaWdodDogLTRweDsKK30KKworLmd3dC1EYXRlQm94IGlucHV0IHsKKyAgd2lkdGg6IDhlbTsKK30KKy5kYXRlQm94Rm9ybWF0RXJyb3IgeworICBiYWNrZ3JvdW5kOiAjZWVkNmQ2OworfQorLmRhdGVCb3hQb3B1cCB7Cit9CisKKy5nd3QtRGF0ZVBpY2tlciB7CisgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5nd3QtRGF0ZVBpY2tlciB0ZCwKKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB0ZDpmb2N1cyB7CisgIG91dGxpbmU6IG5vbmUKK30KKy5kYXRlUGlja2VyRGF5cyB7CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKy5kYXRlUGlja2VyRGF5LAorLmRhdGVQaWNrZXJXZWVrZGF5TGFiZWwsCisuZGF0ZVBpY2tlcldlZWtlbmRMYWJlbCB7CisgIGZvbnQtc2l6ZTogNzUlOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHBhZGRpbmc6IDRweDsKKyAgb3V0bGluZTogbm9uZTsKK30KKy5kYXRlUGlja2VyV2Vla2RheUxhYmVsLAorLmRhdGVQaWNrZXJXZWVrZW5kTGFiZWwgeworICBiYWNrZ3JvdW5kOiAjYzFjMWMxOworICBwYWRkaW5nOiAwcHggNHB4IDJweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQorLmRhdGVQaWNrZXJEYXkgeworICBwYWRkaW5nOiA0cHg7CisgIGN1cnNvcjogaGFuZDsKKyAgY3Vyc29yOiBwb2ludGVyOworfQorLmRhdGVQaWNrZXJEYXlJc1RvZGF5IHsKKyAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDNweDsKK30KKy5kYXRlUGlja2VyRGF5SXNXZWVrZW5kIHsKKyAgYmFja2dyb3VuZDogI0VFRUVFRTsKK30KKy5kYXRlUGlja2VyRGF5SXNGaWxsZXIgeworICBjb2xvcjogIzg4ODg4ODsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZSB7CisgIGJhY2tncm91bmQ6ICNhYmY7Cit9CisuZGF0ZVBpY2tlckRheUlzRGlzYWJsZWQgeworICBjb2xvcjogI0FBQUFBQTsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmRhdGVQaWNrZXJEYXlJc0hpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogI2RkZTsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZUFuZEhpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogI2NjZjsKK30KKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB7CisgIGJhY2tncm91bmQ6ICNjMWMxYzE7CisgIHdpZHRoOiAxMDAlOworfQordGQuZGF0ZVBpY2tlck1vbnRoIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB2ZXJ0aWNhbC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICBmb250LXNpemU6IDcwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisuZGF0ZVBpY2tlclByZXZpb3VzQnV0dG9uLAorLmRhdGVQaWNrZXJOZXh0QnV0dG9uIHsKKyAgZm9udC1zaXplOiAxMjAlOworICBsaW5lLWhlaWdodDogMWVtOworICBjdXJzb3I6IGhhbmQ7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgcGFkZGluZzogMHB4IDRweDsKK30KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvZGFyay9wdWJsaWMvZ3d0L2RhcmsvZGFyay5jc3MgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL2RhcmsvcHVibGljL2d3dC9kYXJrL2RhcmsuY3NzCmluZGV4IDhlMzhiNjEuLjFlMzQxYzIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvZGFyay9wdWJsaWMvZ3d0L2RhcmsvZGFyay5jc3MKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9kYXJrL3B1YmxpYy9nd3QvZGFyay9kYXJrLmNzcwpAQCAtMTcsNyArMTcsNyBAQAogYm9keSwgdGFibGUgdGQsIHNlbGVjdCB7CiAgIGZvbnQtZmFtaWx5OiBBcmlhbCBVbmljb2RlIE1TLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgZm9udC1zaXplOiBzbWFsbDsKLSAgY29sb3I6ICNiZWM3Y2M7CisgIGNvbG9yOiAjYmVjN2NjCiB9CiBzZWxlY3QgewogICBjb2xvcjogIzAwMDsKQEAgLTU1MSw3ICs1NTEsNiBAQAogfQogCiAuZ3d0LVJhZGlvQnV0dG9uIHsKLSAgcGFkZGluZzogNHB4IDRweCAzcHggM3B4OwogfQogLmd3dC1SYWRpb0J1dHRvbi1kaXNhYmxlZCB7CiAgIGNvbG9yOiAjODg4OwpAQCAtOTg4LDMgKzk4NywxMDEgQEAKICAgY29sb3I6ICMwY2Y7CiAgIGJhY2tncm91bmQ6ICMxYzFjMWM7CiB9CisuZ3d0LVRyZWVJdGVtIC5nd3QtUmFkaW9CdXR0b24gaW5wdXQsCisuZ3d0LVRyZWVJdGVtIC5nd3QtQ2hlY2tCb3ggaW5wdXQgeworICBtYXJnaW4tbGVmdDogMHB4OworfQorKiBodG1sIC5nd3QtVHJlZUl0ZW0gLmd3dC1SYWRpb0J1dHRvbiBpbnB1dCwKKyogaHRtbCAuZ3d0LVRyZWVJdGVtIC5nd3QtQ2hlY2tCb3ggaW5wdXQgeworICBtYXJnaW4tbGVmdDogLTRweDsKK30KKworLmd3dC1EYXRlQm94IGlucHV0IHsKKyAgd2lkdGg6IDhlbTsKK30KKy5kYXRlQm94Rm9ybWF0RXJyb3IgeworICBiYWNrZ3JvdW5kOiAjYThlZWZmOworICBjb2xvcjogcmVkOworfQorLmRhdGVCb3hQb3B1cCB7Cit9CisKKy5nd3QtRGF0ZVBpY2tlciB7CisgIGJvcmRlcjogMXB4IHNvbGlkICMwMENDRkY7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5nd3QtRGF0ZVBpY2tlciB0ZCwKKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB0ZDpmb2N1cyB7CisgIG91dGxpbmU6IG5vbmUKK30KKy5kYXRlUGlja2VyRGF5cyB7CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kOiAjNGQ0ZDRkOworfQorLmRhdGVQaWNrZXJEYXksCisuZGF0ZVBpY2tlcldlZWtkYXlMYWJlbCwKKy5kYXRlUGlja2VyV2Vla2VuZExhYmVsIHsKKyAgZm9udC1zaXplOiA3NSU7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgcGFkZGluZzogNHB4OworICBvdXRsaW5lOiBub25lOworICBjb2xvcjogI2RkZGRkZDsKK30KKy5kYXRlUGlja2VyV2Vla2RheUxhYmVsLAorLmRhdGVQaWNrZXJXZWVrZW5kTGFiZWwgeworICBiYWNrZ3JvdW5kOiAjMjIyMjIyOworICBwYWRkaW5nOiAwcHggNHB4IDJweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQorLmRhdGVQaWNrZXJEYXkgeworICBwYWRkaW5nOiA0cHg7CisgIGN1cnNvcjogaGFuZDsKKyAgY3Vyc29yOiBwb2ludGVyOworfQorLmRhdGVQaWNrZXJEYXlJc1RvZGF5IHsKKyAgYm9yZGVyOiAxcHggc29saWQgIzAwQ0NGRjsKKyAgcGFkZGluZzogM3B4OworfQorLmRhdGVQaWNrZXJEYXlJc1dlZWtlbmQgeworICBiYWNrZ3JvdW5kOiAjMzMzMzMzOworfQorLmRhdGVQaWNrZXJEYXlJc0ZpbGxlciB7CisgIGNvbG9yOiAjOTU5NTk1OworfQorLmRhdGVQaWNrZXJEYXlJc1ZhbHVlIHsKKyAgYmFja2dyb3VuZDogIzFDMUMxQzsKKyAgY29sb3I6ICMwMENDRkY7Cit9CisuZGF0ZVBpY2tlckRheUlzRGlzYWJsZWQgeworICBjb2xvcjogI0FBQUFBQTsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmRhdGVQaWNrZXJEYXlJc0hpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogIzAwQ0NGRjsKKyAgY29sb3I6ICMxQzFDMUM7Cit9CisuZGF0ZVBpY2tlckRheUlzVmFsdWVBbmRIaWdobGlnaHRlZCB7CisgIGJhY2tncm91bmQ6ICMxQzFDNzc7CisgIGNvbG9yOiAjMDBDQ0ZGOworfQorLmRhdGVQaWNrZXJNb250aFNlbGVjdG9yIHsKKyAgYmFja2dyb3VuZDogIzIyMjIyMjsKKyAgd2lkdGg6IDEwMCU7Cit9Cit0ZC5kYXRlUGlja2VyTW9udGggeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHZlcnRpY2FsLWFsaWduOiBjZW50ZXI7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIGZvbnQtc2l6ZTogNzAlOworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICNkZGRkZGQ7Cit9CisuZGF0ZVBpY2tlclByZXZpb3VzQnV0dG9uLAorLmRhdGVQaWNrZXJOZXh0QnV0dG9uIHsKKyAgZm9udC1zaXplOiAxMjAlOworICBsaW5lLWhlaWdodDogMWVtOworICBjdXJzb3I6IGhhbmQ7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgcGFkZGluZzogMHB4IDRweDsKKyAgY29sb3I6ICNkZGRkZGQ7Cit9CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL2RhcmsvcHVibGljL2d3dC9kYXJrL2RhcmtfcnRsLmNzcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvZGFyay9wdWJsaWMvZ3d0L2RhcmsvZGFya19ydGwuY3NzCmluZGV4IDRjMjc0MjIuLmY3M2NiZmYgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvZGFyay9wdWJsaWMvZ3d0L2RhcmsvZGFya19ydGwuY3NzCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvZGFyay9wdWJsaWMvZ3d0L2RhcmsvZGFya19ydGwuY3NzCkBAIC01NTEsNyArNTUxLDYgQEAKIH0KIAogLmd3dC1SYWRpb0J1dHRvbiB7Ci0gIHBhZGRpbmc6IDRweCAzcHggM3B4IDRweDsKIH0KIC5nd3QtUmFkaW9CdXR0b24tZGlzYWJsZWQgewogICBjb2xvcjogIzg4ODsKQEAgLTk4Myw4ICs5ODIsMTA3IEBACiAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgIGN1cnNvcjogaGFuZDsKICAgY3Vyc29yOiBwb2ludGVyOworICB6b29tOiAxOwogfQogLmd3dC1UcmVlIC5nd3QtVHJlZUl0ZW0tc2VsZWN0ZWQgewogICBjb2xvcjogIzBjZjsKICAgYmFja2dyb3VuZDogIzFjMWMxYzsKIH0KKy5nd3QtVHJlZUl0ZW0gLmd3dC1SYWRpb0J1dHRvbiBpbnB1dCwKKy5nd3QtVHJlZUl0ZW0gLmd3dC1DaGVja0JveCBpbnB1dCB7CisgIG1hcmdpbi1yaWdodDogMHB4OworfQorKiBodG1sIC5nd3QtVHJlZUl0ZW0gLmd3dC1SYWRpb0J1dHRvbiBpbnB1dCwKKyogaHRtbCAuZ3d0LVRyZWVJdGVtIC5nd3QtQ2hlY2tCb3ggaW5wdXQgeworICBtYXJnaW4tcmlnaHQ6IC00cHg7Cit9CisKKy5nd3QtRGF0ZUJveCBpbnB1dCB7CisgIHdpZHRoOiA4ZW07Cit9CisuZGF0ZUJveEZvcm1hdEVycm9yIHsKKyAgYmFja2dyb3VuZDogI2E4ZWVmZjsKKyAgY29sb3I6IHJlZDsKK30KKy5kYXRlQm94UG9wdXAgeworfQorCisuZ3d0LURhdGVQaWNrZXIgeworICBib3JkZXI6IDFweCBzb2xpZCAjMDBDQ0ZGOworICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisuZ3d0LURhdGVQaWNrZXIgdGQsCisuZGF0ZVBpY2tlck1vbnRoU2VsZWN0b3IgdGQ6Zm9jdXMgeworICBvdXRsaW5lOiBub25lCit9CisuZGF0ZVBpY2tlckRheXMgeworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZDogIzRkNGQ0ZDsKK30KKy5kYXRlUGlja2VyRGF5LAorLmRhdGVQaWNrZXJXZWVrZGF5TGFiZWwsCisuZGF0ZVBpY2tlcldlZWtlbmRMYWJlbCB7CisgIGZvbnQtc2l6ZTogNzUlOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHBhZGRpbmc6IDRweDsKKyAgb3V0bGluZTogbm9uZTsKKyAgY29sb3I6ICNkZGRkZGQ7Cit9CisuZGF0ZVBpY2tlcldlZWtkYXlMYWJlbCwKKy5kYXRlUGlja2VyV2Vla2VuZExhYmVsIHsKKyAgYmFja2dyb3VuZDogIzIyMjIyMjsKKyAgcGFkZGluZzogMHB4IDRweCAycHg7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5kYXRlUGlja2VyRGF5IHsKKyAgcGFkZGluZzogNHB4OworICBjdXJzb3I6IGhhbmQ7CisgIGN1cnNvcjogcG9pbnRlcjsKK30KKy5kYXRlUGlja2VyRGF5SXNUb2RheSB7CisgIGJvcmRlcjogMXB4IHNvbGlkICMwMENDRkY7CisgIHBhZGRpbmc6IDNweDsKK30KKy5kYXRlUGlja2VyRGF5SXNXZWVrZW5kIHsKKyAgYmFja2dyb3VuZDogIzMzMzMzMzsKK30KKy5kYXRlUGlja2VyRGF5SXNGaWxsZXIgeworICBjb2xvcjogIzk1OTU5NTsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZSB7CisgIGJhY2tncm91bmQ6ICMxQzFDMUM7CisgIGNvbG9yOiAjMDBDQ0ZGOworfQorLmRhdGVQaWNrZXJEYXlJc0Rpc2FibGVkIHsKKyAgY29sb3I6ICNBQUFBQUE7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5kYXRlUGlja2VyRGF5SXNIaWdobGlnaHRlZCB7CisgIGJhY2tncm91bmQ6ICMwMENDRkY7CisgIGNvbG9yOiAjMUMxQzFDOworfQorLmRhdGVQaWNrZXJEYXlJc1ZhbHVlQW5kSGlnaGxpZ2h0ZWQgeworICBiYWNrZ3JvdW5kOiAjMUMxQzc3OworICBjb2xvcjogIzAwQ0NGRjsKK30KKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB7CisgIGJhY2tncm91bmQ6ICMyMjIyMjI7CisgIHdpZHRoOiAxMDAlOworfQordGQuZGF0ZVBpY2tlck1vbnRoIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB2ZXJ0aWNhbC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICBmb250LXNpemU6IDcwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGNvbG9yOiAjZGRkZGRkOworfQorLmRhdGVQaWNrZXJQcmV2aW91c0J1dHRvbiwKKy5kYXRlUGlja2VyTmV4dEJ1dHRvbiB7CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgbGluZS1oZWlnaHQ6IDFlbTsKKyAgY3Vyc29yOiBoYW5kOworICBjdXJzb3I6IHBvaW50ZXI7CisgIHBhZGRpbmc6IDBweCA0cHg7CisgIGNvbG9yOiAjZGRkZGRkOworfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9zdGFuZGFyZC9wdWJsaWMvZ3d0L3N0YW5kYXJkL3N0YW5kYXJkLmNzcyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdGhlbWUvc3RhbmRhcmQvcHVibGljL2d3dC9zdGFuZGFyZC9zdGFuZGFyZC5jc3MKaW5kZXggYWVjYzlmOC4uN2I0YjhhZSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9zdGFuZGFyZC9wdWJsaWMvZ3d0L3N0YW5kYXJkL3N0YW5kYXJkLmNzcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL3N0YW5kYXJkL3B1YmxpYy9nd3Qvc3RhbmRhcmQvc3RhbmRhcmQuY3NzCkBAIC01ODIsNyArNTgyLDYgQEAKIH0KIAogLmd3dC1SYWRpb0J1dHRvbiB7Ci0gIHBhZGRpbmc6IDRweCA0cHggM3B4IDNweDsKIH0KIC5nd3QtUmFkaW9CdXR0b24tZGlzYWJsZWQgewogICBjb2xvcjogIzg4ODsKQEAgLTEwODIsMyArMTA4MSw5NyBAQAogLmd3dC1UcmVlIC5nd3QtVHJlZUl0ZW0tc2VsZWN0ZWQgewogICBiYWNrZ3JvdW5kOiAjOTNjMmYxIHVybChpbWFnZXMvaGJvcmRlci5wbmcpIHJlcGVhdC14IDBweCAtMTQ2M3B4OwogfQorLmd3dC1UcmVlSXRlbSAuZ3d0LVJhZGlvQnV0dG9uIGlucHV0LAorLmd3dC1UcmVlSXRlbSAuZ3d0LUNoZWNrQm94IGlucHV0IHsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKK30KKyogaHRtbCAuZ3d0LVRyZWVJdGVtIC5nd3QtUmFkaW9CdXR0b24gaW5wdXQsCisqIGh0bWwgLmd3dC1UcmVlSXRlbSAuZ3d0LUNoZWNrQm94IGlucHV0IHsKKyAgbWFyZ2luLWxlZnQ6IC00cHg7Cit9CisKKy5nd3QtRGF0ZUJveCBpbnB1dCB7CisgIHdpZHRoOiA4ZW07Cit9CisuZGF0ZUJveEZvcm1hdEVycm9yIHsKKyAgYmFja2dyb3VuZDogI2ZmY2NjYzsKK30KKy5kYXRlQm94UG9wdXAgeworfQorCisuZ3d0LURhdGVQaWNrZXIgeworICBib3JkZXI6IDFweCBzb2xpZCAjQTJCQkREOworICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisuZ3d0LURhdGVQaWNrZXIgdGQsCisuZGF0ZVBpY2tlck1vbnRoU2VsZWN0b3IgdGQ6Zm9jdXMgeworICBvdXRsaW5lOiBub25lCit9CisuZGF0ZVBpY2tlckRheXMgeworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisuZGF0ZVBpY2tlckRheSwKKy5kYXRlUGlja2VyV2Vla2RheUxhYmVsLAorLmRhdGVQaWNrZXJXZWVrZW5kTGFiZWwgeworICBmb250LXNpemU6IDc1JTsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBwYWRkaW5nOiA0cHg7CisgIG91dGxpbmU6IG5vbmU7Cit9CisuZGF0ZVBpY2tlcldlZWtkYXlMYWJlbCwKKy5kYXRlUGlja2VyV2Vla2VuZExhYmVsIHsKKyAgYmFja2dyb3VuZDogI0MzRDlGRjsKKyAgcGFkZGluZzogMHB4IDRweCAycHg7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5kYXRlUGlja2VyRGF5IHsKKyAgcGFkZGluZzogNHB4OworICBjdXJzb3I6IGhhbmQ7CisgIGN1cnNvcjogcG9pbnRlcjsKK30KKy5kYXRlUGlja2VyRGF5SXNUb2RheSB7CisgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICBwYWRkaW5nOiAzcHg7Cit9CisuZGF0ZVBpY2tlckRheUlzV2Vla2VuZCB7CisgIGJhY2tncm91bmQ6ICNFRUVFRUU7Cit9CisuZGF0ZVBpY2tlckRheUlzRmlsbGVyIHsKKyAgY29sb3I6ICM4ODg4ODg7Cit9CisuZGF0ZVBpY2tlckRheUlzVmFsdWUgeworICBiYWNrZ3JvdW5kOiAjYWFjY2VlOworfQorLmRhdGVQaWNrZXJEYXlJc0Rpc2FibGVkIHsKKyAgY29sb3I6ICNBQUFBQUE7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5kYXRlUGlja2VyRGF5SXNIaWdobGlnaHRlZCB7CisgIGJhY2tncm91bmQ6ICNGMEU2OEM7Cit9CisuZGF0ZVBpY2tlckRheUlzVmFsdWVBbmRIaWdobGlnaHRlZCB7CisgIGJhY2tncm91bmQ6ICNiYmRkZDk7Cit9CisuZGF0ZVBpY2tlck1vbnRoU2VsZWN0b3IgeworICBiYWNrZ3JvdW5kOiAjQzNEOUZGOworICB3aWR0aDogMTAwJTsKK30KK3RkLmRhdGVQaWNrZXJNb250aCB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgdmVydGljYWwtYWxpZ246IGNlbnRlcjsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgZm9udC1zaXplOiA3MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjb2xvcjogYmx1ZTsKK30KKy5kYXRlUGlja2VyUHJldmlvdXNCdXR0b24sCisuZGF0ZVBpY2tlck5leHRCdXR0b24geworICBmb250LXNpemU6IDEyMCU7CisgIGxpbmUtaGVpZ2h0OiAxZW07CisgIGNvbG9yOiBibHVlOworICBjdXJzb3I6IGhhbmQ7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgcGFkZGluZzogMHB4IDRweDsKK30KKwpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90aGVtZS9zdGFuZGFyZC9wdWJsaWMvZ3d0L3N0YW5kYXJkL3N0YW5kYXJkX3J0bC5jc3MgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL3N0YW5kYXJkL3B1YmxpYy9nd3Qvc3RhbmRhcmQvc3RhbmRhcmRfcnRsLmNzcwppbmRleCA2Y2VjYzE0Li5lM2U2NWFmIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL3N0YW5kYXJkL3B1YmxpYy9nd3Qvc3RhbmRhcmQvc3RhbmRhcmRfcnRsLmNzcworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3RoZW1lL3N0YW5kYXJkL3B1YmxpYy9nd3Qvc3RhbmRhcmQvc3RhbmRhcmRfcnRsLmNzcwpAQCAtNTgyLDcgKzU4Miw2IEBACiB9CiAKIC5nd3QtUmFkaW9CdXR0b24gewotICBwYWRkaW5nOiA0cHggM3B4IDNweCA0cHg7CiB9CiAuZ3d0LVJhZGlvQnV0dG9uLWRpc2FibGVkIHsKICAgY29sb3I6ICM4ODg7CkBAIC0xMDc4LDcgKzEwNzcsMTAxIEBACiAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgIGN1cnNvcjogaGFuZDsKICAgY3Vyc29yOiBwb2ludGVyOworICB6b29tOiAxOwogfQogLmd3dC1UcmVlIC5nd3QtVHJlZUl0ZW0tc2VsZWN0ZWQgewogICBiYWNrZ3JvdW5kOiAjOTNjMmYxIHVybChpbWFnZXMvaGJvcmRlci5wbmcpIHJlcGVhdC14IDBweCAtMTQ2M3B4OwogfQorLmd3dC1UcmVlSXRlbSAuZ3d0LVJhZGlvQnV0dG9uIGlucHV0LAorLmd3dC1UcmVlSXRlbSAuZ3d0LUNoZWNrQm94IGlucHV0IHsKKyAgbWFyZ2luLXJpZ2h0OiAwcHg7Cit9CisqIGh0bWwgLmd3dC1UcmVlSXRlbSAuZ3d0LVJhZGlvQnV0dG9uIGlucHV0LAorKiBodG1sIC5nd3QtVHJlZUl0ZW0gLmd3dC1DaGVja0JveCBpbnB1dCB7CisgIG1hcmdpbi1yaWdodDogLTRweDsKK30KKworLmd3dC1EYXRlQm94IGlucHV0IHsKKyAgd2lkdGg6IDhlbTsKK30KKy5kYXRlQm94Rm9ybWF0RXJyb3IgeworICBiYWNrZ3JvdW5kOiAjZmZjY2NjOworfQorLmRhdGVCb3hQb3B1cCB7Cit9CisKKy5nd3QtRGF0ZVBpY2tlciB7CisgIGJvcmRlcjogMXB4IHNvbGlkICNBMkJCREQ7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5nd3QtRGF0ZVBpY2tlciB0ZCwKKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB0ZDpmb2N1cyB7CisgIG91dGxpbmU6IG5vbmUKK30KKy5kYXRlUGlja2VyRGF5cyB7CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKy5kYXRlUGlja2VyRGF5LAorLmRhdGVQaWNrZXJXZWVrZGF5TGFiZWwsCisuZGF0ZVBpY2tlcldlZWtlbmRMYWJlbCB7CisgIGZvbnQtc2l6ZTogNzUlOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHBhZGRpbmc6IDRweDsKKyAgb3V0bGluZTogbm9uZTsKK30KKy5kYXRlUGlja2VyV2Vla2RheUxhYmVsLAorLmRhdGVQaWNrZXJXZWVrZW5kTGFiZWwgeworICBiYWNrZ3JvdW5kOiAjQzNEOUZGOworICBwYWRkaW5nOiAwcHggNHB4IDJweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQorLmRhdGVQaWNrZXJEYXkgeworICBwYWRkaW5nOiA0cHg7CisgIGN1cnNvcjogaGFuZDsKKyAgY3Vyc29yOiBwb2ludGVyOworfQorLmRhdGVQaWNrZXJEYXlJc1RvZGF5IHsKKyAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDNweDsKK30KKy5kYXRlUGlja2VyRGF5SXNXZWVrZW5kIHsKKyAgYmFja2dyb3VuZDogI0VFRUVFRTsKK30KKy5kYXRlUGlja2VyRGF5SXNGaWxsZXIgeworICBjb2xvcjogIzg4ODg4ODsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZSB7CisgIGJhY2tncm91bmQ6ICNhYWNjZWU7Cit9CisuZGF0ZVBpY2tlckRheUlzRGlzYWJsZWQgeworICBjb2xvcjogI0FBQUFBQTsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmRhdGVQaWNrZXJEYXlJc0hpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogI0YwRTY4QzsKK30KKy5kYXRlUGlja2VyRGF5SXNWYWx1ZUFuZEhpZ2hsaWdodGVkIHsKKyAgYmFja2dyb3VuZDogI2JiZGRkOTsKK30KKy5kYXRlUGlja2VyTW9udGhTZWxlY3RvciB7CisgIGJhY2tncm91bmQ6ICNDM0Q5RkY7CisgIHdpZHRoOiAxMDAlOworfQordGQuZGF0ZVBpY2tlck1vbnRoIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB2ZXJ0aWNhbC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICBmb250LXNpemU6IDcwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGNvbG9yOiBibHVlOworfQorLmRhdGVQaWNrZXJQcmV2aW91c0J1dHRvbiwKKy5kYXRlUGlja2VyTmV4dEJ1dHRvbiB7CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgbGluZS1oZWlnaHQ6IDFlbTsKKyAgY29sb3I6IGJsdWU7CisgIGN1cnNvcjogaGFuZDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBwYWRkaW5nOiAwcHggNHB4OworfQpkaWZmIC0tZ2l0IGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy9BcHBIdG1sLmh0bWxzcmMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL0FwcEh0bWwuaHRtbHNyYwppbmRleCA5ZjljNzJmLi4yMDkwZmU3IDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL0FwcEh0bWwuaHRtbHNyYworKysgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL0FwcEh0bWwuaHRtbHNyYwpAQCAtMjMsNyArMjMsNyBAQAogICAgIDwhLS0gSWYgeW91IGFkZCBhbnkgR1dUIG1ldGEgdGFncywgdGhleSBtdXN0ICAgLS0+CiAgICAgPCEtLSBiZSBhZGRlZCBiZWZvcmUgdGhpcyBsaW5lLiAgICAgICAgICAgICAgICAtLT4KICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSJAZGVwbG95RGlyL0BuZXdNb2R1bGVOYW1lLm5vY2FjaGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSJAbmV3TW9kdWxlTmFtZS9AbmV3TW9kdWxlTmFtZS5ub2NhY2hlLmpzIj48L3NjcmlwdD4KICAgPC9oZWFkPgogCiAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL0FwcGxpY2F0aW9uQ3JlYXRvci5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy9BcHBsaWNhdGlvbkNyZWF0b3IuamF2YQppbmRleCA5MTI2Y2Q1Li44ZWE4MGJiIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL0FwcGxpY2F0aW9uQ3JlYXRvci5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvQXBwbGljYXRpb25DcmVhdG9yLmphdmEKQEAgLTIxLDcgKzIxLDYgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLnRvb2xzLnV0aWwuQXJnSGFuZGxlcklnbm9yZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLnRvb2xzLnV0aWwuQXJnSGFuZGxlck92ZXJ3cml0ZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLnRvb2xzLnV0aWwuQ3JlYXRvclV0aWxpdGllczsKLWltcG9ydCBjb20uZ29vZ2xlLmd3dC51dGlsLnRvb2xzLkFyZ0hhbmRsZXJEaXI7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyRXh0cmE7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXRpbC50b29scy5BcmdIYW5kbGVyT3V0RGlyOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnV0aWwudG9vbHMuQXJnSGFuZGxlclN0cmluZzsKQEAgLTIwOCw3ICsyMDcsNyBAQAogICAgICAgTGlzdDxTdHJpbmc+IGV4dHJhQ2xhc3NQYXRocywgTGlzdDxTdHJpbmc+IGV4dHJhTW9kdWxlcykKICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgY3JlYXRlQXBwbGljYXRpb24oZnVsbENsYXNzTmFtZSwgb3V0RGlyLCBlY2xpcHNlLCBvdmVyd3JpdGUsIGlnbm9yZSwKLSAgICAgICAgZXh0cmFDbGFzc1BhdGhzLCBleHRyYU1vZHVsZXMsIG51bGwsIG51bGwpOworICAgICAgICBleHRyYUNsYXNzUGF0aHMsIGV4dHJhTW9kdWxlcywgbnVsbCk7CiAgIH0KIAogICAvKioKQEAgLTIyMiwxMyArMjIxLDEyIEBACiAgICAqICAgICAgICAgIGxhdW5jaCBjb25maWdzLgogICAgKiBAcGFyYW0gZXh0cmFNb2R1bGVzIEEgbGlzdCBvZiBHV1QgbW9kdWxlcyB0byBhZGQgJ2luaGVyaXRzJyB0YWdzIGZvci4KICAgICogQHBhcmFtIG5ld01vZHVsZU5hbWUgVGhlIG5ldyBtb2R1bGUgbmFtZQotICAgKiBAcGFyYW0gZGVwbG95RGlyIFRoZSBkZXBsb3kgZGlyZWN0b3J5CiAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KICAgICovCiAgIHN0YXRpYyB2b2lkIGNyZWF0ZUFwcGxpY2F0aW9uKFN0cmluZyBmdWxsQ2xhc3NOYW1lLCBGaWxlIG91dERpciwKICAgICAgIFN0cmluZyBlY2xpcHNlLCBib29sZWFuIG92ZXJ3cml0ZSwgYm9vbGVhbiBpZ25vcmUsCiAgICAgICBMaXN0PFN0cmluZz4gZXh0cmFDbGFzc1BhdGhzLCBMaXN0PFN0cmluZz4gZXh0cmFNb2R1bGVzLAotICAgICAgU3RyaW5nIG5ld01vZHVsZU5hbWUsIEZpbGUgZGVwbG95RGlyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgU3RyaW5nIG5ld01vZHVsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKICAgICAvLyBGaWd1cmUgb3V0IHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CiAKQEAgLTI5MSw3ICsyODksNiBAQAogICAgICAgc2VydmVyUGFja2FnZU5hbWUgPSAic2VydmVyIjsKICAgICB9CiAgICAgRmlsZSBjbGllbnREaXIgPSBVdGlsaXR5LmdldERpcmVjdG9yeShiYXNlUGFja2FnZURpciwgImNsaWVudCIsIHRydWUpOwotICAgIEZpbGUgcHVibGljRGlyID0gVXRpbGl0eS5nZXREaXJlY3RvcnkoYmFzZVBhY2thZ2VEaXIsICJwdWJsaWMiLCB0cnVlKTsKICAgICBGaWxlIHNlcnZlckRpciA9IFV0aWxpdHkuZ2V0RGlyZWN0b3J5KGJhc2VQYWNrYWdlRGlyLCAic2VydmVyIiwgdHJ1ZSk7CiAgICAgU3RyaW5nIHN0YXJ0dXBVcmwgPSBjbGFzc05hbWUgKyAiLmh0bWwiOwogCkBAIC0zMDcsOCArMzA0LDkgQEAKICAgICByZXBsYWNlbWVudHMucHV0KCJAc2hlbGxDbGFzcyIsICJjb20uZ29vZ2xlLmd3dC5kZXYuR1dUSG9zdGVkIik7CiAgICAgcmVwbGFjZW1lbnRzLnB1dCgiQGNvbXBpbGVDbGFzcyIsICJjb20uZ29vZ2xlLmd3dC5kZXYuR1dUQ29tcGlsZXIiKTsKICAgICByZXBsYWNlbWVudHMucHV0KCJAc3RhcnR1cFVybCIsIHN0YXJ0dXBVcmwpOwotICAgIHJlcGxhY2VtZW50cy5wdXQoIkB2bWFyZ3MiLCBpc01hY09zWAorICAgIHJlcGxhY2VtZW50cy5wdXQoIkBhbnRWbWFyZ3MiLCBpc01hY09zWAogICAgICAgICA/ICI8anZtYXJnIHZhbHVlPVwiLVhzdGFydE9uRmlyc3RUaHJlYWRcIi8+IiA6ICIiKTsKKyAgICByZXBsYWNlbWVudHMucHV0KCJAdm1hcmdzIiwgaXNNYWNPc1ggPyAiLVhzdGFydE9uRmlyc3RUaHJlYWQiIDogIiIpOwogICAgIHJlcGxhY2VtZW50cy5wdXQoIkBlY2xpcHNlRXh0cmFMYXVuY2hQYXRocyIsCiAgICAgICAgIENyZWF0b3JVdGlsaXRpZXMuY3JlYXRlRWNsaXBzZUV4dHJhTGF1bmNoUGF0aHMoZXh0cmFDbGFzc1BhdGhzKSk7CiAgICAgcmVwbGFjZW1lbnRzLnB1dCgiQGV4dHJhTW9kdWxlSW5oZXJpdHMiLApAQCAtMzE5LDcgKzMxNyw2IEBACiAgICAgICAgICI7IiwgZXh0cmFDbGFzc1BhdGhzKSk7CiAgICAgcmVwbGFjZW1lbnRzLnB1dCgiQG5ld01vZHVsZU5hbWUiLCAobmV3TW9kdWxlTmFtZSAhPSBudWxsKSA/IG5ld01vZHVsZU5hbWUKICAgICAgICAgOiBtb2R1bGVOYW1lKTsKLSAgICByZXBsYWNlbWVudHMucHV0KCJAZGVwbG95RGlyIiwgZGVwbG95RGlyLmdldE5hbWUoKSk7CiAKICAgICB7CiAgICAgICAvLyBjcmVhdGUgdGhlIG1vZHVsZSB4bWwgZmlsZSwgc2tlbGV0b24gaHRtbCBmaWxlLCBza2VsZXRvbiBjc3MgZmlsZSwKQEAgLTQyNCwyMSArNDIxLDYgQEAKICAgICB9CiAgIH0KIAotICAvKioKLSAgICogVHJ5IHRvIG1ha2UgdGhlIGdpdmVuIGZpbGUgZXhlY3V0YWJsZS4gSW1wbGVtZW50YXRpb24gdHJpZXMgdG8gZXhlYyBjaG1vZCwKLSAgICogd2hpY2ggbWF5IGZhaWwgaWYgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4gUHJpbnRzIGEgd2FybmluZyB0bwotICAgKiBzdGRlcnIgaWYgdGhlIGNhbGwgZmFpbHMuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZSB0aGUgZmlsZSB0byBtYWtlIGV4ZWN1dGFibGUKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgY2htb2RFeGVjdXRhYmxlKEZpbGUgZmlsZSkgewotICAgIHRyeSB7Ci0gICAgICBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJjaG1vZCB1K3ggIiArIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7Ci0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4oKCJXYXJuaW5nOiBjYW5ub3QgZXhlYyBjaG1vZCB0byBzZXQgcGVybWlzc2lvbiBvbiBnZW5lcmF0ZWQgZmlsZS4iKSk7Ci0gICAgfQotICB9Ci0KICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUV4dHJhTW9kdWxlSW5oZXJpdHMoTGlzdDxTdHJpbmc+IG1vZHVsZXMpIHsKICAgICBpZiAobW9kdWxlcyA9PSBudWxsKSB7CiAgICAgICByZXR1cm4gIiI7CkBAIC00NjEsNyArNDQzLDYgQEAKICAgcHJpdmF0ZSBGaWxlIG91dERpcjsKICAgcHJpdmF0ZSBib29sZWFuIG92ZXJ3cml0ZSA9IGZhbHNlOwogICBwcml2YXRlIFN0cmluZyBuZXdNb2R1bGVOYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBGaWxlIGRlcGxveURpcjsKIAogICBwcm90ZWN0ZWQgQXBwbGljYXRpb25DcmVhdG9yKCkgewogCkBAIC01MzYsMzUgKzUxNyw2IEBACiAgICAgICAgIG5ld01vZHVsZU5hbWUgPSBzdHI7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQotCi0gICAgfSk7Ci0KLSAgICAvLyBoYW5kbGVyIHRvIGNyZWF0ZSB0aGUgZGVwbG95RGlyCi0gICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyRGlyKCkgewotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ii1kZXBsb3lEaXIiLCAiZGVwbG95RGlyIn07Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgewotICAgICAgICByZXR1cm4gIlNwZWNpZmllcyB0aGUgZGVwbG95IGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gZGVwbG95RGlyKSI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmluZyBnZXRUYWcoKSB7Ci0gICAgICAgIHJldHVybiAiLWRlcGxveURpciI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0RGlyKEZpbGUgZGlyKSB7Ci0gICAgICAgIGlmIChkaXIuZ2V0TmFtZSgpLmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkZXBsb3lEaXIgbWF5IG5vdCBiZSBlbXB0eSIpOwotICAgICAgICB9Ci0gICAgICAgIGRlcGxveURpciA9IGRpcjsKLSAgICAgIH0KLQogICAgIH0pOwogCiAgICAgcmVnaXN0ZXJIYW5kbGVyKG5ldyBBcmdIYW5kbGVyQXBwQ2xhc3MoKSk7CkBAIC01NzYsNyArNTI4LDcgQEAKICAgICB0cnkgewogICAgICAgY3JlYXRlQXBwbGljYXRpb24oZnVsbENsYXNzTmFtZSwgb3V0RGlyLCBlY2xpcHNlLCBvdmVyd3JpdGUsIGlnbm9yZSwKICAgICAgICAgICBjbGFzc1BhdGhIYW5kbGVyLmdldEV4dHJhQ2xhc3NQYXRoTGlzdCgpLAotICAgICAgICAgIG1vZHVsZUhhbmRsZXIuZ2V0RXh0cmFNb2R1bGVMaXN0KCksIG5ld01vZHVsZU5hbWUsIGRlcGxveURpcik7CisgICAgICAgICAgbW9kdWxlSGFuZGxlci5nZXRFeHRyYU1vZHVsZUxpc3QoKSwgbmV3TW9kdWxlTmFtZSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL01vZHVsZS5nd3QueG1sc3JjIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy9Nb2R1bGUuZ3d0LnhtbHNyYwppbmRleCA3OTUzNmI0Li41MWM2NjBhIDEwMDY0NAotLS0gYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL01vZHVsZS5nd3QueG1sc3JjCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvTW9kdWxlLmd3dC54bWxzcmMKQEAgLTEsNCArMSw0IEBACi08bW9kdWxlIHJlbmFtZS10bz0nQG5ld01vZHVsZU5hbWUnIGRlcGxveS10bz0nL0BkZXBsb3lEaXInPgorPG1vZHVsZSByZW5hbWUtdG89J0BuZXdNb2R1bGVOYW1lJz4KIAogICAgICAgPCEtLSBJbmhlcml0IHRoZSBjb3JlIFdlYiBUb29sa2l0IHN0dWZmLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogICAgICAgPGluaGVyaXRzIG5hbWU9J2NvbS5nb29nbGUuZ3d0LnVzZXIuVXNlcicvPgpAQCAtMTUsNSArMTUsNCBAQAogCiAgICAgICA8IS0tIFNwZWNpZnkgdGhlIGFwcCBlbnRyeSBwb2ludCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgLS0+CiAgICAgICA8ZW50cnktcG9pbnQgY2xhc3M9J0BjbGllbnRQYWNrYWdlLkBjbGFzc05hbWUnLz4KLQogPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9kZXYvY29yZS9zcmMvY29tL2dvb2dsZS9nd3QvZGV2L1Byb2plY3RDcmVhdG9yLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL1Byb2plY3RDcmVhdG9yLmphdmEKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Qcm9qZWN0Q3JlYXRvci5qYXZhCnJlbmFtZSB0byB1c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL1Byb2plY3RDcmVhdG9yLmphdmEKaW5kZXggZTQ2ZGVlZC4uMmI1ZjkyZSAxMDA2NDQKLS0tIGEvZGV2L2NvcmUvc3JjL2NvbS9nb29nbGUvZ3d0L2Rldi9Qcm9qZWN0Q3JlYXRvci5qYXZhCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvUHJvamVjdENyZWF0b3IuamF2YQpAQCAtMTMsMTggKzEzLDE3IEBACiAgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgogICogdGhlIExpY2Vuc2UuCiAgKi8KLXBhY2thZ2UgY29tLmdvb2dsZS5nd3QuZGV2OworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLnRvb2xzOwogCiAvKioKLSAqIFRoZSBleGVjdXRhYmxlIGNsYXNzIGZvciBQcm9qZWN0Q3JlYXRvciBoYXMgYmVlbiBtb3ZlZCB0bwotICogPGNvZGU+Y29tLmdvb2dsZS5nd3QuanVuaXQudG9vbHMuUHJvamVjdENyZWF0b3I8L2NvZGU+LiBUaGlzIGV4ZWN1dGFibGUKLSAqIGNsYXNzIGlzc3VlcyBhIHJlbWluZGVyIHRvIHVzZXJzIG9mIHRoZSBuZXcgbG9jYXRpb24uCisgKiBMZWdhY3kgUHJvamVjdENyZWF0b3IgdGhhdCB3aWxsIGxldCB1c2VycyBrbm93IHRoYXQgdGhleSBzaG91bGQgcnVuCisgKiBBcHBsaWNhdGlvbkNyZWF0b3IgaW5zdGVhZC4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFByb2plY3RDcmVhdG9yIHsKIAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgU3lzdGVtLmVyci5wcmludGxuKCJUaGlzIGFwcGxpY2F0aW9uIGhhcyBtb3ZlZCEiKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBsZWFzZSBydW4gY29tLmdvb2dsZS5nd3QudXNlci50b29scy5Qcm9qZWN0Q3JlYXRvciBpbiBnd3QtdXNlci5qYXIiKTsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlRoaXMgYXBwbGljYXRpb24gbm8gbG9uZ2VyIGV4aXN0cyEiKTsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkl0IGhhcyBiZWVuIG1lcmdlZCB3aXRoIGNvbS5nb29nbGUuZ3d0LnVzZXIudG9vbHMuQXBwbGljYXRpb25DcmVhdG9yIGluIGd3dC11c2VyLmphciIpOwogICAgIFN5c3RlbS5leGl0KDEpOwogICB9CiAKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvcHJvamVjdC5hbnQueG1sc3JjIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy9wcm9qZWN0LmFudC54bWxzcmMKaW5kZXggZGU3NWRjOS4uYTlkOGUzYSAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy9wcm9qZWN0LmFudC54bWxzcmMKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy9wcm9qZWN0LmFudC54bWxzcmMKQEAgLTUsNyArNSw2IEBACiAgICAgaWYgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBpdC4gIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBub3JtYWwgb3BlcmF0aW9uLgogICA8L2Rlc2NyaXB0aW9uPgogICA8cHJvcGVydHkgbmFtZT0ib3V0ZGlyIiBsb2NhdGlvbj0id2FyIiAvPgotICA8cHJvcGVydHkgbmFtZT0iZXh0cmFkaXIiIGxvY2F0aW9uPSJleHRyYSIgLz4KIAogICA8IS0tIHNldCBjbGFzc3BhdGggLS0+CiAgIDxwYXRoIGlkPSJwcm9qZWN0LmNsYXNzLnBhdGgiPgpAQCAtMjAsOSArMTksOSBAQAogICAgMi4gRm9yIGEgMS40IHNlcnZlciwgc3BsaXQgdGhpcyBzbyB0aGF0IHRoZSBzZXJ2ZXIgc2lkZSBjb2RlIGlzIGNvbXBpbGVkCiAgICB3aXRoIGEgdGFyZ2V0PTEuNCBidWlsZCBydWxlIC0tPgogICA8dGFyZ2V0IG5hbWU9ImphdmFjIiBkZXNjcmlwdGlvbj0iQ29tcGlsZSBwcm9qZWN0IHRvIFdFQi1JTkYvY2xhc3NlcyI+Ci0gICAgPG1rZGlyIGRpcj0iJHtvdXRkaXJ9L1dFQi1JTkYvY2xhc3NlcyIvPgorICAgIDxta2RpciBkaXI9Indhci9XRUItSU5GL2NsYXNzZXMiLz4KICAgICA8amF2YWMgc3JjZGlyPSJzcmM6dGVzdCIKLSAgICAgIGRlc3RkaXI9IiR7b3V0ZGlyfS9XRUItSU5GL2NsYXNzZXMiCisgICAgICBkZXN0ZGlyPSJ3YXIvV0VCLUlORi9jbGFzc2VzIgogICAgICAgaW5jbHVkZXM9IioqIgogICAgICAgZGVidWc9InRydWUiCiAgICAgICBkZWJ1Z2xldmVsPSJsaW5lcyx2YXJzLHNvdXJjZSIKQEAgLTM1LDggKzM0LDggQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9Imd3dGMiIGRlc2NyaXB0aW9uPSJDb3B5IG91dHB1dCB0byB0aGUgd2FyIGZvbGRlciI+Ci0gICAgPG1rZGlyIGRpcj0iJHtvdXRkaXJ9L1dFQi1JTkYvbGliIiAvPgotICAgIDxjb3B5IHRvZGlyPSIke291dGRpcn0vV0VCLUlORi9saWIiIGZpbGU9IkBnd3RTZXJ2bGV0UGF0aCIgLz4KKyAgICA8bWtkaXIgZGlyPSJ3YXIvV0VCLUlORi9saWIiIC8+CisgICAgPGNvcHkgdG9kaXI9Indhci9XRUItSU5GL2xpYiIgZmlsZT0iQGd3dFNlcnZsZXRQYXRoIiAvPgogICA8L3RhcmdldD4KIAogICA8IS0tIGNhbiBhZGQgYWRkaXRpb25hbCBhcmd1bWVudHMgbGlrZSAtbG9nTGV2ZWwgSU5GTyBvciAtc3R5bGUgUFJFVFRZIC0tPgpAQCAtNDUsMTYgKzQ0LDEzIEBACiAgICAgICAgICAgY2xhc3NuYW1lPSJAY29tcGlsZUNsYXNzIj4KICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0ic3JjIi8+CisgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0id2FyL1dFQi1JTkYvY2xhc3NlcyIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwcm9qZWN0LmNsYXNzLnBhdGh9LyIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IkBnd3REZXZQYXRoIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtvdXRkaXJ9L1dFQi1JTkYvY2xhc3NlcyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iQGd3dFVzZXJQYXRoIi8+CiAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgIEB2bWFyZ3MKLSAgICAgIDxhcmcgdmFsdWU9Ii1vdXQiLz4KLSAgICAgIDxhcmcgZmlsZT0iJHtvdXRkaXJ9Ii8+Ci0gICAgICA8YXJnIHZhbHVlPSItZXh0cmEiLz4KLSAgICAgIDxhcmcgZmlsZT0iJHtleHRyYWRpcn0iLz4KKyAgICAgPCEtLSBhZGQganZtYXJnIC1Yc3MxNk0gb3Igc2ltaWxhciBpZiB5b3Ugc2VlIGEgU3RhY2tPdmVyZmxvd0Vycm9yIC0tPgorICAgICAgPGp2bWFyZyB2YWx1ZT0iLVhteDI1Nk0iLz4KKyAgICAgIEBhbnRWbWFyZ3MKICAgICAgIDxhcmcgdmFsdWU9IkBtb2R1bGVOYW1lIi8+CiAgICAgPC9qYXZhPgogICA8L3RhcmdldD4KQEAgLTYzLDE2ICs1OSwxNCBAQAogICA8dGFyZ2V0IG5hbWU9InNoZWxsIiBkZXBlbmRzPSJqYXZhYyIgZGVzY3JpcHRpb249IlJ1biB0aGUgZGVwbG95ZWQgYXBwIGluIEdXVCBob3N0ZWQgbW9kZSI+CiAgICAgPGphdmEgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiCiAgICAgICAgICAgY2xhc3NuYW1lPSJAc2hlbGxDbGFzcyI+Ci0gICAgICA8anZtYXJnIHZhbHVlPSItWG14MjU2TSIvPgogICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJzcmMiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJAZ3d0RGV2UGF0aCIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iQGd3dFVzZXJQYXRoIi8+CiAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgIEB2bWFyZ3MKLSAgICAgIDxhcmcgdmFsdWU9Ii1vdXQiLz4KLSAgICAgIDxhcmcgZmlsZT0iJHtvdXRkaXJ9Ii8+CisgICAgICA8anZtYXJnIHZhbHVlPSItWG14MjU2TSIvPgorICAgICAgQGFudFZtYXJncwogICAgICAgPGFyZyB2YWx1ZT0iLXN0YXJ0dXBVcmwiLz4KICAgICAgIDxhcmcgdmFsdWU9IkBzdGFydHVwVXJsIi8+CiAgICAgICA8YXJnIHZhbHVlPSJAbW9kdWxlTmFtZSIvPgpAQCAtODQsOSArNzgsOCBAQAogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW5zIHRoaXMgcHJvamVjdCdzIGludGVybWVkaWF0ZSBhbmQKICAgICBvdXRwdXQgZmlsZXMiPgogICAgIDwhLS0gdW5jb21tZW50IGlmIHRoZSBXRUItSU5GL2NsYXNzZXMgZGlyIG9ubHkgY29udGFpbnMgR1dUIG91dHB1dCAtLT4gCi0gICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHtvdXRkaXJ9L1dFQi1JTkYvY2xhc3NlcyIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPiAtLT4KLSAgICA8ZGVsZXRlIGRpcj0iJHtvdXRkaXJ9L0BkZXBsb3lEaXIiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHtleHRyYWRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KKyAgICA8IS0tIDxkZWxldGUgZGlyPSJ3YXIvV0VCLUlORi9jbGFzc2VzIiBmYWlsb25lcnJvcj0iZmFsc2UiIC8+IC0tPgorICAgIDxkZWxldGUgZGlyPSJ3YXIvQG5ld01vZHVsZU5hbWUiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvdXRpbC9BcmdIYW5kbGVyRWNsaXBzZS5qYXZhIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy91dGlsL0FyZ0hhbmRsZXJFY2xpcHNlLmphdmEKaW5kZXggNzM0NmViOS4uNWFiMWE2NCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy91dGlsL0FyZ0hhbmRsZXJFY2xpcHNlLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy91dGlsL0FyZ0hhbmRsZXJFY2xpcHNlLmphdmEKQEAgLTIxLDEyICsyMSw2IEBACiAgKiBDcmVhdGVzIGFuIGFyZyBoYW5kbGVyIGZvciBlY2xpcHNlIGxhdW5jaCBjb25maWcgb3B0aW9ucy4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFyZ0hhbmRsZXJFY2xpcHNlIGV4dGVuZHMgQXJnSGFuZGxlclN0cmluZyB7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0QXJncygpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCiAgIEBPdmVycmlkZQogICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKICAgICByZXR1cm4gIi1lY2xpcHNlIjsKQEAgLTM2LDUgKzMwLDQgQEAKICAgcHVibGljIFN0cmluZ1tdIGdldFRhZ0FyZ3MoKSB7CiAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7InByb2plY3ROYW1lIn07CiAgIH0KLQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvdXRpbC9DcmVhdG9yVXRpbGl0aWVzLmphdmEgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL3V0aWwvQ3JlYXRvclV0aWxpdGllcy5qYXZhCmluZGV4IGYzMGI1ODcuLmUyMTc3NWIgMTAwNjQ0Ci0tLSBhL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvdXRpbC9DcmVhdG9yVXRpbGl0aWVzLmphdmEKKysrIGIvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy91dGlsL0NyZWF0b3JVdGlsaXRpZXMuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKLSAqIFV0aWxpdHkgbWV0aG9kcyBzaGFyZWQgYnkgQXBwbGljYXRpb25DcmVhdG9yIGFuZCBQcm9qZWN0Q3JlYXRvci4KKyAqIFV0aWxpdHkgbWV0aG9kcyB1c2VkIGJ5IEFwcGxpY2F0aW9uQ3JlYXRvci4KICAqIAogICovCiBwdWJsaWMgY2xhc3MgQ3JlYXRvclV0aWxpdGllcyB7CmRpZmYgLS1naXQgYS91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL3dlYi54bWxzcmMgYi91c2VyL3NyYy9jb20vZ29vZ2xlL2d3dC91c2VyL3Rvb2xzL3dlYi54bWxzcmMKaW5kZXggMWQzM2QxZS4uNjBhZGU0ZCAxMDA2NDQKLS0tIGEvdXNlci9zcmMvY29tL2dvb2dsZS9nd3QvdXNlci90b29scy93ZWIueG1sc3JjCisrKyBiL3VzZXIvc3JjL2NvbS9nb29nbGUvZ3d0L3VzZXIvdG9vbHMvd2ViLnhtbHNyYwpAQCAtOCw3ICs4LDcgQEAKICAgCiAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgPHNlcnZsZXQtbmFtZT5lY2hvU2VydmxldDwvc2VydmxldC1uYW1lPgotICAgIDx1cmwtcGF0dGVybj4vQGRlcGxveURpci9lY2hvPC91cmwtcGF0dGVybj4KKyAgICA8dXJsLXBhdHRlcm4+L0BuZXdNb2R1bGVOYW1lL2VjaG88L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KIAogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdXNlci9zdXBlci9jb20vZ29vZ2xlL2d3dC9lbXVsL2phdmEvbGFuZy9EZXByZWNhdGVkLmphdmEgYi91c2VyL3N1cGVyL2NvbS9nb29nbGUvZ3d0L2VtdWwvamF2YS9sYW5nL0RlcHJlY2F0ZWQuamF2YQppbmRleCA2MGYxNWY2Li5jZjIxOTJiIDEwMDY0NAotLS0gYS91c2VyL3N1cGVyL2NvbS9nb29nbGUvZ3d0L2VtdWwvamF2YS9sYW5nL0RlcHJlY2F0ZWQuamF2YQorKysgYi91c2VyL3N1cGVyL2NvbS9nb29nbGUvZ3d0L2VtdWwvamF2YS9sYW5nL0RlcHJlY2F0ZWQuamF2YQpAQCAtMjAsOCArMjAsMTEgQEAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiAKIC8qKgotICogSW5kaWNhdGVzIHRoYXQgYSBtZXRob2QgZGVmaW5pdGlvbiBpcyBpbnRlbmRlZCB0byBvdmVycmlkZSBhIGRlY2xhcmF0aW9uCi0gKiBmcm9tIGEgc3VwZXJjbGFzcy4gPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2RvY3MvYXBpL2phdmEvbGFuZy9PdmVycmlkZS5odG1sIj5bU3VuIGRvY3NdPC9hPgorICogQSBwcm9ncmFtIGVsZW1lbnQgYW5ub3RhdGVkICYjNjQ7RGVwcmVjYXRlZCBpcyBvbmUgdGhhdCBwcm9ncmFtbWVycyBhcmUKKyAqIGRpc2NvdXJhZ2VkIGZyb20gdXNpbmcsIHR5cGljYWxseSBiZWNhdXNlIGl0IGlzIGRhbmdlcm91cywgb3IgYmVjYXVzZSBhCisgKiBiZXR0ZXIgYWx0ZXJuYXRpdmUgZXhpc3RzLiA8YQorICogaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2RvY3MvYXBpL2phdmEvbGFuZy9EZXByZWNhdGVkLmh0bWwiPltTdW4KKyAqIGRvY3NdPC9hPgogICovCiBARG9jdW1lbnRlZAogQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKZGlmZiAtLWdpdCBhL3VzZXIvc3VwZXIvY29tL2dvb2dsZS9nd3QvZW11bC9qYXZhL3V0aWwvVHJlZVNldC5qYXZhIGIvdXNlci9zdXBlci9jb20vZ29vZ2xlL2d3dC9lbXVsL2phdmEvdXRpbC9UcmVlU2V0LmphdmEKaW5kZXggNDk2ZTg3ZC4uMWQxZmVkYyAxMDA2NDQKLS0tIGEvdXNlci9zdXBlci9jb20vZ29vZ2xlL2d3dC9lbXVsL2phdmEvdXRpbC9UcmVlU2V0LmphdmEKKysrIGIvdXNlci9zdXBlci9jb20vZ29vZ2xlL2d3dC9lbXVsL2phdmEvdXRpbC9UcmVlU2V0LmphdmEKQEAgLTI3LDkgKzI3LDkgQEAKIHB1YmxpYyBjbGFzcyBUcmVlU2V0PEU+IGV4dGVuZHMgQWJzdHJhY3RTZXQ8RT4gaW1wbGVtZW50cyBTb3J0ZWRTZXQ8RT4sIFNlcmlhbGl6YWJsZSB7CiAKICAgLyoqCi0gICAqIFRyZWVTZXQgaXMgc3RvcmVkIGFzIGEgVHJlZU1hcCBvZiB0aGUgcmVxdWVzdGVkIHR5cGUgdG8gYSBjb25zdGFudCBpbnRlZ2VyLgorICAgKiBUcmVlU2V0IGlzIHN0b3JlZCBhcyBhIFRyZWVNYXAgb2YgdGhlIHJlcXVlc3RlZCB0eXBlIHRvIGEgY29uc3RhbnQgQm9vbGVhbi4KICAgICovCi0gIFNvcnRlZE1hcDxFLCBCb29sZWFuPiBtYXA7CisgIHByaXZhdGUgU29ydGVkTWFwPEUsIEJvb2xlYW4+IG1hcDsKIAogICBwdWJsaWMgVHJlZVNldCgpIHsKICAgICBtYXAgPSBuZXcgVHJlZU1hcDxFLCBCb29sZWFuPigpOwpAQCAtNjUsNyArNjUsNyBAQAogCiAgIEBPdmVycmlkZQogICBwdWJsaWMgYm9vbGVhbiBhZGQoRSBvKSB7Ci0gICAgLy8gVXNlICJ0aGlzIiBhcyBhIGNvbnZlbmllbnQgbm9uLW51bGwgdmFsdWUgdG8gc3RvcmUgaW4gdGhlIG1hcAorICAgIC8vIFVzZSBCb29sZWFuLkZBTFNFIGFzIGEgY29udmVuaWVudCBub24tbnVsbCB2YWx1ZSB0byBzdG9yZSBpbiB0aGUgbWFwCiAgICAgcmV0dXJuIG1hcC5wdXQobywgQm9vbGVhbi5GQUxTRSkgPT0gbnVsbDsKICAgfQogCmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvZXZlbnQvbG9naWNhbC9zaGFyZWQvTG9naWNhbEV2ZW50c1Rlc3QuamF2YSBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9Mb2dpY2FsRXZlbnRzVGVzdC5qYXZhCmluZGV4IDk4NWM3OWEuLmRjMDNkMmEgMTAwNjQ0Ci0tLSBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9Mb2dpY2FsRXZlbnRzVGVzdC5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9ldmVudC9sb2dpY2FsL3NoYXJlZC9Mb2dpY2FsRXZlbnRzVGVzdC5qYXZhCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgc2ltcGxlRmlyZShCZWZvcmVTZWxlY3Rpb25FdmVudC5nZXRUeXBlKCksCiAgICAgICAgIG5ldyBCZWZvcmVTZWxlY3Rpb25FdmVudDxTdHJpbmc+KCkpOwogICAgIHNpbXBsZUZpcmUoU2VsZWN0aW9uRXZlbnQuZ2V0VHlwZSgpLCBuZXcgU2VsZWN0aW9uRXZlbnQ8U3RyaW5nPihudWxsKSk7Ci0gICAgc2ltcGxlRmlyZShDbG9zZUV2ZW50LmdldFR5cGUoKSwgbmV3IENsb3NlRXZlbnQ8U3RyaW5nPihudWxsLGZhbHNlKSk7CisgICAgc2ltcGxlRmlyZShDbG9zZUV2ZW50LmdldFR5cGUoKSwgbmV3IENsb3NlRXZlbnQ8U3RyaW5nPihudWxsLCBmYWxzZSkpOwogICAgIHNpbXBsZUZpcmUoT3BlbkV2ZW50LmdldFR5cGUoKSwgbmV3IE9wZW5FdmVudDxTdHJpbmc+KG51bGwpKTsKICAgICBzaW1wbGVGaXJlKFJlc2l6ZUV2ZW50LmdldFR5cGUoKSwgbmV3IFJlc2l6ZUV2ZW50KDAsIDApKTsKICAgICBzaW1wbGVGaXJlKFZhbHVlQ2hhbmdlRXZlbnQuZ2V0VHlwZSgpLCBuZXcgVmFsdWVDaGFuZ2VFdmVudDxTdHJpbmc+KG51bGwpKTsKZGlmZiAtLWdpdCBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9OdW1iZXJGb3JtYXRfYXJfVGVzdC5qYXZhIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L051bWJlckZvcm1hdF9hcl9UZXN0LmphdmEKaW5kZXggMmE4MjExMS4uNGJjNjJlNiAxMDA2NDQKLS0tIGEvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L051bWJlckZvcm1hdF9hcl9UZXN0LmphdmEKKysrIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L051bWJlckZvcm1hdF9hcl9UZXN0LmphdmEKQEAgLTM5LDExICszOSwxMSBAQAogICAKICAgcHVibGljIHZvaWQgdGVzdEV4cG9uZW50KCkgewogICAgIE51bWJlckZvcm1hdCBmbXQgPSBOdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0Zvcm1hdCgpOwotICAgIGFzc2VydEVxdWFscygiXHUwNjYzXHUwNjZCXHUwNjYxXHUwNjY0XHUwNjI3XHUwNjMzXHUwNjYwIiwKKyAgICBhc3NlcnRFcXVhbHMoIlx1MDY2M1x1MDYyN1x1MDYzM1x1MDY2MCIsCiAgICAgICAgIGZtdC5mb3JtYXQoMy4xNCkpOwotICAgIGFzc2VydEVxdWFscygiXHUwNjYzXHUwNjZCXHUwNjYxXHUwNjY0XHUwNjI3XHUwNjMzXHUwNjYyIiwKKyAgICBhc3NlcnRFcXVhbHMoIlx1MDY2M1x1MDYyN1x1MDYzM1x1MDY2MiIsCiAgICAgICAgIGZtdC5mb3JtYXQoMzE0LjApKTsKLSAgICBhc3NlcnRFcXVhbHMoIi1cdTA2NjNcdTA2NkJcdTA2NjFcdTA2NjRcdTA2MjdcdTA2MzNcdTA2NjIiLAorICAgIGFzc2VydEVxdWFscygiLVx1MDY2M1x1MDYyN1x1MDYzM1x1MDY2MiIsCiAgICAgICAgIGZtdC5mb3JtYXQoLTMxNC4wKSk7CiAgIH0KICAgCmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvTnVtYmVyRm9ybWF0X2VuX1Rlc3QuamF2YSBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9OdW1iZXJGb3JtYXRfZW5fVGVzdC5qYXZhCmluZGV4IDNjMGM2MGIuLjJlYWMxZTYgMTAwNjQ0Ci0tLSBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9OdW1iZXJGb3JtYXRfZW5fVGVzdC5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC9pMThuL2NsaWVudC9OdW1iZXJGb3JtYXRfZW5fVGVzdC5qYXZhCkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICBzdHIgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCgxMjM0LjU3OSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxMjMsNDU4JSIsIHN0cik7CiAgICAgc3RyID0gTnVtYmVyRm9ybWF0LmdldFNjaWVudGlmaWNGb3JtYXQoKS5mb3JtYXQoMTIzNC41NzkpOwotICAgIGFzc2VydEVxdWFscygiMS4yMzVFMyIsIHN0cik7CisgICAgYXNzZXJ0RXF1YWxzKCIxRTMiLCBzdHIpOwogICB9CiAKICAgcHVibGljIHZvaWQgdGVzdFplcm9zKCkgewpkaWZmIC0tZ2l0IGEvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L2kxOG4vY2xpZW50L051bWJlckZvcm1hdF9mcl9UZXN0LmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvTnVtYmVyRm9ybWF0X2ZyX1Rlc3QuamF2YQppbmRleCBmY2M1YWJjLi4yZmU4MTVkIDEwMDY0NAotLS0gYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvTnVtYmVyRm9ybWF0X2ZyX1Rlc3QuamF2YQorKysgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvaTE4bi9jbGllbnQvTnVtYmVyRm9ybWF0X2ZyX1Rlc3QuamF2YQpAQCAtMjIxLDEzICsyMjEsMTMgQEAKICAgICBTdHJpbmcgc3RyOwogCiAgICAgc3RyID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5Rm9ybWF0KCkuZm9ybWF0KDEyMzQuNTc5KTsKLSAgICBhc3NlcnRFcXVhbHMoIjFcdTAwQTAyMzQsNTggXHUyMEFDIiwgc3RyKTsKKyAgICBhc3NlcnRFcXVhbHMoIjFcdTAwQTAyMzQsNThcdTAwQTBcdTIwQUMiLCBzdHIpOwogICAgIHN0ciA9IE51bWJlckZvcm1hdC5nZXREZWNpbWFsRm9ybWF0KCkuZm9ybWF0KDEyMzQuNTc5KTsKICAgICBhc3NlcnRFcXVhbHMoIjFcdTAwQTAyMzQsNTc5Iiwgc3RyKTsKICAgICBzdHIgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCgxMjM0LjU3OSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxMjNcdTAwQTA0NThcdTAwQTAlIiwgc3RyKTsKICAgICBzdHIgPSBOdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0Zvcm1hdCgpLmZvcm1hdCgxMjM0LjU3OSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxLDIzNUUzIiwgc3RyKTsKKyAgICBhc3NlcnRFcXVhbHMoIjFFMyIsIHN0cik7CiAgIH0KIAogICBwdWJsaWMgdm9pZCB0ZXN0WmVyb3MoKSB7CmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9VSVN1aXRlLmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9VSVN1aXRlLmphdmEKaW5kZXggMmRiNjI1ZS4uODY0ZTBkNiAxMDA2NDQKLS0tIGEvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvVUlTdWl0ZS5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL1VJU3VpdGUuamF2YQpAQCAtMjcsMTIgKzI3LDE1IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuQ29tcG9zaXRlVGVzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5DdXN0b21CdXR0b25UZXN0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkRPTVRlc3Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGF0ZUJveFRlc3Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGF0ZVBpY2tlclRlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGVja1BhbmVsVGVzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5EZWNvcmF0ZWRQb3B1cFRlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGVjb3JhdGVkU3RhY2tQYW5lbFRlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGVjb3JhdGVkVGFiQmFyVGVzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5EZWNvcmF0ZWRUYWJQYW5lbFRlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGVjb3JhdG9yUGFuZWxUZXN0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkRlbGVnYXRpbmdLZXlib2FyZExpc3RlbmVyQ29sbGVjdGlvblRlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRGlhbG9nQm94VGVzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5EaXNjbG9zdXJlUGFuZWxUZXN0OwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkRvY2tQYW5lbFRlc3Q7CkBAIC03NCw2ICs3Nyw3IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuV2lkZ2V0T25Mb2FkVGVzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5XaWRnZXRTdWJjbGFzc2luZ1Rlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuaW1wbC5DbGlwcGVkSW1hZ2VQcm90b3R5cGVUZXN0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuZGF0ZXBpY2tlci5jbGllbnQuRGF0ZUNoYW5nZUV2ZW50VGVzdDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLnJlYmluZC51aS5JbWFnZUJ1bmRsZUdlbmVyYXRvclRlc3Q7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QueG1sLmNsaWVudC5YTUxUZXN0OwogCkBAIC04NCw4ICs4OCw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBVSVN1aXRlIHsKICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgIEdXVFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHV1RUZXN0U3VpdGUoCi0gICAgICAgICJUZXN0IGZvciBzdWl0ZSBmb3IgdGhlIGNvbS5nb29nbGUuZ3d0LnVpIG1vZHVsZSIpOworICAgIEdXVFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHV1RUZXN0U3VpdGUoIlRlc3QgZm9yIHN1aXRlIGZvciBhbGwgdXNlciB3aWRnZXRzIik7CiAKICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoQWJzb2x1dGVQYW5lbFRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShBbmNob3JUZXN0LmNsYXNzKTsKQEAgLTk3LDE0ICsxMDAsMTUgQEAKICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoQ29tcG9zaXRlVGVzdC5jbGFzcyk7CiAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKENvb2tpZVRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShDdXN0b21CdXR0b25UZXN0LmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoRGF0ZUJveFRlc3QuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShEYXRlUGlja2VyVGVzdC5jbGFzcyk7CiAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKERlY2tQYW5lbFRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShEZWNvcmF0ZWRQb3B1cFRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShEZWNvcmF0ZWRTdGFja1BhbmVsVGVzdC5jbGFzcyk7CiAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKERlY29yYXRlZFRhYkJhclRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShEZWNvcmF0ZWRUYWJQYW5lbFRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShEZWNvcmF0b3JQYW5lbFRlc3QuY2xhc3MpOwotICAgIC8vIFRFTVAKLSAgICAvLyBzdWl0ZS5hZGRUZXN0U3VpdGUoRGVsZWdhdGluZ0tleWJvYXJkTGlzdGVuZXJDb2xsZWN0aW9uVGVzdC5jbGFzcyk7CisgICAgc3VpdGUuYWRkVGVzdFN1aXRlKERlbGVnYXRpbmdLZXlib2FyZExpc3RlbmVyQ29sbGVjdGlvblRlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShEaWFsb2dCb3hUZXN0LmNsYXNzKTsKICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoRGlzY2xvc3VyZVBhbmVsVGVzdC5jbGFzcyk7CiAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKERvY2tQYW5lbFRlc3QuY2xhc3MpOwpAQCAtMTUxLDcgKzE1NSw3IEBACiAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFdpbmRvd1Rlc3QuY2xhc3MpOwogICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShYTUxUZXN0LmNsYXNzKTsKICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoQ2xhc3NJbml0VGVzdC5jbGFzcyk7Ci0KKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoRGF0ZUNoYW5nZUV2ZW50VGVzdC5jbGFzcyk7CiAgICAgcmV0dXJuIHN1aXRlOwogICB9CiB9CmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvQ2hlY2tCb3hUZXN0LmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvQ2hlY2tCb3hUZXN0LmphdmEKaW5kZXggZGUzMTMxNS4uYzdiYThlMiAxMDA2NDQKLS0tIGEvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0NoZWNrQm94VGVzdC5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9DaGVja0JveFRlc3QuamF2YQpAQCAtMTExLDYgKzExMSwxMiBAQAogICAgIGNiLnNldFZhbHVlKHRydWUsIHRydWUpOwogICAgIGFzc2VydFRydWUoaC5yZWNlaXZlZCk7CiAKKyAgICB0cnkgeworICAgICAgY2Iuc2V0VmFsdWUobnVsbCk7CisgICAgICBmYWlsKCJTaG91bGQgdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIik7CisgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgIC8qIHBhc3MgKi8KKyAgICB9CiAgIH0KIAogICBzdGF0aWMgY2xhc3MgTGlzdGVuZXJUZXN0ZXIgaW1wbGVtZW50cyBDbGlja0xpc3RlbmVyIHsKZGlmZiAtLWdpdCBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9EYXRlQm94VGVzdC5qYXZhIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0RhdGVCb3hUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0MzU5YQotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9EYXRlQm94VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWk7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5qdW5pdC5jbGllbnQuR1dUVGVzdENhc2U7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudC5EYXRlQm94OworCisvKioKKyAqIFRlc3RzIERhdGVCb3guCisgKi8KK3B1YmxpYyBjbGFzcyBEYXRlQm94VGVzdCBleHRlbmRzIEdXVFRlc3RDYXNlIHsKKyAgcHVibGljIFN0cmluZyBnZXRNb2R1bGVOYW1lKCkgeworICAgIHJldHVybiAiY29tLmdvb2dsZS5nd3QudXNlci5Vc2VyIjsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFZhbHVlQ2hhbmdlRXZlbnQoKSB7CisgICAgRGF0ZUJveCBkYiA9IG5ldyBEYXRlQm94KCk7CisgICAgUm9vdFBhbmVsLmdldCgpLmFkZChkYik7CisgICAgbmV3IERhdGVWYWx1ZUNoYW5nZVRlc3RlcihkYikucnVuKCk7ICAgIAorICB9Cit9CmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGF0ZVBpY2tlclRlc3QuamF2YSBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9EYXRlUGlja2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZmFjNTYKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGF0ZVBpY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aTsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0Lmp1bml0LmNsaWVudC5HV1RUZXN0Q2FzZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50LkNhbGVuZGFyTW9kZWw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudC5DYWxlbmRhclZpZXc7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5kYXRlcGlja2VyLmNsaWVudC5EYXRlUGlja2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuZGF0ZXBpY2tlci5jbGllbnQuRGVmYXVsdE1vbnRoU2VsZWN0b3I7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBUZXN0cyBEYXRlUGlja2VyJ3MgcHVibGljIGFwaS4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKy8vIER1ZSB0byBEYXRlCitwdWJsaWMgY2xhc3MgRGF0ZVBpY2tlclRlc3QgZXh0ZW5kcyBHV1RUZXN0Q2FzZSB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0ZVBpY2tlcldpdGhWaWV3IGV4dGVuZHMgRGF0ZVBpY2tlciB7CisgICAgRGF0ZVBpY2tlcldpdGhWaWV3KE1vY2tDYWxlbmRhclZpZXcgdmlldykgeworICAgICAgc3VwZXIobmV3IERlZmF1bHRNb250aFNlbGVjdG9yKCksIHZpZXcsIG5ldyBDYWxlbmRhck1vZGVsKCkpOworICAgIH0KKyAgfQorICAvKioKKyAgICogTW9jayBjYWxlbmRhciB2aWV3IHByZXRlbmRzIHRvIHNob3cgZGF0ZXNWaXNpYmxlTGlzdCBmcm9tIHRoZSBmaXJzdCBvZiB0aGUgbW9udGggdG8KKyAgICogdGhlIDMwdGggZGF5IGFmdGVyIHRoYXQuCisgICAqLworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrQ2FsZW5kYXJWaWV3IGV4dGVuZHMgQ2FsZW5kYXJWaWV3IHsKKyAgICBNYXA8RGF0ZSwgU2V0PFN0cmluZz4+IGRhdGVTdHlsZXMgPSBuZXcgSGFzaE1hcDxEYXRlLCBTZXQ8U3RyaW5nPj4oKTsKKyAgICBTZXQ8RGF0ZT4gZGlzYWJsZWREYXRlcyA9IG5ldyBIYXNoU2V0PERhdGU+KCk7CisKKyAgICBNb2NrQ2FsZW5kYXJWaWV3KCkgeworICAgICAgaW5pdFdpZGdldChuZXcgTGFiZWwoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYWRkU3R5bGVUb0RhdGUoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlKSB7CisgICAgICBTZXQ8U3RyaW5nPiBmcmVkID0gZGF0ZVN0eWxlcy5nZXQoZGF0ZSk7CisgICAgICBpZiAoZnJlZCA9PSBudWxsKSB7CisgICAgICAgIGZyZWQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIGRhdGVTdHlsZXMucHV0KGRhdGUsIGZyZWQpOworICAgICAgfQorICAgICAgZnJlZC5hZGQoc3R5bGVOYW1lKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRGF0ZSBnZXRGaXJzdERhdGUoKSB7CisgICAgICBEYXRlIHRoaXNNb250aCA9IGdldE1vZGVsKCkuZ2V0Q3VycmVudE1vbnRoKCk7CisgICAgICByZXR1cm4gbmV3IERhdGUodGhpc01vbnRoLmdldFllYXIoKSwgdGhpc01vbnRoLmdldE1vbnRoKCksIDEpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBEYXRlIGdldExhc3REYXRlKCkgeworICAgICAgRGF0ZSB0aGlzTW9udGggPSBnZXRNb2RlbCgpLmdldEN1cnJlbnRNb250aCgpOworICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXNNb250aC5nZXRZZWFyKCksIHRoaXNNb250aC5nZXRNb250aCgpLCAzMCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNEYXRlRW5hYmxlZChEYXRlIGRhdGUpIHsKKyAgICAgIHJldHVybiAhZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN0eWxlRnJvbURhdGUoU3RyaW5nIHN0eWxlTmFtZSwgRGF0ZSBkYXRlKSB7CisgICAgICBTZXQ8U3RyaW5nPiBmcmVkOworICAgICAgYXNzZXJ0Tm90TnVsbChmcmVkID0gZGF0ZVN0eWxlcy5nZXQoZGF0ZSkpOworICAgICAgYXNzZXJ0VHJ1ZShmcmVkLnJlbW92ZShzdHlsZU5hbWUpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkT25EYXRlKGJvb2xlYW4gZW5hYmxlZCwgRGF0ZSBkYXRlKSB7CisgICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICBkaXNhYmxlZERhdGVzLnJlbW92ZShkYXRlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRpc2FibGVkRGF0ZXMuYWRkKGRhdGUpOworICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldHVwKCkgeworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9MQVRFUiA9ICJzdHlsZUxhdGVyIjsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEUgPSAic3R5bGUxIjsKKworICBwcml2YXRlIERhdGVQaWNrZXJXaXRoVmlldyBtb2NrZWREYXRlUGlja2VyOworICBwcml2YXRlIE1vY2tDYWxlbmRhclZpZXcgdmlldzsKKworICBwcml2YXRlIGZpbmFsIERhdGUgZGF0ZVZpc2libGUxID0gbmV3IERhdGUoNjUsIDYsIDEyKTsKKyAgcHJpdmF0ZSBmaW5hbCBEYXRlIGRhdGVWaXNpYmxlMiA9IG5ldyBEYXRlKDY1LCA2LCAxMyk7CisgIHByaXZhdGUgZmluYWwgRGF0ZSBkYXRlVmlzaWJsZTMgPSBuZXcgRGF0ZSg2NSwgNiwgMTQpOworICBwcml2YXRlIGZpbmFsIERhdGUgZGF0ZVZpc2libGU0ID0gbmV3IERhdGUoNjUsIDYsIDE1KTsKKyAgcHJpdmF0ZSBmaW5hbCBEYXRlIGRhdGVWaXNpYmxlNSA9IG5ldyBEYXRlKDY1LCA2LCAxNik7CisgIHByaXZhdGUgZmluYWwgTGlzdDxEYXRlPiBkYXRlc1Zpc2libGVMaXN0ID0gbmV3IEFycmF5TGlzdDxEYXRlPigpOworICBwcml2YXRlIGZpbmFsIERhdGUgZGF0ZUxhdGVyMSA9CisgICAgICBuZXcgRGF0ZShkYXRlVmlzaWJsZTEuZ2V0WWVhcigpLCBkYXRlVmlzaWJsZTEuZ2V0TW9udGgoKSArIDEsCisgICAgICAgICAgZGF0ZVZpc2libGUxLmdldERheSgpKTsKKworICBwcml2YXRlIGZpbmFsIERhdGUgZGF0ZUxhdGVyMiA9CisgICAgICBuZXcgRGF0ZShkYXRlVmlzaWJsZTIuZ2V0WWVhcigpLCBkYXRlVmlzaWJsZTIuZ2V0TW9udGgoKSArIDEsCisgICAgICAgICAgZGF0ZVZpc2libGUyLmdldERheSgpKTsKKyAgcHJpdmF0ZSBmaW5hbCBEYXRlIGRhdGVMYXRlcjMgPQorICAgICAgbmV3IERhdGUoZGF0ZVZpc2libGUxLmdldFllYXIoKSwgZGF0ZVZpc2libGUzLmdldE1vbnRoKCkgKyAxLAorICAgICAgICAgIGRhdGVWaXNpYmxlMy5nZXREYXkoKSk7CisgIHByaXZhdGUgZmluYWwgRGF0ZSBkYXRlTGF0ZXI0ID0KKyAgICAgIG5ldyBEYXRlKGRhdGVWaXNpYmxlMi5nZXRZZWFyKCksIGRhdGVWaXNpYmxlNC5nZXRNb250aCgpICsgMSwKKyAgICAgICAgICBkYXRlVmlzaWJsZTQuZ2V0RGF5KCkpOworICBwcml2YXRlIGZpbmFsIERhdGUgZGF0ZUxhdGVyNSA9CisgICAgICBuZXcgRGF0ZShkYXRlVmlzaWJsZTEuZ2V0WWVhcigpLCBkYXRlVmlzaWJsZTUuZ2V0TW9udGgoKSArIDEsCisgICAgICAgICAgZGF0ZVZpc2libGU1LmdldERheSgpKTsKKyAgcHJpdmF0ZSBmaW5hbCBMaXN0PERhdGU+IGRhdGVzTGF0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdDxEYXRlPigpOworICB7CisgICAgZGF0ZXNWaXNpYmxlTGlzdC5hZGQoZGF0ZVZpc2libGU0KTsKKyAgICBkYXRlc1Zpc2libGVMaXN0LmFkZChkYXRlVmlzaWJsZTUpOworICB9CisgIHsKKyAgICBkYXRlc0xhdGVyTGlzdC5hZGQoZGF0ZUxhdGVyNCk7CisgICAgZGF0ZXNMYXRlckxpc3QuYWRkKGRhdGVMYXRlcjUpOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRNb2R1bGVOYW1lKCkgeworICAgIHJldHVybiAiY29tLmdvb2dsZS5nd3QudXNlci5Vc2VyIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBnd3RTZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLmd3dFNldFVwKCk7CisKKyAgICB2aWV3ID0gbmV3IE1vY2tDYWxlbmRhclZpZXcoKTsKKyAgICBtb2NrZWREYXRlUGlja2VyID0gbmV3IERhdGVQaWNrZXJXaXRoVmlldyh2aWV3KTsKKyAgICBtb2NrZWREYXRlUGlja2VyLnNldEN1cnJlbnRNb250aChkYXRlVmlzaWJsZTEpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpc2FibGluZygpIHsKKyAgICBtb2NrZWREYXRlUGlja2VyLnNldFRyYW5zaWVudEVuYWJsZWRPbkRhdGVzKGZhbHNlLCBkYXRlVmlzaWJsZTEpOworICAgIG1vY2tlZERhdGVQaWNrZXIuc2V0VHJhbnNpZW50RW5hYmxlZE9uRGF0ZXMoZmFsc2UsIGRhdGVWaXNpYmxlMiwKKyAgICAgICAgZGF0ZVZpc2libGUzKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLnNldFRyYW5zaWVudEVuYWJsZWRPbkRhdGVzKGZhbHNlLCBkYXRlc1Zpc2libGVMaXN0KTsKKyAgICAKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTEpKTsKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTIpKTsKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTMpKTsKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTQpKTsKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTUpKTsKKworICAgIG1vY2tlZERhdGVQaWNrZXIuc2V0VHJhbnNpZW50RW5hYmxlZE9uRGF0ZXModHJ1ZSwgZGF0ZVZpc2libGUxKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLnNldFRyYW5zaWVudEVuYWJsZWRPbkRhdGVzKHRydWUsIGRhdGVWaXNpYmxlMiwKKyAgICAgICAgZGF0ZVZpc2libGUzKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLnNldFRyYW5zaWVudEVuYWJsZWRPbkRhdGVzKHRydWUsIGRhdGVzVmlzaWJsZUxpc3QpOworCisgICAgYXNzZXJ0RmFsc2Uodmlldy5kaXNhYmxlZERhdGVzLmNvbnRhaW5zKGRhdGVWaXNpYmxlMSkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTIpKTsKKyAgICBhc3NlcnRGYWxzZSh2aWV3LmRpc2FibGVkRGF0ZXMuY29udGFpbnMoZGF0ZVZpc2libGUzKSk7CisgICAgYXNzZXJ0RmFsc2Uodmlldy5kaXNhYmxlZERhdGVzLmNvbnRhaW5zKGRhdGVWaXNpYmxlNCkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGlzYWJsZWREYXRlcy5jb250YWlucyhkYXRlVmlzaWJsZTUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHlsZVNldHRpbmcoKSB7CisgICAgbW9ja2VkRGF0ZVBpY2tlci5hZGRTdHlsZVRvRGF0ZXMoU1RZTEUsIGRhdGVWaXNpYmxlMSk7CisgICAgbW9ja2VkRGF0ZVBpY2tlci5hZGRTdHlsZVRvRGF0ZXMoU1RZTEUsIGRhdGVWaXNpYmxlMiwgZGF0ZVZpc2libGUzKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLmFkZFN0eWxlVG9EYXRlcyhTVFlMRSwgZGF0ZXNWaXNpYmxlTGlzdCk7CisKKyAgICBhc3NlcnRWaWV3SGFzU3R5bGVPblZpc2libGVEYXRlcyhTVFlMRSk7CisgICAgYXNzZXJ0UGlja2VySGFzU3R5bGVPblZpc2libGVEYXRlcyhTVFlMRSk7CisKKyAgICAvLyBTZWUgdGhhdCBzdHlsZXMgb24gYW4gaW52aXNpYmxlIGRhdGVzVmlzaWJsZUxpc3QgZG9uJ3QKKworICAgIG1vY2tlZERhdGVQaWNrZXIuYWRkU3R5bGVUb0RhdGVzKFNUWUxFX0xBVEVSLCBkYXRlTGF0ZXIxKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLmFkZFN0eWxlVG9EYXRlcyhTVFlMRV9MQVRFUiwgZGF0ZUxhdGVyMiwgZGF0ZUxhdGVyMyk7CisgICAgbW9ja2VkRGF0ZVBpY2tlci5hZGRTdHlsZVRvRGF0ZXMoU1RZTEVfTEFURVIsIGRhdGVzTGF0ZXJMaXN0KTsKKworICAgIGFzc2VydFZpZXdIYXNOb1N0eWxlT25IaWRkZW5EYXRlcygpOworICAgIGFzc2VydFBpY2tlckxhY2tzU3R5bGVPbkhpZGRlbkRhdGVzKFNUWUxFX0xBVEVSKTsKKworICAgIC8vIFJlbW92ZSBhIHN0eWxlIGZyb20gYSB2aXNpYmxlIGRhdGUsIGFuZCBpdCBzaG91bGQgbGVhdmUgdGhlIHZpZXcgdG9vCisgICAgbW9ja2VkRGF0ZVBpY2tlci5yZW1vdmVTdHlsZUZyb21EYXRlcyhTVFlMRSwgZGF0ZVZpc2libGUxKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLnJlbW92ZVN0eWxlRnJvbURhdGVzKFNUWUxFLCBkYXRlVmlzaWJsZTIsIGRhdGVWaXNpYmxlMyk7CisgICAgbW9ja2VkRGF0ZVBpY2tlci5yZW1vdmVTdHlsZUZyb21EYXRlcyhTVFlMRSwgZGF0ZXNWaXNpYmxlTGlzdCk7CisKKyAgICBhc3NlcnRWaWV3TGFja3NTdHlsZU9uVmlzaWJsZURhdGVzKFNUWUxFKTsKKyAgICBhc3NlcnRQaWNrZXJMYWNrc1N0eWxlT25WaXNpYmxlRGF0ZXMoKTsKKworICAgIC8vIFJlbW92ZSBhIHN0eWxlIGZyb20gYW4gaW52aXNpYmxlIGRhdGUsIGFuZCB0aGUgdmlldyBzaG91bGQgbm90IGhlYXIKKyAgICAvLyBhYm91dCBpdCAodGhlIG1vY2sgd2lsbCBleHBsb2RlIGlmIGFza2VkIHRvIHJlbW92ZSBhIHN0eWxlIGl0IGRvZXNuJ3QKKyAgICAvLyBoYXZlKQorICAgIG1vY2tlZERhdGVQaWNrZXIucmVtb3ZlU3R5bGVGcm9tRGF0ZXMoU1RZTEVfTEFURVIsIGRhdGVMYXRlcjEpOworICAgIG1vY2tlZERhdGVQaWNrZXIucmVtb3ZlU3R5bGVGcm9tRGF0ZXMoU1RZTEVfTEFURVIsIGRhdGVMYXRlcjIsIGRhdGVMYXRlcjMpOworICAgIG1vY2tlZERhdGVQaWNrZXIucmVtb3ZlU3R5bGVGcm9tRGF0ZXMoU1RZTEVfTEFURVIsIGRhdGVzTGF0ZXJMaXN0KTsKKyAgICBhc3NlcnRQaWNrZXJIYXNOb1N0eWxlT25JbnZpc2libGVEYXRlcygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRyYW5zaWVudFN0eWxlcygpIHsKKyAgICBtb2NrZWREYXRlUGlja2VyLmFkZFRyYW5zaWVudFN0eWxlVG9EYXRlcyhTVFlMRSwgZGF0ZVZpc2libGUxKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLmFkZFRyYW5zaWVudFN0eWxlVG9EYXRlcyhTVFlMRSwgZGF0ZVZpc2libGUyLAorICAgICAgICBkYXRlVmlzaWJsZTMpOworICAgIG1vY2tlZERhdGVQaWNrZXIuYWRkVHJhbnNpZW50U3R5bGVUb0RhdGVzKFNUWUxFLCBkYXRlc1Zpc2libGVMaXN0KTsKKyAgICBhc3NlcnRWaWV3SGFzU3R5bGVPblZpc2libGVEYXRlcyhTVFlMRSk7CisgICAgYXNzZXJ0UGlja2VyTGFja3NTdHlsZU9uVmlzaWJsZURhdGVzKCk7CisgICAgCisgICAgbW9ja2VkRGF0ZVBpY2tlci5yZW1vdmVTdHlsZUZyb21EYXRlcyhTVFlMRSwgZGF0ZVZpc2libGUxKTsKKyAgICBtb2NrZWREYXRlUGlja2VyLnJlbW92ZVN0eWxlRnJvbURhdGVzKFNUWUxFLCBkYXRlVmlzaWJsZTIsIGRhdGVWaXNpYmxlMyk7CisgICAgbW9ja2VkRGF0ZVBpY2tlci5yZW1vdmVTdHlsZUZyb21EYXRlcyhTVFlMRSwgZGF0ZXNWaXNpYmxlTGlzdCk7CisgICAgYXNzZXJ0Vmlld0xhY2tzU3R5bGVPblZpc2libGVEYXRlcyhTVFlMRSk7CisgICAgYXNzZXJ0UGlja2VyTGFja3NTdHlsZU9uVmlzaWJsZURhdGVzKCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RWYWx1ZUNoYW5nZUV2ZW50KCkgeworICAgIERhdGVQaWNrZXIgZHAgPSBuZXcgRGF0ZVBpY2tlcigpOworICAgIFJvb3RQYW5lbC5nZXQoKS5hZGQoZHApOworICAgIG5ldyBEYXRlVmFsdWVDaGFuZ2VUZXN0ZXIoZHApLnJ1bigpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0VmFsdWVTdHlsZSgpIHsKKyAgICBhc3NlcnROdWxsKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZVZpc2libGU0KSk7CisgICAgCisgICAgbW9ja2VkRGF0ZVBpY2tlci5zZXRWYWx1ZShkYXRlVmlzaWJsZTQpOworICAgIGFzc2VydFRydWUobW9ja2VkRGF0ZVBpY2tlci5nZXRTdHlsZU9mRGF0ZShkYXRlVmlzaWJsZTQpLmNvbnRhaW5zKCJkYXRlUGlja2VyRGF5SXNWYWx1ZSIpKTsKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGU0KS5jb250YWlucygiZGF0ZVBpY2tlckRheUlzVmFsdWUiKSk7CisKKyAgICBtb2NrZWREYXRlUGlja2VyLnNldFZhbHVlKGRhdGVWaXNpYmxlNSk7CisgICAgYXNzZXJ0TnVsbChtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlNCkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGU0KS5jb250YWlucygiZGF0ZVBpY2tlckRheUlzVmFsdWUiKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgYXNzZXJ0UGlja2VySGFzTm9TdHlsZU9uSW52aXNpYmxlRGF0ZXMoKSB7CisgICAgYXNzZXJ0TnVsbChtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVMYXRlcjEpKTsKKyAgICBhc3NlcnROdWxsKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyMikpOworICAgIGFzc2VydE51bGwobW9ja2VkRGF0ZVBpY2tlci5nZXRTdHlsZU9mRGF0ZShkYXRlTGF0ZXIzKSk7CisgICAgYXNzZXJ0TnVsbChtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVMYXRlcjQpKTsKKyAgICBhc3NlcnROdWxsKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyNSkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFzc2VydFBpY2tlckhhc1N0eWxlT25WaXNpYmxlRGF0ZXMoU3RyaW5nIHN0eWxlKSB7CisgICAgYXNzZXJ0VHJ1ZShtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlMSkuY29udGFpbnMoCisgICAgICAgIHN0eWxlKSk7CisgICAgYXNzZXJ0VHJ1ZShtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlMikuY29udGFpbnMoCisgICAgICAgIHN0eWxlKSk7CisgICAgYXNzZXJ0VHJ1ZShtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlMykuY29udGFpbnMoCisgICAgICAgIHN0eWxlKSk7CisgICAgYXNzZXJ0VHJ1ZShtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlNCkuY29udGFpbnMoCisgICAgICAgIHN0eWxlKSk7CisgICAgYXNzZXJ0VHJ1ZShtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlNSkuY29udGFpbnMoCisgICAgICAgIHN0eWxlKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgYXNzZXJ0UGlja2VyTGFja3NTdHlsZU9uSGlkZGVuRGF0ZXMoU3RyaW5nIHN0eWxlTGF0ZXIpIHsKKyAgICBhc3NlcnRUcnVlKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyMSkuY29udGFpbnMoCisgICAgICAgIHN0eWxlTGF0ZXIpKTsKKyAgICBhc3NlcnRUcnVlKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyMikuY29udGFpbnMoCisgICAgICAgIHN0eWxlTGF0ZXIpKTsKKyAgICBhc3NlcnRUcnVlKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyMykuY29udGFpbnMoCisgICAgICAgIHN0eWxlTGF0ZXIpKTsKKyAgICBhc3NlcnRUcnVlKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyNCkuY29udGFpbnMoCisgICAgICAgIHN0eWxlTGF0ZXIpKTsKKyAgICBhc3NlcnRUcnVlKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZUxhdGVyNSkuY29udGFpbnMoCisgICAgICAgIHN0eWxlTGF0ZXIpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnRQaWNrZXJMYWNrc1N0eWxlT25WaXNpYmxlRGF0ZXMoKSB7CisgICAgYXNzZXJ0TnVsbChtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlMSkpOworICAgIGFzc2VydE51bGwobW9ja2VkRGF0ZVBpY2tlci5nZXRTdHlsZU9mRGF0ZShkYXRlVmlzaWJsZTIpKTsKKyAgICBhc3NlcnROdWxsKG1vY2tlZERhdGVQaWNrZXIuZ2V0U3R5bGVPZkRhdGUoZGF0ZVZpc2libGUzKSk7CisgICAgYXNzZXJ0TnVsbChtb2NrZWREYXRlUGlja2VyLmdldFN0eWxlT2ZEYXRlKGRhdGVWaXNpYmxlNCkpOworICAgIGFzc2VydE51bGwobW9ja2VkRGF0ZVBpY2tlci5nZXRTdHlsZU9mRGF0ZShkYXRlVmlzaWJsZTUpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnRWaWV3SGFzTm9TdHlsZU9uSGlkZGVuRGF0ZXMoKSB7CisgICAgYXNzZXJ0TnVsbCh2aWV3LmRhdGVTdHlsZXMuZ2V0KGRhdGVMYXRlcjEpKTsKKyAgICBhc3NlcnROdWxsKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZUxhdGVyMikpOworICAgIGFzc2VydE51bGwodmlldy5kYXRlU3R5bGVzLmdldChkYXRlTGF0ZXIzKSk7CisgICAgYXNzZXJ0TnVsbCh2aWV3LmRhdGVTdHlsZXMuZ2V0KGRhdGVMYXRlcjQpKTsKKyAgICBhc3NlcnROdWxsKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZUxhdGVyNSkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFzc2VydFZpZXdIYXNTdHlsZU9uVmlzaWJsZURhdGVzKFN0cmluZyBzdHlsZSkgeworICAgIGFzc2VydFRydWUodmlldy5kYXRlU3R5bGVzLmdldChkYXRlVmlzaWJsZTEpLmNvbnRhaW5zKHN0eWxlKSk7CisgICAgYXNzZXJ0VHJ1ZSh2aWV3LmRhdGVTdHlsZXMuZ2V0KGRhdGVWaXNpYmxlMikuY29udGFpbnMoc3R5bGUpKTsKKyAgICBhc3NlcnRUcnVlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGUzKS5jb250YWlucyhzdHlsZSkpOworICAgIGFzc2VydFRydWUodmlldy5kYXRlU3R5bGVzLmdldChkYXRlVmlzaWJsZTQpLmNvbnRhaW5zKHN0eWxlKSk7CisgICAgYXNzZXJ0VHJ1ZSh2aWV3LmRhdGVTdHlsZXMuZ2V0KGRhdGVWaXNpYmxlNSkuY29udGFpbnMoc3R5bGUpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnRWaWV3TGFja3NTdHlsZU9uVmlzaWJsZURhdGVzKFN0cmluZyBzdHlsZSkgeworICAgIGFzc2VydEZhbHNlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGUxKS5jb250YWlucyhzdHlsZSkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGUyKS5jb250YWlucyhzdHlsZSkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGUzKS5jb250YWlucyhzdHlsZSkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGU0KS5jb250YWlucyhzdHlsZSkpOworICAgIGFzc2VydEZhbHNlKHZpZXcuZGF0ZVN0eWxlcy5nZXQoZGF0ZVZpc2libGU1KS5jb250YWlucyhzdHlsZSkpOworICB9Cit9CmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGF0ZVZhbHVlQ2hhbmdlVGVzdGVyLmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGF0ZVZhbHVlQ2hhbmdlVGVzdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5NjM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9EYXRlVmFsdWVDaGFuZ2VUZXN0ZXIuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQubG9naWNhbC5zaGFyZWQuVmFsdWVDaGFuZ2VFdmVudDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUhhbmRsZXI7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqCisgKiBIYW5keSB0b29sIGZvciB0ZXN0aW5nIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQge0BsaW5rIEhhc1ZhbHVlPERhdGU+fS4KKyAqLworcHVibGljIGNsYXNzIERhdGVWYWx1ZUNoYW5nZVRlc3RlciB7CisgIHN0YXRpYyBjbGFzcyBIYW5kbGVyIGltcGxlbWVudHMgVmFsdWVDaGFuZ2VIYW5kbGVyPERhdGU+IHsKKyAgICBEYXRlIHJlY2VpdmVkID0gbnVsbDsKKworICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoVmFsdWVDaGFuZ2VFdmVudDxEYXRlPiBldmVudCkgeworICAgICAgcmVjZWl2ZWQgPSBldmVudC5nZXRWYWx1ZSgpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgZmluYWwgSGFzVmFsdWU8RGF0ZT4gc3ViamVjdDsKKworICAvKioKKyAgICogVGhlIEhhc1ZhbHVlPERhdGU+IHRvIGJlIHRlc3RlZC4gSXQgc2hvdWxkIGhhdmUgYmVlbiBmcmVzaGx5IGNyZWF0ZWQgYmVmb3JlCisgICAqIGhhbmRpbmcgaXQgdG8gdGhpcyB0ZXN0ZXIuCisgICAqLworICBwdWJsaWMgRGF0ZVZhbHVlQ2hhbmdlVGVzdGVyKEhhc1ZhbHVlPERhdGU+IHN1YmplY3QpIHsKKyAgICB0aGlzLnN1YmplY3QgPSBzdWJqZWN0OworICB9CisKKyAgLyoqCisgICAqIEFzc2VydHMgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCBjaGVja3MgdGhhdCB2YWx1ZSBjaGFuZ2UgZXZlbnRzIGRvCisgICAqIGFuZCBkb24ndCBmaXJlIHdoZW4gYXBwcm9wcmlhdGUsIGFuZCB0aGF0IGdldFZhbHVlKCkgYWx3YXlzIHJldHVybnMgd2hhdAorICAgKiB3YXMgaGFuZGVkIHRvIGdldFZhbHVlKCkuCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgVGVzdENhc2UuYXNzZXJ0TnVsbChzdWJqZWN0LmdldFZhbHVlKCkpOworCisgICAgRGF0ZVZhbHVlQ2hhbmdlVGVzdGVyLkhhbmRsZXIgaCA9IG5ldyBIYW5kbGVyKCk7CisgICAgc3ViamVjdC5hZGRWYWx1ZUNoYW5nZUhhbmRsZXIoaCk7CisKKyAgICBzdWJqZWN0LnNldFZhbHVlKG51bGwpOworICAgIFRlc3RDYXNlLmFzc2VydE51bGwoc3ViamVjdC5nZXRWYWx1ZSgpKTsKKyAgICBUZXN0Q2FzZS5hc3NlcnROdWxsKGgucmVjZWl2ZWQpOworCisgICAgRGF0ZSBhYmxlID0gbmV3IERhdGUoMTk5OSwgNSwgMTUpOworICAgIHN1YmplY3Quc2V0VmFsdWUoYWJsZSk7CisgICAgVGVzdENhc2UuYXNzZXJ0RXF1YWxzKGFibGUsIHN1YmplY3QuZ2V0VmFsdWUoKSk7CisgICAgVGVzdENhc2UuYXNzZXJ0TnVsbChoLnJlY2VpdmVkKTsKKworICAgIHN1YmplY3Quc2V0VmFsdWUoYWJsZSk7CisgICAgVGVzdENhc2UuYXNzZXJ0TnVsbChoLnJlY2VpdmVkKTsKKworICAgIERhdGUgYmFrZXIgPSBuZXcgRGF0ZSgxOTY1LCAxMiwgNyk7CisgICAgc3ViamVjdC5zZXRWYWx1ZShiYWtlcik7CisgICAgVGVzdENhc2UuYXNzZXJ0TnVsbChoLnJlY2VpdmVkKTsKKworICAgIC8vIFZhbHVlIGhhcyBub3QgY2hhbmdlZCwgc28gc2hvdWxkIG5vdCBmaXJlIGEgY2hhbmdlIGV2ZW50IGV2ZW4gdGhvdWdoCisgICAgLy8gZmlyZSBldmVudCBpcyB0cnVlLgorICAgIHN1YmplY3Quc2V0VmFsdWUoYmFrZXIsIHRydWUpOworICAgIFRlc3RDYXNlLmFzc2VydE51bGwoaC5yZWNlaXZlZCk7CisKKyAgICBzdWJqZWN0LnNldFZhbHVlKGFibGUsIHRydWUpOworICAgIFRlc3RDYXNlLmFzc2VydEVxdWFscyhhYmxlLCBoLnJlY2VpdmVkKTsKKyAgICBUZXN0Q2FzZS5hc3NlcnROb3RTYW1lKGFibGUsIGgucmVjZWl2ZWQpOworCisgICAgc3ViamVjdC5zZXRWYWx1ZShiYWtlciwgdHJ1ZSk7CisgICAgVGVzdENhc2UuYXNzZXJ0RXF1YWxzKGJha2VyLCBoLnJlY2VpdmVkKTsKKyAgICBUZXN0Q2FzZS5hc3NlcnROb3RTYW1lKGJha2VyLCBoLnJlY2VpdmVkKTsKKyAgICAKKyAgICBoLnJlY2VpdmVkID0gbnVsbDsKKyAgICAvLyBWYWx1ZSBoYXMgY2hhbmdlZCwgYnV0IGJvb2xlYW4gaXMgZmFsc2UuCisgICAgc3ViamVjdC5zZXRWYWx1ZShiYWtlciwgZmFsc2UpOworICAgIFRlc3RDYXNlLmFzc2VydE51bGwoaC5yZWNlaXZlZCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGlzY2xvc3VyZVBhbmVsVGVzdC5qYXZhIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL0Rpc2Nsb3N1cmVQYW5lbFRlc3QuamF2YQppbmRleCA1NDEyMjE1Li42MDM5ZWVhIDEwMDY0NAotLS0gYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvRGlzY2xvc3VyZVBhbmVsVGVzdC5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9EaXNjbG9zdXJlUGFuZWxUZXN0LmphdmEKQEAgLTEyOSw3ICsxMjksNiBAQAogICAgIGFzc2VydEVxdWFscygzLCBwYW5lbC5nZXRIYW5kbGVycygpLmdldEhhbmRsZXJDb3VudChDbG9zZUV2ZW50LmdldFR5cGUoKSkpOwogICAgIGFzc2VydEVxdWFscygzLCBwYW5lbC5nZXRIYW5kbGVycygpLmdldEhhbmRsZXJDb3VudChPcGVuRXZlbnQuZ2V0VHlwZSgpKSk7CiAKLSAgICAKICAgICBwYW5lbC5zZXRPcGVuKHRydWUpOwogICAgIC8vIFdlIGV4cGVjdCBvbk9wZW4gdG8gZmlyZSBhbmQgb25DbG9zZSB0byBub3QgZmlyZS4KICAgICBhc3NlcnRUcnVlKGFEaWRGaXJlW09QRU5dICYmIGJEaWRGaXJlW09QRU5dICYmICFhRGlkRmlyZVtDTE9TRV0KQEAgLTE0OCw3ICsxNDcsNiBAQAogICAgIGFzc2VydEVxdWFscygyLCBwYW5lbC5nZXRIYW5kbGVycygpLmdldEhhbmRsZXJDb3VudChPcGVuRXZlbnQuZ2V0VHlwZSgpKSk7CiAgICAgYXNzZXJ0RXF1YWxzKDIsIHBhbmVsLmdldEhhbmRsZXJzKCkuZ2V0SGFuZGxlckNvdW50KENsb3NlRXZlbnQuZ2V0VHlwZSgpKSk7CiAKLQogICAgIHBhbmVsLnNldE9wZW4odHJ1ZSk7CiAgICAgcGFuZWwuc2V0T3BlbihmYWxzZSk7CiAgICAgLy8gV2UgZXhwZWN0IGEgdG8gaGF2ZSBmaXJlZCBib3RoIGV2ZW50cywgYW5kIGIgdG8gaGF2ZSBmaXJlZCBub25lLgpAQCAtMTU4LDYgKzE1NiwxOSBAQAogICAgIGFzc2VydFRydWUoIWJEaWRGaXJlW0NMT1NFXSk7CiAgIH0KIAorICAvKioKKyAgICogVGVzdHMgdGhhdCB0aGUgY29udGVudCBpcyBzZXQgdG8gbnVsbCBpZiB0aGUgY29udGVudCB3aWRnZXQncworICAgKiB7QGxpbmsgV2lkZ2V0I3JlbW92ZUZyb21QYXJlbnQoKX0gbWV0aG9kIGlzIGNhbGxlZC4KKyAgICovCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGcm9tUGFyZW50KCkgeworICAgIERpc2Nsb3N1cmVQYW5lbCBwYW5lbCA9IGNyZWF0ZVRlc3RQYW5lbCgpOworICAgIExhYmVsIGNvbnRlbnQgPSBuZXcgTGFiZWwoKTsKKyAgICBwYW5lbC5zZXRDb250ZW50KGNvbnRlbnQpOworICAgIGFzc2VydEVxdWFscyhjb250ZW50LCBwYW5lbC5nZXRDb250ZW50KCkpOworICAgIGNvbnRlbnQucmVtb3ZlRnJvbVBhcmVudCgpOworICAgIGFzc2VydE51bGwocGFuZWwuZ2V0Q29udGVudCgpKTsKKyAgfQorCiAgIHByaXZhdGUgRGlzY2xvc3VyZVBhbmVsIGNyZWF0ZVRlc3RQYW5lbCgpIHsKICAgICBEaXNjbG9zdXJlUGFuZWwgcGFuZWwgPSBuZXcgRGlzY2xvc3VyZVBhbmVsKCJUZXN0IFN1YmplY3QiLCBmYWxzZSk7CiAgICAgcGFuZWwuc2V0Q29udGVudChuZXcgU2ltcGxlUGFuZWwoKSk7CmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvUG9wdXBUZXN0LmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvUG9wdXBUZXN0LmphdmEKaW5kZXggYWQ3YTIyMC4uZjQyYjg0YyAxMDA2NDQKLS0tIGEvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1BvcHVwVGVzdC5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9Qb3B1cFRlc3QuamF2YQpAQCAtMjksMTAgKzI5LDIyIEBACiAgICAqIEV4cG9zZSBvdGhlcndpc2UgcHJpdmF0ZSBvciBwcm90ZWN0ZWQgbWV0aG9kcy4KICAgICovCiAgIHByaXZhdGUgY2xhc3MgVGVzdGFibGVQb3B1cFBhbmVsIGV4dGVuZHMgUG9wdXBQYW5lbCB7CisgICAgcHJpdmF0ZSBpbnQgb25Mb2FkQ291bnQ7CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgRWxlbWVudCBnZXRDb250YWluZXJFbGVtZW50KCkgewogICAgICAgcmV0dXJuIHN1cGVyLmdldENvbnRhaW5lckVsZW1lbnQoKTsKICAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhc3NlcnRPbkxvYWRDb3VudChpbnQgZXhwZWN0ZWQpIHsKKyAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgb25Mb2FkQ291bnQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTG9hZCgpIHsKKyAgICAgIHN1cGVyLm9uTG9hZCgpOworICAgICAgb25Mb2FkQ291bnQrKzsKKyAgICB9CiAgIH0KIAogICBAT3ZlcnJpZGUKQEAgLTk1LDYgKzEwNyw0NSBAQAogICAgIHRlc3REZXBlbmRhbnRQb3B1cFBhbmVsKHByaW1hcnlQb3B1cCk7CiAgIH0KIAorICAvKioKKyAgICogVGVzdCB0aGF0IHRoZSBvbkxvYWQgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIG9uY2Ugd2hlbiBzaG93aW5nIHRoZSBwb3B1cC4KKyAgICovCisgIHB1YmxpYyB2b2lkIHRlc3RPbkxvYWQoKSB7CisgICAgVGVzdGFibGVQb3B1cFBhbmVsIHBvcHVwID0gbmV3IFRlc3RhYmxlUG9wdXBQYW5lbCgpOworCisgICAgLy8gc2hvdygpIHdpdGhvdXQgYW5pbWF0aW9uCisgICAgeworICAgICAgcG9wdXAuc2V0QW5pbWF0aW9uRW5hYmxlZChmYWxzZSk7CisgICAgICBwb3B1cC5zaG93KCk7CisgICAgICBwb3B1cC5hc3NlcnRPbkxvYWRDb3VudCgxKTsKKyAgICAgIHBvcHVwLmhpZGUoKTsKKyAgICB9CisKKyAgICAvLyBzaG93KCkgd2l0aCBhbmltYXRpb24KKyAgICB7CisgICAgICBwb3B1cC5zZXRBbmltYXRpb25FbmFibGVkKHRydWUpOworICAgICAgcG9wdXAuc2hvdygpOworICAgICAgcG9wdXAuYXNzZXJ0T25Mb2FkQ291bnQoMik7CisgICAgICBwb3B1cC5oaWRlKCk7CisgICAgfQorCisgICAgLy8gY2VudGVyKCkgd2l0aG91dCBhbmltYXRpb24KKyAgICB7CisgICAgICBwb3B1cC5zZXRBbmltYXRpb25FbmFibGVkKGZhbHNlKTsKKyAgICAgIHBvcHVwLmNlbnRlcigpOworICAgICAgcG9wdXAuYXNzZXJ0T25Mb2FkQ291bnQoMyk7CisgICAgICBwb3B1cC5oaWRlKCk7CisgICAgfQorCisgICAgLy8gY2VudGVyKCkgd2l0aCBhbmltYXRpb24KKyAgICB7CisgICAgICBwb3B1cC5zZXRBbmltYXRpb25FbmFibGVkKHRydWUpOworICAgICAgcG9wdXAuY2VudGVyKCk7CisgICAgICBwb3B1cC5hc3NlcnRPbkxvYWRDb3VudCg0KTsKKyAgICAgIHBvcHVwLmhpZGUoKTsKKyAgICB9CisgIH0KKwogICBwdWJsaWMgdm9pZCB0ZXN0UG9wdXAoKSB7CiAgICAgLy8gR2V0IHJpZCBvZiB3aW5kb3cgbWFyZ2lucyBzbyB3ZSBjYW4gdGVzdCBhYnNvbHV0ZSBwb3NpdGlvbi4KICAgICBXaW5kb3cuc2V0TWFyZ2luKCIwcHgiKTsKZGlmZiAtLWdpdCBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UYWJCYXJUZXN0LmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGFiQmFyVGVzdC5qYXZhCmluZGV4IDBjNGJlZDkuLjM5MDliY2MgMTAwNjQ0Ci0tLSBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UYWJCYXJUZXN0LmphdmEKKysrIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1RhYkJhclRlc3QuamF2YQpAQCAtMTYyLDYgKzE2Miw3MSBAQAogICB9CiAKICAgLyoqCisgICAqIFZlcmlmeSB0aGF0IHdvcmRXcmFwIHdvcmtzIHdoZW4gYWRkaW5nIHdpZGdldHMgdGhhdCBpbXBsZW1lbnQgSGFzV29yZFdyYXAuCisgICAqLworICBwdWJsaWMgdm9pZCB0ZXN0V29yZFdyYXBXaXRoU3VwcG9ydCgpIHsKKyAgICBUYWJCYXIgYmFyID0gY3JlYXRlVGFiQmFyKCk7CisgICAgTGFiZWwgdGFiQ29udGVudDAgPSBuZXcgTGFiZWwoIlRhYiAwIiwgZmFsc2UpOworICAgIExhYmVsIHRhYkNvbnRlbnQxID0gbmV3IExhYmVsKCJUYWIgMSIsIHRydWUpOworICAgIGJhci5hZGRUYWIodGFiQ29udGVudDApOworICAgIGJhci5hZGRUYWIodGFiQ29udGVudDEpOworICAgIGJhci5hZGRUYWIoIlRhYiAyIik7CisKKyAgICAvLyBoYXNXb3JkV3JhcCgpCisgICAgeworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDApLmhhc1dvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDEpLmhhc1dvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDIpLmhhc1dvcmRXcmFwKCkpOworICAgIH0KKworICAgIC8vIGdldFdvcmRXcmFwKCkKKyAgICB7CisgICAgICBhc3NlcnRGYWxzZShiYXIuZ2V0VGFiKDApLmdldFdvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDEpLmdldFdvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0RmFsc2UoYmFyLmdldFRhYigyKS5nZXRXb3JkV3JhcCgpKTsKKyAgICB9CisKKyAgICAvLyBzZXRXb3JkV3JhcCgpCisgICAgeworICAgICAgYmFyLmdldFRhYigwKS5zZXRXb3JkV3JhcCh0cnVlKTsKKyAgICAgIGJhci5nZXRUYWIoMSkuc2V0V29yZFdyYXAodHJ1ZSk7CisgICAgICBiYXIuZ2V0VGFiKDIpLnNldFdvcmRXcmFwKHRydWUpOworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDApLmdldFdvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDEpLmdldFdvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0VHJ1ZShiYXIuZ2V0VGFiKDIpLmdldFdvcmRXcmFwKCkpOworICAgICAgYXNzZXJ0VHJ1ZSh0YWJDb250ZW50MC5nZXRXb3JkV3JhcCgpKTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogVmVyaWZ5IHRoYXQgd29yZFdyYXAgd29ya3Mgd2hlbiBhZGRpbmcgd2lkZ2V0cyB0aGF0IGRvIG5vdCBpbXBsZW1lbnQKKyAgICogSGFzV29yZFdyYXAuCisgICAqLworICBwdWJsaWMgdm9pZCB0ZXN0V29yZFdyYXBXaXRob3V0U3VwcG9ydCgpIHsKKyAgICBUYWJCYXIgYmFyID0gY3JlYXRlVGFiQmFyKCk7CisgICAgYmFyLmFkZFRhYihuZXcgQnV0dG9uKCJUYWIgMCIpKTsKKworICAgIC8vIGhhc1dvcmRXcmFwCisgICAgYXNzZXJ0RmFsc2UoYmFyLmdldFRhYigwKS5oYXNXb3JkV3JhcCgpKTsKKworICAgIC8vIGdldFdvcmRXcmFwKCk7CisgICAgdHJ5IHsKKyAgICAgIGJhci5nZXRUYWIoMCkuZ2V0V29yZFdyYXAoKTsKKyAgICAgIGZhaWwoIkV4cGVjdGVkIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIik7CisgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0VHJ1ZSh0cnVlKTsKKyAgICB9CisKKyAgICAvLyBzZXRXb3JkV3JhcCgpOworICAgIHRyeSB7CisgICAgICBiYXIuZ2V0VGFiKDApLnNldFdvcmRXcmFwKHRydWUpOworICAgICAgZmFpbCgiRXhwZWN0ZWQgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iKTsKKyAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRUcnVlKHRydWUpOworICAgIH0KKyAgfQorCisgIC8qKgogICAgKiBDcmVhdGUgYSBuZXcsIGVtcHR5IHRhYiBiYXIuCiAgICAqLwogICBwcm90ZWN0ZWQgVGFiQmFyIGNyZWF0ZVRhYkJhcigpIHsKZGlmZiAtLWdpdCBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UZXh0Qm94QmFzZVRlc3RCYXNlLmphdmEgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVGV4dEJveEJhc2VUZXN0QmFzZS5qYXZhCmluZGV4IGJmNDcyMTguLjU4YWEzZTIgMTAwNjQ0Ci0tLSBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UZXh0Qm94QmFzZVRlc3RCYXNlLmphdmEKKysrIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvY2xpZW50L3VpL1RleHRCb3hCYXNlVGVzdEJhc2UuamF2YQpAQCAtOTgsMjIgKzk4LDMxIEBACiAgIAogICBwdWJsaWMgdm9pZCB0ZXN0VmFsdWVDaGFuZ2VFdmVudCgpIHsKICAgICBUZXh0Qm94QmFzZSB0YiA9IGNyZWF0ZVRleHRCb3hCYXNlKCk7Ci0KICAgICAvLyBUbyB3b3JrIGNyb3NzLXBsYXRmb3JtLCB0aGUgdGIgbXVzdCBiZSBhZGRlZCB0byB0aGUgcm9vdCBwYW5lbC4KICAgICBSb290UGFuZWwuZ2V0KCkuYWRkKHRiKTsKKyAgICAKICAgICBIYW5kbGVyIGggPSBuZXcgSGFuZGxlcigpOwogICAgIHRiLmFkZFZhbHVlQ2hhbmdlSGFuZGxlcihoKTsKLSAgICB0Yi5zZXRUZXh0KCJhYmxlIik7CisgICAgCisgICAgdGIuc2V0VmFsdWUobnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKCIiLCB0Yi5nZXRWYWx1ZSgpKTsKICAgICBhc3NlcnROdWxsKGgucmVjZWl2ZWQpOwogICAgIAotICAgIHRiLnNldFZhbHVlKCJhYmxlIik7CisgICAgdGIuc2V0VGV4dCgiYWJsZSIpOworICAgIGFzc2VydEVxdWFscygiYWJsZSIsIHRiLmdldFZhbHVlKCkpOwogICAgIGFzc2VydE51bGwoaC5yZWNlaXZlZCk7CisKKyAgICB0Yi5zZXRWYWx1ZSgiYWJsZSIpOworICAgIGFzc2VydEVxdWFscygiYWJsZSIsIHRiLmdldFZhbHVlKCkpOworICAgIGFzc2VydE51bGwoaC5yZWNlaXZlZCk7CisKICAgICB0Yi5zZXRWYWx1ZSgiYmFrZXIiKTsKICAgICBhc3NlcnROdWxsKGgucmVjZWl2ZWQpOwogCiAgICAgdGIuc2V0VmFsdWUoImJha2VyIiwgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJiYWtlciIsIHRiLmdldFZhbHVlKCkpOwogICAgIGFzc2VydE51bGwoaC5yZWNlaXZlZCk7Ci0gICAgCisKICAgICB0Yi5zZXRWYWx1ZSgiYWJsZSIsIHRydWUpOwogICAgIGFzc2VydEVxdWFscygiYWJsZSIsIGgucmVjZWl2ZWQpOwogCmRpZmYgLS1naXQgYS91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9jbGllbnQvdWkvVHJlZVRlc3QuamF2YSBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UcmVlVGVzdC5qYXZhCmluZGV4IDA0NDQzZjYuLmQyNjNkOWYgMTAwNjQ0Ci0tLSBhL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UcmVlVGVzdC5qYXZhCisrKyBiL3VzZXIvdGVzdC9jb20vZ29vZ2xlL2d3dC91c2VyL2NsaWVudC91aS9UcmVlVGVzdC5qYXZhCkBAIC0yNzAsMjYgKzI3MCw0IEBACiAgICAgYXNzZXJ0TnVsbChlTGFiZWwuZ2V0UGFyZW50KCkpOwogICAgIGFzc2VydEZhbHNlKGNoaWxkVHJlZS5nZXRDaGlsZFdpZGdldHMoKS5jb250YWluc0tleShlTGFiZWwuZ2V0UGFyZW50KCkpKTsKICAgfQotCi0gIC8qKgotICAgKiBUZXN0cyBzZXRJbWFnZUJhc2UoKSB3aGljaCwgdGhvdWdoIGRlcHJlY2F0ZWQsIHNob3VsZCBzdGlsbCB3b3JrLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEltYWdlQmFzZSgpIHsKLSAgICBUcmVlIHQgPSBuZXcgVHJlZSgpOwotICAgIFRyZWVJdGVtIHBhcmVudCA9IG5ldyBUcmVlSXRlbSgicGFyZW50Iik7Ci0gICAgcGFyZW50LmFkZEl0ZW0oImNoaWxkIik7Ci0gICAgdC5hZGRJdGVtKHBhcmVudCk7Ci0gICAgUm9vdFBhbmVsLmdldCgpLmFkZCh0KTsKLQotICAgIC8vIFRoaXMgd2FzIHRocm93aW5nIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGF0IG9uZSBwb2ludCAoanVzdAotICAgIC8vIGJlZm9yZSB0aGUgMS41IHJlbGVhc2UpLCBiZWNhdXNlIG9mIGFkZGl0aW9ucyB0byBJbWFnZVByb3RvdHlwZS4gSWYKLSAgICAvLyB0aGF0IHdlcmUgdG8gY3JlZXAgYmFjayBpbiwgd2UnZCBzZWUgYW4gZXhjZXB0aW9uLgotICAgIHQuc2V0SW1hZ2VCYXNlKCIiKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50IG9wZW4vY2xvc2UgaW1hZ2UgYWN0dWFsbHkgZ290IGNyZWF0ZWQgKHRoZXJlJ3MKLSAgICAvLyBubyBhY3R1YWwgcHVibGljIGltYWdlIGZpbGUgdG8gYmFjayB0aGlzIHVwLCBidXQgaXQgd29uJ3QgbWF0dGVyIGZyb20KLSAgICAvLyB0aGUgc3RhbmRwb2ludCBvZiB0aGlzIHRlc3QpLgotICAgIFN0cmluZyBwYXJlbnRTcmMgPSBET00uZ2V0SW1nU3JjKHBhcmVudC5nZXRJbWFnZUVsZW1lbnQoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwYXJlbnRTcmMuZW5kc1dpdGgoInRyZWVfY2xvc2VkLmdpZiIpKTsKLSAgfQogfQpkaWZmIC0tZ2l0IGEvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvRGF0ZUNoYW5nZUV2ZW50VGVzdC5qYXZhIGIvdXNlci90ZXN0L2NvbS9nb29nbGUvZ3d0L3VzZXIvZGF0ZXBpY2tlci9jbGllbnQvRGF0ZUNoYW5nZUV2ZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzUzNjEKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyL3Rlc3QvY29tL2dvb2dsZS9nd3QvdXNlci9kYXRlcGlja2VyL2NsaWVudC9EYXRlQ2hhbmdlRXZlbnRUZXN0LmphdmEKQEAgLTAsMCArMSw2OSBAQAorLyoNCisgKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLg0KKyAqIA0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mDQorICogdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyDQorICogdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBjb20uZ29vZ2xlLmd3dC51c2VyLmRhdGVwaWNrZXIuY2xpZW50Ow0KKw0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dpY2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUhhbmRsZXI7DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5IYW5kbGVyTWFuYWdlcjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkhhbmRsZXJSZWdpc3RyYXRpb247DQoraW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkRhdGVWYWx1ZUNoYW5nZVRlc3RlcjsNCitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuSGFzVmFsdWU7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgamF2YS51dGlsLkRhdGU7DQorDQorLyoqDQorICogVGVzdCB0aGUgRGF0ZUNoYW5nZUV2ZW50IGluIGlzb2xhdGlvbiBmcm9tIEdXVC4NCisgKi8NCitwdWJsaWMgY2xhc3MgRGF0ZUNoYW5nZUV2ZW50VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisgIHByaXZhdGUgY2xhc3MgTW9ja1dpZGdldCBpbXBsZW1lbnRzIEhhc1ZhbHVlPERhdGU+IHsNCisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyTWFuYWdlciBoYW5kbGVycyA9IG5ldyBIYW5kbGVyTWFuYWdlcih0aGlzKTsNCisgICAgcHJpdmF0ZSBEYXRlIHZhbHVlOw0KKw0KKyAgICBwdWJsaWMgSGFuZGxlclJlZ2lzdHJhdGlvbiBhZGRWYWx1ZUNoYW5nZUhhbmRsZXIoDQorICAgICAgICBWYWx1ZUNoYW5nZUhhbmRsZXI8RGF0ZT4gaGFuZGxlcikgew0KKyAgICAgIHJldHVybiBoYW5kbGVycy5hZGRIYW5kbGVyKFZhbHVlQ2hhbmdlRXZlbnQuZ2V0VHlwZSgpLCBoYW5kbGVyKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgSGFuZGxlck1hbmFnZXIgZ2V0SGFuZGxlcnMoKSB7DQorICAgICAgcmV0dXJuIGhhbmRsZXJzOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBEYXRlIGdldFZhbHVlKCkgew0KKyAgICAgIHJldHVybiB2YWx1ZTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShEYXRlIHZhbHVlKSB7DQorICAgICAgc2V0VmFsdWUodmFsdWUsIGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShEYXRlIHZhbHVlLCBib29sZWFuIGZpcmVFdmVudHMpIHsNCisgICAgICBEYXRlIG9sZFZhbHVlID0gdGhpcy52YWx1ZTsNCisgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7DQorICAgICAgaWYgKGZpcmVFdmVudHMpIHsNCisgICAgICAgIERhdGVDaGFuZ2VFdmVudC5maXJlSWZOb3RFcXVhbERhdGVzKHRoaXMsIG9sZFZhbHVlLCB2YWx1ZSk7DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorICBwdWJsaWMgdm9pZCB0ZXN0VmFsdWVDaGFuZ2VWaWFIYXNWYWx1ZSgpIHsNCisgICAgbmV3IERhdGVWYWx1ZUNoYW5nZVRlc3RlcihuZXcgTW9ja1dpZGdldCgpKS5ydW4oKTsNCisgIH0NCisNCit9DQo=