ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjNjYzEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTAgQEAKK++7vyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgLmdpdGlnbm9yZSBmaWxlIHdhcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgTWljcm9zb2Z0KFIpIFZpc3VhbCBTdHVkaW8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisvLnZzCisqLnVzZXIKKy9zcmMvb2JqCisvdGVzdC9iaW4vRGVidWcvbmV0Y29yZWFwcDIuMgorL3Rlc3Qvb2JqCisvc3JjL2Jpbi9EZWJ1Zy9uZXRzdGFuZGFyZDIuMApkaWZmIC0tZ2l0IGEvZG9jcy8uZ2l0aWdub3JlIGIvZG9jcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NThiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMCBAQAorIyMjIyMjIyMjIyMjIyMjCisjICAgIGZvbGRlciAgICMKKyMjIyMjIyMjIyMjIyMjIworLyoqL0RST1AvCisvKiovVEVNUC8KKy8qKi9wYWNrYWdlcy8KKy8qKi9iaW4vCisvKiovb2JqLworX3NpdGUKK2xvZy50eHQKZGlmZiAtLWdpdCBhL2RvY3MvYXBpLy5naXRpZ25vcmUgYi9kb2NzL2FwaS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDc5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2FwaS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorIyMjIyMjIyMjIyMjIyMjCisjICB0ZW1wIGZpbGUgICMKKyMjIyMjIyMjIyMjIyMjIworKi55bWwKKy5tYW5pZmVzdApkaWZmIC0tZ2l0IGEvZG9jcy9hcGkvaW5kZXgubWQgYi9kb2NzL2FwaS9pbmRleC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGRjOWMwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9hcGkvaW5kZXgubWQKQEAgLTAsMCArMSwyIEBACisjIFBMQUNFSE9MREVSCitUT0RPOiBBZGQgLk5FVCBwcm9qZWN0cyB0byB0aGUgKnNyYyogZm9sZGVyIGFuZCBydW4gYGRvY2Z4YCB0byBnZW5lcmF0ZSAqKlJFQUwqKiAqQVBJIERvY3VtZW50YXRpb24qIQpkaWZmIC0tZ2l0IGEvZG9jcy9hcnRpY2xlcy9pbnRyby5tZCBiL2RvY3MvYXJ0aWNsZXMvaW50cm8ubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0NzhjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvYXJ0aWNsZXMvaW50cm8ubWQKQEAgLTAsMCArMSBAQAorIyBBZGQgeW91ciBpbnRyb2R1Y3Rpb25zIGhlcmUhCmRpZmYgLS1naXQgYS9kb2NzL2FydGljbGVzL3RvYy55bWwgYi9kb2NzL2FydGljbGVzL3RvYy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4OWVmMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvYXJ0aWNsZXMvdG9jLnltbApAQCAtMCwwICsxLDIgQEAKKy0gbmFtZTogSW50cm9kdWN0aW9uCisgIGhyZWY6IGludHJvLm1kCmRpZmYgLS1naXQgYS9kb2NzL2RvY2Z4Lmpzb24gYi9kb2NzL2RvY2Z4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2ZjhiZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZG9jZnguanNvbgpAQCAtMCwwICsxLDc1IEBACit7CisgICJtZXRhZGF0YSI6IFsKKyAgICB7CisgICAgICAic3JjIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGVzIjogWworICAgICAgICAgICAgInNyYy9ubXMtb3BlbndpcmUuY3Nwcm9qIgorICAgICAgICAgIF0sCisgICAgICAgICAgInNyYyI6ICIuLiIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJkZXN0IjogImFwaSIsCisgICAgICAiZGlzYWJsZUdpdEZlYXR1cmVzIjogZmFsc2UsCisgICAgICAiZGlzYWJsZURlZmF1bHRGaWx0ZXIiOiBmYWxzZSwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAiVGFyZ2V0RnJhbWV3b3JrIjogICJuZXRzdGFuZGFyZDIuMCIgCisgICAgICB9IAorICAgIH0KKyAgXSwKKyAgImJ1aWxkIjogeworICAgICJjb250ZW50IjogWworICAgICAgeworICAgICAgICAiZmlsZXMiOiBbCisgICAgICAgICAgImFwaS8qKi55bWwiLAorICAgICAgICAgICJhcGkvaW5kZXgubWQiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJmaWxlcyI6IFsKKyAgICAgICAgICAiYXJ0aWNsZXMvKioubWQiLAorICAgICAgICAgICJhcnRpY2xlcy8qKi90b2MueW1sIiwKKyAgICAgICAgICAidG9jLnltbCIsCisgICAgICAgICAgIioubWQiCisgICAgICAgIF0KKyAgICAgIH0KKyAgICBdLAorICAgICJyZXNvdXJjZSI6IFsKKyAgICAgIHsKKyAgICAgICAgImZpbGVzIjogWworICAgICAgICAgICJpbWFnZXMvKioiCisgICAgICAgIF0KKyAgICAgIH0KKyAgICBdLAorICAgICJvdmVyd3JpdGUiOiBbCisgICAgICB7CisgICAgICAgICJmaWxlcyI6IFsKKyAgICAgICAgICAiYXBpZG9jLyoqLm1kIgorICAgICAgICBdLAorICAgICAgICAiZXhjbHVkZSI6IFsKKyAgICAgICAgICAib2JqLyoqIiwKKyAgICAgICAgICAiX3NpdGUvKioiCisgICAgICAgIF0KKyAgICAgIH0KKyAgICBdLAorICAgICJnbG9iYWxNZXRhZGF0YSI6IHsKKyAgICAgICJfYXBwVGl0bGUiOiAiQXBhY2hlIE5NUyBPcGVud2lyZSBEb2N1bWVudGF0aW9uIiwKKyAgICAgICJfYXBwTG9nb1BhdGgiOiAiL2ltYWdlcy9hY3RpdmVtcV9sb2dvX2ljb24ucG5nIiwKKyAgICAgICJfYXBwRm9vdGVyIjogIkNvcHlyaWdodCCpIDIwMDUtMjAxOSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBwcm9qZWN0PGJyPkdlbmVyYXRlZCBieSA8c3Ryb25nPkRvY0ZYPC9zdHJvbmc+IiwKKyAgICAgICJfZW5hYmxlU2VhcmNoIjogInRydWUiCisgICAgfSwKKyAgICAiZGVzdCI6ICJfc2l0ZSIsCisgICAgImdsb2JhbE1ldGFkYXRhRmlsZXMiOiBbXSwKKyAgICAiZmlsZU1ldGFkYXRhRmlsZXMiOiBbXSwKKyAgICAidGVtcGxhdGUiOiBbCisgICAgICAiZGVmYXVsdCIsCisgICAgICAidGVtcGxhdGUiCisgICAgXSwKKyAgICAicG9zdFByb2Nlc3NvcnMiOiBbXSwKKyAgICAibWFya2Rvd25FbmdpbmVOYW1lIjogIm1hcmtkaWciLAorICAgICJub0xhbmdLZXl3b3JkIjogZmFsc2UsCisgICAgImtlZXBGaWxlTGluayI6IGZhbHNlLAorICAgICJjbGVhbnVwQ2FjaGVIaXN0b3J5IjogZmFsc2UsCisgICAgImRpc2FibGVHaXRGZWF0dXJlcyI6IGZhbHNlCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2ltYWdlcy9hY3RpdmVtcV9sb2dvX2ljb24ucG5nIGIvZG9jcy9pbWFnZXMvYWN0aXZlbXFfbG9nb19pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI0M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9pbWFnZXMvYWN0aXZlbXFfbG9nb19pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2luZGV4Lm1kIGIvZG9jcy9pbmRleC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWUyNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9pbmRleC5tZApAQCAtMCwwICsxLDQgQEAKKyMgVGhpcyBpcyB0aGUgKipIT01FUEFHRSoqLgorUmVmZXIgdG8gW01hcmtkb3duXShodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duLykgZm9yIGhvdyB0byB3cml0ZSBtYXJrZG93biBmaWxlcy4KKyMjIFF1aWNrIFN0YXJ0IE5vdGVzOgorMS4gQWRkIGltYWdlcyB0byB0aGUgKmltYWdlcyogZm9sZGVyIGlmIHRoZSBmaWxlIGlzIHJlZmVyZW5jaW5nIGFuIGltYWdlLgpkaWZmIC0tZ2l0IGEvZG9jcy9ubXMtb3BlbndpcmUtZG9jcy5jc3Byb2ogYi9kb2NzL25tcy1vcGVud2lyZS1kb2NzLmNzcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M3MTRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ubXMtb3BlbndpcmUtZG9jcy5jc3Byb2oKQEAgLTAsMCArMSwyMCBAQAorPFByb2plY3QgU2RrPSJNaWNyb3NvZnQuTkVULlNkayI+CisKKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEZyYW1ld29yaz5uZXRzdGFuZGFyZDIuMDwvVGFyZ2V0RnJhbWV3b3JrPgorICAgIDxSb290TmFtZXNwYWNlPm5tc19vcGVud2lyZV9kb2NzPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPEl0ZW1Hcm91cD4KKyAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJkb2NmeC5jb25zb2xlIiBWZXJzaW9uPSIyLjQzLjIiPgorICAgICAgPFByaXZhdGVBc3NldHM+YWxsPC9Qcml2YXRlQXNzZXRzPgorICAgICAgPEluY2x1ZGVBc3NldHM+cnVudGltZTsgYnVpbGQ7IG5hdGl2ZTsgY29udGVudGZpbGVzOyBhbmFseXplcnM7IGJ1aWxkdHJhbnNpdGl2ZTwvSW5jbHVkZUFzc2V0cz4KKyAgICA8L1BhY2thZ2VSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPEZvbGRlciBJbmNsdWRlPSJpbWFnZXNcIiAvPgorICAgIDxGb2xkZXIgSW5jbHVkZT0idGVtcGxhdGVcIiAvPgorICA8L0l0ZW1Hcm91cD4KKworPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy90ZW1wbGF0ZS9wYXJ0aWFscy9sb2dvLnRtcGwucGFydGlhbCBiL2RvY3MvdGVtcGxhdGUvcGFydGlhbHMvbG9nby50bXBsLnBhcnRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzMGNlMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvdGVtcGxhdGUvcGFydGlhbHMvbG9nby50bXBsLnBhcnRpYWwKQEAgLTAsMCArMSwyNCBAQAore3shIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS59fQorCis8c3R5bGU+CitpbWcuYWN0aXZlbXEtbG9nbyB7CisgICAgaGVpZ2h0OiA1MXB4OworfQorPC9zdHlsZT4KKworPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0ie3tfcmVsfX1pbmRleC5odG1sIj4KKyAgPGltZyBpZD0ibG9nbyIgY2xhc3M9InN2ZyBhY3RpdmVtcS1sb2dvIiBzcmM9Int7X3JlbH19e3t7X2FwcExvZ29QYXRofX19e3teX2FwcExvZ29QYXRofX1sb2dvLnN2Z3t7L19hcHBMb2dvUGF0aH19IiBhbHQ9Int7X2FwcE5hbWV9fSIgPgorPC9hPgpkaWZmIC0tZ2l0IGEvZG9jcy90b2MueW1sIGIvZG9jcy90b2MueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjgwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3RvYy55bWwKQEAgLTAsMCArMSw1IEBACistIG5hbWU6IEFydGljbGVzCisgIGhyZWY6IGFydGljbGVzLworLSBuYW1lOiBBcGkgRG9jdW1lbnRhdGlvbgorICBocmVmOiBhcGkvCisgIGhvbWVwYWdlOiBhcGkvaW5kZXgubWQKZGlmZiAtLWdpdCBhL2V4dF9iaW4vQXBhY2hlLk5NUy5UZXN0LmRsbCBiL2V4dF9iaW4vQXBhY2hlLk5NUy5UZXN0LmRsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhlZWUzCi0tLSAvZGV2L251bGwKKysrIGIvZXh0X2Jpbi9BcGFjaGUuTk1TLlRlc3QuZGxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2V4dF9iaW4vQXBhY2hlLk5NUy5UZXN0LnBkYiBiL2V4dF9iaW4vQXBhY2hlLk5NUy5UZXN0LnBkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQzMmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0X2Jpbi9BcGFjaGUuTk1TLlRlc3QucGRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL25tcy1vcGVud2lyZS5zbG4gYi9ubXMtb3BlbndpcmUuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDgwODQKLS0tIC9kZXYvbnVsbAorKysgYi9ubXMtb3BlbndpcmUuc2xuCkBAIC0wLDAgKzEsMzcgQEAKK++7vworTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTIuMDAKKyMgVmlzdWFsIFN0dWRpbyBWZXJzaW9uIDE2CitWaXN1YWxTdHVkaW9WZXJzaW9uID0gMTYuMC4yOTAwOS41CitNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDEwLjAuNDAyMTkuMQorUHJvamVjdCgiezlBMTkxMDNGLTE2RjctNDY2OC1CRTU0LTlBMUU3QTRGNzU1Nn0iKSA9ICJubXMtb3BlbndpcmUiLCAic3JjXG5tcy1vcGVud2lyZS5jc3Byb2oiLCAiezAzOUJERjM1LTc0NjYtNEFENi1BNDg3LTQ2MERBQTI3OUNERX0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OUExOTEwM0YtMTZGNy00NjY4LUJFNTQtOUExRTdBNEY3NTU2fSIpID0gIm5tcy1vcGVud2lyZS10ZXN0IiwgInRlc3Rcbm1zLW9wZW53aXJlLXRlc3QuY3Nwcm9qIiwgIntENDAzNEJGRC0yMUYxLTQ4MzYtQjBBMC0xQzQxNjFBQjAxMTB9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezlBMTkxMDNGLTE2RjctNDY2OC1CRTU0LTlBMUU3QTRGNzU1Nn0iKSA9ICJubXMtb3BlbndpcmUtZG9jcyIsICJkb2NzXG5tcy1vcGVud2lyZS1kb2NzLmNzcHJvaiIsICJ7RDBENDlBQzctRkNEOS00QkU2LTlBNzItMzEwODUyRDQ3M0FDfSIKK0VuZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfEFueSBDUFUgPSBEZWJ1Z3xBbnkgQ1BVCisJCVJlbGVhc2V8QW55IENQVSA9IFJlbGVhc2V8QW55IENQVQorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorCQl7MDM5QkRGMzUtNzQ2Ni00QUQ2LUE0ODctNDYwREFBMjc5Q0RFfS5EZWJ1Z3xBbnkgQ1BVLkFjdGl2ZUNmZyA9IERlYnVnfEFueSBDUFUKKwkJezAzOUJERjM1LTc0NjYtNEFENi1BNDg3LTQ2MERBQTI3OUNERX0uRGVidWd8QW55IENQVS5CdWlsZC4wID0gRGVidWd8QW55IENQVQorCQl7MDM5QkRGMzUtNzQ2Ni00QUQ2LUE0ODctNDYwREFBMjc5Q0RFfS5SZWxlYXNlfEFueSBDUFUuQWN0aXZlQ2ZnID0gUmVsZWFzZXxBbnkgQ1BVCisJCXswMzlCREYzNS03NDY2LTRBRDYtQTQ4Ny00NjBEQUEyNzlDREV9LlJlbGVhc2V8QW55IENQVS5CdWlsZC4wID0gUmVsZWFzZXxBbnkgQ1BVCisJCXtENDAzNEJGRC0yMUYxLTQ4MzYtQjBBMC0xQzQxNjFBQjAxMTB9LkRlYnVnfEFueSBDUFUuQWN0aXZlQ2ZnID0gRGVidWd8QW55IENQVQorCQl7RDQwMzRCRkQtMjFGMS00ODM2LUIwQTAtMUM0MTYxQUIwMTEwfS5EZWJ1Z3xBbnkgQ1BVLkJ1aWxkLjAgPSBEZWJ1Z3xBbnkgQ1BVCisJCXtENDAzNEJGRC0yMUYxLTQ4MzYtQjBBMC0xQzQxNjFBQjAxMTB9LlJlbGVhc2V8QW55IENQVS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFueSBDUFUKKwkJe0Q0MDM0QkZELTIxRjEtNDgzNi1CMEEwLTFDNDE2MUFCMDExMH0uUmVsZWFzZXxBbnkgQ1BVLkJ1aWxkLjAgPSBSZWxlYXNlfEFueSBDUFUKKwkJe0QwRDQ5QUM3LUZDRDktNEJFNi05QTcyLTMxMDg1MkQ0NzNBQ30uRGVidWd8QW55IENQVS5BY3RpdmVDZmcgPSBEZWJ1Z3xBbnkgQ1BVCisJCXtEMEQ0OUFDNy1GQ0Q5LTRCRTYtOUE3Mi0zMTA4NTJENDczQUN9LkRlYnVnfEFueSBDUFUuQnVpbGQuMCA9IERlYnVnfEFueSBDUFUKKwkJe0QwRDQ5QUM3LUZDRDktNEJFNi05QTcyLTMxMDg1MkQ0NzNBQ30uUmVsZWFzZXxBbnkgQ1BVLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QW55IENQVQorCQl7RDBENDlBQzctRkNEOS00QkU2LTlBNzItMzEwODUyRDQ3M0FDfS5SZWxlYXNlfEFueSBDUFUuQnVpbGQuMCA9IFJlbGVhc2V8QW55IENQVQorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbgorCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5R2xvYmFscykgPSBwb3N0U29sdXRpb24KKwkJU29sdXRpb25HdWlkID0gezUyQkVBMUMzLUY3Q0EtNDZEQS05RkYzLTgyNTczOTFDMjU4Q30KKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9BZHZpc29yeUNvbnN1bWVyLmNzIGIvc3JjL0Fkdmlzb3J5Q29uc3VtZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9BZHZpc29yeUNvbnN1bWVyLmNzCnJlbmFtZSB0byBzcmMvQWR2aXNvcnlDb25zdW1lci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0Jyb2tlckV4Y2VwdGlvbi5jcyBiL3NyYy9Ccm9rZXJFeGNlcHRpb24uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Ccm9rZXJFeGNlcHRpb24uY3MKcmVuYW1lIHRvIHNyYy9Ccm9rZXJFeGNlcHRpb24uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUUJsb2JNZXNzYWdlLmNzIGIvc3JjL0NvbW1hbmRzL0FjdGl2ZU1RQmxvYk1lc3NhZ2UuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUUJsb2JNZXNzYWdlLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQWN0aXZlTVFCbG9iTWVzc2FnZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlLmNzIGIvc3JjL0NvbW1hbmRzL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFCeXRlc01lc3NhZ2UuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9BY3RpdmVNUUJ5dGVzTWVzc2FnZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RRGVzdGluYXRpb24uY3MgYi9zcmMvQ29tbWFuZHMvQWN0aXZlTVFEZXN0aW5hdGlvbi5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RRGVzdGluYXRpb24uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9BY3RpdmVNUURlc3RpbmF0aW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFNYXBNZXNzYWdlLmNzIGIvc3JjL0NvbW1hbmRzL0FjdGl2ZU1RTWFwTWVzc2FnZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RTWFwTWVzc2FnZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0FjdGl2ZU1RTWFwTWVzc2FnZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RTWVzc2FnZS5jcyBiL3NyYy9Db21tYW5kcy9BY3RpdmVNUU1lc3NhZ2UuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUU1lc3NhZ2UuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9BY3RpdmVNUU1lc3NhZ2UuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUU9iamVjdE1lc3NhZ2UuY3MgYi9zcmMvQ29tbWFuZHMvQWN0aXZlTVFPYmplY3RNZXNzYWdlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFPYmplY3RNZXNzYWdlLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQWN0aXZlTVFPYmplY3RNZXNzYWdlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFRdWV1ZS5jcyBiL3NyYy9Db21tYW5kcy9BY3RpdmVNUVF1ZXVlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFRdWV1ZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0FjdGl2ZU1RUXVldWUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVN0cmVhbU1lc3NhZ2UuY3MgYi9zcmMvQ29tbWFuZHMvQWN0aXZlTVFTdHJlYW1NZXNzYWdlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFTdHJlYW1NZXNzYWdlLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQWN0aXZlTVFTdHJlYW1NZXNzYWdlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFUZW1wRGVzdGluYXRpb24uY3MgYi9zcmMvQ29tbWFuZHMvQWN0aXZlTVFUZW1wRGVzdGluYXRpb24uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbi5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFUZW1wUXVldWUuY3MgYi9zcmMvQ29tbWFuZHMvQWN0aXZlTVFUZW1wUXVldWUuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRlbXBRdWV1ZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0FjdGl2ZU1RVGVtcFF1ZXVlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFUZW1wVG9waWMuY3MgYi9zcmMvQ29tbWFuZHMvQWN0aXZlTVFUZW1wVG9waWMuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRlbXBUb3BpYy5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0FjdGl2ZU1RVGVtcFRvcGljLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFUZXh0TWVzc2FnZS5jcyBiL3NyYy9Db21tYW5kcy9BY3RpdmVNUVRleHRNZXNzYWdlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFUZXh0TWVzc2FnZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0FjdGl2ZU1RVGV4dE1lc3NhZ2UuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRvcGljLmNzIGIvc3JjL0NvbW1hbmRzL0FjdGl2ZU1RVG9waWMuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRvcGljLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQWN0aXZlTVFUb3BpYy5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Jhc2VDb21tYW5kLmNzIGIvc3JjL0NvbW1hbmRzL0Jhc2VDb21tYW5kLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQmFzZUNvbW1hbmQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9CYXNlQ29tbWFuZC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Jhc2VEYXRhU3RydWN0dXJlLmNzIGIvc3JjL0NvbW1hbmRzL0Jhc2VEYXRhU3RydWN0dXJlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQmFzZURhdGFTdHJ1Y3R1cmUuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9CYXNlRGF0YVN0cnVjdHVyZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Jvb2xlYW5FeHByZXNzaW9uLmNzIGIvc3JjL0NvbW1hbmRzL0Jvb2xlYW5FeHByZXNzaW9uLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQm9vbGVhbkV4cHJlc3Npb24uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Cb29sZWFuRXhwcmVzc2lvbi5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Jyb2tlckVycm9yLmNzIGIvc3JjL0NvbW1hbmRzL0Jyb2tlckVycm9yLmNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Ccm9rZXJFcnJvci5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0Jyb2tlckVycm9yLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQnJva2VySWQuY3MgYi9zcmMvQ29tbWFuZHMvQnJva2VySWQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Ccm9rZXJJZC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0Jyb2tlcklkLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQnJva2VySW5mby5jcyBiL3NyYy9Db21tYW5kcy9Ccm9rZXJJbmZvLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQnJva2VySW5mby5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0Jyb2tlckluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db21tYW5kLmNzIGIvc3JjL0NvbW1hbmRzL0NvbW1hbmQuY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0NvbW1hbmQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Db21tYW5kLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29ubmVjdGlvbkNvbnRyb2wuY3MgYi9zcmMvQ29tbWFuZHMvQ29ubmVjdGlvbkNvbnRyb2wuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db25uZWN0aW9uQ29udHJvbC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0Nvbm5lY3Rpb25Db250cm9sLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29ubmVjdGlvbkVycm9yLmNzIGIvc3JjL0NvbW1hbmRzL0Nvbm5lY3Rpb25FcnJvci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Nvbm5lY3Rpb25FcnJvci5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0Nvbm5lY3Rpb25FcnJvci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Nvbm5lY3Rpb25JZC5jcyBiL3NyYy9Db21tYW5kcy9Db25uZWN0aW9uSWQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db25uZWN0aW9uSWQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Db25uZWN0aW9uSWQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db25uZWN0aW9uSW5mby5jcyBiL3NyYy9Db21tYW5kcy9Db25uZWN0aW9uSW5mby5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Nvbm5lY3Rpb25JbmZvLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQ29ubmVjdGlvbkluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db25zdW1lckNvbnRyb2wuY3MgYi9zcmMvQ29tbWFuZHMvQ29uc3VtZXJDb250cm9sLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29uc3VtZXJDb250cm9sLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQ29uc3VtZXJDb250cm9sLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29uc3VtZXJJZC5jcyBiL3NyYy9Db21tYW5kcy9Db25zdW1lcklkLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29uc3VtZXJJZC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0NvbnN1bWVySWQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db25zdW1lckluZm8uY3MgYi9zcmMvQ29tbWFuZHMvQ29uc3VtZXJJbmZvLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29uc3VtZXJJbmZvLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvQ29uc3VtZXJJbmZvLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvQ29udHJvbENvbW1hbmQuY3MgYi9zcmMvQ29tbWFuZHMvQ29udHJvbENvbW1hbmQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Db250cm9sQ29tbWFuZC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0NvbnRyb2xDb21tYW5kLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvRGF0YUFycmF5UmVzcG9uc2UuY3MgYi9zcmMvQ29tbWFuZHMvRGF0YUFycmF5UmVzcG9uc2UuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9EYXRhQXJyYXlSZXNwb25zZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0RhdGFBcnJheVJlc3BvbnNlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvRGF0YVJlc3BvbnNlLmNzIGIvc3JjL0NvbW1hbmRzL0RhdGFSZXNwb25zZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0RhdGFSZXNwb25zZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0RhdGFSZXNwb25zZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0RhdGFTdHJ1Y3R1cmUuY3MgYi9zcmMvQ29tbWFuZHMvRGF0YVN0cnVjdHVyZS5jcwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvRGF0YVN0cnVjdHVyZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0RhdGFTdHJ1Y3R1cmUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9EYXRhU3RydWN0dXJlU3VwcG9ydC5jcyBiL3NyYy9Db21tYW5kcy9EYXRhU3RydWN0dXJlU3VwcG9ydC5jcwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvRGF0YVN0cnVjdHVyZVN1cHBvcnQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9EYXRhU3RydWN0dXJlU3VwcG9ydC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Rlc3RpbmF0aW9uSW5mby5jcyBiL3NyYy9Db21tYW5kcy9EZXN0aW5hdGlvbkluZm8uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9EZXN0aW5hdGlvbkluZm8uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9EZXN0aW5hdGlvbkluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9EaXNjb3ZlcnlFdmVudC5jcyBiL3NyYy9Db21tYW5kcy9EaXNjb3ZlcnlFdmVudC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0Rpc2NvdmVyeUV2ZW50LmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvRGlzY292ZXJ5RXZlbnQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9FeGNlcHRpb25SZXNwb25zZS5jcyBiL3NyYy9Db21tYW5kcy9FeGNlcHRpb25SZXNwb25zZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0V4Y2VwdGlvblJlc3BvbnNlLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvRXhjZXB0aW9uUmVzcG9uc2UuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9GbHVzaENvbW1hbmQuY3MgYi9zcmMvQ29tbWFuZHMvRmx1c2hDb21tYW5kLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvRmx1c2hDb21tYW5kLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvRmx1c2hDb21tYW5kLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvSW50ZWdlclJlc3BvbnNlLmNzIGIvc3JjL0NvbW1hbmRzL0ludGVnZXJSZXNwb25zZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0ludGVnZXJSZXNwb25zZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0ludGVnZXJSZXNwb25zZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0pvdXJuYWxRdWV1ZUFjay5jcyBiL3NyYy9Db21tYW5kcy9Kb3VybmFsUXVldWVBY2suY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Kb3VybmFsUXVldWVBY2suY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Kb3VybmFsUXVldWVBY2suY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Kb3VybmFsVG9waWNBY2suY3MgYi9zcmMvQ29tbWFuZHMvSm91cm5hbFRvcGljQWNrLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvSm91cm5hbFRvcGljQWNrLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvSm91cm5hbFRvcGljQWNrLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvSm91cm5hbFRyYWNlLmNzIGIvc3JjL0NvbW1hbmRzL0pvdXJuYWxUcmFjZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0pvdXJuYWxUcmFjZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL0pvdXJuYWxUcmFjZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0pvdXJuYWxUcmFuc2FjdGlvbi5jcyBiL3NyYy9Db21tYW5kcy9Kb3VybmFsVHJhbnNhY3Rpb24uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Kb3VybmFsVHJhbnNhY3Rpb24uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Kb3VybmFsVHJhbnNhY3Rpb24uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9LZWVwQWxpdmVJbmZvLmNzIGIvc3JjL0NvbW1hbmRzL0tlZXBBbGl2ZUluZm8uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9LZWVwQWxpdmVJbmZvLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvS2VlcEFsaXZlSW5mby5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL0xhc3RQYXJ0aWFsQ29tbWFuZC5jcyBiL3NyYy9Db21tYW5kcy9MYXN0UGFydGlhbENvbW1hbmQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9MYXN0UGFydGlhbENvbW1hbmQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9MYXN0UGFydGlhbENvbW1hbmQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9Mb2NhbFRyYW5zYWN0aW9uSWQuY3MgYi9zcmMvQ29tbWFuZHMvTG9jYWxUcmFuc2FjdGlvbklkLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTG9jYWxUcmFuc2FjdGlvbklkLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvTG9jYWxUcmFuc2FjdGlvbklkLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWFyc2hhbGxBd2FyZS5jcyBiL3NyYy9Db21tYW5kcy9NYXJzaGFsbEF3YXJlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWFyc2hhbGxBd2FyZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL01hcnNoYWxsQXdhcmUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9NZXNzYWdlLmNzIGIvc3JjL0NvbW1hbmRzL01lc3NhZ2UuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9NZXNzYWdlLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvTWVzc2FnZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL01lc3NhZ2VBY2suY3MgYi9zcmMvQ29tbWFuZHMvTWVzc2FnZUFjay5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL01lc3NhZ2VBY2suY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9NZXNzYWdlQWNrLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWVzc2FnZURpc3BhdGNoLmNzIGIvc3JjL0NvbW1hbmRzL01lc3NhZ2VEaXNwYXRjaC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL01lc3NhZ2VEaXNwYXRjaC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL01lc3NhZ2VEaXNwYXRjaC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbi5jcyBiL3NyYy9Db21tYW5kcy9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb24uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb24uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb24uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9NZXNzYWdlSWQuY3MgYi9zcmMvQ29tbWFuZHMvTWVzc2FnZUlkLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWVzc2FnZUlkLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvTWVzc2FnZUlkLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWVzc2FnZVB1bGwuY3MgYi9zcmMvQ29tbWFuZHMvTWVzc2FnZVB1bGwuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9NZXNzYWdlUHVsbC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL01lc3NhZ2VQdWxsLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWVzc2FnZVJlZmVyZW5jZS5jcyBiL3NyYy9Db21tYW5kcy9NZXNzYWdlUmVmZXJlbmNlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvTWVzc2FnZVJlZmVyZW5jZS5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL01lc3NhZ2VSZWZlcmVuY2UuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9OZXR3b3JrQnJpZGdlRmlsdGVyLmNzIGIvc3JjL0NvbW1hbmRzL05ldHdvcmtCcmlkZ2VGaWx0ZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9OZXR3b3JrQnJpZGdlRmlsdGVyLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvTmV0d29ya0JyaWRnZUZpbHRlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1BhcnRpYWxDb21tYW5kLmNzIGIvc3JjL0NvbW1hbmRzL1BhcnRpYWxDb21tYW5kLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvUGFydGlhbENvbW1hbmQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9QYXJ0aWFsQ29tbWFuZC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Byb2R1Y2VyQWNrLmNzIGIvc3JjL0NvbW1hbmRzL1Byb2R1Y2VyQWNrLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvUHJvZHVjZXJBY2suY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Qcm9kdWNlckFjay5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Byb2R1Y2VySWQuY3MgYi9zcmMvQ29tbWFuZHMvUHJvZHVjZXJJZC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Byb2R1Y2VySWQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9Qcm9kdWNlcklkLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvUHJvZHVjZXJJbmZvLmNzIGIvc3JjL0NvbW1hbmRzL1Byb2R1Y2VySW5mby5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Byb2R1Y2VySW5mby5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL1Byb2R1Y2VySW5mby5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1JlbW92ZUluZm8uY3MgYi9zcmMvQ29tbWFuZHMvUmVtb3ZlSW5mby5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1JlbW92ZUluZm8uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9SZW1vdmVJbmZvLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mby5jcyBiL3NyYy9Db21tYW5kcy9SZW1vdmVTdWJzY3JpcHRpb25JbmZvLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mby5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL1JlbW92ZVN1YnNjcmlwdGlvbkluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9SZXBsYXlDb21tYW5kLmNzIGIvc3JjL0NvbW1hbmRzL1JlcGxheUNvbW1hbmQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9SZXBsYXlDb21tYW5kLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvUmVwbGF5Q29tbWFuZC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Jlc3BvbnNlLmNzIGIvc3JjL0NvbW1hbmRzL1Jlc3BvbnNlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvUmVzcG9uc2UuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9SZXNwb25zZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Nlc3Npb25JZC5jcyBiL3NyYy9Db21tYW5kcy9TZXNzaW9uSWQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9TZXNzaW9uSWQuY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9TZXNzaW9uSWQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9TZXNzaW9uSW5mby5jcyBiL3NyYy9Db21tYW5kcy9TZXNzaW9uSW5mby5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1Nlc3Npb25JbmZvLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvU2Vzc2lvbkluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9TaHV0ZG93bkluZm8uY3MgYi9zcmMvQ29tbWFuZHMvU2h1dGRvd25JbmZvLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvU2h1dGRvd25JbmZvLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvU2h1dGRvd25JbmZvLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvU3Vic2NyaXB0aW9uSW5mby5jcyBiL3NyYy9Db21tYW5kcy9TdWJzY3JpcHRpb25JbmZvLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvU3Vic2NyaXB0aW9uSW5mby5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL1N1YnNjcmlwdGlvbkluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9UcmFuc2FjdGlvbklkLmNzIGIvc3JjL0NvbW1hbmRzL1RyYW5zYWN0aW9uSWQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9UcmFuc2FjdGlvbklkLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvVHJhbnNhY3Rpb25JZC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1RyYW5zYWN0aW9uSW5mby5jcyBiL3NyYy9Db21tYW5kcy9UcmFuc2FjdGlvbkluZm8uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21tYW5kcy9UcmFuc2FjdGlvbkluZm8uY3MKcmVuYW1lIHRvIHNyYy9Db21tYW5kcy9UcmFuc2FjdGlvbkluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9XaXJlRm9ybWF0SW5mby5jcyBiL3NyYy9Db21tYW5kcy9XaXJlRm9ybWF0SW5mby5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1dpcmVGb3JtYXRJbmZvLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvV2lyZUZvcm1hdEluZm8uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db21tYW5kcy9YQVRyYW5zYWN0aW9uSWQuY3MgYi9zcmMvQ29tbWFuZHMvWEFUcmFuc2FjdGlvbklkLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvWEFUcmFuc2FjdGlvbklkLmNzCnJlbmFtZSB0byBzcmMvQ29tbWFuZHMvWEFUcmFuc2FjdGlvbklkLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29tbWFuZHMvWGlkLmNzIGIvc3JjL0NvbW1hbmRzL1hpZC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0NvbW1hbmRzL1hpZC5jcwpyZW5hbWUgdG8gc3JjL0NvbW1hbmRzL1hpZC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbXByZXNzaW9uUG9saWN5LmNzIGIvc3JjL0NvbXByZXNzaW9uUG9saWN5LmNzCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db21wcmVzc2lvblBvbGljeS5jcwpyZW5hbWUgdG8gc3JjL0NvbXByZXNzaW9uUG9saWN5LmNzCmluZGV4IDdjOTlmZjUuLjY4ZDg2NGEgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9Db21wcmVzc2lvblBvbGljeS5jcworKysgYi9zcmMvQ29tcHJlc3Npb25Qb2xpY3kuY3MKQEAgLTE2LDI0ICsxNiwyMCBAQAogICovCiAKIHVzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5JTy5Db21wcmVzc2lvbjsKIAogbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEKIHsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIERlZmF1bHQgQ29tcHJlc3Npb24gcG9saWN5IGZvciBOTVMuQWN0aXZlTVEgdXNlcyB0aGUgYnVpbHQgaW4gR1ppcFN0cmVhbQotICAgIC8vLyB0byBjb21wcmVzcyBhbmQgZGVjb21wcmVzcyB0aGUgbWVzc2FnZSBib2R5LiAgVGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi0gICAgLy8vIGNvbXByZXNzaW9uIHVzZWQgYnkgQWN0aXZlTVEgc28gdXNlcnMgc2hvdWxkIHVzZSB0aGlzIHdpdGggY2F1dGlvbi4KLSAgICAvLy8gPC9zdW1tYXJ5PgogICAgIHB1YmxpYyBjbGFzcyBDb21wcmVzc2lvblBvbGljeSA6IElDb21wcmVzc2lvblBvbGljeQogICAgIHsKICAgICAgICAgcHVibGljIFN0cmVhbSBDcmVhdGVDb21wcmVzc2lvblN0cmVhbShTdHJlYW0gZGF0YSkKICAgICAgICAgewotCQkJcmV0dXJuIG5ldyBJb25pYy5abGliLlpsaWJTdHJlYW0oZGF0YSwgSW9uaWMuWmxpYi5Db21wcmVzc2lvbk1vZGUuQ29tcHJlc3MpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBHWmlwU3RyZWFtKGRhdGEsIENvbXByZXNzaW9uTW9kZS5Db21wcmVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgU3RyZWFtIENyZWF0ZURlY29tcHJlc3Npb25TdHJlYW0oU3RyZWFtIGRhdGEpCiAgICAgICAgIHsKLQkJCXJldHVybiBuZXcgSW9uaWMuWmxpYi5abGliU3RyZWFtKGRhdGEsIElvbmljLlpsaWIuQ29tcHJlc3Npb25Nb2RlLkRlY29tcHJlc3MpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBHWmlwU3RyZWFtKGRhdGEsIENvbXByZXNzaW9uTW9kZS5EZWNvbXByZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBvYmplY3QgQ2xvbmUoKQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0Nvbm5lY3Rpb24uY3MgYi9zcmMvQ29ubmVjdGlvbi5jcwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db25uZWN0aW9uLmNzCnJlbmFtZSB0byBzcmMvQ29ubmVjdGlvbi5jcwppbmRleCAxMDgzMmIzLi5hZGFlNDgzCi0tLSBhL3NyYy9tYWluL2NzaGFycC9Db25uZWN0aW9uLmNzCisrKyBiL3NyYy9Db25uZWN0aW9uLmNzCkBAIC0yMSw3ICsyMSw2IEBACiB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKIHVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CiB1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKLXVzaW5nIFN5c3RlbS5SdW50aW1lLlJlbW90aW5nOwogdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5Db21tYW5kczsKIHVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkczsKIHVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0Nvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24uY3MgYi9zcmMvQ29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbi5jcwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbi5jcwpyZW5hbWUgdG8gc3JjL0Nvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9Db25uZWN0aW9uRmFjdG9yeS5jcyBiL3NyYy9Db25uZWN0aW9uRmFjdG9yeS5jcwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvQ29ubmVjdGlvbkZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9Db25uZWN0aW9uRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0Nvbm5lY3Rpb25GYWlsZWRFeGNlcHRpb24uY3MgYi9zcmMvQ29ubmVjdGlvbkZhaWxlZEV4Y2VwdGlvbi5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0Nvbm5lY3Rpb25GYWlsZWRFeGNlcHRpb24uY3MKcmVuYW1lIHRvIHNyYy9Db25uZWN0aW9uRmFpbGVkRXhjZXB0aW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvQ29ubmVjdGlvbk1ldGFEYXRhLmNzIGIvc3JjL0Nvbm5lY3Rpb25NZXRhRGF0YS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0Nvbm5lY3Rpb25NZXRhRGF0YS5jcwpyZW5hbWUgdG8gc3JjL0Nvbm5lY3Rpb25NZXRhRGF0YS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL0NvbnN1bWVyQ2xvc2VkRXhjZXB0aW9uLmNzIGIvc3JjL0NvbnN1bWVyQ2xvc2VkRXhjZXB0aW9uLmNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9Db25zdW1lckNsb3NlZEV4Y2VwdGlvbi5jcwpyZW5hbWUgdG8gc3JjL0NvbnN1bWVyQ2xvc2VkRXhjZXB0aW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvRGVzdGluYXRpb25GaWx0ZXIuY3MgYi9zcmMvRGVzdGluYXRpb25GaWx0ZXIuY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0Rlc3RpbmF0aW9uRmlsdGVyLmNzCnJlbmFtZSB0byBzcmMvRGVzdGluYXRpb25GaWx0ZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9JQ29tcHJlc3Npb25Qb2xpY3kuY3MgYi9zcmMvSUNvbXByZXNzaW9uUG9saWN5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvSUNvbXByZXNzaW9uUG9saWN5LmNzCnJlbmFtZSB0byBzcmMvSUNvbXByZXNzaW9uUG9saWN5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvSURpc3BhdGNoZXIuY3MgYi9zcmMvSURpc3BhdGNoZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9JRGlzcGF0Y2hlci5jcwpyZW5hbWUgdG8gc3JjL0lEaXNwYXRjaGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvSU9FeGNlcHRpb24uY3MgYi9zcmMvSU9FeGNlcHRpb24uY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL0lPRXhjZXB0aW9uLmNzCnJlbmFtZSB0byBzcmMvSU9FeGNlcHRpb24uY3MKaW5kZXggYWU4YzQ3YS4uNDQ5NGE3NiAxMDA2NDQKLS0tIGEvc3JjL21haW4vY3NoYXJwL0lPRXhjZXB0aW9uLmNzCisrKyBiL3NyYy9JT0V4Y2VwdGlvbi5jcwpAQCAtMSw0NSArMSw0NSBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLQ0KLW5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RDQotew0KLQ0KLQkvLy8gPHN1bW1hcnk+DQotCS8vLyBFeGNlcHRpb24gdGhyb3duIHdoZW4gYW4gSU8gZXJyb3Igb2NjdXJzDQotCS8vLyA8L3N1bW1hcnk+DQotCXB1YmxpYyBjbGFzcyBJT0V4Y2VwdGlvbiA6IE5NU0V4Y2VwdGlvbg0KLQl7DQotCQlwdWJsaWMgSU9FeGNlcHRpb24oKQ0KLQkJCTogYmFzZSgiSU8gRXhjZXB0aW9uIGZhaWxlZCB3aXRoIG1pc3NpbmcgZXhjZXB0aW9uIGxvZyIpDQotCQl7DQotCQl9DQotDQotCQlwdWJsaWMgSU9FeGNlcHRpb24oU3RyaW5nIG1zZykNCi0JCQk6IGJhc2UobXNnKQ0KLQkJew0KLQkJfQ0KLQ0KLQkJcHVibGljIElPRXhjZXB0aW9uKFN0cmluZyBtc2csIEV4Y2VwdGlvbiBpbm5lcikNCi0JCQk6IGJhc2UobXNnLCBpbm5lcikNCi0JCXsNCi0JCX0NCi0JfQ0KLX0NCi0NCi0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtOworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUQoreworCisJLy8vIDxzdW1tYXJ5PgorCS8vLyBFeGNlcHRpb24gdGhyb3duIHdoZW4gYW4gSU8gZXJyb3Igb2NjdXJzCisJLy8vIDwvc3VtbWFyeT4KKwlwdWJsaWMgY2xhc3MgSU9FeGNlcHRpb24gOiBOTVNFeGNlcHRpb24KKwl7CisJCXB1YmxpYyBJT0V4Y2VwdGlvbigpCisJCQk6IGJhc2UoIklPIEV4Y2VwdGlvbiBmYWlsZWQgd2l0aCBtaXNzaW5nIGV4Y2VwdGlvbiBsb2ciKQorCQl7CisJCX0KKworCQlwdWJsaWMgSU9FeGNlcHRpb24oU3RyaW5nIG1zZykKKwkJCTogYmFzZShtc2cpCisJCXsKKwkJfQorCisJCXB1YmxpYyBJT0V4Y2VwdGlvbihTdHJpbmcgbXNnLCBFeGNlcHRpb24gaW5uZXIpCisJCQk6IGJhc2UobXNnLCBpbm5lcikKKwkJeworCQl9CisJfQorfQorCisKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9JU3luY2hyb25pemF0aW9uLmNzIGIvc3JjL0lTeW5jaHJvbml6YXRpb24uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9JU3luY2hyb25pemF0aW9uLmNzCnJlbmFtZSB0byBzcmMvSVN5bmNocm9uaXphdGlvbi5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL01lc3NhZ2VDb25zdW1lci5jcyBiL3NyYy9NZXNzYWdlQ29uc3VtZXIuY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL01lc3NhZ2VDb25zdW1lci5jcwpyZW5hbWUgdG8gc3JjL01lc3NhZ2VDb25zdW1lci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL01lc3NhZ2VQcm9kdWNlci5jcyBiL3NyYy9NZXNzYWdlUHJvZHVjZXIuY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL01lc3NhZ2VQcm9kdWNlci5jcwpyZW5hbWUgdG8gc3JjL01lc3NhZ2VQcm9kdWNlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL05ldFR4Q29ubmVjdGlvbi5jcyBiL3NyYy9OZXRUeENvbm5lY3Rpb24uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9OZXRUeENvbm5lY3Rpb24uY3MKcmVuYW1lIHRvIHNyYy9OZXRUeENvbm5lY3Rpb24uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9OZXRUeENvbm5lY3Rpb25GYWN0b3J5LmNzIGIvc3JjL05ldFR4Q29ubmVjdGlvbkZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9OZXRUeENvbm5lY3Rpb25GYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvTmV0VHhDb25uZWN0aW9uRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL05ldFR4TWVzc2FnZUNvbnN1bWVyLmNzIGIvc3JjL05ldFR4TWVzc2FnZUNvbnN1bWVyLmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9OZXRUeE1lc3NhZ2VDb25zdW1lci5jcwpyZW5hbWUgdG8gc3JjL05ldFR4TWVzc2FnZUNvbnN1bWVyLmNzCmluZGV4IGY0ZWYxMDkuLmUwYjE2ZTcgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9OZXRUeE1lc3NhZ2VDb25zdW1lci5jcworKysgYi9zcmMvTmV0VHhNZXNzYWdlQ29uc3VtZXIuY3MKQEAgLTEsMTE1ICsxLDExNSBAQAot77u/LyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOw0KLXVzaW5nIFN5c3RlbS5UZXh0Ow0KLXVzaW5nIFN5c3RlbS5UcmFuc2FjdGlvbnM7DQotdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5Db21tYW5kczsNCi0NCi1uYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUQ0KLXsNCi0gICAgcHVibGljIHNlYWxlZCBjbGFzcyBOZXRUeE1lc3NhZ2VDb25zdW1lciA6IE1lc3NhZ2VDb25zdW1lcg0KLSAgICB7DQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IE5ldFR4U2Vzc2lvbiBzZXNzaW9uOw0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBOZXRUeFRyYW5zYWN0aW9uQ29udGV4dCB0cmFuc2FjdGlvbkNvbnRleHQ7DQotDQotICAgICAgICBpbnRlcm5hbCBOZXRUeE1lc3NhZ2VDb25zdW1lcihTZXNzaW9uIHNlc3Npb24sIENvbnN1bWVySWQgaWQsIEFjdGl2ZU1RRGVzdGluYXRpb24gZGVzdGluYXRpb24sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIG5hbWUsIHN0cmluZyBzZWxlY3RvciwgaW50IHByZWZldGNoLCBpbnQgbWF4UGVuZGluZ01lc3NhZ2VDb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9Mb2NhbCwgYm9vbCBicm93c2VyLCBib29sIGRpc3BhdGNoQXN5bmMpIDogDQotICAgICAgICAgICAgYmFzZShzZXNzaW9uLCBpZCwgZGVzdGluYXRpb24sIG5hbWUsIHNlbGVjdG9yLCBwcmVmZXRjaCwNCi0gICAgICAgICAgICAgICAgIG1heFBlbmRpbmdNZXNzYWdlQ291bnQsIG5vTG9jYWwsIGJyb3dzZXIsIGRpc3BhdGNoQXN5bmMpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbiBhcyBOZXRUeFNlc3Npb247DQotICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkNvbnRleHQgPSBzZXNzaW9uLlRyYW5zYWN0aW9uQ29udGV4dCBhcyBOZXRUeFRyYW5zYWN0aW9uQ29udGV4dDsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIENsb3NlKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAodGhpcy5DbG9zZWQpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIGxvY2sgKHRoaXMudHJhbnNhY3Rpb25Db250ZXh0LlN5bmNSb290KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5Jc1RyYW5zYWN0ZWQgfHwgdGhpcy5zZXNzaW9uLlRyYW5zYWN0aW9uQ29udGV4dC5JblRyYW5zYWN0aW9uKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWdGb3JtYXQoIkNvbnN1bWVyIHswfSBSZWdpc3RlcmluZyBuZXcgQ29uc3VtZXJDbG9zZVN5bmNocm9uaXphdGlvbiIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Db25zdW1lcklkKTsNCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5UcmFuc2FjdGlvbkNvbnRleHQuQWRkU3luY2hyb25pemF0aW9uKA0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb25zdW1lckNsb3NlU3luY2hyb25pemF0aW9uKHRoaXMpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1Z0Zvcm1hdCgiQ29uc3VtZXIgezB9IE5vIEFjdGl2ZSBUWCBjbG9zaW5nIG5vcm1hbGx5LiIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Db25zdW1lcklkKTsNCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuRG9DbG9zZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIEJlZm9yZU1lc3NhZ2VJc0NvbnN1bWVkKE1lc3NhZ2VEaXNwYXRjaCBkaXNwYXRjaCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoIUlzQXV0b0Fja25vd2xlZGdlQmF0Y2gpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLklzVHJhbnNhY3RlZCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCB3YWl0Rm9yRHRjV2FpdEhhbmRsZSA9IGZhbHNlOw0KLSAgICAgICAgICAgICAgICAgICAgbG9jayAodGhpcy50cmFuc2FjdGlvbkNvbnRleHQuU3luY1Jvb3QpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbnN1bWVyIGlzIG9wZXJhdGluZyBpbiBjb25jZXJ0IHdpdGggYQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGVkIFRYIG1hbmFnZXIgd2UgbmVlZCB0byB3YWl0IHdoZW5ldmVyIHRoZSBUWCBpcyBiZWluZw0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xsZWQgYnkgdGhlIERUQyBhcyBpdCBjb21wbGV0ZXMgYWxsIG9wZXJhdGlvbnMgYXN5bmMgYW5kDQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IHN0YXJ0IGNvbnN1bXB0aW9uIGFnYWluIHVudGlsIGFsbCBpdHMgdGFza3MgaGF2ZSBjb21wbGV0ZWQuKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uQ29udGV4dC5UcmFuc2FjdGlvbklkIGFzIFhBVHJhbnNhY3Rpb25JZDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgY3VycmVudExvY2FsVHhJZCA9IGN1cnJlbnRUcmFuc2FjdGlvbklkICE9IG51bGwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBVVEY4RW5jb2RpbmcuVVRGOC5HZXRTdHJpbmcoY3VycmVudFRyYW5zYWN0aW9uSWQuR2xvYmFsVHJhbnNhY3Rpb25JZCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiTk9ORSI7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRyYW5zYWN0aW9uLkN1cnJlbnQgIT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRGb3JEdGNXYWl0SGFuZGxlID0gdGhpcy50cmFuc2FjdGlvbkNvbnRleHQuSW5OZXRUcmFuc2FjdGlvbiAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkNvbnRleHQuTmV0VHhTdGF0ZSA9PSBOZXRUeFRyYW5zYWN0aW9uQ29udGV4dC5UeFN0YXRlLlBlbmRpbmcgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2NhbFR4SWQgIT0gVHJhbnNhY3Rpb24uQ3VycmVudC5UcmFuc2FjdGlvbkluZm9ybWF0aW9uLkxvY2FsSWRlbnRpZmllcjsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvckR0Y1dhaXRIYW5kbGUgPSB0aGlzLnRyYW5zYWN0aW9uQ29udGV4dC5Jbk5ldFRyYW5zYWN0aW9uICYmDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uQ29udGV4dC5OZXRUeFN0YXRlID09IE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0LlR4U3RhdGUuUGVuZGluZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAvL2lmIHNlc3Npb24gRW5saXN0TXNEdGNOYXRpdmVSZXNvdXJjZSB0aGUgdHJhbnNhY3Rpb24gZG9lcyBub3QgbmVlZCB0byB3YWl0DQotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLkVubGlzdHNNc0R0Y05hdGl2ZVJlc291cmNlKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRGb3JEdGNXYWl0SGFuZGxlID0gZmFsc2U7DQotICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICBpZiAod2FpdEZvckR0Y1dhaXRIYW5kbGUpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkNvbnRleHQuRHRjV2FpdEhhbmRsZS5XYWl0T25lKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgYmFzZS5CZWZvcmVNZXNzYWdlSXNDb25zdW1lZChkaXNwYXRjaCk7DQotICAgICAgICB9DQotDQotICAgIH0NCi19DQor77u/LyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLlRleHQ7Cit1c2luZyBTeXN0ZW0uVHJhbnNhY3Rpb25zOwordXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5Db21tYW5kczsKKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEKK3sKKyAgICBwdWJsaWMgc2VhbGVkIGNsYXNzIE5ldFR4TWVzc2FnZUNvbnN1bWVyIDogTWVzc2FnZUNvbnN1bWVyCisgICAgeworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IE5ldFR4U2Vzc2lvbiBzZXNzaW9uOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0IHRyYW5zYWN0aW9uQ29udGV4dDsKKworICAgICAgICBpbnRlcm5hbCBOZXRUeE1lc3NhZ2VDb25zdW1lcihTZXNzaW9uIHNlc3Npb24sIENvbnN1bWVySWQgaWQsIEFjdGl2ZU1RRGVzdGluYXRpb24gZGVzdGluYXRpb24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbmFtZSwgc3RyaW5nIHNlbGVjdG9yLCBpbnQgcHJlZmV0Y2gsIGludCBtYXhQZW5kaW5nTWVzc2FnZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vTG9jYWwsIGJvb2wgYnJvd3NlciwgYm9vbCBkaXNwYXRjaEFzeW5jKSA6IAorICAgICAgICAgICAgYmFzZShzZXNzaW9uLCBpZCwgZGVzdGluYXRpb24sIG5hbWUsIHNlbGVjdG9yLCBwcmVmZXRjaCwKKyAgICAgICAgICAgICAgICAgbWF4UGVuZGluZ01lc3NhZ2VDb3VudCwgbm9Mb2NhbCwgYnJvd3NlciwgZGlzcGF0Y2hBc3luYykKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbiBhcyBOZXRUeFNlc3Npb247CisgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uQ29udGV4dCA9IHNlc3Npb24uVHJhbnNhY3Rpb25Db250ZXh0IGFzIE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgQ2xvc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcy5DbG9zZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2NrICh0aGlzLnRyYW5zYWN0aW9uQ29udGV4dC5TeW5jUm9vdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLklzVHJhbnNhY3RlZCB8fCB0aGlzLnNlc3Npb24uVHJhbnNhY3Rpb25Db250ZXh0LkluVHJhbnNhY3Rpb24pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWdGb3JtYXQoIkNvbnN1bWVyIHswfSBSZWdpc3RlcmluZyBuZXcgQ29uc3VtZXJDbG9zZVN5bmNocm9uaXphdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkNvbnN1bWVySWQpOworICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uVHJhbnNhY3Rpb25Db250ZXh0LkFkZFN5bmNocm9uaXphdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb25zdW1lckNsb3NlU3luY2hyb25pemF0aW9uKHRoaXMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJDb25zdW1lciB7MH0gTm8gQWN0aXZlIFRYIGNsb3Npbmcgbm9ybWFsbHkuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuQ29uc3VtZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuRG9DbG9zZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBCZWZvcmVNZXNzYWdlSXNDb25zdW1lZChNZXNzYWdlRGlzcGF0Y2ggZGlzcGF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghSXNBdXRvQWNrbm93bGVkZ2VCYXRjaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLklzVHJhbnNhY3RlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgd2FpdEZvckR0Y1dhaXRIYW5kbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbG9jayAodGhpcy50cmFuc2FjdGlvbkNvbnRleHQuU3luY1Jvb3QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBjb25zdW1lciBpcyBvcGVyYXRpbmcgaW4gY29uY2VydCB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGVkIFRYIG1hbmFnZXIgd2UgbmVlZCB0byB3YWl0IHdoZW5ldmVyIHRoZSBUWCBpcyBiZWluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlZCBieSB0aGUgRFRDIGFzIGl0IGNvbXBsZXRlcyBhbGwgb3BlcmF0aW9ucyBhc3luYyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBzdGFydCBjb25zdW1wdGlvbiBhZ2FpbiB1bnRpbCBhbGwgaXRzIHRhc2tzIGhhdmUgY29tcGxldGVkLikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uQ29udGV4dC5UcmFuc2FjdGlvbklkIGFzIFhBVHJhbnNhY3Rpb25JZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjdXJyZW50TG9jYWxUeElkID0gY3VycmVudFRyYW5zYWN0aW9uSWQgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gVVRGOEVuY29kaW5nLlVURjguR2V0U3RyaW5nKGN1cnJlbnRUcmFuc2FjdGlvbklkLkdsb2JhbFRyYW5zYWN0aW9uSWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiTk9ORSI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUcmFuc2FjdGlvbi5DdXJyZW50ICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvckR0Y1dhaXRIYW5kbGUgPSB0aGlzLnRyYW5zYWN0aW9uQ29udGV4dC5Jbk5ldFRyYW5zYWN0aW9uICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Db250ZXh0Lk5ldFR4U3RhdGUgPT0gTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuVHhTdGF0ZS5QZW5kaW5nIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2NhbFR4SWQgIT0gVHJhbnNhY3Rpb24uQ3VycmVudC5UcmFuc2FjdGlvbkluZm9ybWF0aW9uLkxvY2FsSWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0Rm9yRHRjV2FpdEhhbmRsZSA9IHRoaXMudHJhbnNhY3Rpb25Db250ZXh0LkluTmV0VHJhbnNhY3Rpb24gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkNvbnRleHQuTmV0VHhTdGF0ZSA9PSBOZXRUeFRyYW5zYWN0aW9uQ29udGV4dC5UeFN0YXRlLlBlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vaWYgc2Vzc2lvbiBFbmxpc3RNc0R0Y05hdGl2ZVJlc291cmNlIHRoZSB0cmFuc2FjdGlvbiBkb2VzIG5vdCBuZWVkIHRvIHdhaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5Fbmxpc3RzTXNEdGNOYXRpdmVSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvckR0Y1dhaXRIYW5kbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0Rm9yRHRjV2FpdEhhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkNvbnRleHQuRHRjV2FpdEhhbmRsZS5XYWl0T25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJhc2UuQmVmb3JlTWVzc2FnZUlzQ29uc3VtZWQoZGlzcGF0Y2gpOworICAgICAgICB9CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvTmV0VHhSZWNvdmVyeVBvbGljeS5jcyBiL3NyYy9OZXRUeFJlY292ZXJ5UG9saWN5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvTmV0VHhSZWNvdmVyeVBvbGljeS5jcwpyZW5hbWUgdG8gc3JjL05ldFR4UmVjb3ZlcnlQb2xpY3kuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9OZXRUeFNlc3Npb24uY3MgYi9zcmMvTmV0VHhTZXNzaW9uLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvTmV0VHhTZXNzaW9uLmNzCnJlbmFtZSB0byBzcmMvTmV0VHhTZXNzaW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuY3MgYi9zcmMvTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL05ldFR4VHJhbnNhY3Rpb25Db250ZXh0LmNzCnJlbmFtZSB0byBzcmMvTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuY3MKaW5kZXggZjBlYjVmNi4uOTJiMmY3MSAxMDA2NDQKLS0tIGEvc3JjL21haW4vY3NoYXJwL05ldFR4VHJhbnNhY3Rpb25Db250ZXh0LmNzCisrKyBiL3NyYy9OZXRUeFRyYW5zYWN0aW9uQ29udGV4dC5jcwpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1Z0Zvcm1hdCgiVHJhbnNhY3Rpb25bezB9XSBDb21taXQgZmFpbGVkIHdpdGggZXJyb3I6IHsxfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRyYW5zYWN0aW9uSWQsIGV4Lk1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLk9uQXN5bmNFeGNlcHRpb24oZXgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXJyb3IpCkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgQWZ0ZXJSb2xsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICBlbmxpc3RtZW50LkRvbmUoKTsKICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5PbkFzeW5jRXhjZXB0aW9uKGV4KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGVycm9yKQpAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRyYW5zYWN0aW9uSWQsIGV4Lk1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgICBBZnRlclJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uT25Bc3luY0V4Y2VwdGlvbihleCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlcnJvcikKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9CYXNlRGF0YVN0cmVhbU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvQmFzZURhdGFTdHJlYW1NYXJzaGFsbGVyLmNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9CYXNlRGF0YVN0cmVhbU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9CYXNlRGF0YVN0cmVhbU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9Cb29sZWFuU3RyZWFtLmNzIGIvc3JjL09wZW5XaXJlL0Jvb2xlYW5TdHJlYW0uY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL0Jvb2xlYW5TdHJlYW0uY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9Cb29sZWFuU3RyZWFtLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvSU1hcnNoYWxsZXJGYWN0b3J5LmNzIGIvc3JjL09wZW5XaXJlL0lNYXJzaGFsbGVyRmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL0lNYXJzaGFsbGVyRmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL0lNYXJzaGFsbGVyRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL09wZW5XaXJlRm9ybWF0LmNzIGIvc3JjL09wZW5XaXJlL09wZW5XaXJlRm9ybWF0LmNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9PcGVuV2lyZUZvcm1hdC5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL09wZW5XaXJlRm9ybWF0LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0Jyb2tlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0RhdGFTdHJ1Y3R1cmVTdXBwb3J0TWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9EYXRhU3RydWN0dXJlU3VwcG9ydE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EYXRhU3RydWN0dXJlU3VwcG9ydE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9EYXRhU3RydWN0dXJlU3VwcG9ydE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL01hcnNoYWxsZXJGYWN0b3J5LmNzIGIvc3JjL09wZW5XaXJlL1YxL01hcnNoYWxsZXJGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTWFyc2hhbGxlckZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9NYXJzaGFsbGVyRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxL1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxL1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMS9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMS9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMS9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxL1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQnJva2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQnJva2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0Jyb2tlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9NYXJzaGFsbGVyRmFjdG9yeS5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvTWFyc2hhbGxlckZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvTWFyc2hhbGxlckZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvTWFyc2hhbGxlckZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1Jlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvU2Vzc2lvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YxMC9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMTAvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjEwL1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjEwL1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YxMC9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMTAvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMTAvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YxMC9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjEwL1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQnJva2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0Jyb2tlcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0Jyb2tlcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0Jyb2tlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9NYXJzaGFsbGVyRmFjdG9yeS5jcyBiL3NyYy9PcGVuV2lyZS9WMi9NYXJzaGFsbGVyRmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL01hcnNoYWxsZXJGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvTWFyc2hhbGxlckZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvTWVzc2FnZUlkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9NZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL01lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1Jlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9SZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMi9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMi9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjIvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjIvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YyL1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YyL1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjIvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YyL1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMi9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Jyb2tlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTWFyc2hhbGxlckZhY3RvcnkuY3MgYi9zcmMvT3BlbldpcmUvVjMvTWFyc2hhbGxlckZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9NYXJzaGFsbGVyRmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL01hcnNoYWxsZXJGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL01lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvU2Vzc2lvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjMvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjMvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1YzL1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1YzL1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WMy9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WMy9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1YzL1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WMy9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjMvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvQnJva2VySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQnJva2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQnJva2VySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQnJva2VySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Db25zdW1lcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L01hcnNoYWxsZXJGYWN0b3J5LmNzIGIvc3JjL09wZW5XaXJlL1Y0L01hcnNoYWxsZXJGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTWFyc2hhbGxlckZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9NYXJzaGFsbGVyRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y0L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y0L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNC9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNC9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjQvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjQvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNC9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjQvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y0L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQnJva2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0Jyb2tlcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0Jyb2tlcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0Jyb2tlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9NYXJzaGFsbGVyRmFjdG9yeS5jcyBiL3NyYy9PcGVuV2lyZS9WNS9NYXJzaGFsbGVyRmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L01hcnNoYWxsZXJGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvTWFyc2hhbGxlckZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvTWVzc2FnZUlkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9NZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L01lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1Jlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9SZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNS9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNS9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjUvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjUvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y1L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y1L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjUvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y1L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNS9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Jyb2tlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTWFyc2hhbGxlckZhY3RvcnkuY3MgYi9zcmMvT3BlbldpcmUvVjYvTWFyc2hhbGxlckZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9NYXJzaGFsbGVyRmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L01hcnNoYWxsZXJGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L01lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvU2Vzc2lvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjYvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjYvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y2L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y2L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNi9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNi9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y2L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNi9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjYvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvQnJva2VySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQnJva2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQnJva2VySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQnJva2VySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Db25zdW1lcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L01hcnNoYWxsZXJGYWN0b3J5LmNzIGIvc3JjL09wZW5XaXJlL1Y3L01hcnNoYWxsZXJGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTWFyc2hhbGxlckZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9NYXJzaGFsbGVyRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9NZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1Jlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y3L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y3L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WNy9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WNy9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjcvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjcvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WNy9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjcvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y3L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUUJ5dGVzTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RVGVtcFRvcGljTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9CYXNlQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQnJva2VySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0Jyb2tlcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0Jyb2tlcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0Jyb2tlcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25Db250cm9sTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQ29ubmVjdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Db250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9EaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvRXhjZXB0aW9uUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9NYXJzaGFsbGVyRmFjdG9yeS5jcyBiL3NyYy9PcGVuV2lyZS9WOC9NYXJzaGFsbGVyRmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L01hcnNoYWxsZXJGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvTWFyc2hhbGxlckZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvTWVzc2FnZUlkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9NZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L01lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9NZXNzYWdlUHVsbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvUGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1Byb2R1Y2VyQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1Jlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9SZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1Nlc3Npb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOC9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOC9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjgvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjgvV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y4L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y4L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjgvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y4L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOC9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RQmxvYk1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUU1hcE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUU1lc3NhZ2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUVF1ZXVlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFTdHJlYW1NZXNzYWdlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0FjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9BY3RpdmVNUVRlbXBRdWV1ZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9BY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0FjdGl2ZU1RVG9waWNNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0Jhc2VDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Jyb2tlcklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9Ccm9rZXJJZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Ccm9rZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Jyb2tlckluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvQnJva2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Db25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Db25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0Nvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0Nvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Db25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvQ29ubmVjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Nvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9Db25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0NvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Db25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0NvbnN1bWVySWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9Db25zdW1lcklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvQ29uc3VtZXJJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0NvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9Db25zdW1lckluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0NvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0RhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9EYXRhQXJyYXlSZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0RhdGFSZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9EYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvRGVzdGluYXRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Rlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9EZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvRGlzY292ZXJ5RXZlbnRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0Rpc2NvdmVyeUV2ZW50TWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0V4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9FeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0ZsdXNoQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9GbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0ludGVnZXJSZXNwb25zZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9JbnRlZ2VyUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Kb3VybmFsUXVldWVBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0pvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0pvdXJuYWxUb3BpY0Fja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Kb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0pvdXJuYWxUcmFjZU1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9Kb3VybmFsVHJhY2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Kb3VybmFsVHJhbnNhY3Rpb25NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L0pvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9LZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0tlZXBBbGl2ZUluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L0xhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9MYXN0UGFydGlhbENvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvTGFzdFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvTG9jYWxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L0xvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9Mb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTWFyc2hhbGxlckZhY3RvcnkuY3MgYi9zcmMvT3BlbldpcmUvVjkvTWFyc2hhbGxlckZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9NYXJzaGFsbGVyRmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L01hcnNoYWxsZXJGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvTWVzc2FnZUFja01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9NZXNzYWdlQWNrTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L01lc3NhZ2VBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9NZXNzYWdlRGlzcGF0Y2hNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L01lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L01lc3NhZ2VEaXNwYXRjaE5vdGlmaWNhdGlvbk1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9NZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvTWVzc2FnZUlkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L01lc3NhZ2VJZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9NZXNzYWdlSWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTWVzc2FnZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvTWVzc2FnZU1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9NZXNzYWdlTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L01lc3NhZ2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L01lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L05ldHdvcmtCcmlkZ2VGaWx0ZXJNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9OZXR3b3JrQnJpZGdlRmlsdGVyTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1BhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9QYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Qcm9kdWNlckFja01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvUHJvZHVjZXJJZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9Qcm9kdWNlcklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L1Byb2R1Y2VySWRNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9Qcm9kdWNlckluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L1Byb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9SZW1vdmVJbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1JlbW92ZUluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9SZW1vdmVTdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1JlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvUmVtb3ZlU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9SZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1JlcGxheUNvbW1hbmRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9SZXNwb25zZU1hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvUmVzcG9uc2VNYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvU2Vzc2lvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9TZXNzaW9uSWRNYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvU2Vzc2lvbklkTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L1Nlc3Npb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9TZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MgYi9zcmMvT3BlbldpcmUvVjkvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9TaHV0ZG93bkluZm9NYXJzaGFsbGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvT3BlbldpcmUvVjkvU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcwpyZW5hbWUgdG8gc3JjL09wZW5XaXJlL1Y5L1NodXRkb3duSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9TdWJzY3JpcHRpb25JbmZvTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1N1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvU3Vic2NyaXB0aW9uSW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9UcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1RyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L1RyYW5zYWN0aW9uSW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9UcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL09wZW5XaXJlL1Y5L1dpcmVGb3JtYXRJbmZvTWFyc2hhbGxlci5jcyBiL3NyYy9PcGVuV2lyZS9WOS9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKcmVuYW1lIHRvIHNyYy9PcGVuV2lyZS9WOS9XaXJlRm9ybWF0SW5mb01hcnNoYWxsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIGIvc3JjL09wZW5XaXJlL1Y5L1hBVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9PcGVuV2lyZS9WOS9YQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzCnJlbmFtZSB0byBzcmMvT3BlbldpcmUvVjkvWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1ByZWZldGNoUG9saWN5LmNzIGIvc3JjL1ByZWZldGNoUG9saWN5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvUHJlZmV0Y2hQb2xpY3kuY3MKcmVuYW1lIHRvIHNyYy9QcmVmZXRjaFBvbGljeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1F1ZXVlQnJvd3Nlci5jcyBiL3NyYy9RdWV1ZUJyb3dzZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9RdWV1ZUJyb3dzZXIuY3MKcmVuYW1lIHRvIHNyYy9RdWV1ZUJyb3dzZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9SZXF1ZXN0VGltZWRPdXRFeGNlcHRpb24uY3MgYi9zcmMvUmVxdWVzdFRpbWVkT3V0RXhjZXB0aW9uLmNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9SZXF1ZXN0VGltZWRPdXRFeGNlcHRpb24uY3MKcmVuYW1lIHRvIHNyYy9SZXF1ZXN0VGltZWRPdXRFeGNlcHRpb24uY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9TZXNzaW9uLmNzIGIvc3JjL1Nlc3Npb24uY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1Nlc3Npb24uY3MKcmVuYW1lIHRvIHNyYy9TZXNzaW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvU2Vzc2lvbkV4ZWN1dG9yLmNzIGIvc3JjL1Nlc3Npb25FeGVjdXRvci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1Nlc3Npb25FeGVjdXRvci5jcwpyZW5hbWUgdG8gc3JjL1Nlc3Npb25FeGVjdXRvci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1N0YXRlL0NvbW1hbmRWaXNpdG9yQWRhcHRlci5jcyBiL3NyYy9TdGF0ZS9Db21tYW5kVmlzaXRvckFkYXB0ZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9TdGF0ZS9Db21tYW5kVmlzaXRvckFkYXB0ZXIuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9Db21tYW5kVmlzaXRvckFkYXB0ZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9Db25uZWN0aW9uU3RhdGUuY3MgYi9zcmMvU3RhdGUvQ29ubmVjdGlvblN0YXRlLmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9TdGF0ZS9Db25uZWN0aW9uU3RhdGUuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9Db25uZWN0aW9uU3RhdGUuY3MKaW5kZXggM2ZkNTY4Zi4uYWQxNmQ5MiAxMDA2NDQKLS0tIGEvc3JjL21haW4vY3NoYXJwL1N0YXRlL0Nvbm5lY3Rpb25TdGF0ZS5jcworKysgYi9zcmMvU3RhdGUvQ29ubmVjdGlvblN0YXRlLmNzCkBAIC03NywyNSArNzcsMjUgQEAKIAogCQlwdWJsaWMgdm9pZCBBZGRUcmFuc2FjdGlvblN0YXRlKFRyYW5zYWN0aW9uSWQgaWQpCiAJCXsKLQkJCUNoZWNrU2h1dGRvd24oKTsNCi0JCQlUcmFuc2FjdGlvblN0YXRlIHRyYW5zYWN0aW9uU3RhdGUgPSBuZXcgVHJhbnNhY3Rpb25TdGF0ZShpZCk7DQotDQotCQkJaWYodHJhbnNhY3Rpb25zLkNvbnRhaW5zS2V5KGlkKSkNCi0JCQl7DQotCQkJCXRyYW5zYWN0aW9uc1tpZF0gPSB0cmFuc2FjdGlvblN0YXRlOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQl0cmFuc2FjdGlvbnMuQWRkKGlkLCB0cmFuc2FjdGlvblN0YXRlKTsNCisJCQlDaGVja1NodXRkb3duKCk7CisJCQlUcmFuc2FjdGlvblN0YXRlIHRyYW5zYWN0aW9uU3RhdGUgPSBuZXcgVHJhbnNhY3Rpb25TdGF0ZShpZCk7CisKKwkJCWlmKHRyYW5zYWN0aW9ucy5Db250YWluc0tleShpZCkpCisJCQl7CisJCQkJdHJhbnNhY3Rpb25zW2lkXSA9IHRyYW5zYWN0aW9uU3RhdGU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJdHJhbnNhY3Rpb25zLkFkZChpZCwgdHJhbnNhY3Rpb25TdGF0ZSk7CiAJCQl9CiAJCX0KIAogCQlwdWJsaWMgVHJhbnNhY3Rpb25TdGF0ZSB0aGlzW1RyYW5zYWN0aW9uSWQgaWRdCiAJCXsKIAkJCWdldAotCQkJew0KLQkJCQlUcmFuc2FjdGlvblN0YXRlIHN0YXRlID0gbnVsbDsNCi0NCisJCQl7CisJCQkJVHJhbnNhY3Rpb25TdGF0ZSBzdGF0ZSA9IG51bGw7CisKIAkJCQl0cmFuc2FjdGlvbnMuVHJ5R2V0VmFsdWUoaWQsIG91dCBzdGF0ZSk7CiAJCQkJcmV0dXJuIHN0YXRlOwogCQkJfQpAQCAtMTA5LDM2ICsxMDksMzYgQEAKIAkJcHVibGljIFNlc3Npb25TdGF0ZSB0aGlzW1Nlc3Npb25JZCBpZF0KIAkJewogCQkJZ2V0Ci0JCQl7DQotCQkJCVNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUgPSBudWxsOw0KLQ0KKwkJCXsKKwkJCQlTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlID0gbnVsbDsKKwogCQkJCXNlc3Npb25zLlRyeUdldFZhbHVlKGlkLCBvdXQgc2Vzc2lvblN0YXRlKTsKIAotI2lmIERFQlVHDQotCQkJCWlmKG51bGwgPT0gc2Vzc2lvblN0YXRlKQ0KLQkJCQl7DQotCQkJCQkvLyBVc2VmdWwgZm9yIGRpZ25vc2luZyBtaXNzaW5nIHNlc3Npb24gaWRzDQotCQkJCQlzdHJpbmcgc2Vzc2lvbkxpc3QgPSBzdHJpbmcuRW1wdHk7DQotCQkJCQlmb3JlYWNoKFNlc3Npb25JZCBzZXNzaW9uSWQgaW4gc2Vzc2lvbnMuS2V5cykNCi0JCQkJCXsNCi0JCQkJCQlzZXNzaW9uTGlzdCArPSBzZXNzaW9uSWQuVG9TdHJpbmcoKSArICJcbiI7DQotCQkJCQl9DQotDQotCQkJCQlTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWcuQXNzZXJ0KGZhbHNlLA0KLQkJCQkJCXN0cmluZy5Gb3JtYXQoIlNlc3Npb24gJ3swfScgZGlkIG5vdCBleGlzdCBpbiB0aGUgc2Vzc2lvbnMgY29sbGVjdGlvbi5cblxuU2Vzc2lvbnM6LVxuezF9IiwgaWQsIHNlc3Npb25MaXN0KSk7DQorI2lmIERFQlVHCisJCQkJaWYobnVsbCA9PSBzZXNzaW9uU3RhdGUpCisJCQkJeworCQkJCQkvLyBVc2VmdWwgZm9yIGRpZ25vc2luZyBtaXNzaW5nIHNlc3Npb24gaWRzCisJCQkJCXN0cmluZyBzZXNzaW9uTGlzdCA9IHN0cmluZy5FbXB0eTsKKwkJCQkJZm9yZWFjaChTZXNzaW9uSWQgc2Vzc2lvbklkIGluIHNlc3Npb25zLktleXMpCisJCQkJCXsKKwkJCQkJCXNlc3Npb25MaXN0ICs9IHNlc3Npb25JZC5Ub1N0cmluZygpICsgIlxuIjsKKwkJCQkJfQorCisJCQkJCVN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Zy5Bc3NlcnQoZmFsc2UsCisJCQkJCQlzdHJpbmcuRm9ybWF0KCJTZXNzaW9uICd7MH0nIGRpZCBub3QgZXhpc3QgaW4gdGhlIHNlc3Npb25zIGNvbGxlY3Rpb24uXG5cblNlc3Npb25zOi1cbnsxfSIsIGlkLCBzZXNzaW9uTGlzdCkpOwogCQkJCX0KLSNlbmRpZg0KLQkJCQlyZXR1cm4gc2Vzc2lvblN0YXRlOw0KKyNlbmRpZgorCQkJCXJldHVybiBzZXNzaW9uU3RhdGU7CiAJCQl9CiAJCX0KIAogCQlwdWJsaWMgVHJhbnNhY3Rpb25TdGF0ZSBSZW1vdmVUcmFuc2FjdGlvblN0YXRlKFRyYW5zYWN0aW9uSWQgaWQpCiAJCXsKLQkJCVRyYW5zYWN0aW9uU3RhdGUgcmV0ID0gbnVsbDsNCi0NCi0JCQlpZih0cmFuc2FjdGlvbnMuVHJ5R2V0VmFsdWUoaWQsIG91dCByZXQpKQ0KLQkJCXsNCi0JCQkJdHJhbnNhY3Rpb25zLlJlbW92ZShpZCk7DQorCQkJVHJhbnNhY3Rpb25TdGF0ZSByZXQgPSBudWxsOworCisJCQlpZih0cmFuc2FjdGlvbnMuVHJ5R2V0VmFsdWUoaWQsIG91dCByZXQpKQorCQkJeworCQkJCXRyYW5zYWN0aW9ucy5SZW1vdmUoaWQpOwogCQkJfQogCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTQ2LDI2ICsxNDYsMjYgQEAKIAogCQlwdWJsaWMgdm9pZCBBZGRTZXNzaW9uKFNlc3Npb25JbmZvIGluZm8pCiAJCXsKLQkJCUNoZWNrU2h1dGRvd24oKTsNCi0JCQlTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlID0gbmV3IFNlc3Npb25TdGF0ZShpbmZvKTsNCi0NCi0JCQlpZihzZXNzaW9ucy5Db250YWluc0tleShpbmZvLlNlc3Npb25JZCkpDQotCQkJew0KLQkJCQlzZXNzaW9uc1tpbmZvLlNlc3Npb25JZF0gPSBzZXNzaW9uU3RhdGU7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXNlc3Npb25zLkFkZChpbmZvLlNlc3Npb25JZCwgc2Vzc2lvblN0YXRlKTsNCisJCQlDaGVja1NodXRkb3duKCk7CisJCQlTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlID0gbmV3IFNlc3Npb25TdGF0ZShpbmZvKTsKKworCQkJaWYoc2Vzc2lvbnMuQ29udGFpbnNLZXkoaW5mby5TZXNzaW9uSWQpKQorCQkJeworCQkJCXNlc3Npb25zW2luZm8uU2Vzc2lvbklkXSA9IHNlc3Npb25TdGF0ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlzZXNzaW9ucy5BZGQoaW5mby5TZXNzaW9uSWQsIHNlc3Npb25TdGF0ZSk7CiAJCQl9CiAJCX0KIAogCQlwdWJsaWMgU2Vzc2lvblN0YXRlIFJlbW92ZVNlc3Npb24oU2Vzc2lvbklkIGlkKQogCQl7Ci0JCQlTZXNzaW9uU3RhdGUgcmV0ID0gbnVsbDsNCi0NCi0JCQlpZihzZXNzaW9ucy5UcnlHZXRWYWx1ZShpZCwgb3V0IHJldCkpDQotCQkJew0KLQkJCQlzZXNzaW9ucy5SZW1vdmUoaWQpOw0KKwkJCVNlc3Npb25TdGF0ZSByZXQgPSBudWxsOworCisJCQlpZihzZXNzaW9ucy5UcnlHZXRWYWx1ZShpZCwgb3V0IHJldCkpCisJCQl7CisJCQkJc2Vzc2lvbnMuUmVtb3ZlKGlkKTsKIAkJCX0KIAogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUcmFja2VyLmNzIGIvc3JjL1N0YXRlL0Nvbm5lY3Rpb25TdGF0ZVRyYWNrZXIuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1N0YXRlL0Nvbm5lY3Rpb25TdGF0ZVRyYWNrZXIuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUcmFja2VyLmNzCmluZGV4IDg1MmZhZWYuLjljODhlZWUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUcmFja2VyLmNzCisrKyBiL3NyYy9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUcmFja2VyLmNzCkBAIC00ODAsMTggKzQ4MCwxOCBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIG92ZXJyaWRlIFJlc3BvbnNlIFByb2Nlc3NBZGRDb25uZWN0aW9uKENvbm5lY3Rpb25JbmZvIGluZm8pCi0gICAgICAgIHsNCisgICAgICAgIHsKICAgICAgICAgICAgIGlmKGluZm8gIT0gbnVsbCkKLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgQ29ubmVjdGlvblN0YXRlIGNvbm5TdGF0ZSA9IG5ldyBDb25uZWN0aW9uU3RhdGUoaW5mbyk7DQotDQotICAgICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25TdGF0ZXMuQ29udGFpbnNLZXkoaW5mby5Db25uZWN0aW9uSWQpKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uU3RhdGVzW2luZm8uQ29ubmVjdGlvbklkXSA9IGNvbm5TdGF0ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25TdGF0ZXMuQWRkKGluZm8uQ29ubmVjdGlvbklkLCBjb25uU3RhdGUpOw0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25uZWN0aW9uU3RhdGUgY29ublN0YXRlID0gbmV3IENvbm5lY3Rpb25TdGF0ZShpbmZvKTsKKworICAgICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25TdGF0ZXMuQ29udGFpbnNLZXkoaW5mby5Db25uZWN0aW9uSWQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvblN0YXRlc1tpbmZvLkNvbm5lY3Rpb25JZF0gPSBjb25uU3RhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25TdGF0ZXMuQWRkKGluZm8uQ29ubmVjdGlvbklkLCBjb25uU3RhdGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1N0YXRlL0NvbnN1bWVyU3RhdGUuY3MgYi9zcmMvU3RhdGUvQ29uc3VtZXJTdGF0ZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1N0YXRlL0NvbnN1bWVyU3RhdGUuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9Db25zdW1lclN0YXRlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvU3RhdGUvSUNvbW1hbmRWaXNpdG9yLmNzIGIvc3JjL1N0YXRlL0lDb21tYW5kVmlzaXRvci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1N0YXRlL0lDb21tYW5kVmlzaXRvci5jcwpyZW5hbWUgdG8gc3JjL1N0YXRlL0lDb21tYW5kVmlzaXRvci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1N0YXRlL1Byb2R1Y2VyU3RhdGUuY3MgYi9zcmMvU3RhdGUvUHJvZHVjZXJTdGF0ZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1N0YXRlL1Byb2R1Y2VyU3RhdGUuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9Qcm9kdWNlclN0YXRlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvU3RhdGUvUmVzcG9uc2VIYW5kbGVyLmNzIGIvc3JjL1N0YXRlL1Jlc3BvbnNlSGFuZGxlci5jcwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvU3RhdGUvUmVzcG9uc2VIYW5kbGVyLmNzCnJlbmFtZSB0byBzcmMvU3RhdGUvUmVzcG9uc2VIYW5kbGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvU3RhdGUvU2Vzc2lvblN0YXRlLmNzIGIvc3JjL1N0YXRlL1Nlc3Npb25TdGF0ZS5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvU3RhdGUvU2Vzc2lvblN0YXRlLmNzCnJlbmFtZSB0byBzcmMvU3RhdGUvU2Vzc2lvblN0YXRlLmNzCmluZGV4IDllZjdlZjkuLjdjOWU4YjQgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9TZXNzaW9uU3RhdGUuY3MKKysrIGIvc3JjL1N0YXRlL1Nlc3Npb25TdGF0ZS5jcwpAQCAtNDMsMzEgKzQzLDMxIEBACiAKIAkJcHVibGljIHZvaWQgQWRkUHJvZHVjZXIoUHJvZHVjZXJJbmZvIGluZm8pCiAJCXsKLQkJCUNoZWNrU2h1dGRvd24oKTsNCi0JCQlQcm9kdWNlclN0YXRlIHByb2R1Y2VyU3RhdGUgPSBuZXcgUHJvZHVjZXJTdGF0ZShpbmZvKTsNCi0NCi0JCQlpZihwcm9kdWNlcnMuQ29udGFpbnNLZXkoaW5mby5Qcm9kdWNlcklkKSkNCi0JCQl7DQotCQkJCXByb2R1Y2Vyc1tpbmZvLlByb2R1Y2VySWRdID0gcHJvZHVjZXJTdGF0ZTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJcHJvZHVjZXJzLkFkZChpbmZvLlByb2R1Y2VySWQsIHByb2R1Y2VyU3RhdGUpOw0KKwkJCUNoZWNrU2h1dGRvd24oKTsKKwkJCVByb2R1Y2VyU3RhdGUgcHJvZHVjZXJTdGF0ZSA9IG5ldyBQcm9kdWNlclN0YXRlKGluZm8pOworCisJCQlpZihwcm9kdWNlcnMuQ29udGFpbnNLZXkoaW5mby5Qcm9kdWNlcklkKSkKKwkJCXsKKwkJCQlwcm9kdWNlcnNbaW5mby5Qcm9kdWNlcklkXSA9IHByb2R1Y2VyU3RhdGU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJvZHVjZXJzLkFkZChpbmZvLlByb2R1Y2VySWQsIHByb2R1Y2VyU3RhdGUpOwogCQkJfQogCQl9CiAKIAkJcHVibGljIFByb2R1Y2VyU3RhdGUgUmVtb3ZlUHJvZHVjZXIoUHJvZHVjZXJJZCBpZCkKLQkJew0KKwkJewogCQkJQ2hlY2tTaHV0ZG93bigpOwotCQkJUHJvZHVjZXJTdGF0ZSByZXQgPSBudWxsOw0KLQ0KLQkJCWlmKHByb2R1Y2Vycy5UcnlHZXRWYWx1ZShpZCwgb3V0IHJldCkpDQotCQkJew0KLQkJCQlwcm9kdWNlcnMuUmVtb3ZlKGlkKTsNCi0JCQkJaWYobnVsbCAhPSByZXQgJiYgcmV0LlRyYW5zYWN0aW9uU3RhdGUgIT0gbnVsbCkNCi0JCQkJew0KLQkJCQkJcmV0LlRyYW5zYWN0aW9uU3RhdGUuQWRkUHJvZHVjZXIocmV0KTsNCi0JCQkJfQ0KKwkJCVByb2R1Y2VyU3RhdGUgcmV0ID0gbnVsbDsKKworCQkJaWYocHJvZHVjZXJzLlRyeUdldFZhbHVlKGlkLCBvdXQgcmV0KSkKKwkJCXsKKwkJCQlwcm9kdWNlcnMuUmVtb3ZlKGlkKTsKKwkJCQlpZihudWxsICE9IHJldCAmJiByZXQuVHJhbnNhY3Rpb25TdGF0ZSAhPSBudWxsKQorCQkJCXsKKwkJCQkJcmV0LlRyYW5zYWN0aW9uU3RhdGUuQWRkUHJvZHVjZXIocmV0KTsKKwkJCQl9CiAJCQl9CiAKIAkJCXJldHVybiByZXQ7CkBAIC03NSwyNyArNzUsMjcgQEAKIAogCQlwdWJsaWMgdm9pZCBBZGRDb25zdW1lcihDb25zdW1lckluZm8gaW5mbykKIAkJewotCQkJQ2hlY2tTaHV0ZG93bigpOw0KLQkJCUNvbnN1bWVyU3RhdGUgY29uc3VtZXJTdGF0ZSA9IG5ldyBDb25zdW1lclN0YXRlKGluZm8pOw0KLQ0KLQkJCWlmKGNvbnN1bWVycy5Db250YWluc0tleShpbmZvLkNvbnN1bWVySWQpKQ0KLQkJCXsNCi0JCQkJY29uc3VtZXJzLkFkZChpbmZvLkNvbnN1bWVySWQsIGNvbnN1bWVyU3RhdGUpOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQljb25zdW1lcnMuQWRkKGluZm8uQ29uc3VtZXJJZCwgY29uc3VtZXJTdGF0ZSk7DQorCQkJQ2hlY2tTaHV0ZG93bigpOworCQkJQ29uc3VtZXJTdGF0ZSBjb25zdW1lclN0YXRlID0gbmV3IENvbnN1bWVyU3RhdGUoaW5mbyk7CisKKwkJCWlmKGNvbnN1bWVycy5Db250YWluc0tleShpbmZvLkNvbnN1bWVySWQpKQorCQkJeworCQkJCWNvbnN1bWVycy5BZGQoaW5mby5Db25zdW1lcklkLCBjb25zdW1lclN0YXRlKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQljb25zdW1lcnMuQWRkKGluZm8uQ29uc3VtZXJJZCwgY29uc3VtZXJTdGF0ZSk7CiAJCQl9CiAJCX0KIAogCQlwdWJsaWMgQ29uc3VtZXJTdGF0ZSBSZW1vdmVDb25zdW1lcihDb25zdW1lcklkIGlkKQotCQl7DQorCQl7CiAJCQlDaGVja1NodXRkb3duKCk7Ci0JCQlDb25zdW1lclN0YXRlIHJldCA9IG51bGw7DQotDQotCQkJaWYoY29uc3VtZXJzLlRyeUdldFZhbHVlKGlkLCBvdXQgcmV0KSkNCi0JCQl7DQotCQkJCWNvbnN1bWVycy5SZW1vdmUoaWQpOw0KKwkJCUNvbnN1bWVyU3RhdGUgcmV0ID0gbnVsbDsKKworCQkJaWYoY29uc3VtZXJzLlRyeUdldFZhbHVlKGlkLCBvdXQgcmV0KSkKKwkJCXsKKwkJCQljb25zdW1lcnMuUmVtb3ZlKGlkKTsKIAkJCX0KIAogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9TeW5jaHJvbml6ZWRPYmplY3RzLmNzIGIvc3JjL1N0YXRlL1N5bmNocm9uaXplZE9iamVjdHMuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1N0YXRlL1N5bmNocm9uaXplZE9iamVjdHMuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9TeW5jaHJvbml6ZWRPYmplY3RzLmNzCmluZGV4IGYwMjFjNzIuLjQyZTdiNjUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9TeW5jaHJvbml6ZWRPYmplY3RzLmNzCisrKyBiL3NyYy9TdGF0ZS9TeW5jaHJvbml6ZWRPYmplY3RzLmNzCkBAIC0yMTcsMjIgKzIxNywyMiBAQAogCQkJewogCQkJCXJldHVybiBfZGljdGlvbmFyeS5SZW1vdmUodik7CiAJCQl9Ci0JCX0NCi0NCi0JCXB1YmxpYyBib29sIENvbnRhaW5zS2V5KFRLZXkgaykNCi0JCXsNCi0JCQlsb2NrKCgoSUNvbGxlY3Rpb24pIF9kaWN0aW9uYXJ5KS5TeW5jUm9vdCkNCi0JCQl7DQotCQkJCXJldHVybiBfZGljdGlvbmFyeS5Db250YWluc0tleShrKTsNCi0JCQl9DQotCQl9DQotDQotCQlwdWJsaWMgYm9vbCBDb250YWluc1ZhbHVlKFRWYWx1ZSB2KQ0KLQkJew0KLQkJCWxvY2soKChJQ29sbGVjdGlvbikgX2RpY3Rpb25hcnkpLlN5bmNSb290KQ0KLQkJCXsNCi0JCQkJcmV0dXJuIF9kaWN0aW9uYXJ5LkNvbnRhaW5zVmFsdWUodik7DQotCQkJfQ0KLQkJfQ0KKwkJfQorCisJCXB1YmxpYyBib29sIENvbnRhaW5zS2V5KFRLZXkgaykKKwkJeworCQkJbG9jaygoKElDb2xsZWN0aW9uKSBfZGljdGlvbmFyeSkuU3luY1Jvb3QpCisJCQl7CisJCQkJcmV0dXJuIF9kaWN0aW9uYXJ5LkNvbnRhaW5zS2V5KGspOworCQkJfQorCQl9CisKKwkJcHVibGljIGJvb2wgQ29udGFpbnNWYWx1ZShUVmFsdWUgdikKKwkJeworCQkJbG9jaygoKElDb2xsZWN0aW9uKSBfZGljdGlvbmFyeSkuU3luY1Jvb3QpCisJCQl7CisJCQkJcmV0dXJuIF9kaWN0aW9uYXJ5LkNvbnRhaW5zVmFsdWUodik7CisJCQl9CisJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvU3RhdGUvVHJhY2tlZC5jcyBiL3NyYy9TdGF0ZS9UcmFja2VkLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvU3RhdGUvVHJhY2tlZC5jcwpyZW5hbWUgdG8gc3JjL1N0YXRlL1RyYWNrZWQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9UcmFuc2FjdGlvblN0YXRlLmNzIGIvc3JjL1N0YXRlL1RyYW5zYWN0aW9uU3RhdGUuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1N0YXRlL1RyYW5zYWN0aW9uU3RhdGUuY3MKcmVuYW1lIHRvIHNyYy9TdGF0ZS9UcmFuc2FjdGlvblN0YXRlLmNzCmluZGV4IDU5MjNiMjQuLjAwNTA1YTEgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9TdGF0ZS9UcmFuc2FjdGlvblN0YXRlLmNzCisrKyBiL3NyYy9TdGF0ZS9UcmFuc2FjdGlvblN0YXRlLmNzCkBAIC04NywxNCArODcsMTQgQEAKIAogICAgICAgICBwdWJsaWMgdm9pZCBBZGRQcm9kdWNlcihQcm9kdWNlclN0YXRlIHByb2R1Y2VyKQogICAgICAgICB7Ci0JCQlDaGVja1NodXRkb3duKCk7DQotCQkJaWYodGhpcy5wcm9kdWNlcnMuQ29udGFpbnNLZXkocHJvZHVjZXIuSW5mby5Qcm9kdWNlcklkKSkNCi0JCQl7DQotCQkJCXRoaXMucHJvZHVjZXJzW3Byb2R1Y2VyLkluZm8uUHJvZHVjZXJJZF0gPSBwcm9kdWNlcjsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJdGhpcy5wcm9kdWNlcnMuQWRkKHByb2R1Y2VyLkluZm8uUHJvZHVjZXJJZCwgcHJvZHVjZXIpOw0KKwkJCUNoZWNrU2h1dGRvd24oKTsKKwkJCWlmKHRoaXMucHJvZHVjZXJzLkNvbnRhaW5zS2V5KHByb2R1Y2VyLkluZm8uUHJvZHVjZXJJZCkpCisJCQl7CisJCQkJdGhpcy5wcm9kdWNlcnNbcHJvZHVjZXIuSW5mby5Qcm9kdWNlcklkXSA9IHByb2R1Y2VyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXRoaXMucHJvZHVjZXJzLkFkZChwcm9kdWNlci5JbmZvLlByb2R1Y2VySWQsIHByb2R1Y2VyKTsKIAkJCX0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9Db21wb3NpdGVUYXNrLmNzIGIvc3JjL1RocmVhZHMvQ29tcG9zaXRlVGFzay5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RocmVhZHMvQ29tcG9zaXRlVGFzay5jcwpyZW5hbWUgdG8gc3JjL1RocmVhZHMvQ29tcG9zaXRlVGFzay5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RocmVhZHMvQ29tcG9zaXRlVGFza1J1bm5lci5jcyBiL3NyYy9UaHJlYWRzL0NvbXBvc2l0ZVRhc2tSdW5uZXIuY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RocmVhZHMvQ29tcG9zaXRlVGFza1J1bm5lci5jcwpyZW5hbWUgdG8gc3JjL1RocmVhZHMvQ29tcG9zaXRlVGFza1J1bm5lci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RocmVhZHMvRGVkaWNhdGVkVGFza1J1bm5lci5jcyBiL3NyYy9UaHJlYWRzL0RlZGljYXRlZFRhc2tSdW5uZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UaHJlYWRzL0RlZGljYXRlZFRhc2tSdW5uZXIuY3MKcmVuYW1lIHRvIHNyYy9UaHJlYWRzL0RlZGljYXRlZFRhc2tSdW5uZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL0RlZmF1bHRUaHJlYWRQb29scy5jcyBiL3NyYy9UaHJlYWRzL0RlZmF1bHRUaHJlYWRQb29scy5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9EZWZhdWx0VGhyZWFkUG9vbHMuY3MKcmVuYW1lIHRvIHNyYy9UaHJlYWRzL0RlZmF1bHRUaHJlYWRQb29scy5jcwppbmRleCAzMmM4NDk0Li5jZjI3ZmViIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9EZWZhdWx0VGhyZWFkUG9vbHMuY3MKKysrIGIvc3JjL1RocmVhZHMvRGVmYXVsdFRocmVhZFBvb2xzLmNzCkBAIC0xLDMzICsxLDMzIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcw0KLXsNCi0JcHVibGljIGNsYXNzIERlZmF1bHRUaHJlYWRQb29scw0KLQl7DQotCQlwcml2YXRlIHN0YXRpYyByZWFkb25seSBUYXNrUnVubmVyRmFjdG9yeSB0YXNrUnVubmVyRmFjdG9yeSA9IG5ldyBUYXNrUnVubmVyRmFjdG9yeSgpOw0KLQ0KLQkJcHJpdmF0ZSBEZWZhdWx0VGhyZWFkUG9vbHMoKQ0KLQkJew0KLQkJfQ0KLQ0KLQkJcHVibGljIHN0YXRpYyBUYXNrUnVubmVyRmFjdG9yeSBEZWZhdWx0VGFza1J1bm5lckZhY3RvcnkNCi0JCXsNCi0JCQlnZXQgeyByZXR1cm4gdGFza1J1bm5lckZhY3Rvcnk7IH0NCi0JCX0NCi0JfQ0KLX0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRocmVhZHMKK3sKKwlwdWJsaWMgY2xhc3MgRGVmYXVsdFRocmVhZFBvb2xzCisJeworCQlwcml2YXRlIHN0YXRpYyByZWFkb25seSBUYXNrUnVubmVyRmFjdG9yeSB0YXNrUnVubmVyRmFjdG9yeSA9IG5ldyBUYXNrUnVubmVyRmFjdG9yeSgpOworCisJCXByaXZhdGUgRGVmYXVsdFRocmVhZFBvb2xzKCkKKwkJeworCQl9CisKKwkJcHVibGljIHN0YXRpYyBUYXNrUnVubmVyRmFjdG9yeSBEZWZhdWx0VGFza1J1bm5lckZhY3RvcnkKKwkJeworCQkJZ2V0IHsgcmV0dXJuIHRhc2tSdW5uZXJGYWN0b3J5OyB9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9Qb29sZWRUYXNrUnVubmVyLmNzIGIvc3JjL1RocmVhZHMvUG9vbGVkVGFza1J1bm5lci5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9Qb29sZWRUYXNrUnVubmVyLmNzCnJlbmFtZSB0byBzcmMvVGhyZWFkcy9Qb29sZWRUYXNrUnVubmVyLmNzCmluZGV4IDJkZWI3OTkuLjE5NjRlNTEgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL1Bvb2xlZFRhc2tSdW5uZXIuY3MKKysrIGIvc3JjL1RocmVhZHMvUG9vbGVkVGFza1J1bm5lci5jcwpAQCAtMSwxOTMgKzEsMTkzIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcw0KLXsNCi0JY2xhc3MgUG9vbGVkVGFza1J1bm5lciA6IFRhc2tSdW5uZXINCi0Jew0KLQkJcHJpdmF0ZSByZWFkb25seSBpbnQgbWF4SXRlcmF0aW9uc1BlclJ1bjsNCi0JCXByaXZhdGUgcmVhZG9ubHkgVGFzayB0YXNrOw0KLQkJcHJpdmF0ZSByZWFkb25seSBPYmplY3QgcnVuYWJsZSA9IG5ldyBPYmplY3QoKTsNCi0JCXByaXZhdGUgYm9vbCBxdWV1ZWQ7DQotCQlwcml2YXRlIGJvb2wgX3NodXRkb3duOw0KLQkJcHJpdmF0ZSBib29sIGl0ZXJhdGluZzsNCi0JCXByaXZhdGUgdm9sYXRpbGUgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQgcnVubmluZ1RocmVhZDsNCi0NCi0JCXB1YmxpYyB2b2lkIFJ1bihPYmplY3QgbykNCi0JCXsNCi0JCQlQb29sZWRUYXNrUnVubmVyIHAgPSBvIGFzIFBvb2xlZFRhc2tSdW5uZXI7DQotCQkJcC5ydW5uaW5nVGhyZWFkID0gU3lzdGVtLlRocmVhZGluZy5UaHJlYWQuQ3VycmVudFRocmVhZDsNCi0JCQl0cnkNCi0JCQl7DQotCQkJCXAuUnVuVGFzaygpOw0KLQkJCX0NCi0JCQlmaW5hbGx5DQotCQkJew0KLQkJCQlwLnJ1bm5pbmdUaHJlYWQgPSBudWxsOw0KLQkJCX0NCi0JCX0NCi0NCi0JCXB1YmxpYyBQb29sZWRUYXNrUnVubmVyKFRhc2sgdGFzaywgaW50IG1heEl0ZXJhdGlvbnNQZXJSdW4pDQotCQl7DQotCQkJdGhpcy5tYXhJdGVyYXRpb25zUGVyUnVuID0gbWF4SXRlcmF0aW9uc1BlclJ1bjsNCi0JCQl0aGlzLnRhc2sgPSB0YXNrOw0KLQkJCXRoaXMuX3NodXRkb3duID0gZmFsc2U7DQotCQkJdGhpcy5pdGVyYXRpbmcgPSBmYWxzZTsNCi0JCQl0aGlzLnF1ZXVlZCA9IHRydWU7DQotCQkJVGhyZWFkUG9vbC5RdWV1ZVVzZXJXb3JrSXRlbShuZXcgV2FpdENhbGxiYWNrKFJ1biksIHRoaXMpOw0KLQkJfQ0KLQ0KLQkJLy8vIDxzdW1tYXJ5Pg0KLQkJLy8vIFdlIEV4cGVjdCBNQU5ZIHdha2V1cCBjYWxscyBvbiB0aGUgc2FtZSBUYXNrUnVubmVyLg0KLQkJLy8vIDwvc3VtbWFyeT4NCi0JCXB1YmxpYyB2b2lkIFdha2V1cCgpDQotCQl7DQotCQkJbG9jayhydW5hYmxlKQ0KLQkJCXsNCi0JCQkJLy8gV2hlbiB3ZSBnZXQgaW4gaGVyZSwgd2UgbWFrZSBzb21lIGFzc3VtcHRpb25zIG9mIHN0YXRlOg0KLQkJCQkvLyBxdWV1ZWQ9ZmFsc2UsIGl0ZXJhdGluZz1mYWxzZTogd2FrZXVwKCkgaGFzIG5vdCBiZSBjYWxsZWQgYW5kDQotCQkJCS8vIHRoZXJlZm9yZSB0YXNrIGlzIG5vdCBleGVjdXRpbmcuDQotCQkJCS8vIHF1ZXVlZD10cnVlLCBpdGVyYXRpbmc9ZmFsc2U6IHdha2V1cCgpIHdhcyBjYWxsZWQgYnV0LCB0YXNrDQotCQkJCS8vIGV4ZWN1dGlvbiBoYXMgbm90IHN0YXJ0ZWQgeWV0DQotCQkJCS8vIHF1ZXVlZD1mYWxzZSwgaXRlcmF0aW5nPXRydWUgOiB3YWtldXAoKSB3YXMgY2FsbGVkLCB3aGljaCBjYXVzZWQNCi0JCQkJLy8gdGFzayBleGVjdXRpb24gdG8gc3RhcnQuDQotCQkJCS8vIHF1ZXVlZD10cnVlLCBpdGVyYXRpbmc9dHJ1ZSA6IHdha2V1cCgpIGNhbGxlZCBhZnRlciB0YXNrDQotCQkJCS8vIGV4ZWN1dGlvbiB3YXMgc3RhcnRlZC4NCi0NCi0JCQkJaWYocXVldWVkIHx8IF9zaHV0ZG93bikNCi0JCQkJew0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotDQotCQkJCXF1ZXVlZCA9IHRydWU7DQotDQotCQkJCS8vIFRoZSBydW5UYXNrKCkgbWV0aG9kIHdpbGwgZG8gdGhpcyBmb3IgbWUgb25jZSB3ZSBhcmUgZG9uZQ0KLQkJCQkvLyBpdGVyYXRpbmcuDQotCQkJCWlmKCFpdGVyYXRpbmcpDQotCQkJCXsNCi0JCQkJCVRocmVhZFBvb2wuUXVldWVVc2VyV29ya0l0ZW0obmV3IFdhaXRDYWxsYmFjayhSdW4pLCB0aGlzKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0NCi0JCS8vLyA8c3VtbWFyeT4NCi0JCS8vLyBzaHV0IGRvd24gdGhlIHRhc2sNCi0JCS8vLyA8L3N1bW1hcnk+DQotCQkvLy8gPHBhcmFtIG5hbWU9InRpbWVvdXQiPjwvcGFyYW0+DQotCQlwdWJsaWMgdm9pZCBTaHV0ZG93bihUaW1lU3BhbiB0aW1lb3V0KQ0KLQkJew0KLQkJCWxvY2socnVuYWJsZSkNCi0JCQl7DQotCQkJCV9zaHV0ZG93biA9IHRydWU7DQotCQkJCS8vIHRoZSBjaGVjayBvbiB0aGUgdGhyZWFkIGlzIGRvbmUNCi0JCQkJLy8gYmVjYXVzZSBhIGNhbGwgdG8gaXRlcmF0ZSBjYW4gcmVzdWx0IGluDQotCQkJCS8vIHNodXREb3duKCkgYmVpbmcgY2FsbGVkLCB3aGljaCB3b3VsZCB3YWl0IGZvcmV2ZXINCi0JCQkJLy8gd2FpdGluZyBmb3IgaXRlcmF0aW5nIHRvIGZpbmlzaA0KLQkJCQlpZihydW5uaW5nVGhyZWFkICE9IFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLkN1cnJlbnRUaHJlYWQpDQotCQkJCXsNCi0JCQkJCWlmKGl0ZXJhdGluZykNCi0JCQkJCXsNCi0JCQkJCQlTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZC5TbGVlcCh0aW1lb3V0KTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFNodXRkb3duV2l0aEFib3J0KFRpbWVTcGFuIHRpbWVvdXQpDQotICAgICAgICB7DQotICAgICAgICAgICAgbG9jayhydW5hYmxlKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgX3NodXRkb3duID0gdHJ1ZTsNCi0NCi0gICAgICAgICAgICAgICAgaWYocnVubmluZ1RocmVhZCAhPSBTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZC5DdXJyZW50VGhyZWFkKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBpZihpdGVyYXRpbmcpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQuU2xlZXAodGltZW91dCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICBpZihpdGVyYXRpbmcpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ1RocmVhZC5BYm9ydCgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLQkJcHVibGljIHZvaWQgU2h1dGRvd24oKQ0KLQkJew0KLQkJCVNodXRkb3duKG5ldyBUaW1lU3BhbihUaW1lb3V0LkluZmluaXRlKSk7DQotCQl9DQotDQotCQlpbnRlcm5hbCB2b2lkIFJ1blRhc2soKQ0KLQkJew0KLQkJCWxvY2socnVuYWJsZSkNCi0JCQl7DQotCQkJCXF1ZXVlZCA9IGZhbHNlOw0KLQkJCQlpZihfc2h1dGRvd24pDQotCQkJCXsNCi0JCQkJCWl0ZXJhdGluZyA9IGZhbHNlOw0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotCQkJCWl0ZXJhdGluZyA9IHRydWU7DQotCQkJfQ0KLQ0KLQkJCS8vIERvbid0IHN5bmNocm9uaXplIHdoaWxlIHdlIGFyZSBpdGVyYXRpbmcgc28gdGhhdA0KLQkJCS8vIG11bHRpcGxlIHdha2V1cCgpIGNhbGxzIGNhbiBiZSBleGVjdXRlZCBjb25jdXJyZW50bHkuDQotCQkJYm9vbCBkb25lID0gZmFsc2U7DQotCQkJdHJ5DQotCQkJew0KLQkJCQlmb3IoaW50IGkgPSAwOyBpIDwgbWF4SXRlcmF0aW9uc1BlclJ1bjsgaSsrKQ0KLQkJCQl7DQotCQkJCQlpZighdGFzay5JdGVyYXRlKCkpDQotCQkJCQl7DQotCQkJCQkJZG9uZSA9IHRydWU7DQotCQkJCQkJYnJlYWs7DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQkJZmluYWxseQ0KLQkJCXsNCi0JCQkJbG9jayhydW5hYmxlKQ0KLQkJCQl7DQotCQkJCQlpdGVyYXRpbmcgPSBmYWxzZTsNCi0JCQkJCWlmKF9zaHV0ZG93bikNCi0JCQkJCXsNCi0JCQkJCQlxdWV1ZWQgPSBmYWxzZTsNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQkvLyBJZiB3ZSBjb3VsZCBub3QgaXRlcmF0ZSBhbGwgdGhlIGl0ZW1zDQotCQkJCQkJLy8gdGhlbiB3ZSBuZWVkIHRvIHJlLXF1ZXVlLg0KLQkJCQkJCWlmKCFkb25lKQ0KLQkJCQkJCXsNCi0JCQkJCQkJcXVldWVkID0gdHJ1ZTsNCi0JCQkJCQl9DQotDQotCQkJCQkJaWYocXVldWVkKQ0KLQkJCQkJCXsNCi0JCQkJCQkJVGhyZWFkUG9vbC5RdWV1ZVVzZXJXb3JrSXRlbShuZXcgV2FpdENhbGxiYWNrKFJ1biksIHRoaXMpOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRocmVhZHMKK3sKKwljbGFzcyBQb29sZWRUYXNrUnVubmVyIDogVGFza1J1bm5lcgorCXsKKwkJcHJpdmF0ZSByZWFkb25seSBpbnQgbWF4SXRlcmF0aW9uc1BlclJ1bjsKKwkJcHJpdmF0ZSByZWFkb25seSBUYXNrIHRhc2s7CisJCXByaXZhdGUgcmVhZG9ubHkgT2JqZWN0IHJ1bmFibGUgPSBuZXcgT2JqZWN0KCk7CisJCXByaXZhdGUgYm9vbCBxdWV1ZWQ7CisJCXByaXZhdGUgYm9vbCBfc2h1dGRvd247CisJCXByaXZhdGUgYm9vbCBpdGVyYXRpbmc7CisJCXByaXZhdGUgdm9sYXRpbGUgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQgcnVubmluZ1RocmVhZDsKKworCQlwdWJsaWMgdm9pZCBSdW4oT2JqZWN0IG8pCisJCXsKKwkJCVBvb2xlZFRhc2tSdW5uZXIgcCA9IG8gYXMgUG9vbGVkVGFza1J1bm5lcjsKKwkJCXAucnVubmluZ1RocmVhZCA9IFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLkN1cnJlbnRUaHJlYWQ7CisJCQl0cnkKKwkJCXsKKwkJCQlwLlJ1blRhc2soKTsKKwkJCX0KKwkJCWZpbmFsbHkKKwkJCXsKKwkJCQlwLnJ1bm5pbmdUaHJlYWQgPSBudWxsOworCQkJfQorCQl9CisKKwkJcHVibGljIFBvb2xlZFRhc2tSdW5uZXIoVGFzayB0YXNrLCBpbnQgbWF4SXRlcmF0aW9uc1BlclJ1bikKKwkJeworCQkJdGhpcy5tYXhJdGVyYXRpb25zUGVyUnVuID0gbWF4SXRlcmF0aW9uc1BlclJ1bjsKKwkJCXRoaXMudGFzayA9IHRhc2s7CisJCQl0aGlzLl9zaHV0ZG93biA9IGZhbHNlOworCQkJdGhpcy5pdGVyYXRpbmcgPSBmYWxzZTsKKwkJCXRoaXMucXVldWVkID0gdHJ1ZTsKKwkJCVRocmVhZFBvb2wuUXVldWVVc2VyV29ya0l0ZW0obmV3IFdhaXRDYWxsYmFjayhSdW4pLCB0aGlzKTsKKwkJfQorCisJCS8vLyA8c3VtbWFyeT4KKwkJLy8vIFdlIEV4cGVjdCBNQU5ZIHdha2V1cCBjYWxscyBvbiB0aGUgc2FtZSBUYXNrUnVubmVyLgorCQkvLy8gPC9zdW1tYXJ5PgorCQlwdWJsaWMgdm9pZCBXYWtldXAoKQorCQl7CisJCQlsb2NrKHJ1bmFibGUpCisJCQl7CisJCQkJLy8gV2hlbiB3ZSBnZXQgaW4gaGVyZSwgd2UgbWFrZSBzb21lIGFzc3VtcHRpb25zIG9mIHN0YXRlOgorCQkJCS8vIHF1ZXVlZD1mYWxzZSwgaXRlcmF0aW5nPWZhbHNlOiB3YWtldXAoKSBoYXMgbm90IGJlIGNhbGxlZCBhbmQKKwkJCQkvLyB0aGVyZWZvcmUgdGFzayBpcyBub3QgZXhlY3V0aW5nLgorCQkJCS8vIHF1ZXVlZD10cnVlLCBpdGVyYXRpbmc9ZmFsc2U6IHdha2V1cCgpIHdhcyBjYWxsZWQgYnV0LCB0YXNrCisJCQkJLy8gZXhlY3V0aW9uIGhhcyBub3Qgc3RhcnRlZCB5ZXQKKwkJCQkvLyBxdWV1ZWQ9ZmFsc2UsIGl0ZXJhdGluZz10cnVlIDogd2FrZXVwKCkgd2FzIGNhbGxlZCwgd2hpY2ggY2F1c2VkCisJCQkJLy8gdGFzayBleGVjdXRpb24gdG8gc3RhcnQuCisJCQkJLy8gcXVldWVkPXRydWUsIGl0ZXJhdGluZz10cnVlIDogd2FrZXVwKCkgY2FsbGVkIGFmdGVyIHRhc2sKKwkJCQkvLyBleGVjdXRpb24gd2FzIHN0YXJ0ZWQuCisKKwkJCQlpZihxdWV1ZWQgfHwgX3NodXRkb3duKQorCQkJCXsKKwkJCQkJcmV0dXJuOworCQkJCX0KKworCQkJCXF1ZXVlZCA9IHRydWU7CisKKwkJCQkvLyBUaGUgcnVuVGFzaygpIG1ldGhvZCB3aWxsIGRvIHRoaXMgZm9yIG1lIG9uY2Ugd2UgYXJlIGRvbmUKKwkJCQkvLyBpdGVyYXRpbmcuCisJCQkJaWYoIWl0ZXJhdGluZykKKwkJCQl7CisJCQkJCVRocmVhZFBvb2wuUXVldWVVc2VyV29ya0l0ZW0obmV3IFdhaXRDYWxsYmFjayhSdW4pLCB0aGlzKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvLy8gPHN1bW1hcnk+CisJCS8vLyBzaHV0IGRvd24gdGhlIHRhc2sKKwkJLy8vIDwvc3VtbWFyeT4KKwkJLy8vIDxwYXJhbSBuYW1lPSJ0aW1lb3V0Ij48L3BhcmFtPgorCQlwdWJsaWMgdm9pZCBTaHV0ZG93bihUaW1lU3BhbiB0aW1lb3V0KQorCQl7CisJCQlsb2NrKHJ1bmFibGUpCisJCQl7CisJCQkJX3NodXRkb3duID0gdHJ1ZTsKKwkJCQkvLyB0aGUgY2hlY2sgb24gdGhlIHRocmVhZCBpcyBkb25lCisJCQkJLy8gYmVjYXVzZSBhIGNhbGwgdG8gaXRlcmF0ZSBjYW4gcmVzdWx0IGluCisJCQkJLy8gc2h1dERvd24oKSBiZWluZyBjYWxsZWQsIHdoaWNoIHdvdWxkIHdhaXQgZm9yZXZlcgorCQkJCS8vIHdhaXRpbmcgZm9yIGl0ZXJhdGluZyB0byBmaW5pc2gKKwkJCQlpZihydW5uaW5nVGhyZWFkICE9IFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLkN1cnJlbnRUaHJlYWQpCisJCQkJeworCQkJCQlpZihpdGVyYXRpbmcpCisJCQkJCXsKKwkJCQkJCVN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLlNsZWVwKHRpbWVvdXQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKyAgICAgICAgcHVibGljIHZvaWQgU2h1dGRvd25XaXRoQWJvcnQoVGltZVNwYW4gdGltZW91dCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9jayhydW5hYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9zaHV0ZG93biA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZihydW5uaW5nVGhyZWFkICE9IFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLkN1cnJlbnRUaHJlYWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihpdGVyYXRpbmcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLlNsZWVwKHRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoaXRlcmF0aW5nKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nVGhyZWFkLkFib3J0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCQlwdWJsaWMgdm9pZCBTaHV0ZG93bigpCisJCXsKKwkJCVNodXRkb3duKG5ldyBUaW1lU3BhbihUaW1lb3V0LkluZmluaXRlKSk7CisJCX0KKworCQlpbnRlcm5hbCB2b2lkIFJ1blRhc2soKQorCQl7CisJCQlsb2NrKHJ1bmFibGUpCisJCQl7CisJCQkJcXVldWVkID0gZmFsc2U7CisJCQkJaWYoX3NodXRkb3duKQorCQkJCXsKKwkJCQkJaXRlcmF0aW5nID0gZmFsc2U7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJaXRlcmF0aW5nID0gdHJ1ZTsKKwkJCX0KKworCQkJLy8gRG9uJ3Qgc3luY2hyb25pemUgd2hpbGUgd2UgYXJlIGl0ZXJhdGluZyBzbyB0aGF0CisJCQkvLyBtdWx0aXBsZSB3YWtldXAoKSBjYWxscyBjYW4gYmUgZXhlY3V0ZWQgY29uY3VycmVudGx5LgorCQkJYm9vbCBkb25lID0gZmFsc2U7CisJCQl0cnkKKwkJCXsKKwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgbWF4SXRlcmF0aW9uc1BlclJ1bjsgaSsrKQorCQkJCXsKKwkJCQkJaWYoIXRhc2suSXRlcmF0ZSgpKQorCQkJCQl7CisJCQkJCQlkb25lID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZmluYWxseQorCQkJeworCQkJCWxvY2socnVuYWJsZSkKKwkJCQl7CisJCQkJCWl0ZXJhdGluZyA9IGZhbHNlOworCQkJCQlpZihfc2h1dGRvd24pCisJCQkJCXsKKwkJCQkJCXF1ZXVlZCA9IGZhbHNlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gSWYgd2UgY291bGQgbm90IGl0ZXJhdGUgYWxsIHRoZSBpdGVtcworCQkJCQkJLy8gdGhlbiB3ZSBuZWVkIHRvIHJlLXF1ZXVlLgorCQkJCQkJaWYoIWRvbmUpCisJCQkJCQl7CisJCQkJCQkJcXVldWVkID0gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJaWYocXVldWVkKQorCQkJCQkJeworCQkJCQkJCVRocmVhZFBvb2wuUXVldWVVc2VyV29ya0l0ZW0obmV3IFdhaXRDYWxsYmFjayhSdW4pLCB0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL1NjaGVkdWxlci5jcyBiL3NyYy9UaHJlYWRzL1NjaGVkdWxlci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RocmVhZHMvU2NoZWR1bGVyLmNzCnJlbmFtZSB0byBzcmMvVGhyZWFkcy9TY2hlZHVsZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL1Rhc2suY3MgYi9zcmMvVGhyZWFkcy9UYXNrLmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UaHJlYWRzL1Rhc2suY3MKcmVuYW1lIHRvIHNyYy9UaHJlYWRzL1Rhc2suY3MKaW5kZXggNGQyNmU5MS4uYjhhYWQ0ZiAxMDA2NDQKLS0tIGEvc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGFzay5jcworKysgYi9zcmMvVGhyZWFkcy9UYXNrLmNzCkBAIC0xLDM2ICsxLDM2IEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcw0KLXsNCi0JLy8vIDxzdW1tYXJ5Pg0KLQkvLy8gUmVwcmVzZW50cyBhIHRhc2sgdGhhdCBtYXkgdGFrZSBhIGZldyBpdGVyYXRpb25zIHRvIGNvbXBsZXRlLg0KLQkvLy8gPC9zdW1tYXJ5Pg0KLQlwdWJsaWMgaW50ZXJmYWNlIFRhc2sNCi0Jew0KLQkJLy8vIDxzdW1tYXJ5Pg0KLQkJLy8vIFBlcmZvcm1zIHNvbWUgcG9ydGlvbiBvZiB0aGUgd29yayB0aGF0IHRoaXMgVGFzayBvYmplY3QgaXMNCi0JCS8vLyBhc3NpZ25lZCB0byBjb21wbGV0ZS4gIFdoZW4gdGhlIHRhc2sgaXMgZW50aXJlbHkgZmluaXNoZWQgdGhpcw0KLQkJLy8vIG1ldGhvZCBzaG91bGQgcmV0dXJuIGZhbHNlLiANCi0JCS8vLyA8L3N1bW1hcnk+DQotCQkvLy8gPHJldHVybnM+DQotCQkvLy8gQSA8c2VlIGNyZWY9IlN5c3RlbS5Cb29sZWFuIi8+IHRoaXMgaW5kaWNhdGVzIGlmIHRoaXMgVGFzayBzaG91bGQgDQotCQkvLy8gYmUgcnVuIGFnYWluLg0KLQkJLy8vIDwvcmV0dXJucz4NCi0JCWJvb2wgSXRlcmF0ZSgpOw0KLQl9DQotfQ0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcworeworCS8vLyA8c3VtbWFyeT4KKwkvLy8gUmVwcmVzZW50cyBhIHRhc2sgdGhhdCBtYXkgdGFrZSBhIGZldyBpdGVyYXRpb25zIHRvIGNvbXBsZXRlLgorCS8vLyA8L3N1bW1hcnk+CisJcHVibGljIGludGVyZmFjZSBUYXNrCisJeworCQkvLy8gPHN1bW1hcnk+CisJCS8vLyBQZXJmb3JtcyBzb21lIHBvcnRpb24gb2YgdGhlIHdvcmsgdGhhdCB0aGlzIFRhc2sgb2JqZWN0IGlzCisJCS8vLyBhc3NpZ25lZCB0byBjb21wbGV0ZS4gIFdoZW4gdGhlIHRhc2sgaXMgZW50aXJlbHkgZmluaXNoZWQgdGhpcworCQkvLy8gbWV0aG9kIHNob3VsZCByZXR1cm4gZmFsc2UuIAorCQkvLy8gPC9zdW1tYXJ5PgorCQkvLy8gPHJldHVybnM+CisJCS8vLyBBIDxzZWUgY3JlZj0iU3lzdGVtLkJvb2xlYW4iLz4gdGhpcyBpbmRpY2F0ZXMgaWYgdGhpcyBUYXNrIHNob3VsZCAKKwkJLy8vIGJlIHJ1biBhZ2Fpbi4KKwkJLy8vIDwvcmV0dXJucz4KKwkJYm9vbCBJdGVyYXRlKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGFza1J1bm5lci5jcyBiL3NyYy9UaHJlYWRzL1Rhc2tSdW5uZXIuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGFza1J1bm5lci5jcwpyZW5hbWUgdG8gc3JjL1RocmVhZHMvVGFza1J1bm5lci5jcwppbmRleCA1ZDQ2NjgzLi5jZDI0ZTYwIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9UYXNrUnVubmVyLmNzCisrKyBiL3NyYy9UaHJlYWRzL1Rhc2tSdW5uZXIuY3MKQEAgLTEsNjMgKzEsNjMgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi11c2luZyBTeXN0ZW07DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcw0KLXsNCi0JLy8vIDxzdW1tYXJ5Pg0KLQkvLy8gQWxsb3dzIHlvdSB0byByZXF1ZXN0IGEgdGhyZWFkIGV4ZWN1dGUgdGhlIGFzc29jaWF0ZWQgVGFzay4NCi0JLy8vIDwvc3VtbWFyeT4NCi0JcHVibGljIGludGVyZmFjZSBUYXNrUnVubmVyDQotCXsNCi0gICAgICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgICAgIC8vLyBXYWtldXAgdGhlIFRhc2tSdW5uZXIgYW5kIGhhdmUgaXQgY2hlY2sgZm9yIGFueSBwZW5kaW5nIHdvcmsgdGhhdA0KLSAgICAgICAgLy8vIG5lZWRzIHRvIGJlIGNvbXBsZXRlZC4gIElmIG5vbmUgaXMgZm91bmQgaXQgd2lsbCBnbyBiYWNrIHRvIHNsZWVwDQotICAgICAgICAvLy8gdW50aWwgYW5vdGhlciBXYWtldXAgY2FsbCBpcyBtYWRlLg0KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4NCi0JCXZvaWQgV2FrZXVwKCk7DQotDQotICAgICAgICAvLy8gPHN1bW1hcnk+DQotICAgICAgICAvLy8gQXR0ZW1wdCB0byBTaHV0ZG93biB0aGUgVGFza1J1bm5lciwgdGhpcyBtZXRob2Qgd2lsbCB3YWl0IGluZGVmaW5pdGVseQ0KLSAgICAgICAgLy8vIGZvciB0aGUgVGFza1J1bm5lciB0byBxdWl0ZSBpZiB0aGUgdGFzayBydW5uZXIgaXMgaW4gYSBjYWxsIHRvIGl0cyBUYXNrJ3MNCi0gICAgICAgIC8vLyBydW4gbWV0aG9kIGFuZCB0aGF0IG5ldmVyIHJldHVybnMuDQotICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KLQkJdm9pZCBTaHV0ZG93bigpOw0KLQ0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAgICAgLy8vIFBlcmZvcm1zIGEgdGltZWQgd2FpdCBmb3IgdGhlIFRhc2tSdW5uZXIgdG8gc2h1dGRvd24uICBJZiB0aGUgVGFza1J1bm5lcg0KLSAgICAgICAgLy8vIGlzIGluIGEgY2FsbCB0byBpdHMgVGFzaydzIHJ1biBtZXRob2QgYW5kIHRoYXQgZG9lcyBub3QgcmV0dXJuIGJlZm9yZSB0aGUNCi0gICAgICAgIC8vLyB0aW1lb3V0IGV4cGlyZXMgdGhpcyBtZXRob2QgcmV0dXJucyBhbmQgdGhlIFRhc2tSdW5uZXIgbWF5IHJlbWFpbiBpbiB0aGUNCi0gICAgICAgIC8vLyBydW5uaW5nIHN0YXRlLg0KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idGltZW91dCI+DQotICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRpbWVTcGFuIi8+DQotICAgICAgICAvLy8gPC9wYXJhbT4NCi0JCXZvaWQgU2h1dGRvd24oVGltZVNwYW4gdGltZW91dCk7DQotDQotICAgICAgICAvLy8gPHN1bW1hcnk+DQotICAgICAgICAvLy8gUGVyZm9ybXMgYSB0aW1lZCB3YWl0IGZvciB0aGUgVGFza1J1bm5lciB0byBzaHV0ZG93bi4gIElmIHRoZSBUYXNrUnVubmVyDQotICAgICAgICAvLy8gaXMgaW4gYSBjYWxsIHRvIGl0cyBUYXNrJ3MgcnVuIG1ldGhvZCBhbmQgdGhhdCBkb2VzIG5vdCByZXR1cm4gYmVmb3JlIHRoZQ0KLSAgICAgICAgLy8vIHRpbWVvdXQgZXhwaXJlcyB0aGlzIG1ldGhvZCBzZW5kcyBhbiBBYm9ydCB0byB0aGUgVGFzayB0aHJlYWQgYW5kIHJldHVybi4NCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+DQotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRpbWVvdXQiPg0KLSAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUaW1lU3BhbiIvPg0KLSAgICAgICAgLy8vIDwvcGFyYW0+DQotICAgICAgICB2b2lkIFNodXRkb3duV2l0aEFib3J0KFRpbWVTcGFuIHRpbWVvdXQpOw0KLQ0KLQl9DQotfQ0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtOworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UaHJlYWRzCit7CisJLy8vIDxzdW1tYXJ5PgorCS8vLyBBbGxvd3MgeW91IHRvIHJlcXVlc3QgYSB0aHJlYWQgZXhlY3V0ZSB0aGUgYXNzb2NpYXRlZCBUYXNrLgorCS8vLyA8L3N1bW1hcnk+CisJcHVibGljIGludGVyZmFjZSBUYXNrUnVubmVyCisJeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBXYWtldXAgdGhlIFRhc2tSdW5uZXIgYW5kIGhhdmUgaXQgY2hlY2sgZm9yIGFueSBwZW5kaW5nIHdvcmsgdGhhdAorICAgICAgICAvLy8gbmVlZHMgdG8gYmUgY29tcGxldGVkLiAgSWYgbm9uZSBpcyBmb3VuZCBpdCB3aWxsIGdvIGJhY2sgdG8gc2xlZXAKKyAgICAgICAgLy8vIHVudGlsIGFub3RoZXIgV2FrZXVwIGNhbGwgaXMgbWFkZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKwkJdm9pZCBXYWtldXAoKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBBdHRlbXB0IHRvIFNodXRkb3duIHRoZSBUYXNrUnVubmVyLCB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgaW5kZWZpbml0ZWx5CisgICAgICAgIC8vLyBmb3IgdGhlIFRhc2tSdW5uZXIgdG8gcXVpdGUgaWYgdGhlIHRhc2sgcnVubmVyIGlzIGluIGEgY2FsbCB0byBpdHMgVGFzaydzCisgICAgICAgIC8vLyBydW4gbWV0aG9kIGFuZCB0aGF0IG5ldmVyIHJldHVybnMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisJCXZvaWQgU2h1dGRvd24oKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBQZXJmb3JtcyBhIHRpbWVkIHdhaXQgZm9yIHRoZSBUYXNrUnVubmVyIHRvIHNodXRkb3duLiAgSWYgdGhlIFRhc2tSdW5uZXIKKyAgICAgICAgLy8vIGlzIGluIGEgY2FsbCB0byBpdHMgVGFzaydzIHJ1biBtZXRob2QgYW5kIHRoYXQgZG9lcyBub3QgcmV0dXJuIGJlZm9yZSB0aGUKKyAgICAgICAgLy8vIHRpbWVvdXQgZXhwaXJlcyB0aGlzIG1ldGhvZCByZXR1cm5zIGFuZCB0aGUgVGFza1J1bm5lciBtYXkgcmVtYWluIGluIHRoZQorICAgICAgICAvLy8gcnVubmluZyBzdGF0ZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0aW1lb3V0Ij4KKyAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUaW1lU3BhbiIvPgorICAgICAgICAvLy8gPC9wYXJhbT4KKwkJdm9pZCBTaHV0ZG93bihUaW1lU3BhbiB0aW1lb3V0KTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBQZXJmb3JtcyBhIHRpbWVkIHdhaXQgZm9yIHRoZSBUYXNrUnVubmVyIHRvIHNodXRkb3duLiAgSWYgdGhlIFRhc2tSdW5uZXIKKyAgICAgICAgLy8vIGlzIGluIGEgY2FsbCB0byBpdHMgVGFzaydzIHJ1biBtZXRob2QgYW5kIHRoYXQgZG9lcyBub3QgcmV0dXJuIGJlZm9yZSB0aGUKKyAgICAgICAgLy8vIHRpbWVvdXQgZXhwaXJlcyB0aGlzIG1ldGhvZCBzZW5kcyBhbiBBYm9ydCB0byB0aGUgVGFzayB0aHJlYWQgYW5kIHJldHVybi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0aW1lb3V0Ij4KKyAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUaW1lU3BhbiIvPgorICAgICAgICAvLy8gPC9wYXJhbT4KKyAgICAgICAgdm9pZCBTaHV0ZG93bldpdGhBYm9ydChUaW1lU3BhbiB0aW1lb3V0KTsKKworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL1Rhc2tSdW5uZXJGYWN0b3J5LmNzIGIvc3JjL1RocmVhZHMvVGFza1J1bm5lckZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGFza1J1bm5lckZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9UaHJlYWRzL1Rhc2tSdW5uZXJGYWN0b3J5LmNzCmluZGV4IDliYjI1OTkuLmZkNWFiODUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL1Rhc2tSdW5uZXJGYWN0b3J5LmNzCisrKyBiL3NyYy9UaHJlYWRzL1Rhc2tSdW5uZXJGYWN0b3J5LmNzCkBAIC0xLDY2ICsxLDY2IEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcw0KLXsNCi0JLy8vIDxzdW1tYXJ5Pg0KLQkvLy8gTWFuYWdlcyB0aGUgdGhyZWFkIHBvb2wgZm9yIGxvbmcgcnVubmluZyB0YXNrcy4gTG9uZyBydW5uaW5nIHRhc2tzIGFyZSBub3QNCi0JLy8vIGFsd2F5cyBhY3RpdmUgYnV0IHdoZW4gdGhleSBhcmUgYWN0aXZlLCB0aGV5IG1heSBuZWVkIGEgZmV3IGl0ZXJhdGlvbnMgb2YNCi0JLy8vIHByb2Nlc3NpbmcgZm9yIHRoZW0gdG8gYmVjb21lIGlkbGUuIFRoZSBtYW5hZ2VyIGVuc3VyZXMgdGhhdCBlYWNoIHRhc2sgaXMNCi0JLy8vIHByb2Nlc3NlcyBidXQgdGhhdCBubyBvbmUgdGFzayBvdmVydGFrZXMgdGhlIHN5c3RlbS4gVGhpcyBpcyBraW5hIGxpa2UNCi0JLy8vIGNvb3BlcmF0aXZlIG11bHRpdGFza2luZy4NCi0gICAgLy8vDQotICAgIC8vLyBJZiB5b3VyIE9TL0pWTSBjb21iaW5hdGlvbiBoYXMgYSBnb29kIHRocmVhZCBtb2RlbCwgeW91IG1heSB3YW50IHRvIGF2b2lkDQotICAgIC8vLyB1c2luZyBhIHRocmVhZCBwb29sIHRvIHJ1biB0YXNrcyBhbmQgdXNlIGEgRGVkaWNhdGVkVGFza1J1bm5lciBpbnN0ZWFkLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLQlwdWJsaWMgY2xhc3MgVGFza1J1bm5lckZhY3RvcnkNCi0Jew0KLQkJcHVibGljIHN0cmluZyBuYW1lID0gIkFjdGl2ZU1RIFRhc2siOw0KLSAgICAgICAgcHVibGljIFRocmVhZFByaW9yaXR5IHByaW9yaXR5ID0gVGhyZWFkUHJpb3JpdHkuTm9ybWFsOw0KLSAgICAgICAgcHVibGljIGludCBtYXhJdGVyYXRpb25zUGVyUnVuID0gMTAwMDsNCi0gICAgICAgIHB1YmxpYyBib29sIGRlZGljYXRlZFRhc2tSdW5uZXIgPSB0cnVlOw0KLQ0KLQkJcHVibGljIFRhc2tSdW5uZXJGYWN0b3J5KCkNCi0JCXsNCi0JCX0NCi0NCi0gICAgICAgIHB1YmxpYyBUYXNrUnVubmVyIENyZWF0ZVRhc2tSdW5uZXIoVGFzayB0YXNrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBDcmVhdGVUYXNrUnVubmVyKHRhc2ssIHRoaXMubmFtZSk7DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgVGFza1J1bm5lciBDcmVhdGVUYXNrUnVubmVyKFRhc2sgdGFzaywgc3RyaW5nIG5hbWUpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIENyZWF0ZVRhc2tSdW5uZXIodGFzaywgbmFtZSwgdGhpcy5wcmlvcml0eSk7DQotICAgICAgICB9DQotDQotCQlwdWJsaWMgVGFza1J1bm5lciBDcmVhdGVUYXNrUnVubmVyKFRhc2sgdGFzaywgc3RyaW5nIG5hbWUsIFRocmVhZFByaW9yaXR5IHRhc2tQcmlvcml0eSkNCi0JCXsNCi0gICAgICAgICAgICBpZih0aGlzLmRlZGljYXRlZFRhc2tSdW5uZXIpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlZGljYXRlZFRhc2tSdW5uZXIodGFzaywgbmFtZSwgdGFza1ByaW9yaXR5KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQb29sZWRUYXNrUnVubmVyKHRhc2ssIHRoaXMubWF4SXRlcmF0aW9uc1BlclJ1bik7DQotICAgICAgICAgICAgfQ0KLQkJfQ0KLQl9DQotfQ0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkcworeworCS8vLyA8c3VtbWFyeT4KKwkvLy8gTWFuYWdlcyB0aGUgdGhyZWFkIHBvb2wgZm9yIGxvbmcgcnVubmluZyB0YXNrcy4gTG9uZyBydW5uaW5nIHRhc2tzIGFyZSBub3QKKwkvLy8gYWx3YXlzIGFjdGl2ZSBidXQgd2hlbiB0aGV5IGFyZSBhY3RpdmUsIHRoZXkgbWF5IG5lZWQgYSBmZXcgaXRlcmF0aW9ucyBvZgorCS8vLyBwcm9jZXNzaW5nIGZvciB0aGVtIHRvIGJlY29tZSBpZGxlLiBUaGUgbWFuYWdlciBlbnN1cmVzIHRoYXQgZWFjaCB0YXNrIGlzCisJLy8vIHByb2Nlc3NlcyBidXQgdGhhdCBubyBvbmUgdGFzayBvdmVydGFrZXMgdGhlIHN5c3RlbS4gVGhpcyBpcyBraW5hIGxpa2UKKwkvLy8gY29vcGVyYXRpdmUgbXVsdGl0YXNraW5nLgorICAgIC8vLworICAgIC8vLyBJZiB5b3VyIE9TL0pWTSBjb21iaW5hdGlvbiBoYXMgYSBnb29kIHRocmVhZCBtb2RlbCwgeW91IG1heSB3YW50IHRvIGF2b2lkCisgICAgLy8vIHVzaW5nIGEgdGhyZWFkIHBvb2wgdG8gcnVuIHRhc2tzIGFuZCB1c2UgYSBEZWRpY2F0ZWRUYXNrUnVubmVyIGluc3RlYWQuCisgICAgLy8vIDwvc3VtbWFyeT4KKwlwdWJsaWMgY2xhc3MgVGFza1J1bm5lckZhY3RvcnkKKwl7CisJCXB1YmxpYyBzdHJpbmcgbmFtZSA9ICJBY3RpdmVNUSBUYXNrIjsKKyAgICAgICAgcHVibGljIFRocmVhZFByaW9yaXR5IHByaW9yaXR5ID0gVGhyZWFkUHJpb3JpdHkuTm9ybWFsOworICAgICAgICBwdWJsaWMgaW50IG1heEl0ZXJhdGlvbnNQZXJSdW4gPSAxMDAwOworICAgICAgICBwdWJsaWMgYm9vbCBkZWRpY2F0ZWRUYXNrUnVubmVyID0gdHJ1ZTsKKworCQlwdWJsaWMgVGFza1J1bm5lckZhY3RvcnkoKQorCQl7CisJCX0KKworICAgICAgICBwdWJsaWMgVGFza1J1bm5lciBDcmVhdGVUYXNrUnVubmVyKFRhc2sgdGFzaykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENyZWF0ZVRhc2tSdW5uZXIodGFzaywgdGhpcy5uYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBUYXNrUnVubmVyIENyZWF0ZVRhc2tSdW5uZXIoVGFzayB0YXNrLCBzdHJpbmcgbmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENyZWF0ZVRhc2tSdW5uZXIodGFzaywgbmFtZSwgdGhpcy5wcmlvcml0eSk7CisgICAgICAgIH0KKworCQlwdWJsaWMgVGFza1J1bm5lciBDcmVhdGVUYXNrUnVubmVyKFRhc2sgdGFzaywgc3RyaW5nIG5hbWUsIFRocmVhZFByaW9yaXR5IHRhc2tQcmlvcml0eSkKKwkJeworICAgICAgICAgICAgaWYodGhpcy5kZWRpY2F0ZWRUYXNrUnVubmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGVkaWNhdGVkVGFza1J1bm5lcih0YXNrLCBuYW1lLCB0YXNrUHJpb3JpdHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUG9vbGVkVGFza1J1bm5lcih0YXNrLCB0aGlzLm1heEl0ZXJhdGlvbnNQZXJSdW4pOworICAgICAgICAgICAgfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGhyZWFkUG9vbEV4ZWN1dG9yLmNzIGIvc3JjL1RocmVhZHMvVGhyZWFkUG9vbEV4ZWN1dG9yLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVGhyZWFkcy9UaHJlYWRQb29sRXhlY3V0b3IuY3MKcmVuYW1lIHRvIHNyYy9UaHJlYWRzL1RocmVhZFBvb2xFeGVjdXRvci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGltZXJFeC5jcyBiL3NyYy9UaHJlYWRzL1RpbWVyRXguY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UaHJlYWRzL1RpbWVyRXguY3MKcmVuYW1lIHRvIHNyYy9UaHJlYWRzL1RpbWVyRXguY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UaHJlYWRzL1RpbWVyVGFzay5jcyBiL3NyYy9UaHJlYWRzL1RpbWVyVGFzay5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RocmVhZHMvVGltZXJUYXNrLmNzCnJlbmFtZSB0byBzcmMvVGhyZWFkcy9UaW1lclRhc2suY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc2FjdGlvbkNvbnRleHQuY3MgYi9zcmMvVHJhbnNhY3Rpb25Db250ZXh0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNhY3Rpb25Db250ZXh0LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNhY3Rpb25Db250ZXh0LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNhY3Rpb25zL0lSZWNvdmVyeUxvZ2dlci5jcyBiL3NyYy9UcmFuc2FjdGlvbnMvSVJlY292ZXJ5TG9nZ2VyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNhY3Rpb25zL0lSZWNvdmVyeUxvZ2dlci5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zYWN0aW9ucy9JUmVjb3ZlcnlMb2dnZXIuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc2FjdGlvbnMvSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeS5jcyBiL3NyYy9UcmFuc2FjdGlvbnMvSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zYWN0aW9ucy9JUmVjb3ZlcnlMb2dnZXJGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNhY3Rpb25zL0lSZWNvdmVyeUxvZ2dlckZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlGaWxlTG9nZ2VyLmNzIGIvc3JjL1RyYW5zYWN0aW9ucy9SZWNvdmVyeUZpbGVMb2dnZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlGaWxlTG9nZ2VyLmNzCnJlbmFtZSB0byBzcmMvVHJhbnNhY3Rpb25zL1JlY292ZXJ5RmlsZUxvZ2dlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zYWN0aW9ucy9SZWNvdmVyeUZpbGVMb2dnZXJGYWN0b3J5LmNzIGIvc3JjL1RyYW5zYWN0aW9ucy9SZWNvdmVyeUZpbGVMb2dnZXJGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNhY3Rpb25zL1JlY292ZXJ5RmlsZUxvZ2dlckZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlGaWxlTG9nZ2VyRmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zYWN0aW9ucy9SZWNvdmVyeUxvZ2dlckZhY3RvcnlBdHRyaWJ1dGUuY3MgYi9zcmMvVHJhbnNhY3Rpb25zL1JlY292ZXJ5TG9nZ2VyRmFjdG9yeUF0dHJpYnV0ZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zYWN0aW9ucy9SZWNvdmVyeUxvZ2dlckZhY3RvcnlBdHRyaWJ1dGUuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJGYWN0b3J5QXR0cmlidXRlLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0FjdGl2ZU1RVHJhbnNwb3J0RmFjdG9yeUF0dHJpYnV0ZS5jcyBiL3NyYy9UcmFuc3BvcnQvQWN0aXZlTVFUcmFuc3BvcnRGYWN0b3J5QXR0cmlidXRlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0FjdGl2ZU1RVHJhbnNwb3J0RmFjdG9yeUF0dHJpYnV0ZS5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9BY3RpdmVNUVRyYW5zcG9ydEZhY3RvcnlBdHRyaWJ1dGUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L0Fic3RyYWN0RGlzY292ZXJ5QWdlbnQuY3MgYi9zcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9BYnN0cmFjdERpc2NvdmVyeUFnZW50LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9BYnN0cmFjdERpc2NvdmVyeUFnZW50LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9BYnN0cmFjdERpc2NvdmVyeUFnZW50LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9BY3RpdmVNUURpc2NvdmVyeUFnZW50RmFjdG9yeUF0dHJpYnV0ZS5jcyBiL3NyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L0FjdGl2ZU1RRGlzY292ZXJ5QWdlbnRGYWN0b3J5QXR0cmlidXRlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9BY3RpdmVNUURpc2NvdmVyeUFnZW50RmFjdG9yeUF0dHJpYnV0ZS5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvQWN0aXZlTVFEaXNjb3ZlcnlBZ2VudEZhY3RvcnlBdHRyaWJ1dGUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyZWRTZXJ2aWNlRGF0YS5jcyBiL3NyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyZWRTZXJ2aWNlRGF0YS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvRGlzY292ZXJlZFNlcnZpY2VEYXRhLmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9EaXNjb3ZlcmVkU2VydmljZURhdGEuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyeUFnZW50RmFjdG9yeS5jcyBiL3NyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyeUFnZW50RmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvRGlzY292ZXJ5QWdlbnRGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9EaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyeVRyYW5zcG9ydC5jcyBiL3NyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyeVRyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvRGlzY292ZXJ5VHJhbnNwb3J0LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9EaXNjb3ZlcnlUcmFuc3BvcnQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L0Rpc2NvdmVyeVRyYW5zcG9ydEZhY3RvcnkuY3MgYi9zcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9EaXNjb3ZlcnlUcmFuc3BvcnRGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9EaXNjb3ZlcnlUcmFuc3BvcnRGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9EaXNjb3ZlcnlUcmFuc3BvcnRGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9JRGlzY292ZXJ5QWdlbnQuY3MgYi9zcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9JRGlzY292ZXJ5QWdlbnQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L0lEaXNjb3ZlcnlBZ2VudC5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvSURpc2NvdmVyeUFnZW50LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9JRGlzY292ZXJ5QWdlbnRGYWN0b3J5LmNzIGIvc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvSURpc2NvdmVyeUFnZW50RmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvSURpc2NvdmVyeUFnZW50RmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvSURpc2NvdmVyeUFnZW50RmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvTXVsdGljYXN0L011bHRpY2FzdERpc2NvdmVyeUFnZW50LmNzIGIvc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvTXVsdGljYXN0L011bHRpY2FzdERpc2NvdmVyeUFnZW50LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9NdWx0aWNhc3QvTXVsdGljYXN0RGlzY292ZXJ5QWdlbnQuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L011bHRpY2FzdC9NdWx0aWNhc3REaXNjb3ZlcnlBZ2VudC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvTXVsdGljYXN0L011bHRpY2FzdERpc2NvdmVyeUFnZW50RmFjdG9yeS5jcyBiL3NyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L011bHRpY2FzdC9NdWx0aWNhc3REaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L011bHRpY2FzdC9NdWx0aWNhc3REaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L011bHRpY2FzdC9NdWx0aWNhc3REaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L2h0dHAvSHR0cERpc2NvdmVyeUFnZW50LmNzIGIvc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvaHR0cC9IdHRwRGlzY292ZXJ5QWdlbnQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRGlzY292ZXJ5L2h0dHAvSHR0cERpc2NvdmVyeUFnZW50LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0Rpc2NvdmVyeS9odHRwL0h0dHBEaXNjb3ZlcnlBZ2VudC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9EaXNjb3ZlcnkvaHR0cC9IdHRwRGlzY292ZXJ5QWdlbnRGYWN0b3J5LmNzIGIvc3JjL1RyYW5zcG9ydC9EaXNjb3ZlcnkvaHR0cC9IdHRwRGlzY292ZXJ5QWdlbnRGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0Rpc2NvdmVyeS9odHRwL0h0dHBEaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvRGlzY292ZXJ5L2h0dHAvSHR0cERpc2NvdmVyeUFnZW50RmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9GYWlsb3Zlci9CYWNrdXBUcmFuc3BvcnQuY3MgYi9zcmMvVHJhbnNwb3J0L0ZhaWxvdmVyL0JhY2t1cFRyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0ZhaWxvdmVyL0JhY2t1cFRyYW5zcG9ydC5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9GYWlsb3Zlci9CYWNrdXBUcmFuc3BvcnQuY3MKaW5kZXggYzM1YmM4YS4uNjFmNWI1YiAxMDA2NDQKLS0tIGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9GYWlsb3Zlci9CYWNrdXBUcmFuc3BvcnQuY3MKKysrIGIvc3JjL1RyYW5zcG9ydC9GYWlsb3Zlci9CYWNrdXBUcmFuc3BvcnQuY3MKQEAgLTEsMTA0ICsxLDEwNCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSAqLw0KLQ0KLXVzaW5nIFN5c3RlbTsNCi11c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOw0KLQ0KLW5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zcG9ydC5GYWlsb3Zlcg0KLXsNCi0gICAgY2xhc3MgQmFja3VwVHJhbnNwb3J0DQotICAgIHsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRmFpbG92ZXJUcmFuc3BvcnQgZmFpbG92ZXJUcmFuc3BvcnQ7DQotICAgICAgICBwcml2YXRlIElUcmFuc3BvcnQgdHJhbnNwb3J0Ow0KLSAgICAgICAgcHJpdmF0ZSBVcmkgdXJpOw0KLSAgICAgICAgcHJpdmF0ZSBib29sIGRpc3Bvc2VkOw0KLQ0KLSAgICAgICAgcHVibGljIEJhY2t1cFRyYW5zcG9ydChGYWlsb3ZlclRyYW5zcG9ydCBmdCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLmZhaWxvdmVyVHJhbnNwb3J0ID0gZnQ7DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBPbkNvbW1hbmQoSVRyYW5zcG9ydCB0LCBDb21tYW5kIGMpDQotICAgICAgICB7DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBPbkV4Y2VwdGlvbihJVHJhbnNwb3J0IHQsIEV4Y2VwdGlvbiBlcnJvcikNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLmRpc3Bvc2VkID0gdHJ1ZTsNCi0gICAgICAgICAgICBpZihmYWlsb3ZlclRyYW5zcG9ydCAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhpcy5mYWlsb3ZlclRyYW5zcG9ydC5SZWNvbm5lY3QoZmFsc2UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBJVHJhbnNwb3J0IFRyYW5zcG9ydA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgc2V0DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSB2YWx1ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgVXJpIFVyaQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVyaTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgc2V0DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB1cmkgPSB2YWx1ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgYm9vbCBEaXNwb3NlZA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRpc3Bvc2VkIHx8ICh0cmFuc3BvcnQgIT0gbnVsbCAmJiB0cmFuc3BvcnQuSXNEaXNwb3NlZCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNldA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgZGlzcG9zZWQgPSB2YWx1ZTsNCi0gICAgICAgICAgICAgICAgaWYoZGlzcG9zZWQgJiYgdHJhbnNwb3J0ICE9IG51bGwpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5EaXNwb3NlKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gdXJpICE9IG51bGwgPyB1cmkuR2V0SGFzaENvZGUoKSA6IC0xOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGJvb2wgZXF1YWxzKE9iamVjdCBvYmopDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYob2JqIGlzIEJhY2t1cFRyYW5zcG9ydCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEJhY2t1cFRyYW5zcG9ydCBvdGhlciA9IG9iaiBhcyBCYWNrdXBUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIHJldHVybiB1cmkgPT0gbnVsbCAmJiBvdGhlci51cmkgPT0gbnVsbCB8fA0KLSAgICAgICAgICAgICAgICAgICAgKHVyaSAhPSBudWxsICYmIG90aGVyLnVyaSAhPSBudWxsICYmIHVyaS5FcXVhbHMob3RoZXIudXJpKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuQ29tbWFuZHM7CisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zcG9ydC5GYWlsb3ZlcgoreworICAgIGNsYXNzIEJhY2t1cFRyYW5zcG9ydAorICAgIHsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBGYWlsb3ZlclRyYW5zcG9ydCBmYWlsb3ZlclRyYW5zcG9ydDsKKyAgICAgICAgcHJpdmF0ZSBJVHJhbnNwb3J0IHRyYW5zcG9ydDsKKyAgICAgICAgcHJpdmF0ZSBVcmkgdXJpOworICAgICAgICBwcml2YXRlIGJvb2wgZGlzcG9zZWQ7CisKKyAgICAgICAgcHVibGljIEJhY2t1cFRyYW5zcG9ydChGYWlsb3ZlclRyYW5zcG9ydCBmdCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5mYWlsb3ZlclRyYW5zcG9ydCA9IGZ0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgT25Db21tYW5kKElUcmFuc3BvcnQgdCwgQ29tbWFuZCBjKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBPbkV4Y2VwdGlvbihJVHJhbnNwb3J0IHQsIEV4Y2VwdGlvbiBlcnJvcikKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7CisgICAgICAgICAgICBpZihmYWlsb3ZlclRyYW5zcG9ydCAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuZmFpbG92ZXJUcmFuc3BvcnQuUmVjb25uZWN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJVHJhbnNwb3J0IFRyYW5zcG9ydAorICAgICAgICB7CisgICAgICAgICAgICBnZXQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVXJpIFVyaQorICAgICAgICB7CisgICAgICAgICAgICBnZXQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXJpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXJpID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbCBEaXNwb3NlZAorICAgICAgICB7CisgICAgICAgICAgICBnZXQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGlzcG9zZWQgfHwgKHRyYW5zcG9ydCAhPSBudWxsICYmIHRyYW5zcG9ydC5Jc0Rpc3Bvc2VkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRpc3Bvc2VkID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaWYoZGlzcG9zZWQgJiYgdHJhbnNwb3J0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuRGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdXJpICE9IG51bGwgPyB1cmkuR2V0SGFzaENvZGUoKSA6IC0xOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgZXF1YWxzKE9iamVjdCBvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKG9iaiBpcyBCYWNrdXBUcmFuc3BvcnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQmFja3VwVHJhbnNwb3J0IG90aGVyID0gb2JqIGFzIEJhY2t1cFRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXJpID09IG51bGwgJiYgb3RoZXIudXJpID09IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgKHVyaSAhPSBudWxsICYmIG90aGVyLnVyaSAhPSBudWxsICYmIHVyaS5FcXVhbHMob3RoZXIudXJpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0LmNzIGIvc3JjL1RyYW5zcG9ydC9GYWlsb3Zlci9GYWlsb3ZlclRyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0LmNzCmluZGV4IDZhYTczNzcuLjdmY2E1YWUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRmFpbG92ZXIvRmFpbG92ZXJUcmFuc3BvcnQuY3MKKysrIGIvc3JjL1RyYW5zcG9ydC9GYWlsb3Zlci9GYWlsb3ZlclRyYW5zcG9ydC5jcwpAQCAtMSwxNjg5ICsxLDE2ODkgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi11c2luZyBTeXN0ZW07DQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOw0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOw0KLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQotdXNpbmcgU3lzdGVtLlRleHQ7DQotdXNpbmcgU3lzdGVtLk5ldDsNCi11c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOw0KLXVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuU3RhdGU7DQotdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5UaHJlYWRzOw0KLXVzaW5nIEFwYWNoZS5OTVMuVXRpbDsNCi0NCi1uYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UcmFuc3BvcnQuRmFpbG92ZXINCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEEgVHJhbnNwb3J0IHRoYXQgaXMgbWFkZSByZWxpYWJsZSBieSBiZWluZyBhYmxlIHRvIGZhaWwgb3ZlciB0byBhbm90aGVyDQotICAgIC8vLyB0cmFuc3BvcnQgd2hlbiBhIHRyYW5zcG9ydCBmYWlsdXJlIGlzIGRldGVjdGVkLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBwdWJsaWMgY2xhc3MgRmFpbG92ZXJUcmFuc3BvcnQgOiBJQ29tcG9zaXRlVHJhbnNwb3J0LCBJQ29tcGFyYWJsZQ0KLSAgICB7DQotCQlwcml2YXRlIHN0YXRpYyBpbnQgREVGQVVMVF9JTklUSUFMX1JFQ09OTkVDVF9ERUxBWSA9IDEwOw0KLQkJcHJpdmF0ZSBzdGF0aWMgaW50IElORklOSVRFID0gLTE7DQotDQotICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQgaWRDb3VudGVyID0gMDsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50IGlkOw0KLQ0KLSAgICAgICAgcHJpdmF0ZSBib29sIGRpc3Bvc2VkOw0KLSAgICAgICAgcHJpdmF0ZSBib29sIGNvbm5lY3RlZDsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTGlzdDxVcmk+IHVyaXMgPSBuZXcgTGlzdDxVcmk+KCk7DQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IExpc3Q8VXJpPiB1cGRhdGVkID0gbmV3IExpc3Q8VXJpPigpOw0KLQ0KLSAgICAgICAgcHJpdmF0ZSBDb21tYW5kSGFuZGxlciBjb21tYW5kSGFuZGxlcjsNCi0gICAgICAgIHByaXZhdGUgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyOw0KLSAgICAgICAgcHJpdmF0ZSBJbnRlcnJ1cHRlZEhhbmRsZXIgaW50ZXJydXB0ZWRIYW5kbGVyOw0KLSAgICAgICAgcHJpdmF0ZSBSZXN1bWVkSGFuZGxlciByZXN1bWVkSGFuZGxlcjsNCi0NCi0JCXByaXZhdGUgcmVhZG9ubHkgQ291bnREb3duTGF0Y2ggbGlzdGVuZXJMYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCg0KTsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTXV0ZXggcmVjb25uZWN0TXV0ZXggPSBuZXcgTXV0ZXgoKTsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTXV0ZXggYmFja3VwTXV0ZXggPSBuZXcgTXV0ZXgoKTsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTXV0ZXggc2xlZXBNdXRleCA9IG5ldyBNdXRleCgpOw0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBDb25uZWN0aW9uU3RhdGVUcmFja2VyIHN0YXRlVHJhY2tlciA9IG5ldyBDb25uZWN0aW9uU3RhdGVUcmFja2VyKCk7DQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8aW50LCBDb21tYW5kPiByZXF1ZXN0TWFwID0gbmV3IERpY3Rpb25hcnk8aW50LCBDb21tYW5kPigpOw0KLQ0KLSAgICAgICAgcHJpdmF0ZSBVcmkgY29ubmVjdGVkVHJhbnNwb3J0VVJJOw0KLSAgICAgICAgcHJpdmF0ZSBVcmkgZmFpbGVkQ29ubmVjdFRyYW5zcG9ydFVSSTsNCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgQXRvbWljUmVmZXJlbmNlPElUcmFuc3BvcnQ+IGNvbm5lY3RlZFRyYW5zcG9ydCA9IG5ldyBBdG9taWNSZWZlcmVuY2U8SVRyYW5zcG9ydD4obnVsbCk7DQotICAgICAgICBwcml2YXRlIFRhc2tSdW5uZXIgcmVjb25uZWN0VGFzayA9IG51bGw7DQotICAgICAgICBwcml2YXRlIGJvb2wgc3RhcnRlZDsNCi0gICAgICAgIHByaXZhdGUgYm9vbCBpbml0aWFsaXplZDsNCi0gICAgICAgIHByaXZhdGUgaW50IGluaXRpYWxSZWNvbm5lY3REZWxheSA9IERFRkFVTFRfSU5JVElBTF9SRUNPTk5FQ1RfREVMQVk7DQotICAgICAgICBwcml2YXRlIGludCBtYXhSZWNvbm5lY3REZWxheSA9IDEwMDAgKiAzMDsNCi0gICAgICAgIHByaXZhdGUgaW50IGJhY2tPZmZNdWx0aXBsaWVyID0gMjsNCi0gICAgICAgIHByaXZhdGUgaW50IHRpbWVvdXQgPSBJTkZJTklURTsNCi0gICAgICAgIHByaXZhdGUgYm9vbCB1c2VFeHBvbmVudGlhbEJhY2tPZmYgPSB0cnVlOw0KLSAgICAgICAgcHJpdmF0ZSBib29sIHJhbmRvbWl6ZSA9IHRydWU7DQotICAgICAgICBwcml2YXRlIGludCBtYXhSZWNvbm5lY3RBdHRlbXB0cyA9IElORklOSVRFOw0KLSAgICAgICAgcHJpdmF0ZSBpbnQgc3RhcnR1cE1heFJlY29ubmVjdEF0dGVtcHRzID0gSU5GSU5JVEU7DQotICAgICAgICBwcml2YXRlIGludCBjb25uZWN0RmFpbHVyZXM7DQotICAgICAgICBwcml2YXRlIGludCByZWNvbm5lY3REZWxheSA9IERFRkFVTFRfSU5JVElBTF9SRUNPTk5FQ1RfREVMQVk7DQotICAgICAgICBwcml2YXRlIEV4Y2VwdGlvbiBjb25uZWN0aW9uRmFpbHVyZTsNCi0gICAgICAgIHByaXZhdGUgYm9vbCBmaXJzdENvbm5lY3Rpb24gPSB0cnVlOw0KLSAgICAgICAgcHJpdmF0ZSBib29sIGJhY2t1cCA9IGZhbHNlOw0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBMaXN0PEJhY2t1cFRyYW5zcG9ydD4gYmFja3VwcyA9IG5ldyBMaXN0PEJhY2t1cFRyYW5zcG9ydD4oKTsNCi0gICAgICAgIHByaXZhdGUgaW50IGJhY2t1cFBvb2xTaXplID0gMTsNCi0gICAgICAgIHByaXZhdGUgYm9vbCB0cmFja01lc3NhZ2VzID0gZmFsc2U7DQotICAgIAlwcml2YXRlIGJvb2wgdHJhY2tUcmFuc2FjdGlvblByb2R1Y2VycyA9IHRydWU7DQotICAgICAgICBwcml2YXRlIGludCBtYXhDYWNoZVNpemUgPSAyNTY7DQotICAgICAgICBwcml2YXRlIHZvbGF0aWxlIEV4Y2VwdGlvbiBmYWlsdXJlOw0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBvYmplY3QgbXV0ZXggPSBuZXcgb2JqZWN0KCk7DQotICAgICAgICBwcml2YXRlIGJvb2wgcmVjb25uZWN0U3VwcG9ydGVkID0gdHJ1ZTsNCi0gICAgICAgIHByaXZhdGUgYm9vbCB1cGRhdGVVUklzU3VwcG9ydGVkID0gdHJ1ZTsNCi0gICAgCXByaXZhdGUgYm9vbCBkb1JlYmFsYW5jZSA9IGZhbHNlOw0KLSAgICAJcHJpdmF0ZSBib29sIGNvbm5lY3RlZFRvUHJpb3JpdHkgPSBmYWxzZTsNCi0JIAlwcml2YXRlIGJvb2wgcHJpb3JpdHlCYWNrdXAgPSBmYWxzZTsNCi0gICAgCXByaXZhdGUgTGlzdDxVcmk+IHByaW9yaXR5TGlzdCA9IG5ldyBMaXN0PFVyaT4oKTsNCi0gICAgCXByaXZhdGUgYm9vbCBwcmlvcml0eUJhY2t1cEF2YWlsYWJsZSA9IGZhbHNlOw0KLQ0KLQkJLy8gTm90IFN1cmUgaG93IHRvIHdvcmsgdGhlc2UgYmFjayBpbiB3aXRoIGFsbCB0aGUgY2hhbmdlcy4NCi0JCS8vcHJpdmF0ZSBpbnQgYXN5bmNUaW1lb3V0ID0gNDUwMDA7DQotICAgICAgICAvL3ByaXZhdGUgYm9vbCBhc3luY0Nvbm5lY3QgPSBmYWxzZTsNCi0NCi0gICAgICAgIHB1YmxpYyBGYWlsb3ZlclRyYW5zcG9ydCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWQgPSBpZENvdW50ZXIrKzsNCi0NCi0gICAgICAgICAgICBzdGF0ZVRyYWNrZXIuVHJhY2tUcmFuc2FjdGlvbnMgPSB0cnVlOw0KLSAgICAgICAgICAgIHJlY29ubmVjdFRhc2sgPSBEZWZhdWx0VGhyZWFkUG9vbHMuRGVmYXVsdFRhc2tSdW5uZXJGYWN0b3J5LkNyZWF0ZVRhc2tSdW5uZXIoDQotICAgICAgICAgICAgICAgIG5ldyBGYWlsb3ZlclRhc2sodGhpcyksICJBY3RpdmVNUSBGYWlsb3ZlciBXb3JrZXI6ICIgKyB0aGlzLkdldEhhc2hDb2RlKCkuVG9TdHJpbmcoKSk7DQotICAgICAgICB9DQotDQotICAgICAgICB+RmFpbG92ZXJUcmFuc3BvcnQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERpc3Bvc2UoZmFsc2UpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgI3JlZ2lvbiBGYWlsb3ZlclRhc2sNCi0NCi0gICAgICAgIHByaXZhdGUgY2xhc3MgRmFpbG92ZXJUYXNrIDogVGFzaw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRmFpbG92ZXJUcmFuc3BvcnQgcGFyZW50Ow0KLQ0KLSAgICAgICAgICAgIHB1YmxpYyBGYWlsb3ZlclRhc2soRmFpbG92ZXJUcmFuc3BvcnQgcCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHBhcmVudCA9IHA7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIHB1YmxpYyBib29sIEl0ZXJhdGUoKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsNCi0gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQuSXNTdGFydGVkKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQotICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgYm9vbCBidWlsZEJhY2t1cCA9IHRydWU7DQotICAgICAgICAgICAgICAgIGxvY2sgKHBhcmVudC5iYWNrdXBNdXRleCkgDQotCQkJCXsNCi0gICAgICAgICAgICAgICAgICAgIGlmICgocGFyZW50LmNvbm5lY3RlZFRyYW5zcG9ydC5WYWx1ZSA9PSBudWxsIHx8IHBhcmVudC5kb1JlYmFsYW5jZSB8fCBwYXJlbnQucHJpb3JpdHlCYWNrdXBBdmFpbGFibGUpICYmICFwYXJlbnQuZGlzcG9zZWQpDQotCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50LkRvQ29ubmVjdCgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQmFja3VwID0gZmFsc2U7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGJ1aWxkQmFja3VwKSANCi0JCQkJew0KLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LkJ1aWxkQmFja3VwcygpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC5wcmlvcml0eUJhY2t1cCAmJiAhcGFyZW50LmNvbm5lY3RlZFRvUHJpb3JpdHkpIA0KLQkJCQkJew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSANCi0JCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5Eb0RlbGF5KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQucmVjb25uZWN0VGFzayA9PSBudWxsKQ0KLQkJCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQucmVjb25uZWN0VGFzay5XYWtldXAoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IA0KLQkJCQkJCWNhdGNoIChUaHJlYWRJbnRlcnJ1cHRlZEV4Y2VwdGlvbikgDQotCQkJCQkJew0KLSAgICAgICAgICAgICAgICAgICAgICAgIAlUcmFjZXIuRGVidWcoIlJlY29ubmVjdCB0YXNrIGhhcyBiZWVuIGludGVycnVwdGVkLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLQkJCQllbHNlIA0KLQkJCQl7DQotICAgICAgICAgICAgICAgICAgICB0cnkgDQotCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC5yZWNvbm5lY3RUYXNrID09IG51bGwpIA0KLQkJCQkJCXsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZWNvbm5lY3RUYXNrLldha2V1cCgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQkJCQkJY2F0Y2ggKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uKSANCi0JCQkJCXsNCi0gICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlJlY29ubmVjdCB0YXNrIGhhcyBiZWVuIGludGVycnVwdGVkLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgI2VuZHJlZ2lvbg0KLQ0KLSAgICAgICAgI3JlZ2lvbiBQcm9wZXJ0eSBBY2Nlc3NvcnMNCi0NCi0gICAgICAgIHB1YmxpYyBDb21tYW5kSGFuZGxlciBDb21tYW5kDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGNvbW1hbmRIYW5kbGVyOyB9DQotICAgICAgICAgICAgc2V0IA0KLQkJCXsgDQotCQkJCWNvbW1hbmRIYW5kbGVyID0gdmFsdWU7IA0KLQkJCQlsaXN0ZW5lckxhdGNoLmNvdW50RG93bigpOw0KLQkJCX0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBFeGNlcHRpb25IYW5kbGVyIEV4Y2VwdGlvbg0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiBleGNlcHRpb25IYW5kbGVyOyB9DQotICAgICAgICAgICAgc2V0IA0KLQkJCXsgDQotCQkJCWV4Y2VwdGlvbkhhbmRsZXIgPSB2YWx1ZTsgDQotCQkJCWxpc3RlbmVyTGF0Y2guY291bnREb3duKCk7DQotCQkJfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIEludGVycnVwdGVkSGFuZGxlciBJbnRlcnJ1cHRlZA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiBpbnRlcnJ1cHRlZEhhbmRsZXI7IH0NCi0gICAgICAgICAgICBzZXQgDQotCQkJeyANCi0JCQkJdGhpcy5pbnRlcnJ1cHRlZEhhbmRsZXIgPSB2YWx1ZTsgDQotCQkJCXRoaXMubGlzdGVuZXJMYXRjaC5jb3VudERvd24oKTsNCi0JCQl9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgUmVzdW1lZEhhbmRsZXIgUmVzdW1lZA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiByZXN1bWVkSGFuZGxlcjsgfQ0KLSAgICAgICAgICAgIHNldCANCi0JCQl7IA0KLQkJCQl0aGlzLnJlc3VtZWRIYW5kbGVyID0gdmFsdWU7IA0KLQkJCQl0aGlzLmxpc3RlbmVyTGF0Y2guY291bnREb3duKCk7DQotCQkJfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgaW50ZXJuYWwgRXhjZXB0aW9uIEZhaWx1cmUNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gZmFpbHVyZTsgfQ0KLSAgICAgICAgICAgIHNldA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgbG9jayhtdXRleCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSA9IHZhbHVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGludCBUaW1lb3V0DQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMudGltZW91dDsgfQ0KLSAgICAgICAgICAgIHNldCB7IHRoaXMudGltZW91dCA9IHZhbHVlOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgaW50IEluaXRpYWxSZWNvbm5lY3REZWxheQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiBpbml0aWFsUmVjb25uZWN0RGVsYXk7IH0NCi0gICAgICAgICAgICBzZXQgeyBpbml0aWFsUmVjb25uZWN0RGVsYXkgPSB2YWx1ZTsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGludCBNYXhSZWNvbm5lY3REZWxheQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiBtYXhSZWNvbm5lY3REZWxheTsgfQ0KLSAgICAgICAgICAgIHNldCB7IG1heFJlY29ubmVjdERlbGF5ID0gdmFsdWU7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBpbnQgUmVjb25uZWN0RGVsYXkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gcmVjb25uZWN0RGVsYXk7IH0NCi0gICAgICAgICAgICBzZXQgeyByZWNvbm5lY3REZWxheSA9IHZhbHVlOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgaW50IFJlY29ubmVjdERlbGF5RXhwb25lbnQNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gYmFja09mZk11bHRpcGxpZXI7IH0NCi0gICAgICAgICAgICBzZXQgeyBiYWNrT2ZmTXVsdGlwbGllciA9IHZhbHVlOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgSVRyYW5zcG9ydCBDb25uZWN0ZWRUcmFuc3BvcnQNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gY29ubmVjdGVkVHJhbnNwb3J0LlZhbHVlOyB9DQotICAgICAgICAgICAgc2V0IHsgY29ubmVjdGVkVHJhbnNwb3J0LlZhbHVlID0gdmFsdWU7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBVcmkgQ29ubmVjdGVkVHJhbnNwb3J0VVJJDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGNvbm5lY3RlZFRyYW5zcG9ydFVSSTsgfQ0KLSAgICAgICAgICAgIHNldCB7IGNvbm5lY3RlZFRyYW5zcG9ydFVSSSA9IHZhbHVlOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgaW50IE1heFJlY29ubmVjdEF0dGVtcHRzDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIG1heFJlY29ubmVjdEF0dGVtcHRzOyB9DQotICAgICAgICAgICAgc2V0IHsgbWF4UmVjb25uZWN0QXR0ZW1wdHMgPSB2YWx1ZTsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGludCBTdGFydHVwTWF4UmVjb25uZWN0QXR0ZW1wdHMNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gc3RhcnR1cE1heFJlY29ubmVjdEF0dGVtcHRzOyB9DQotICAgICAgICAgICAgc2V0IHsgc3RhcnR1cE1heFJlY29ubmVjdEF0dGVtcHRzID0gdmFsdWU7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBib29sIFJhbmRvbWl6ZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiByYW5kb21pemU7IH0NCi0gICAgICAgICAgICBzZXQgeyByYW5kb21pemUgPSB2YWx1ZTsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGJvb2wgQmFja3VwDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGJhY2t1cDsgfQ0KLSAgICAgICAgICAgIHNldCB7IGJhY2t1cCA9IHZhbHVlOyB9DQotICAgICAgICB9DQotDQotCQlwdWJsaWMgYm9vbCBQcmlvcml0eUJhY2t1cA0KLQkJew0KLQkJCWdldCB7IHJldHVybiBwcmlvcml0eUJhY2t1cDsgfQ0KLQkJCXNldCB7IHRoaXMucHJpb3JpdHlCYWNrdXAgPSB2YWx1ZTsgfQ0KLQkJfQ0KLQ0KLQkgICAgcHVibGljIFN0cmluZyBQcmlvcml0eVVSSXMNCi0JCXsNCi0JCQlnZXQgeyByZXR1cm4gUHJpbnRhYmxlVXJpTGlzdChwcmlvcml0eUxpc3QpOyB9DQotCQkJc2V0IHsgdGhpcy5Qcm9jZXNzRGVsaW1pdGVkVXJpTGlzdCh2YWx1ZSwgcHJpb3JpdHlMaXN0KTsgfQ0KLQkgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGludCBCYWNrdXBQb29sU2l6ZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiBiYWNrdXBQb29sU2l6ZTsgfQ0KLSAgICAgICAgICAgIHNldCB7IGJhY2t1cFBvb2xTaXplID0gdmFsdWU7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBib29sIFRyYWNrTWVzc2FnZXMNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gdHJhY2tNZXNzYWdlczsgfQ0KLSAgICAgICAgICAgIHNldCB7IHRyYWNrTWVzc2FnZXMgPSB2YWx1ZTsgfQ0KLSAgICAgICAgfQ0KLQ0KLQkJcHVibGljIGJvb2wgVHJhY2tUcmFuc2FjdGlvblByb2R1Y2Vycw0KLQkJew0KLQkJCWdldCB7IHJldHVybiB0cmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzOyB9DQotCQkJc2V0IHsgdGhpcy50cmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzID0gdmFsdWU7IH0NCi0JCX0NCi0NCi0gICAgICAgIHB1YmxpYyBpbnQgTWF4Q2FjaGVTaXplDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIG1heENhY2hlU2l6ZTsgfQ0KLSAgICAgICAgICAgIHNldCB7IG1heENhY2hlU2l6ZSA9IHZhbHVlOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgYm9vbCBVc2VFeHBvbmVudGlhbEJhY2tPZmYNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gdXNlRXhwb25lbnRpYWxCYWNrT2ZmOyB9DQotICAgICAgICAgICAgc2V0IHsgdXNlRXhwb25lbnRpYWxCYWNrT2ZmID0gdmFsdWU7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBJV2lyZUZvcm1hdCBXaXJlRm9ybWF0DQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IENvbm5lY3RlZFRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgaWYodHJhbnNwb3J0ICE9IG51bGwpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQuV2lyZUZvcm1hdDsNCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAvLy8gPHN1bW1hcnk+DQotICAgICAgICAvLy8gR2V0cyBvciBzZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGFzeW5jaHJvbm91c2x5IGNvbm5lY3QgdG8gc29ja2V0cw0KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgICAgIC8vLyA8dmFsdWU+PGM+dHJ1ZTwvYz4gaWYgW2FzeW5jIGNvbm5lY3RdOyBvdGhlcndpc2UsIDxjPmZhbHNlPC9jPi48L3ZhbHVlPg0KLSAgICAgICAgcHVibGljIGJvb2wgQXN5bmNDb25uZWN0DQotICAgICAgICB7DQotICAgICAgICAgICAgc2V0IHsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAgICAgLy8vIElmIGRvaW5nIGFuIGFzeW5jaHJvbm91cyBjb25uZWN0LCB0aGUgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aW1pbmcgb3V0IGlmIG5vIGNvbm5lY3Rpb24gY2FuIGJlIG1hZGUNCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+DQotICAgICAgICAvLy8gPHZhbHVlPlRoZSBhc3luYyB0aW1lb3V0LjwvdmFsdWU+DQotICAgICAgICBwdWJsaWMgaW50IEFzeW5jVGltZW91dA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiAwOyB9DQotICAgICAgICAgICAgc2V0IHsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIENvbm5lY3Rpb25TdGF0ZVRyYWNrZXIgU3RhdGVUcmFja2VyDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMuc3RhdGVUcmFja2VyOyB9DQotICAgICAgICB9DQotDQotICAgICAgICAjZW5kcmVnaW9uDQotDQotICAgICAgICBwdWJsaWMgYm9vbCBJc0ZhdWx0VG9sZXJhbnQNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gdHJ1ZTsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGJvb2wgSXNEaXNwb3NlZA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldCB7IHJldHVybiBkaXNwb3NlZDsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGJvb2wgSXNDb25uZWN0ZWQNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gY29ubmVjdGVkOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgYm9vbCBJc0Nvbm5lY3RlZFRvUHJpb3JpdHkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gY29ubmVjdGVkVG9Qcmlvcml0eTsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGJvb2wgSXNTdGFydGVkDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHN0YXJ0ZWQ7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBib29sIElzUmVjb25uZWN0U3VwcG9ydGVkDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMucmVjb25uZWN0U3VwcG9ydGVkOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgYm9vbCBJc1VwZGF0ZVVSSXNTdXBwb3J0ZWQNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gdGhpcy51cGRhdGVVUklzU3VwcG9ydGVkOyB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBPbkV4Y2VwdGlvbihJVHJhbnNwb3J0IHNlbmRlciwgRXhjZXB0aW9uIGVycm9yKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgSGFuZGxlVHJhbnNwb3J0RmFpbHVyZShlcnJvcik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbikNCi0gICAgICAgICAgICB7DQotCQkJCXRoaXMuRXhjZXB0aW9uKHRoaXMsIG5ldyBJT0V4Y2VwdGlvbigiVW5leHBlY3RlZCBUcmFuc3BvcnQgRmFpbHVyZS4iKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZWRPbkNvbW1hbmQoSVRyYW5zcG9ydCBzZW5kZXIsIENvbW1hbmQgYykNCi0gICAgICAgIHsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2VkT25FeGNlcHRpb24oSVRyYW5zcG9ydCBzZW5kZXIsIEV4Y2VwdGlvbiBlKQ0KLSAgICAgICAgew0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgSGFuZGxlVHJhbnNwb3J0RmFpbHVyZShFeGNlcHRpb24gZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IGNvbm5lY3RlZFRyYW5zcG9ydC5HZXRBbmRTZXQobnVsbCk7DQotCSAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBudWxsKSANCi0JCQl7DQotCSAgICAgICAgICAgIC8vIHN5bmMgd2l0aCBwb3NzaWJsZSBpbiBwcm9ncmVzcyByZWNvbm5lY3QNCi0JICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkgDQotCQkJCXsNCi0JICAgICAgICAgICAgICAgIHRyYW5zcG9ydCA9IGNvbm5lY3RlZFRyYW5zcG9ydC5HZXRBbmRTZXQobnVsbCk7DQotCSAgICAgICAgICAgIH0NCi0JICAgICAgICB9DQotDQotCQkJaWYodHJhbnNwb3J0ICE9IG51bGwpDQotICAgICAgICAgICAgew0KLQkJCQlEaXNwb3NlVHJhbnNwb3J0KHRyYW5zcG9ydCk7DQotDQotCSAgICAgICAgICAgIGJvb2wgcmVjb25uZWN0T2sgPSBmYWxzZTsNCi0JICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkgDQotCQkJCXsNCi0JICAgICAgICAgICAgICAgIGlmIChDYW5SZWNvbm5lY3QoKSkgDQotCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAJVHJhY2VyLldhcm5Gb3JtYXQoIlRyYW5zcG9ydCBmYWlsZWQgdG8gezB9LCBhdHRlbXB0aW5nIHRvIGF1dG9tYXRpY2FsbHkgcmVjb25uZWN0IGR1ZSB0bzogezF9IiwgDQotCQkJCQkJICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkVHJhbnNwb3J0VVJJLCBlLk1lc3NhZ2UpOw0KLQkgICAgICAgICAgICAgICAgICAgIHJlY29ubmVjdE9rID0gdHJ1ZTsNCi0JICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7DQotICAgICAgICAgICAgICAgICAgICBmYWlsZWRDb25uZWN0VHJhbnNwb3J0VVJJID0gQ29ubmVjdGVkVHJhbnNwb3J0VVJJOw0KLSAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkVHJhbnNwb3J0VVJJID0gbnVsbDsNCi0JCQkJCWNvbm5lY3RlZFRvUHJpb3JpdHkgPSBmYWxzZTsNCi0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlOw0KLQ0KLQkgICAgICAgICAgICAgICAgaWYgKHJlY29ubmVjdE9rKSANCi0JCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICBpZih0aGlzLkludGVycnVwdGVkICE9IG51bGwpDQotCSAgICAgICAgICAgICAgICAgICAgew0KLQkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkludGVycnVwdGVkKHRyYW5zcG9ydCk7DQotCSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLQkgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQuUmVtb3ZlKGZhaWxlZENvbm5lY3RUcmFuc3BvcnRVUkkpOw0KLQkgICAgICAgICAgICAgICAgICAgIHJlY29ubmVjdFRhc2suV2FrZXVwKCk7DQotCSAgICAgICAgICAgICAgICB9DQotCQkJCQllbHNlIGlmICghZGlzcG9zZWQpIA0KLQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgIFByb3BhZ2F0ZUZhaWx1cmVUb0V4Y2VwdGlvbkxpc3RlbmVyKGUpOw0KLQkgICAgICAgICAgICAgICAgfQ0KLQkgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLQkgICAgcHJpdmF0ZSBib29sIENhblJlY29ubmVjdCgpIA0KLQkJew0KLQkgICAgICAgIHJldHVybiBzdGFydGVkICYmIDAgIT0gQ2FsY3VsYXRlUmVjb25uZWN0QXR0ZW1wdExpbWl0KCk7DQotCSAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBTdGFydCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmKHN0YXJ0ZWQpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmFpbG92ZXJUcmFuc3BvcnQgQWxyZWFkeSBTdGFydGVkLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmFpbG92ZXJUcmFuc3BvcnQgU3RhcnRlZC4iKTsNCi0gICAgICAgICAgICAgICAgc3RhcnRlZCA9IHRydWU7DQotICAgICAgICAgICAgICAgIHN0YXRlVHJhY2tlci5NYXhDYWNoZVNpemUgPSBNYXhDYWNoZVNpemU7DQotICAgICAgICAgICAgICAgIHN0YXRlVHJhY2tlci5UcmFja01lc3NhZ2VzID0gVHJhY2tNZXNzYWdlczsNCi0JCQkJc3RhdGVUcmFja2VyLlRyYWNrVHJhbnNhY3Rpb25Qcm9kdWNlcnMgPSBUcmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzOw0KLSAgICAgICAgICAgICAgICBpZihDb25uZWN0ZWRUcmFuc3BvcnQgIT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGYWlsb3ZlclRyYW5zcG9ydCBhbHJlYWR5IGNvbm5lY3RlZCwgc3RhcnQgaXMgcmVzdG9yaW5nLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGVUcmFja2VyLkRvUmVzdG9yZShDb25uZWN0ZWRUcmFuc3BvcnQpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGYWlsb3ZlclRyYW5zcG9ydCBub3QgY29ubmVjdGVkLCBzdGFydCBpcyByZWNvbm5lY3RpbmcuIik7DQotICAgICAgICAgICAgICAgICAgICBSZWNvbm5lY3QoZmFsc2UpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZpcnR1YWwgdm9pZCBTdG9wKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydFRvU3RvcCA9IG51bGw7DQotCSAgICAgICAgTGlzdDxJVHJhbnNwb3J0PiBiYWNrdXBzVG9TdG9wID0gbmV3IExpc3Q8SVRyYW5zcG9ydD4oYmFja3Vwcy5Db3VudCk7DQotDQotCQkJdHJ5IA0KLQkJCXsNCi0JICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkNCi0JICAgICAgICAgICAgew0KLQkgICAgICAgICAgICAgICAgaWYoIXN0YXJ0ZWQpDQotCSAgICAgICAgICAgICAgICB7DQotCSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGYWlsb3ZlclRyYW5zcG9ydCBBbHJlYWR5IFN0b3BwZWQuIik7DQotCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLQkgICAgICAgICAgICAgICAgfQ0KLQ0KLQkgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGYWlsb3ZlclRyYW5zcG9ydCBTdG9wcGVkLiIpOw0KLQkgICAgICAgICAgICAgICAgc3RhcnRlZCA9IGZhbHNlOw0KLQkgICAgICAgICAgICAgICAgZGlzcG9zZWQgPSB0cnVlOw0KLQkgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gZmFsc2U7DQotCSAgICAgICAgICAgICAgICBpZihDb25uZWN0ZWRUcmFuc3BvcnQgIT0gbnVsbCkNCi0JICAgICAgICAgICAgICAgIHsNCi0JICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRUb1N0b3AgPSBjb25uZWN0ZWRUcmFuc3BvcnQuR2V0QW5kU2V0KG51bGwpOw0KLQkgICAgICAgICAgICAgICAgfQ0KLQ0KLQkgICAgICAgICAgICB9DQotCQkJCWxvY2soc2xlZXBNdXRleCkNCi0JCQkJew0KLQkJCQkJTW9uaXRvci5QdWxzZUFsbChzbGVlcE11dGV4KTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlmaW5hbGx5DQotCQkJew0KLSAgICAgICAgICAgIAlpZihyZWNvbm5lY3RUYXNrICE9IG51bGwpDQotICAgICAgICAgICAgCXsNCi0JICAgICAgICAgICAgICAgIHJlY29ubmVjdFRhc2suU2h1dGRvd24oKTsNCi0gICAgICAgICAgICAJfQ0KLQkJCX0NCi0NCi0JICAgICAgICBsb2NrKGJhY2t1cE11dGV4KSANCi0JCQl7DQotCSAgICAgICAgICAgIGZvcmVhY2ggKEJhY2t1cFRyYW5zcG9ydCBiYWNrdXAgaW4gYmFja3VwcykgDQotCQkJCXsNCi0JICAgICAgICAgICAgICAgIGJhY2t1cC5EaXNwb3NlZCA9IHRydWU7DQotCSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IGJhY2t1cC5UcmFuc3BvcnQ7DQotCSAgICAgICAgICAgICAgICBpZiAodHJhbnNwb3J0ICE9IG51bGwpIA0KLQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5Db21tYW5kID0gRGlzcG9zZWRPbkNvbW1hbmQ7DQotCQkJCQkJdHJhbnNwb3J0LkV4Y2VwdGlvbiA9IERpc3Bvc2VkT25FeGNlcHRpb247DQotCSAgICAgICAgICAgICAgICAgICAgYmFja3Vwc1RvU3RvcC5BZGQodHJhbnNwb3J0KTsNCi0JICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgfQ0KLQkgICAgICAgICAgICBiYWNrdXBzLkNsZWFyKCk7DQotCSAgICAgICAgfQ0KLQkgICAgICAgIA0KLQkJCWZvcmVhY2ggKElUcmFuc3BvcnQgdHJhbnNwb3J0IGluIGJhY2t1cHNUb1N0b3ApIA0KLQkJCXsNCi0JICAgICAgICAgICAgdHJ5IA0KLQkJCQl7DQotCSAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKSANCi0JCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlN0b3BwZWQgYmFja3VwOiAiICsgdHJhbnNwb3J0KTsNCi0JICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgIERpc3Bvc2VUcmFuc3BvcnQodHJhbnNwb3J0KTsNCi0JICAgICAgICAgICAgfSANCi0JCQkJY2F0Y2ggKEV4Y2VwdGlvbikgDQotCQkJCXsNCi0JICAgICAgICAgICAgfQ0KLQkgICAgICAgIH0NCi0NCi0JCQlpZih0cmFuc3BvcnRUb1N0b3AgIT0gbnVsbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRyYW5zcG9ydFRvU3RvcC5TdG9wKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIEZ1dHVyZVJlc3BvbnNlIEFzeW5jUmVxdWVzdChDb21tYW5kIGNvbW1hbmQpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCJGYWlsb3ZlclRyYW5zcG9ydCBkb2VzIG5vdCBpbXBsZW1lbnQgQXN5bmNSZXF1ZXN0KENvbW1hbmQpIik7DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgUmVzcG9uc2UgUmVxdWVzdChDb21tYW5kIGNvbW1hbmQpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCJGYWlsb3ZlclRyYW5zcG9ydCBkb2VzIG5vdCBpbXBsZW1lbnQgUmVxdWVzdChDb21tYW5kKSIpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIFJlc3BvbnNlIFJlcXVlc3QoQ29tbWFuZCBjb21tYW5kLCBUaW1lU3BhbiB0cykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oIkZhaWxvdmVyVHJhbnNwb3J0IGRvZXMgbm90IGltcGxlbWVudCBSZXF1ZXN0KENvbW1hbmQsIFRpbWVTcGFuKSIpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgT25Db21tYW5kKElUcmFuc3BvcnQgc2VuZGVyLCBDb21tYW5kIGNvbW1hbmQpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoY29tbWFuZCAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc1Jlc3BvbnNlKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBDb21tYW5kIHJlcXVlc3QgPSBudWxsOw0KLSAgICAgICAgICAgICAgICAgICAgbG9jaygoKElDb2xsZWN0aW9uKSByZXF1ZXN0TWFwKS5TeW5jUm9vdCkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdiA9ICgoUmVzcG9uc2UpIGNvbW1hbmQpLkNvcnJlbGF0aW9uSWQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXF1ZXN0TWFwLlRyeUdldFZhbHVlKHYsIG91dCByZXF1ZXN0KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcC5SZW1vdmUodik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2tlZCB0cmFja2VkID0gcmVxdWVzdCBhcyBUcmFja2VkOw0KLSAgICAgICAgICAgICAgICAgICAgaWYodHJhY2tlZCAhPSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrZWQuT25SZXNwb25zZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIGlmKCFpbml0aWFsaXplZCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIGlmKGNvbW1hbmQuSXNDb25uZWN0aW9uQ29udHJvbCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5IYW5kbGVDb25uZWN0aW9uQ29udHJvbChjb21tYW5kIGFzIENvbm5lY3Rpb25Db250cm9sKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICB0aGlzLkNvbW1hbmQoc2VuZGVyLCBjb21tYW5kKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIE9uZXdheShDb21tYW5kIGNvbW1hbmQpDQotICAgICAgICB7DQotICAgICAgICAgICAgRXhjZXB0aW9uIGVycm9yID0gbnVsbDsNCi0NCi0gICAgICAgICAgICBsb2NrKHJlY29ubmVjdE11dGV4KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYoY29tbWFuZCAhPSBudWxsICYmIENvbm5lY3RlZFRyYW5zcG9ydCA9PSBudWxsKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBpZihjb21tYW5kLklzU2h1dGRvd25JbmZvKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXBwaW5nIHNlbmQgb2YgU2h1dGRvd25JbmZvIGNvbW1hbmQgd2hlbiBub3QgY29ubmVjdGVkLg0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoY29tbWFuZC5Jc1JlbW92ZUluZm8gfHwgY29tbWFuZC5Jc01lc3NhZ2VBY2spDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVUcmFja2VyLlRyYWNrKGNvbW1hbmQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIHJlc3BvbnNlIHRvIFJlbW92ZUluZm8gY29tbWFuZCBvciBhIE1lc3NhZ2VBY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBpdCB3b3VsZCBiZSBzdGFsZSBhdCB0aGlzIHBvaW50Lg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbW1hbmQuUmVzcG9uc2VSZXF1aXJlZCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uQ29tbWFuZCh0aGlzLCBuZXcgUmVzcG9uc2UoKSB7IENvcnJlbGF0aW9uSWQgPSBjb21tYW5kLkNvbW1hbmRJZCB9KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQkJCQkJZWxzZSBpZihjb21tYW5kLklzTWVzc2FnZVB1bGwpIA0KLQkJCQkJew0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIHJlc3BvbnNlIHRvIE1lc3NhZ2VQdWxsIGlmIHRpbWVkIGFzIHdlIGNhbid0IGhvbm9yIHRoYXQgbm93Lg0KLSAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQdWxsIHB1bGxSZXF1ZXN0ID0gY29tbWFuZCBhcyBNZXNzYWdlUHVsbDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVsbFJlcXVlc3QuVGltZW91dCAhPSAwKSANCi0JCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VEaXNwYXRjaCBkaXNwYXRjaCA9IG5ldyBNZXNzYWdlRGlzcGF0Y2goKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2guQ29uc3VtZXJJZCA9IHB1bGxSZXF1ZXN0LkNvbnN1bWVySWQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoLkRlc3RpbmF0aW9uID0gcHVsbFJlcXVlc3QuRGVzdGluYXRpb247DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uQ29tbWFuZCh0aGlzLCBkaXNwYXRjaCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAvLyBLZWVwIHRyeWluZyB1bnRpbCB0aGUgbWVzc2FnZSBpcyBzZW50Lg0KLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyAhZGlzcG9zZWQ7IGkrKykNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW55IEFjayB0aGF0IHdhcyBiZWluZyBzZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gZHJvcHBlZCBpcyBub3cNCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFsZSBzbyB3ZSBkb24ndCBzZW5kIGl0IGhlcmUgYXMgaXQgd291bGQgY2F1c2UgYW4gdW5tYXRjaGVkIGFjaw0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBicm9rZXIgc2lkZSBhbmQgcHJvYmFibHkgcHJldmVudCBhIGNvbnN1bWVyIGZyb20gZ2V0dGluZw0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSBuZXcgbWVzc2FnZXMuDQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc01lc3NhZ2VBY2sgJiYgaSA+IDApDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkluZmxpZ2h0IE1lc3NhZ2VBY2sgYmVpbmcgZHJvcHBlZCBhcyBzdGFsZS4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5SZXNwb25zZVJlcXVpcmVkKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkNvbW1hbmQodGhpcywgbmV3IFJlc3BvbnNlKCkgeyBDb3JyZWxhdGlvbklkID0gY29tbWFuZC5Db21tYW5kSWQgfSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0cmFuc3BvcnQgdG8gYmUgY29ubmVjdGVkLg0KLSAgICAgICAgICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gQ29ubmVjdGVkVHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIHN0YXJ0ID0gRGF0ZVRpbWUuTm93Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGltZWRvdXQgPSBmYWxzZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3BhbiB0aW1ld2FpdCA9IFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoLTEpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKHRyYW5zcG9ydCA9PSBudWxsICYmICFkaXNwb3NlZCAmJiBjb25uZWN0aW9uRmFpbHVyZSA9PSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJXYWl0aW5nIGZvciB0cmFuc3BvcnQgdG8gcmVjb25uZWN0LiIpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZWxhcHNlZCA9IChpbnQpIChEYXRlVGltZS5Ob3cgLSBzdGFydCkuVG90YWxNaWxsaXNlY29uZHM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudGltZW91dCA+IDAgJiYgZWxhcHNlZCA+IHRoaXMudGltZW91dCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRvdXQgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJGYWlsb3ZlclRyYW5zcG9ydC5vbmV3YXkgLSB0aW1lZCBvdXQgYWZ0ZXIgezB9IG1pbGxzIiwgZWxhcHNlZCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnRpbWVvdXQgPiAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHRpbWVvdXQgZm9yIHdhaXRpbmcgdG8gYmUgYXQgbW9zdCAxMDBtcyBwYXN0IHRoZSBtYXhpbXVtIHRpbWVvdXQgbGVuZ3RoLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ1RpbWUgPSAodGhpcy50aW1lb3V0IC0gZWxhcHNlZCkgKyAxMDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1ld2FpdCA9IFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMocmVtYWluaW5nVGltZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVsZWFzZSBzbyB0aGF0IHRoZSByZWNvbm5lY3QgdGFzayBjYW4gcnVuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciBzb21ldGhpbmcuICBUaGUgbXV0ZXggd2lsbCBiZSBwdWxzZWQgaWYgd2UgY29ubmVjdCwgb3IgYXJlIHNodXQgZG93bi4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuV2FpdChyZWNvbm5lY3RNdXRleCwgdGltZXdhaXQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uIGUpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1Z0Zvcm1hdCgiSW50ZXJydXB0ZWQ6IHswfSIsIGUuTWVzc2FnZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gQ29ubmVjdGVkVHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuc3BvcnQgPT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZpb3VzIGxvb3AgbWF5IGhhdmUgZXhpdGVkIGR1ZSB0byB1c2UgYmVpbmcgZGlzcG9zZWQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRpc3Bvc2VkKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBJT0V4Y2VwdGlvbigiVHJhbnNwb3J0IGRpc3Bvc2VkLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoY29ubmVjdGlvbkZhaWx1cmUgIT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBjb25uZWN0aW9uRmFpbHVyZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHRpbWVkb3V0KQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBJT0V4Y2VwdGlvbigiRmFpbG92ZXIgb25ld2F5IHRpbWVkIG91dCBhZnRlciAiICsgdGltZW91dCArICIgbWlsbGlzZWNvbmRzLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSU9FeGNlcHRpb24oIlVuZXhwZWN0ZWQgZmFpbHVyZS4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgd2FzIGEgcmVxdWVzdCBhbmQgaXQgd2FzIG5vdCBiZWluZyB0cmFja2VkIGJ5DQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlIHRyYWNrZXIsIHRoZW4gaG9sZCBpdCBpbiB0aGUgcmVxdWVzdE1hcCBzbw0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgd2UgY2FuIHJlcGxheSBpdCBsYXRlci4NCi0gICAgICAgICAgICAgICAgICAgICAgICBUcmFja2VkIHRyYWNrZWQgPSBzdGF0ZVRyYWNrZXIuVHJhY2soY29tbWFuZCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygoKElDb2xsZWN0aW9uKSByZXF1ZXN0TWFwKS5TeW5jUm9vdCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYWNrZWQgIT0gbnVsbCAmJiB0cmFja2VkLldhaXRpbmdGb3JSZXNwb25zZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcC5BZGQoY29tbWFuZC5Db21tYW5kSWQsIHRyYWNrZWQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodHJhY2tlZCA9PSBudWxsICYmIGNvbW1hbmQuUmVzcG9uc2VSZXF1aXJlZCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcC5BZGQoY29tbWFuZC5Db21tYW5kSWQsIGNvbW1hbmQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2UuDQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuT25ld2F5KGNvbW1hbmQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVRyYWNrZXIuVHJhY2tCYWNrKGNvbW1hbmQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb21tYW5kIHdhcyBub3QgdHJhY2tlZC4uIHdlIHdpbGwgcmV0cnkgaW4gdGhpcyBtZXRob2QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIG5lZWQgdG8gdHJpZ2dlciBhIHJlY29ubmVjdCBiZWZvcmUgcmV0dXJuaW5nIGFzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmFuc3BvcnQgaXMgZmFpbGVkLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tlZCA9PSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIHJldHJ5IGluIHRoaXMgbWV0aG9kLi4gdGFrZSBpdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0IG9mIHRoZSByZXF1ZXN0IG1hcCBzbyB0aGF0IGl0IGlzIG5vdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VudCAyIHRpbWVzIG9uIHJlY292ZXJ5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb21tYW5kLlJlc3BvbnNlUmVxdWlyZWQpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygoKElDb2xsZWN0aW9uKSByZXF1ZXN0TWFwKS5TeW5jUm9vdCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXAuUmVtb3ZlKGNvbW1hbmQuQ29tbWFuZElkKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXRocm93IHRoZSBleGNlcHRpb24gc28gaXQgd2lsbCBoYW5kbGVkIGJ5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3V0ZXIgY2F0Y2gNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLQkJCQkJCQkJaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkNCi0JCQkJCQkJCXsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlUcmFjZXIuRGVidWdGb3JtYXQoIlNlbmQgT25ld2F5IGF0dGVtcHQ6IHswfSBmYWlsZWQ6IE1lc3NhZ2UgPSB7MX0iLCANCi0JCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgaSwgZS5NZXNzYWdlKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlUcmFjZXIuRGVidWdGb3JtYXQoIkZhaWxlZCBNZXNzYWdlIFdhczogezB9IiwgY29tbWFuZCk7DQotCQkJCQkJCQl9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVUcmFuc3BvcnRGYWlsdXJlKGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLQkJCQkJCWlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpDQotCQkJCQkJew0KLSAgICAgICAgICAgICAgICAgICAgICAgIAlUcmFjZXIuRGVidWdGb3JtYXQoIlNlbmQgT25ld2F5IGF0dGVtcHQ6IHswfSBmYWlsZWQ6IE1lc3NhZ2UgPSB7MX0iLCANCi0JCQkJCQkJICAgICAgICAgICAgICAgICAgIGksIGUuTWVzc2FnZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiRmFpbGVkIE1lc3NhZ2UgV2FzOiB7MH0iLCBjb21tYW5kKTsNCi0JCQkJCQl9DQotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlVHJhbnNwb3J0RmFpbHVyZShlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICBpZighZGlzcG9zZWQpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBpZihlcnJvciAhPSBudWxsKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIEFkZChib29sIHJlYmFsYW5jZSwgVXJpW10gdXJpc1RvQWRkKQ0KLSAgICAgICAgew0KLQkJCWJvb2wgbmV3VXJpID0gZmFsc2U7DQotICAgICAgICAgICAgbG9jayh1cmlzKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgZm9yZWFjaCAoVXJpIHVyaSBpbiB1cmlzVG9BZGQpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKCFDb250YWlucyh1cmkpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVyaXMuQWRkKHVyaSk7DQotCQkJCQkJbmV3VXJpID0gdHJ1ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0NCi0JCQlpZiAobmV3VXJpKQ0KLQkJCXsNCi0gICAgICAgICAgICAJUmVjb25uZWN0KHJlYmFsYW5jZSk7DQotCQkJfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgQWRkKGJvb2wgcmViYWxhbmNlLCBTdHJpbmcgdSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEFkZChyZWJhbGFuY2UsIG5ldyBVcmlbXSB7IG5ldyBVcmkodSkgfSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgVHJhY2VyLkVycm9yRm9ybWF0KCJGYWlsZWQgdG8gcGFyc2UgVVJJICd7MH0nOiB7MX0iLCB1LCBlLk1lc3NhZ2UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFJlbW92ZShib29sIHJlYmFsYW5jZSwgVXJpW10gdSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsb2NrKHVyaXMpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdS5MZW5ndGg7IGkrKykNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdXJpcy5SZW1vdmUodVtpXSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgUmVjb25uZWN0KHJlYmFsYW5jZSk7DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBSZW1vdmUoYm9vbCByZWJhbGFuY2UsIFN0cmluZyB1KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgUmVtb3ZlKHJlYmFsYW5jZSwgbmV3IFVyaVtdIHsgbmV3IFVyaSh1KSB9KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBUcmFjZXIuRXJyb3JGb3JtYXQoIkZhaWxlZCB0byBwYXJzZSBVUkkgJ3swfSc6IHsxfSIsIHUsIGUuTWVzc2FnZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgUmVjb25uZWN0KFVyaSB1cmkpDQotICAgICAgICB7DQotICAgICAgICAgICAgQWRkKHRydWUsIG5ldyBVcmlbXSB7IHVyaSB9KTsNCi0gICAgICAgIH0NCi0NCi0JICAgIHB1YmxpYyB2b2lkIFJlY29ubmVjdChib29sIHJlYmFsYW5jZSkNCi0JCXsNCi0JCQlsb2NrKHJlY29ubmVjdE11dGV4KSANCi0JCQl7DQotCSAgICAgICAgICAgIGlmKHN0YXJ0ZWQpIA0KLQkJCQl7DQotCSAgICAgICAgICAgICAgICBpZiAocmViYWxhbmNlKSANCi0JCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICBkb1JlYmFsYW5jZSA9IHRydWU7DQotCSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIldha2luZyB1cCByZWNvbm5lY3QgdGFzayIpOw0KLQkgICAgICAgICAgICAgICAgdHJ5IA0KLQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgIHJlY29ubmVjdFRhc2suV2FrZXVwKCk7DQotCSAgICAgICAgICAgICAgICB9IA0KLQkJCQkJY2F0Y2ggKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uKSANCi0JCQkJCXsNCi0JICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgfSANCi0JCQkJZWxzZSANCi0JCQkJew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJSZWNvbm5lY3Qgd2FzIHRyaWdnZXJlZCBidXQgdHJhbnNwb3J0IGlzIG5vdCBzdGFydGVkIHlldC4gV2FpdCBmb3Igc3RhcnQgdG8gY29ubmVjdCB0aGUgdHJhbnNwb3J0LiIpOw0KLQkgICAgICAgICAgICB9DQotCSAgICAgICAgfQ0KLQkgICAgfQ0KLQ0KLSAgICAgICAgcHJpdmF0ZSBMaXN0PFVyaT4gQ29ubmVjdExpc3QNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQNCi0gICAgICAgICAgICB7DQotCQkJCWlmICh1cGRhdGVkLkNvdW50ICE9IDApDQotCQkJCXsNCi0JCQkJCXJldHVybiB1cGRhdGVkOw0KLQkJCQl9DQotDQotICAgICAgICAgICAgICAgIExpc3Q8VXJpPiBsID0gbmV3IExpc3Q8VXJpPih1cmlzKTsNCi0gICAgICAgICAgICAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7DQotICAgICAgICAgICAgICAgIGlmKGZhaWxlZENvbm5lY3RUcmFuc3BvcnRVUkkgIT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IGwuUmVtb3ZlKGZhaWxlZENvbm5lY3RUcmFuc3BvcnRVUkkpOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIGlmKFJhbmRvbWl6ZSkNCi0gICAgICAgICAgICAgICAgew0KLQkJCQkJU2h1ZmZsZShsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICBpZihyZW1vdmVkKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBsLkFkZChmYWlsZWRDb25uZWN0VHJhbnNwb3J0VVJJKTsNCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLQkJICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQ0KLQkJCQl7DQotCQkJCQlUcmFjZXIuRGVidWdGb3JtYXQoIlVyaSBjb25uZWN0aW9uIGxpc3Q6IHswfSBmcm9tOiB7MX0iLCANCi0JCQkJCSAgICAgICAgICAgICAgICAgICBQcmludGFibGVVcmlMaXN0KGwpLCBQcmludGFibGVVcmlMaXN0KHVyaXMpKTsNCi0JCSAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBSZXN0b3JlVHJhbnNwb3J0KElUcmFuc3BvcnQgdCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBUcmFjZXIuSW5mbygiUmVzdG9yaW5nIHByZXZpb3VzIHRyYW5zcG9ydCBjb25uZWN0aW9uLiIpOw0KLSAgICAgICAgICAgIHQuU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAvLyBTZW5kIGluZm9ybWF0aW9uIHRvIHRoZSBicm9rZXIgLSBpbmZvcm1pbmcgaXQgd2UgYXJlIGEgZmF1bHQgdG9sZXJhbnQgY2xpZW50DQotICAgICAgICAgICAgdC5PbmV3YXkobmV3IENvbm5lY3Rpb25Db250cm9sKCkgeyBGYXVsdFRvbGVyYW50ID0gdHJ1ZSB9KTsNCi0gICAgICAgICAgICBzdGF0ZVRyYWNrZXIuRG9SZXN0b3JlKHQpOw0KLQ0KLSAgICAgICAgICAgIFRyYWNlci5JbmZvKCJTZW5kaW5nIHF1ZXVlZCBjb21tYW5kcy4uLiIpOw0KLSAgICAgICAgICAgIERpY3Rpb25hcnk8aW50LCBDb21tYW5kPiB0bXBNYXAgPSBudWxsOw0KLSAgICAgICAgICAgIGxvY2soKChJQ29sbGVjdGlvbikgcmVxdWVzdE1hcCkuU3luY1Jvb3QpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0bXBNYXAgPSBuZXcgRGljdGlvbmFyeTxpbnQsIENvbW1hbmQ+KHJlcXVlc3RNYXApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICBmb3JlYWNoKENvbW1hbmQgY29tbWFuZCBpbiB0bXBNYXAuVmFsdWVzKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc01lc3NhZ2VBY2spDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiU3RvcmVkIE1lc3NhZ2VBY2sgYmVpbmcgZHJvcHBlZCBhcyBzdGFsZS4iKTsNCi0gICAgICAgICAgICAgICAgICAgIE9uQ29tbWFuZCh0aGlzLCBuZXcgUmVzcG9uc2UoKSB7IENvcnJlbGF0aW9uSWQgPSBjb21tYW5kLkNvbW1hbmRJZCB9KTsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIHQuT25ld2F5KGNvbW1hbmQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBVcmkgUmVtb3RlQWRkcmVzcw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGdldA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYoQ29ubmVjdGVkVHJhbnNwb3J0ICE9IG51bGwpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25uZWN0ZWRUcmFuc3BvcnQuUmVtb3RlQWRkcmVzczsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgT2JqZWN0IE5hcnJvdyhUeXBlIHR5cGUpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYodGhpcy5HZXRUeXBlKCkuRXF1YWxzKHR5cGUpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UgaWYoQ29ubmVjdGVkVHJhbnNwb3J0ICE9IG51bGwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gQ29ubmVjdGVkVHJhbnNwb3J0Lk5hcnJvdyh0eXBlKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgcmV0dXJuIG51bGw7DQotICAgICAgICB9DQotDQotICAgICAgICBwcml2YXRlIGJvb2wgRG9Db25uZWN0KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsb2NrKHJlY29ubmVjdE11dGV4KQ0KLSAgICAgICAgICAgIHsNCi0JCQkJaWYgKGRpc3Bvc2VkIHx8IGNvbm5lY3Rpb25GYWlsdXJlICE9IG51bGwpDQotCQkJCXsNCi0JCQkJCU1vbml0b3IuUHVsc2VBbGwocmVjb25uZWN0TXV0ZXgpOw0KLQkJCQl9DQotDQotICAgICAgICAgICAgCWlmICgoY29ubmVjdGVkVHJhbnNwb3J0LlZhbHVlICE9IG51bGwgJiYgIWRvUmViYWxhbmNlICYmICFwcmlvcml0eUJhY2t1cEF2YWlsYWJsZSkgfHwgZGlzcG9zZWQgfHwgY29ubmVjdGlvbkZhaWx1cmUgIT0gbnVsbCkNCi0JCQkJew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgTGlzdDxVcmk+IGNvbm5lY3RMaXN0ID0gQ29ubmVjdExpc3Q7DQotICAgICAgICAgICAgICAgICAgICBpZihjb25uZWN0TGlzdC5Db3VudCA9PSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmUgPSBuZXcgTk1TQ29ubmVjdGlvbkV4Y2VwdGlvbigiTm8gVVJJcyBhdmFpbGFibGUgZm9yIGNvbm5lY3Rpb24uIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgICAgICB7DQotCSAgICAgICAgICAgICAgICAgICAgaWYgKGRvUmViYWxhbmNlKQ0KLQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZFRvUHJpb3JpdHkgfHwgQ29tcGFyZVVyaXMoY29ubmVjdExpc3RbMF0sIGNvbm5lY3RlZFRyYW5zcG9ydFVSSSkpDQotCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgY29ubmVjdGVkIHRvIGZpcnN0IGluIHRoZSBsaXN0LCBubyBuZWVkIHRvIHJlYmFsYW5jZQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9SZWJhbGFuY2UgPSBmYWxzZTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgfSANCi0JCQkJCQkJZWxzZQ0KLQkJCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQ0KLQkJCQkJCQkJew0KLQkJCQkJCQkJCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiRG9pbmcgcmViYWxhbmNlIGZyb206IHswfSB0byB7MX0iLCANCi0JCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkVHJhbnNwb3J0VVJJLCBQcmludGFibGVVcmlMaXN0KGNvbm5lY3RMaXN0KSk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgDQotCQkJCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCBjdXJyZW50ID0gdGhpcy5jb25uZWN0ZWRUcmFuc3BvcnQuR2V0QW5kU2V0KG51bGwpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIA0KLQkJCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcG9zZVRyYW5zcG9ydChjdXJyZW50KTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KLQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSANCi0JCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQ0KLQkJCQkJCQkJCXsNCi0JCQkJCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJDYXVnaHQgYW4gZXhjZXB0aW9uIHN0b3BwaW5nIGV4aXN0aW5nICIgKyANCi0JCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQgZm9yIHJlYmFsYW5jZSB7MH0iLCBlLk1lc3NhZ2UpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICBkb1JlYmFsYW5jZSA9IGZhbHNlOw0KLQkgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0JICAgICAgICAgICAgICAgICAgICBSZXNldFJlY29ubmVjdERlbGF5KCk7DQotDQotCSAgICAgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSBudWxsOw0KLQkgICAgICAgICAgICAgICAgICAgIFVyaSB1cmkgPSBudWxsOw0KLQ0KLQkgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBiYWNrdXAgYWxyZWFkeSB3YWl0aW5nIGxldHMgdHJ5IGl0Lg0KLQkgICAgICAgICAgICAgICAgICAgIGxvY2soYmFja3VwTXV0ZXgpIA0KLQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwcmlvcml0eUJhY2t1cCB8fCBiYWNrdXApICYmIGJhY2t1cHMuQ291bnQgPiAwKQ0KLQkJCQkJCQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlMaXN0PEJhY2t1cFRyYW5zcG9ydD4gbCA9IG5ldyBMaXN0PEJhY2t1cFRyYW5zcG9ydD4oYmFja3Vwcyk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZG9taXplKSANCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlTaHVmZmxlKGwpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQkJCQkJCQkJQmFja3VwVHJhbnNwb3J0IGJ0ID0gbFswXTsNCi0JCQkJCQkJCWwuUmVtb3ZlQXQoMCk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXBzLlJlbW92ZShidCk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBidC5UcmFuc3BvcnQ7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBidC5Vcmk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JpdHlCYWNrdXAgJiYgcHJpb3JpdHlCYWNrdXBBdmFpbGFibGUpIA0KLQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgb2xkID0gdGhpcy5jb25uZWN0ZWRUcmFuc3BvcnQuR2V0QW5kU2V0KG51bGwpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGQgIT0gbnVsbCkgDQotCQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlVHJhbnNwb3J0KG9sZCk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5QmFja3VwQXZhaWxhYmxlID0gZmFsc2U7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICB9DQotDQotCSAgICAgICAgICAgICAgICAgICAgLy8gU2xlZXAgZm9yIHRoZSByZWNvbm5lY3REZWxheSBpZiB0aGVyZSdzIG5vIGJhY2t1cCBhbmQgd2UgYXJlbid0IHRyeWluZw0KLQkgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgZmlyc3QgdGltZSwgb3Igd2Ugd2VyZSBkaXNwb3NlZCBmb3Igc29tZSByZWFzb24uDQotCSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBudWxsICYmICFmaXJzdENvbm5lY3Rpb24gJiYgKHJlY29ubmVjdERlbGF5ID4gMCkgJiYgIWRpc3Bvc2VkKSANCi0JCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2soc2xlZXBNdXRleCkgDQotCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpDQotCQkJCQkJCQl7DQotCQkJCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJXYWl0aW5nIHswfSBtcyBiZWZvcmUgYXR0ZW1wdGluZyBjb25uZWN0aW9uLiIsIHJlY29ubmVjdERlbGF5KTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSANCi0JCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb25pdG9yLldhaXQoc2xlZXBNdXRleCwgcmVjb25uZWN0RGVsYXkpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQkJCQkJCQkJY2F0Y2ggKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uKQ0KLQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLQkJCQkJCUlFbnVtZXJhdG9yPFVyaT4gaXRlciA9IGNvbm5lY3RMaXN0LkdldEVudW1lcmF0b3IoKTsNCi0JICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHRyYW5zcG9ydCAhPSBudWxsIHx8IGl0ZXIuTW92ZU5leHQoKSkgJiYgKGNvbm5lY3RlZFRyYW5zcG9ydC5WYWx1ZSA9PSBudWxsICYmICFkaXNwb3NlZCkpDQotCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICB0cnkgDQotCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpDQotCQkJCQkJCQl7DQotCQkJCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJBdHRlbXB0aW5nIHswfXRoIGNvbm5lY3QgdG86IHsxfSIsDQotCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgIGNvbm5lY3RGYWlsdXJlcywgdXJpKTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0JCQkJCQkJCS8vIFdlIGNvdWxkIGJlIHN0YXJ0aW5nIHdpdGggYSBiYWNrdXAgYW5kIGlmIHNvIHdlIHdhaXQgdG8gZ3JhYiBhDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVUkkgZnJvbSB0aGUgcG9vbCB1bnRpbCBuZXh0IHRpbWUgYXJvdW5kLg0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBudWxsKSANCi0JCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBpdGVyLkN1cnJlbnQ7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gVHJhbnNwb3J0RmFjdG9yeS5Db21wb3NpdGVDb25uZWN0KHVyaSk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuQ29tbWFuZCA9IE9uQ29tbWFuZDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5FeGNlcHRpb24gPSBPbkV4Y2VwdGlvbjsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5TdGFydCgpOw0KLQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ZWQgJiYgIWZpcnN0Q29ubmVjdGlvbikgDQotCQkJCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdG9yZVRyYW5zcG9ydCh0cmFuc3BvcnQpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkNCi0JCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkNvbm5lY3Rpb24gZXN0YWJsaXNoZWQiKTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5ID0gaW5pdGlhbFJlY29ubmVjdERlbGF5Ow0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkVHJhbnNwb3J0VVJJID0gdXJpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkVHJhbnNwb3J0LlZhbHVlID0gdHJhbnNwb3J0Ow0KLQkJCQkJCQkJY29ubmVjdGVkVG9Qcmlvcml0eSA9IElzUHJpb3JpdHkoY29ubmVjdGVkVHJhbnNwb3J0VVJJKTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuUHVsc2VBbGwocmVjb25uZWN0TXV0ZXgpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdEZhaWx1cmVzID0gMDsNCi0NCi0JCQkJCQkJCS8vIFRyeSB0byB3YWl0IGxvbmcgZW5vdWdoIGZvciBjbGllbnQgdG8gaW5pdCB0aGUgZXZlbnQgY2FsbGJhY2tzLg0KLQkJCQkJCQkJbGlzdGVuZXJMYXRjaC5hd2FpdChUaW1lU3Bhbi5Gcm9tU2Vjb25kcygyKSk7DQotDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVzdW1lZCAhPSBudWxsKSANCi0JCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bWVkKHRyYW5zcG9ydCk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCQkJCQkJCQllbHNlIA0KLQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpIA0KLQkJCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJ0cmFuc3BvcnQgcmVzdW1lZCBieSB0cmFuc3BvcnQgbGlzdGVuZXIgbm90IHNldCIpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbm5lY3Rpb24pIA0KLQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29ubmVjdGlvbiA9IGZhbHNlOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5JbmZvKCJTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvICIgKyB1cmkpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQkJCQkJCQkJZWxzZSANCi0JCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuSW5mbygiU3VjY2Vzc2Z1bGx5IHJlY29ubmVjdGVkIHRvICIgKyB1cmkpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gdHJ1ZTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIA0KLQkJCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpIA0KLQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiQ29ubmVjdCBmYWlsIHRvOiAiICsgdXJpICsgIiwgcmVhc29uOiAiICsgZS5NZXNzYWdlKTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc3BvcnQgIT0gbnVsbCkgDQotCQkJCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IA0KLQkJCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LlN0b3AoKTsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gbnVsbDsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlZSkgDQotCQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKSANCi0JCQkJCQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJTdG9wIG9mIGZhaWxlZCB0cmFuc3BvcnQ6ICIgKyB0cmFuc3BvcnQgKw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkIHdpdGggcmVhc29uOiAiICsgZWUuTWVzc2FnZSk7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgICAgICB9DQotCQkJCQl9DQotCQkJCX0NCi0gICAgICAgICAgICANCi0JICAgICAgICAgICAgaW50IHJlY29ubmVjdExpbWl0ID0gQ2FsY3VsYXRlUmVjb25uZWN0QXR0ZW1wdExpbWl0KCk7DQotDQotCSAgICAgICAgICAgIGNvbm5lY3RGYWlsdXJlcysrOw0KLQkgICAgICAgICAgICBpZiAocmVjb25uZWN0TGltaXQgIT0gSU5GSU5JVEUgJiYgY29ubmVjdEZhaWx1cmVzID49IHJlY29ubmVjdExpbWl0KSANCi0JCQkJew0KLQkJCQkJVHJhY2VyLkVycm9yRm9ybWF0KCJGYWlsZWQgdG8gY29ubmVjdCB0byB7MH0gYWZ0ZXI6IHsxfSBhdHRlbXB0KHMpIiwgDQotCQkJCQkgICAgICAgICAgICAgICAgICAgUHJpbnRhYmxlVXJpTGlzdCh1cmlzKSwgY29ubmVjdEZhaWx1cmVzKTsNCi0JICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25GYWlsdXJlID0gZmFpbHVyZTsNCi0NCi0JICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBvbiBpbml0aWFsIHN0YXJ0dXAsIHRoYXQgdGhlIHRyYW5zcG9ydExpc3RlbmVyIGhhcyBiZWVuDQotCSAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCBmb3IgdGhpcyBpbnN0YW5jZS4NCi0JCQkJCWxpc3RlbmVyTGF0Y2guYXdhaXQoVGltZVNwYW4uRnJvbVNlY29uZHMoMikpOw0KLQkgICAgICAgICAgICAgICAgUHJvcGFnYXRlRmFpbHVyZVRvRXhjZXB0aW9uTGlzdGVuZXIoY29ubmVjdGlvbkZhaWx1cmUpOw0KLQkgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLQkgICAgICAgICAgICB9DQotCSAgICAgICAgfQ0KLQ0KLQkgICAgICAgIGlmKCFkaXNwb3NlZCkNCi0JCQl7DQotCSAgICAgICAgICAgIERvRGVsYXkoKTsNCi0JICAgICAgICB9DQotDQotCSAgICAgICAgcmV0dXJuICFkaXNwb3NlZDsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByaXZhdGUgYm9vbCBCdWlsZEJhY2t1cHMoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxvY2soYmFja3VwTXV0ZXgpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgIAlpZiAoIWRpc3Bvc2VkICYmIChiYWNrdXAgfHwgcHJpb3JpdHlCYWNrdXApICYmIGJhY2t1cHMuQ291bnQgPCBiYWNrdXBQb29sU2l6ZSkgDQotCQkJCXsNCi0JICAgICAgICAgICAgICAgIExpc3Q8VXJpPiBiYWNrdXBMaXN0ID0gbmV3IExpc3Q8VXJpPihwcmlvcml0eUxpc3QpOw0KLSAgICAgICAgICAgICAgICAgICAgTGlzdDxVcmk+IGNvbm5lY3RMaXN0ID0gQ29ubmVjdExpc3Q7DQotCSAgICAgICAgICAgICAgICBmb3JlYWNoKFVyaSB1cmkgaW4gY29ubmVjdExpc3QpIA0KLQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgIGlmICghYmFja3VwTGlzdC5Db250YWlucyh1cmkpKSANCi0JCQkJCQl7DQotCSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cExpc3QuQWRkKHVyaSk7DQotCSAgICAgICAgICAgICAgICAgICAgfQ0KLQkgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZm9yZWFjaChCYWNrdXBUcmFuc3BvcnQgYnQgaW4gYmFja3VwcykNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihidC5EaXNwb3NlZCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cHMuUmVtb3ZlKGJ0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKFVyaSB1cmkgaW4gY29ubmVjdExpc3QpDQotICAgICAgICAgICAgICAgICAgICB7DQotCQkJCQkJaWYgKGRpc3Bvc2VkKQ0KLQkJCQkJCXsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKENvbm5lY3RlZFRyYW5zcG9ydFVSSSAhPSBudWxsICYmICFDb25uZWN0ZWRUcmFuc3BvcnRVUkkuRXF1YWxzKHVyaSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja3VwVHJhbnNwb3J0IGJ0ID0gbmV3IEJhY2t1cFRyYW5zcG9ydCh0aGlzKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVyaSA9IHVyaQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFiYWNrdXBzLkNvbnRhaW5zKGJ0KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHQgPSBUcmFuc3BvcnRGYWN0b3J5LkNvbXBvc2l0ZUNvbm5lY3QodXJpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LkNvbW1hbmQgPSBidC5PbkNvbW1hbmQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5FeGNlcHRpb24gPSBidC5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LlN0YXJ0KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQuVHJhbnNwb3J0ID0gdDsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JpdHlCYWNrdXAgJiYgSXNQcmlvcml0eSh1cmkpKQ0KLQkJCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eUJhY2t1cEF2YWlsYWJsZSA9IHRydWU7DQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3Vwcy5JbnNlcnQoMCwgYnQpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0JCQkJCQkJCQllbHNlIA0KLQkJCQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3Vwcy5BZGQoYnQpOw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJGYWlsZWQgdG8gYnVpbGQgYmFja3VwOiB7MH0iLCBlLk1lc3NhZ2UpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJhY2t1cHMuQ291bnQgPT0gQmFja3VwUG9vbFNpemUpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgQ29ubmVjdGlvbkludGVycnVwdFByb2Nlc3NpbmdDb21wbGV0ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxvY2socmVjb25uZWN0TXV0ZXgpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkNvbm5lY3Rpb24gSW50ZXJydXB0IFByb2Nlc3NpbmcgaXMgY29tcGxldGUgZm9yIENvbm5lY3Rpb25JZDogIiArIGNvbm5lY3Rpb25JZCk7DQotICAgICAgICAgICAgICAgIHN0YXRlVHJhY2tlci5Db25uZWN0aW9uSW50ZXJydXB0UHJvY2Vzc2luZ0NvbXBsZXRlKHRoaXMsIGNvbm5lY3Rpb25JZCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgVXBkYXRlVVJJcyhib29sIHJlYmFsYW5jZSwgVXJpW10gdXBkYXRlZFVSSXMpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoSXNVcGRhdGVVUklzU3VwcG9ydGVkKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgRGljdGlvbmFyeTxVcmksIGJvb2w+IGNvcHkgPSBuZXcgRGljdGlvbmFyeTxVcmksIGJvb2w+KCk7DQotICAgICAgICAgICAgICAgIGZvcmVhY2goVXJpIHVyaSBpbiB1cGRhdGVkKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBpZih1cmkgIT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3B5W3VyaV0gPSB0cnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotCQ0KLQkJCQl1cGRhdGVkLkNsZWFyKCk7DQotDQotICAgICAgICAgICAgICAgIGlmKHVwZGF0ZWRVUklzICE9IG51bGwgJiYgdXBkYXRlZFVSSXMuTGVuZ3RoID4gMCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgRGljdGlvbmFyeTxVcmksIGJvb2w+IHVyaVNldCA9IG5ldyBEaWN0aW9uYXJ5PFVyaSwgYm9vbD4oKTsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB1cGRhdGVkVVJJcy5MZW5ndGg7IGkrKykNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBVcmkgdXJpID0gdXBkYXRlZFVSSXNbaV07DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYodXJpICE9IG51bGwpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlTZXRbdXJpXSA9IHRydWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgZm9yZWFjaChVcmkgdXJpIGluIHVyaVNldC5LZXlzKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF1cGRhdGVkLkNvbnRhaW5zKHVyaSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLQkJCQkJCQl1cGRhdGVkLkFkZCh1cmkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0NCi0JCQkJCWlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpDQotCQkJCQl7DQotCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJVcGRhdGVkIFVSSXMgbGlzdCB7MH0iLCBQcmludGFibGVVcmlMaXN0KHVwZGF0ZWQpKTsNCi0JCQkJCX0NCi0NCi0JICAgICAgICAgICAgICAgIGlmICghKGNvcHkuQ291bnQgPT0gMCAmJiB1cGRhdGVkLkNvdW50ID09IDApICYmICFjb3B5LktleXMuRXF1YWxzKHVwZGF0ZWQpKQ0KLQkJCQkJew0KLQkgICAgICAgICAgICAgICAgICAgIEJ1aWxkQmFja3VwcygpOw0KLQkgICAgICAgICAgICAgICAgICAgIGxvY2socmVjb25uZWN0TXV0ZXgpIA0KLQkJCQkJCXsNCi0JICAgICAgICAgICAgICAgICAgICAgICAgUmVjb25uZWN0KHJlYmFsYW5jZSk7DQotCSAgICAgICAgICAgICAgICAgICAgfQ0KLQkgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgSGFuZGxlQ29ubmVjdGlvbkNvbnRyb2woQ29ubmVjdGlvbkNvbnRyb2wgY29udHJvbCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBzdHJpbmcgcmVjb25uZWN0U3RyID0gY29udHJvbC5SZWNvbm5lY3RUbzsNCi0NCi0gICAgICAgICAgICBpZihyZWNvbm5lY3RTdHIgIT0gbnVsbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJlY29ubmVjdFN0ciA9IHJlY29ubmVjdFN0ci5UcmltKCk7DQotICAgICAgICAgICAgICAgIGlmKHJlY29ubmVjdFN0ci5MZW5ndGggPiAwKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBVcmkgdXJpID0gbmV3IFVyaShyZWNvbm5lY3RTdHIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKElzUmVjb25uZWN0U3VwcG9ydGVkKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkluZm8oIlJlY29ubmVjdGluZyB0bzogIiArIHVyaS5PcmlnaW5hbFN0cmluZyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29ubmVjdCh1cmkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5FcnJvckZvcm1hdCgiRmFpbGVkIHRvIGhhbmRsZSBDb25uZWN0aW9uQ29udHJvbCByZWNvbm5lY3QgdG8gezB9OiB7MX0iLCByZWNvbm5lY3RTdHIsIGUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIFByb2Nlc3NOZXdUcmFuc3BvcnRzKGNvbnRyb2wuUmViYWxhbmNlQ29ubmVjdGlvbiwgY29udHJvbC5Db25uZWN0ZWRCcm9rZXJzKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByaXZhdGUgdm9pZCBQcm9jZXNzTmV3VHJhbnNwb3J0cyhib29sIHJlYmFsYW5jZSwgU3RyaW5nIG5ld1RyYW5zcG9ydHMpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYobmV3VHJhbnNwb3J0cyAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgbmV3VHJhbnNwb3J0cyA9IG5ld1RyYW5zcG9ydHMuVHJpbSgpOw0KLQ0KLSAgICAgICAgICAgICAgICBpZihuZXdUcmFuc3BvcnRzLkxlbmd0aCA+IDAgJiYgSXNVcGRhdGVVUklzU3VwcG9ydGVkKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBMaXN0PFVyaT4gbGlzdCA9IG5ldyBMaXN0PFVyaT4oKTsNCi0JCQkJCVByb2Nlc3NEZWxpbWl0ZWRVcmlMaXN0KG5ld1RyYW5zcG9ydHMsIGxpc3QpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgaWYobGlzdC5Db3VudCAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVVJJcyhyZWJhbGFuY2UsIGxpc3QuVG9BcnJheSgpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5FcnJvcigiRmFpbGVkIHRvIHVwZGF0ZSB0cmFuc3BvcnQgVVJJJ3MgZnJvbTogIiArIG5ld1RyYW5zcG9ydHMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gICAgICAgIA0KLQkJfQ0KLQ0KLQkJcHJpdmF0ZSB2b2lkIFByb2Nlc3NEZWxpbWl0ZWRVcmlMaXN0KFN0cmluZyBwcmlvcml0eVVyaXMsIExpc3Q8VXJpPiB0YXJnZXQpDQotCQl7DQotICAgICAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gcHJpb3JpdHlVcmlzLlNwbGl0KG5ldyBDaGFyW10geyAnLCcgfSk7DQotDQotICAgICAgICAgICAgZm9yZWFjaChTdHJpbmcgc3RyIGluIHRva2VucykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBVcmkgdXJpID0gbmV3IFVyaShzdHIpOw0KLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LkFkZCh1cmkpOw0KLQ0KLQkJCQkJaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkNCi0JCQkJCXsNCi0JCQkJCQlUcmFjZXIuRGVidWdGb3JtYXQoIkFkZGluZyBuZXcgVXJpW3swfV0gdG8gbGlzdCwiLCB1cmkpOw0KLQkJCQkJfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkNCi0gICAgICAgICAgICAgICAgew0KLQkJCQkJVHJhY2VyLkVycm9yRm9ybWF0KCJGYWlsZWQgdG8gcGFyc2UgYnJva2VyIGFkZHJlc3M6IHswfSBiZWNhdXNlIG9mOiB7MX0iLA0KLQkJCQkJICAgICAgICAgICAgICAgICAgIHN0ciwgZS5NZXNzYWdlKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0JCX0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERpc3Bvc2UodHJ1ZSk7DQotICAgICAgICAgICAgR0MuU3VwcHJlc3NGaW5hbGl6ZSh0aGlzKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoYm9vbCBkaXNwb3NpbmcpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy5TdG9wKCk7DQotICAgICAgICAgICAgZGlzcG9zZWQgPSB0cnVlOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIGludCBDb21wYXJlVG8oT2JqZWN0IG8pDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYobyBpcyBGYWlsb3ZlclRyYW5zcG9ydCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEZhaWxvdmVyVHJhbnNwb3J0IG9vID0gbyBhcyBGYWlsb3ZlclRyYW5zcG9ydDsNCi0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWQgLSBvby5pZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIFN0cmluZyBUb1N0cmluZygpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIENvbm5lY3RlZFRyYW5zcG9ydFVSSSA9PSBudWxsID8gInVuY29ubmVjdGVkIiA6IENvbm5lY3RlZFRyYW5zcG9ydFVSSS5Ub1N0cmluZygpOw0KLSAgICAgICAgfQ0KLQ0KLQkgICAgaW50ZXJuYWwgYm9vbCBJc1ByaW9yaXR5KFVyaSB1cmkpIA0KLQkJew0KLQkJCWlmIChwcmlvcml0eUJhY2t1cCkNCi0JCQl7DQotCQkgICAgICAgIGlmIChwcmlvcml0eUxpc3QuQ291bnQgPiAwKSANCi0JCQkJew0KLQkJICAgICAgICAgICAgcmV0dXJuIHByaW9yaXR5TGlzdC5Db250YWlucyh1cmkpOw0KLQkJICAgICAgICB9DQotDQotCQkJCWlmICh0aGlzLnVyaXMuQ291bnQgPiAwKSANCi0JCQkJew0KLQkJICAgICAgICAJcmV0dXJuIHVyaXNbMF0uRXF1YWxzKHVyaSk7DQotCQkJCX0NCi0JCQl9DQotCQkJcmV0dXJuIGZhbHNlOw0KLQkgICAgfQ0KLQ0KLQkJcHVibGljIHZvaWQgRGlzcG9zZVRyYW5zcG9ydChJVHJhbnNwb3J0IHRyYW5zcG9ydCkgDQotCQl7DQotCQkJdHJhbnNwb3J0LkNvbW1hbmQgPSBEaXNwb3NlZE9uQ29tbWFuZDsNCi0JCQl0cmFuc3BvcnQuRXhjZXB0aW9uID0gRGlzcG9zZWRPbkV4Y2VwdGlvbjsNCi0NCi0JCQl0cnkgDQotCQkJew0KLQkgICAgICAgICAgICB0cmFuc3BvcnQuU3RvcCgpOw0KLSAgICAgICAgCX0NCi0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIA0KLQkJCXsNCi0JCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJDb3VsZCBub3Qgc3RvcCB0cmFuc3BvcnQ6IHswXS4gUmVhc29uOiB7MX0iLCB0cmFuc3BvcnQsIGUuTWVzc2FnZSk7DQotICAgICAgICAJfQ0KLSAgICAJfQ0KLQ0KLQkgICAgcHJpdmF0ZSB2b2lkIFJlc2V0UmVjb25uZWN0RGVsYXkoKSANCi0JCXsNCi0JICAgICAgICBpZiAoIXVzZUV4cG9uZW50aWFsQmFja09mZiB8fCByZWNvbm5lY3REZWxheSA9PSBERUZBVUxUX0lOSVRJQUxfUkVDT05ORUNUX0RFTEFZKSANCi0JCQl7DQotCSAgICAgICAgICAgIHJlY29ubmVjdERlbGF5ID0gaW5pdGlhbFJlY29ubmVjdERlbGF5Ow0KLQkgICAgICAgIH0NCi0JICAgIH0NCi0NCi0JICAgIHByaXZhdGUgdm9pZCBEb0RlbGF5KCkNCi0JCXsNCi0JICAgICAgICBpZiAocmVjb25uZWN0RGVsYXkgPiAwKSANCi0JCQl7DQotCSAgICAgICAgICAgIGxvY2soc2xlZXBNdXRleCkgDQotCQkJCXsNCi0JICAgICAgICAgICAgICAgIGlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpIA0KLQkJCQkJew0KLQkJCQkJCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiV2FpdGluZyB7MH0gbXMgYmVmb3JlIGF0dGVtcHRpbmcgY29ubmVjdGlvbiIsIHJlY29ubmVjdERlbGF5KTsNCi0JICAgICAgICAgICAgICAgIH0NCi0JICAgICAgICAgICAgICAgIHRyeSANCi0JCQkJCXsNCi0JCQkJCQlNb25pdG9yLldhaXQoc2xlZXBNdXRleCwgcmVjb25uZWN0RGVsYXkpOw0KLQkgICAgICAgICAgICAgICAgfSANCi0JCQkJCWNhdGNoIChUaHJlYWRJbnRlcnJ1cHRlZEV4Y2VwdGlvbikgDQotCQkJCQl7DQotCSAgICAgICAgICAgICAgICB9DQotCSAgICAgICAgICAgIH0NCi0JICAgICAgICB9DQotDQotCSAgICAgICAgaWYgKHVzZUV4cG9uZW50aWFsQmFja09mZikgDQotCQkJew0KLQkgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBpbmNyZW1lbnQgb2YgcmVjb25uZWN0IGRlbGF5Lg0KLQkgICAgICAgICAgICByZWNvbm5lY3REZWxheSAqPSBiYWNrT2ZmTXVsdGlwbGllcjsNCi0JICAgICAgICAgICAgaWYgKHJlY29ubmVjdERlbGF5ID4gbWF4UmVjb25uZWN0RGVsYXkpIA0KLQkJCQl7DQotCSAgICAgICAgICAgICAgICByZWNvbm5lY3REZWxheSA9IG1heFJlY29ubmVjdERlbGF5Ow0KLQkgICAgICAgICAgICB9DQotCSAgICAgICAgfQ0KLQkgICAgfQ0KLQ0KLQkgICAgcHJpdmF0ZSB2b2lkIFByb3BhZ2F0ZUZhaWx1cmVUb0V4Y2VwdGlvbkxpc3RlbmVyKEV4Y2VwdGlvbiBleGNlcHRpb24pIA0KLQkJew0KLQkgICAgICAgIGlmIChFeGNlcHRpb24gIT0gbnVsbCkgDQotCQkJew0KLSAgICAgICAgICAgICAgICBFeGNlcHRpb24odGhpcywgZXhjZXB0aW9uKTsNCi0JICAgICAgICB9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJRXhjZXB0aW9uKHRoaXMsIG5ldyBJT0V4Y2VwdGlvbigpKTsNCi0JCQl9DQotCQkJTW9uaXRvci5QdWxzZUFsbChyZWNvbm5lY3RNdXRleCk7DQotCSAgICB9DQotDQotCSAgICBwcml2YXRlIGludCBDYWxjdWxhdGVSZWNvbm5lY3RBdHRlbXB0TGltaXQoKSANCi0JCXsNCi0JICAgICAgICBpbnQgbWF4UmVjb25uZWN0VmFsdWUgPSB0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzOw0KLQkgICAgICAgIGlmIChmaXJzdENvbm5lY3Rpb24gJiYgdGhpcy5zdGFydHVwTWF4UmVjb25uZWN0QXR0ZW1wdHMgIT0gSU5GSU5JVEUpIA0KLQkJCXsNCi0JICAgICAgICAgICAgbWF4UmVjb25uZWN0VmFsdWUgPSB0aGlzLnN0YXJ0dXBNYXhSZWNvbm5lY3RBdHRlbXB0czsNCi0JICAgICAgICB9DQotCSAgICAgICAgcmV0dXJuIG1heFJlY29ubmVjdFZhbHVlOw0KLQkgICAgfQ0KLQ0KLQkJcHVibGljIHZvaWQgU2h1ZmZsZTxUPihMaXN0PFQ+IGxpc3QpICANCi0JCXsgIA0KLSAgICAgICAgICAgIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKERhdGVUaW1lLk5vdy5NaWxsaXNlY29uZCk7DQotCQkgICAgaW50IGluZGV4ID0gbGlzdC5Db3VudDsgIA0KLQkJICAgIHdoaWxlIChpbmRleCA+IDEpIA0KLQkJCXsgIA0KLQkJICAgICAgICBpbmRleC0tOyAgDQotCQkgICAgICAgIGludCBrID0gcmFuZG9tLk5leHQoaW5kZXggKyAxKTsgIA0KLQkJICAgICAgICBUIHZhbHVlID0gbGlzdFtrXTsgIA0KLQkJICAgICAgICBsaXN0W2tdID0gbGlzdFtpbmRleF07ICANCi0JCSAgICAgICAgbGlzdFtpbmRleF0gPSB2YWx1ZTsgIA0KLQkJICAgIH0gIA0KLQkJfQ0KLQ0KLQkJcHJpdmF0ZSBTdHJpbmcgUHJpbnRhYmxlVXJpTGlzdChMaXN0PFVyaT4gdXJpTGlzdCkNCi0JCXsNCi0JCQlpZiAodXJpTGlzdC5Db3VudCA9PSAwKQ0KLQkJCXsNCi0JCQkJcmV0dXJuICIiOw0KLQkJCX0NCi0NCi0JCQlTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOw0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdXJpTGlzdC5Db3VudDsgKytpKQ0KLQkJCXsNCi0JCQkJYnVpbGRlci5BcHBlbmQodXJpTGlzdFtpXSk7DQotCQkJCWlmIChpIDwgKHVyaUxpc3QuQ291bnQgLSAxKSkNCi0JCQkJew0KLQkJCQkJYnVpbGRlci5BcHBlbmQoIiwiKTsNCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlyZXR1cm4gYnVpbGRlci5Ub1N0cmluZygpOw0KLQkJfQ0KLQ0KLQkJcHJpdmF0ZSBib29sIENvbXBhcmVVcmlzKFVyaSBmaXJzdCwgVXJpIHNlY29uZCkgDQotCQl7DQotCQkJYm9vbCByZXN1bHQgPSBmYWxzZTsNCi0gICAgICAgICAgICBpZiAoZmlyc3QuUG9ydCA9PSBzZWNvbmQuUG9ydCkNCi0JCQl7DQotICAgICAgICAgICAgICAgIElQSG9zdEVudHJ5IGZpcnN0QWRkciA9IG51bGw7DQotICAgICAgICAgICAgICAgIElQSG9zdEVudHJ5IHNlY29uZEFkZHIgPSBudWxsOw0KLSAgICAgICAgICAgICAgICB0cnkgDQotCQkJCXsNCi0gICAgICAgICAgICAJCWZpcnN0QWRkciA9IERucy5HZXRIb3N0RW50cnkoZmlyc3QuSG9zdCk7DQotICAgICAgICAgICAgCQlzZWNvbmRBZGRyID0gRG5zLkdldEhvc3RFbnRyeShzZWNvbmQuSG9zdCk7DQotDQotCSAgICAgICAgICAgICAgICBpZiAoZmlyc3RBZGRyLkVxdWFscyhzZWNvbmRBZGRyKSkgDQotCQkJCQl7DQotCQkJCQkJcmVzdWx0ID0gdHJ1ZTsNCi0JICAgICAgICAgICAgICAgIH0NCi0JCQkJfSANCi0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpDQotCQkJCXsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEFkZHIgPT0gbnVsbCkgDQotCQkJCQl7DQotCQkJCQkJVHJhY2VyLldhcm5Gb3JtYXQoIkZhaWxlZCB0byBMb29rdXAgSVBIb3N0RW50cnkgZm9yIFVSSVt7MH1dIDogezF9IiwgZmlyc3QsIGUpOw0KLSAgICAgICAgICAgICAgICAgICAgfSANCi0JCQkJCWVsc2UgDQotCQkJCQl7DQotCQkJCQkJVHJhY2VyLldhcm5Gb3JtYXQoIkZhaWxlZCB0byBMb29rdXAgSVBIb3N0RW50cnkgZm9yIFVSSVt7MH1dIDogezF9Iiwgc2Vjb25kLCBlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0NCi0JCQkJCWlmKFN0cmluZy5FcXVhbHMoZmlyc3QuSG9zdCwgc2Vjb25kLkhvc3QsIFN0cmluZ0NvbXBhcmlzb24uQ3VycmVudEN1bHR1cmVJZ25vcmVDYXNlKSkNCi0JCQkJCXsNCi0JCQkJCQlyZXN1bHQgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgfQ0KLQ0KLQkJCXJldHVybiByZXN1bHQ7DQotCQl9DQotDQotCSAgICBwcml2YXRlIGJvb2wgQ29udGFpbnMoVXJpIG5ld1VSSSkgDQotCQl7DQotCSAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsNCi0JICAgICAgICBmb3JlYWNoIChVcmkgdXJpIGluIHVyaXMpIA0KLQkJCXsNCi0JICAgICAgICAgICAgaWYgKENvbXBhcmVVcmlzKG5ld1VSSSwgdXJpKSkNCi0JCQkJew0KLQkJCQkJcmVzdWx0ID0gdHJ1ZTsNCi0JCQkJCWJyZWFrOw0KLQkgICAgICAgICAgICB9DQotCSAgICAgICAgfQ0KLQ0KLQkgICAgICAgIHJldHVybiByZXN1bHQ7DQotCSAgICB9DQotICAgIH0NCi19DQorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGV4dDsKK3VzaW5nIFN5c3RlbS5OZXQ7Cit1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOwordXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5TdGF0ZTsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGhyZWFkczsKK3VzaW5nIEFwYWNoZS5OTVMuVXRpbDsKKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0LkZhaWxvdmVyCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIFRyYW5zcG9ydCB0aGF0IGlzIG1hZGUgcmVsaWFibGUgYnkgYmVpbmcgYWJsZSB0byBmYWlsIG92ZXIgdG8gYW5vdGhlcgorICAgIC8vLyB0cmFuc3BvcnQgd2hlbiBhIHRyYW5zcG9ydCBmYWlsdXJlIGlzIGRldGVjdGVkLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIEZhaWxvdmVyVHJhbnNwb3J0IDogSUNvbXBvc2l0ZVRyYW5zcG9ydCwgSUNvbXBhcmFibGUKKyAgICB7CisJCXByaXZhdGUgc3RhdGljIGludCBERUZBVUxUX0lOSVRJQUxfUkVDT05ORUNUX0RFTEFZID0gMTA7CisJCXByaXZhdGUgc3RhdGljIGludCBJTkZJTklURSA9IC0xOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGludCBpZENvdW50ZXIgPSAwOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGludCBpZDsKKworICAgICAgICBwcml2YXRlIGJvb2wgZGlzcG9zZWQ7CisgICAgICAgIHByaXZhdGUgYm9vbCBjb25uZWN0ZWQ7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTGlzdDxVcmk+IHVyaXMgPSBuZXcgTGlzdDxVcmk+KCk7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTGlzdDxVcmk+IHVwZGF0ZWQgPSBuZXcgTGlzdDxVcmk+KCk7CisKKyAgICAgICAgcHJpdmF0ZSBDb21tYW5kSGFuZGxlciBjb21tYW5kSGFuZGxlcjsKKyAgICAgICAgcHJpdmF0ZSBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIHByaXZhdGUgSW50ZXJydXB0ZWRIYW5kbGVyIGludGVycnVwdGVkSGFuZGxlcjsKKyAgICAgICAgcHJpdmF0ZSBSZXN1bWVkSGFuZGxlciByZXN1bWVkSGFuZGxlcjsKKworCQlwcml2YXRlIHJlYWRvbmx5IENvdW50RG93bkxhdGNoIGxpc3RlbmVyTGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goNCk7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTXV0ZXggcmVjb25uZWN0TXV0ZXggPSBuZXcgTXV0ZXgoKTsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBNdXRleCBiYWNrdXBNdXRleCA9IG5ldyBNdXRleCgpOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IE11dGV4IHNsZWVwTXV0ZXggPSBuZXcgTXV0ZXgoKTsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBDb25uZWN0aW9uU3RhdGVUcmFja2VyIHN0YXRlVHJhY2tlciA9IG5ldyBDb25uZWN0aW9uU3RhdGVUcmFja2VyKCk7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRGljdGlvbmFyeTxpbnQsIENvbW1hbmQ+IHJlcXVlc3RNYXAgPSBuZXcgRGljdGlvbmFyeTxpbnQsIENvbW1hbmQ+KCk7CisKKyAgICAgICAgcHJpdmF0ZSBVcmkgY29ubmVjdGVkVHJhbnNwb3J0VVJJOworICAgICAgICBwcml2YXRlIFVyaSBmYWlsZWRDb25uZWN0VHJhbnNwb3J0VVJJOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEF0b21pY1JlZmVyZW5jZTxJVHJhbnNwb3J0PiBjb25uZWN0ZWRUcmFuc3BvcnQgPSBuZXcgQXRvbWljUmVmZXJlbmNlPElUcmFuc3BvcnQ+KG51bGwpOworICAgICAgICBwcml2YXRlIFRhc2tSdW5uZXIgcmVjb25uZWN0VGFzayA9IG51bGw7CisgICAgICAgIHByaXZhdGUgYm9vbCBzdGFydGVkOworICAgICAgICBwcml2YXRlIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgICAgIHByaXZhdGUgaW50IGluaXRpYWxSZWNvbm5lY3REZWxheSA9IERFRkFVTFRfSU5JVElBTF9SRUNPTk5FQ1RfREVMQVk7CisgICAgICAgIHByaXZhdGUgaW50IG1heFJlY29ubmVjdERlbGF5ID0gMTAwMCAqIDMwOworICAgICAgICBwcml2YXRlIGludCBiYWNrT2ZmTXVsdGlwbGllciA9IDI7CisgICAgICAgIHByaXZhdGUgaW50IHRpbWVvdXQgPSBJTkZJTklURTsKKyAgICAgICAgcHJpdmF0ZSBib29sIHVzZUV4cG9uZW50aWFsQmFja09mZiA9IHRydWU7CisgICAgICAgIHByaXZhdGUgYm9vbCByYW5kb21pemUgPSB0cnVlOworICAgICAgICBwcml2YXRlIGludCBtYXhSZWNvbm5lY3RBdHRlbXB0cyA9IElORklOSVRFOworICAgICAgICBwcml2YXRlIGludCBzdGFydHVwTWF4UmVjb25uZWN0QXR0ZW1wdHMgPSBJTkZJTklURTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdEZhaWx1cmVzOworICAgICAgICBwcml2YXRlIGludCByZWNvbm5lY3REZWxheSA9IERFRkFVTFRfSU5JVElBTF9SRUNPTk5FQ1RfREVMQVk7CisgICAgICAgIHByaXZhdGUgRXhjZXB0aW9uIGNvbm5lY3Rpb25GYWlsdXJlOworICAgICAgICBwcml2YXRlIGJvb2wgZmlyc3RDb25uZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgcHJpdmF0ZSBib29sIGJhY2t1cCA9IGZhbHNlOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IExpc3Q8QmFja3VwVHJhbnNwb3J0PiBiYWNrdXBzID0gbmV3IExpc3Q8QmFja3VwVHJhbnNwb3J0PigpOworICAgICAgICBwcml2YXRlIGludCBiYWNrdXBQb29sU2l6ZSA9IDE7CisgICAgICAgIHByaXZhdGUgYm9vbCB0cmFja01lc3NhZ2VzID0gZmFsc2U7CisgICAgCXByaXZhdGUgYm9vbCB0cmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzID0gdHJ1ZTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbWF4Q2FjaGVTaXplID0gMjU2OworICAgICAgICBwcml2YXRlIHZvbGF0aWxlIEV4Y2VwdGlvbiBmYWlsdXJlOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdCBtdXRleCA9IG5ldyBvYmplY3QoKTsKKyAgICAgICAgcHJpdmF0ZSBib29sIHJlY29ubmVjdFN1cHBvcnRlZCA9IHRydWU7CisgICAgICAgIHByaXZhdGUgYm9vbCB1cGRhdGVVUklzU3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAJcHJpdmF0ZSBib29sIGRvUmViYWxhbmNlID0gZmFsc2U7CisgICAgCXByaXZhdGUgYm9vbCBjb25uZWN0ZWRUb1ByaW9yaXR5ID0gZmFsc2U7CisJIAlwcml2YXRlIGJvb2wgcHJpb3JpdHlCYWNrdXAgPSBmYWxzZTsKKyAgICAJcHJpdmF0ZSBMaXN0PFVyaT4gcHJpb3JpdHlMaXN0ID0gbmV3IExpc3Q8VXJpPigpOworICAgIAlwcml2YXRlIGJvb2wgcHJpb3JpdHlCYWNrdXBBdmFpbGFibGUgPSBmYWxzZTsKKworCQkvLyBOb3QgU3VyZSBob3cgdG8gd29yayB0aGVzZSBiYWNrIGluIHdpdGggYWxsIHRoZSBjaGFuZ2VzLgorCQkvL3ByaXZhdGUgaW50IGFzeW5jVGltZW91dCA9IDQ1MDAwOworICAgICAgICAvL3ByaXZhdGUgYm9vbCBhc3luY0Nvbm5lY3QgPSBmYWxzZTsKKworICAgICAgICBwdWJsaWMgRmFpbG92ZXJUcmFuc3BvcnQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZCA9IGlkQ291bnRlcisrOworCisgICAgICAgICAgICBzdGF0ZVRyYWNrZXIuVHJhY2tUcmFuc2FjdGlvbnMgPSB0cnVlOworICAgICAgICAgICAgcmVjb25uZWN0VGFzayA9IERlZmF1bHRUaHJlYWRQb29scy5EZWZhdWx0VGFza1J1bm5lckZhY3RvcnkuQ3JlYXRlVGFza1J1bm5lcigKKyAgICAgICAgICAgICAgICBuZXcgRmFpbG92ZXJUYXNrKHRoaXMpLCAiQWN0aXZlTVEgRmFpbG92ZXIgV29ya2VyOiAiICsgdGhpcy5HZXRIYXNoQ29kZSgpLlRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgfkZhaWxvdmVyVHJhbnNwb3J0KCkKKyAgICAgICAgeworICAgICAgICAgICAgRGlzcG9zZShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAjcmVnaW9uIEZhaWxvdmVyVGFzaworCisgICAgICAgIHByaXZhdGUgY2xhc3MgRmFpbG92ZXJUYXNrIDogVGFzaworICAgICAgICB7CisgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEZhaWxvdmVyVHJhbnNwb3J0IHBhcmVudDsKKworICAgICAgICAgICAgcHVibGljIEZhaWxvdmVyVGFzayhGYWlsb3ZlclRyYW5zcG9ydCBwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmVudCA9IHA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBib29sIEl0ZXJhdGUoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQuSXNTdGFydGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgYnVpbGRCYWNrdXAgPSB0cnVlOworICAgICAgICAgICAgICAgIGxvY2sgKHBhcmVudC5iYWNrdXBNdXRleCkgCisJCQkJeworICAgICAgICAgICAgICAgICAgICBpZiAoKHBhcmVudC5jb25uZWN0ZWRUcmFuc3BvcnQuVmFsdWUgPT0gbnVsbCB8fCBwYXJlbnQuZG9SZWJhbGFuY2UgfHwgcGFyZW50LnByaW9yaXR5QmFja3VwQXZhaWxhYmxlKSAmJiAhcGFyZW50LmRpc3Bvc2VkKQorCQkJCQl7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJlbnQuRG9Db25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZEJhY2t1cCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChidWlsZEJhY2t1cCkgCisJCQkJeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQuQnVpbGRCYWNrdXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQucHJpb3JpdHlCYWNrdXAgJiYgIXBhcmVudC5jb25uZWN0ZWRUb1ByaW9yaXR5KSAKKwkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IAorCQkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5Eb0RlbGF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC5yZWNvbm5lY3RUYXNrID09IG51bGwpCisJCQkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlY29ubmVjdFRhc2suV2FrZXVwKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IAorCQkJCQkJY2F0Y2ggKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uKSAKKwkJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlUcmFjZXIuRGVidWcoIlJlY29ubmVjdCB0YXNrIGhhcyBiZWVuIGludGVycnVwdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCQkJCWVsc2UgCisJCQkJeworICAgICAgICAgICAgICAgICAgICB0cnkgCisJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQucmVjb25uZWN0VGFzayA9PSBudWxsKSAKKwkJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZWNvbm5lY3RUYXNrLldha2V1cCgpOworICAgICAgICAgICAgICAgICAgICB9CisJCQkJCWNhdGNoIChUaHJlYWRJbnRlcnJ1cHRlZEV4Y2VwdGlvbikgCisJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiUmVjb25uZWN0IHRhc2sgaGFzIGJlZW4gaW50ZXJydXB0ZWQuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICNlbmRyZWdpb24KKworICAgICAgICAjcmVnaW9uIFByb3BlcnR5IEFjY2Vzc29ycworCisgICAgICAgIHB1YmxpYyBDb21tYW5kSGFuZGxlciBDb21tYW5kCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBjb21tYW5kSGFuZGxlcjsgfQorICAgICAgICAgICAgc2V0IAorCQkJeyAKKwkJCQljb21tYW5kSGFuZGxlciA9IHZhbHVlOyAKKwkJCQlsaXN0ZW5lckxhdGNoLmNvdW50RG93bigpOworCQkJfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEV4Y2VwdGlvbkhhbmRsZXIgRXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBleGNlcHRpb25IYW5kbGVyOyB9CisgICAgICAgICAgICBzZXQgCisJCQl7IAorCQkJCWV4Y2VwdGlvbkhhbmRsZXIgPSB2YWx1ZTsgCisJCQkJbGlzdGVuZXJMYXRjaC5jb3VudERvd24oKTsKKwkJCX0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbnRlcnJ1cHRlZEhhbmRsZXIgSW50ZXJydXB0ZWQKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGludGVycnVwdGVkSGFuZGxlcjsgfQorICAgICAgICAgICAgc2V0IAorCQkJeyAKKwkJCQl0aGlzLmludGVycnVwdGVkSGFuZGxlciA9IHZhbHVlOyAKKwkJCQl0aGlzLmxpc3RlbmVyTGF0Y2guY291bnREb3duKCk7CisJCQl9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVzdW1lZEhhbmRsZXIgUmVzdW1lZAorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gcmVzdW1lZEhhbmRsZXI7IH0KKyAgICAgICAgICAgIHNldCAKKwkJCXsgCisJCQkJdGhpcy5yZXN1bWVkSGFuZGxlciA9IHZhbHVlOyAKKwkJCQl0aGlzLmxpc3RlbmVyTGF0Y2guY291bnREb3duKCk7CisJCQl9CisgICAgICAgIH0KKworICAgICAgICBpbnRlcm5hbCBFeGNlcHRpb24gRmFpbHVyZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gZmFpbHVyZTsgfQorICAgICAgICAgICAgc2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9jayhtdXRleCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IFRpbWVvdXQKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMudGltZW91dDsgfQorICAgICAgICAgICAgc2V0IHsgdGhpcy50aW1lb3V0ID0gdmFsdWU7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgSW5pdGlhbFJlY29ubmVjdERlbGF5CisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBpbml0aWFsUmVjb25uZWN0RGVsYXk7IH0KKyAgICAgICAgICAgIHNldCB7IGluaXRpYWxSZWNvbm5lY3REZWxheSA9IHZhbHVlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IE1heFJlY29ubmVjdERlbGF5CisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBtYXhSZWNvbm5lY3REZWxheTsgfQorICAgICAgICAgICAgc2V0IHsgbWF4UmVjb25uZWN0RGVsYXkgPSB2YWx1ZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBSZWNvbm5lY3REZWxheQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gcmVjb25uZWN0RGVsYXk7IH0KKyAgICAgICAgICAgIHNldCB7IHJlY29ubmVjdERlbGF5ID0gdmFsdWU7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgUmVjb25uZWN0RGVsYXlFeHBvbmVudAorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gYmFja09mZk11bHRpcGxpZXI7IH0KKyAgICAgICAgICAgIHNldCB7IGJhY2tPZmZNdWx0aXBsaWVyID0gdmFsdWU7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJVHJhbnNwb3J0IENvbm5lY3RlZFRyYW5zcG9ydAorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gY29ubmVjdGVkVHJhbnNwb3J0LlZhbHVlOyB9CisgICAgICAgICAgICBzZXQgeyBjb25uZWN0ZWRUcmFuc3BvcnQuVmFsdWUgPSB2YWx1ZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFVyaSBDb25uZWN0ZWRUcmFuc3BvcnRVUkkKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGNvbm5lY3RlZFRyYW5zcG9ydFVSSTsgfQorICAgICAgICAgICAgc2V0IHsgY29ubmVjdGVkVHJhbnNwb3J0VVJJID0gdmFsdWU7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgTWF4UmVjb25uZWN0QXR0ZW1wdHMKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIG1heFJlY29ubmVjdEF0dGVtcHRzOyB9CisgICAgICAgICAgICBzZXQgeyBtYXhSZWNvbm5lY3RBdHRlbXB0cyA9IHZhbHVlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IFN0YXJ0dXBNYXhSZWNvbm5lY3RBdHRlbXB0cworICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gc3RhcnR1cE1heFJlY29ubmVjdEF0dGVtcHRzOyB9CisgICAgICAgICAgICBzZXQgeyBzdGFydHVwTWF4UmVjb25uZWN0QXR0ZW1wdHMgPSB2YWx1ZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgUmFuZG9taXplCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiByYW5kb21pemU7IH0KKyAgICAgICAgICAgIHNldCB7IHJhbmRvbWl6ZSA9IHZhbHVlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbCBCYWNrdXAKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGJhY2t1cDsgfQorICAgICAgICAgICAgc2V0IHsgYmFja3VwID0gdmFsdWU7IH0KKyAgICAgICAgfQorCisJCXB1YmxpYyBib29sIFByaW9yaXR5QmFja3VwCisJCXsKKwkJCWdldCB7IHJldHVybiBwcmlvcml0eUJhY2t1cDsgfQorCQkJc2V0IHsgdGhpcy5wcmlvcml0eUJhY2t1cCA9IHZhbHVlOyB9CisJCX0KKworCSAgICBwdWJsaWMgU3RyaW5nIFByaW9yaXR5VVJJcworCQl7CisJCQlnZXQgeyByZXR1cm4gUHJpbnRhYmxlVXJpTGlzdChwcmlvcml0eUxpc3QpOyB9CisJCQlzZXQgeyB0aGlzLlByb2Nlc3NEZWxpbWl0ZWRVcmlMaXN0KHZhbHVlLCBwcmlvcml0eUxpc3QpOyB9CisJICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IEJhY2t1cFBvb2xTaXplCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBiYWNrdXBQb29sU2l6ZTsgfQorICAgICAgICAgICAgc2V0IHsgYmFja3VwUG9vbFNpemUgPSB2YWx1ZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgVHJhY2tNZXNzYWdlcworICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gdHJhY2tNZXNzYWdlczsgfQorICAgICAgICAgICAgc2V0IHsgdHJhY2tNZXNzYWdlcyA9IHZhbHVlOyB9CisgICAgICAgIH0KKworCQlwdWJsaWMgYm9vbCBUcmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzCisJCXsKKwkJCWdldCB7IHJldHVybiB0cmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzOyB9CisJCQlzZXQgeyB0aGlzLnRyYWNrVHJhbnNhY3Rpb25Qcm9kdWNlcnMgPSB2YWx1ZTsgfQorCQl9CisKKyAgICAgICAgcHVibGljIGludCBNYXhDYWNoZVNpemUKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIG1heENhY2hlU2l6ZTsgfQorICAgICAgICAgICAgc2V0IHsgbWF4Q2FjaGVTaXplID0gdmFsdWU7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sIFVzZUV4cG9uZW50aWFsQmFja09mZgorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gdXNlRXhwb25lbnRpYWxCYWNrT2ZmOyB9CisgICAgICAgICAgICBzZXQgeyB1c2VFeHBvbmVudGlhbEJhY2tPZmYgPSB2YWx1ZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElXaXJlRm9ybWF0IFdpcmVGb3JtYXQKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSBDb25uZWN0ZWRUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgaWYodHJhbnNwb3J0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0LldpcmVGb3JtYXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBHZXRzIG9yIHNldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXN5bmNocm9ub3VzbHkgY29ubmVjdCB0byBzb2NrZXRzCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8dmFsdWU+PGM+dHJ1ZTwvYz4gaWYgW2FzeW5jIGNvbm5lY3RdOyBvdGhlcndpc2UsIDxjPmZhbHNlPC9jPi48L3ZhbHVlPgorICAgICAgICBwdWJsaWMgYm9vbCBBc3luY0Nvbm5lY3QKKyAgICAgICAgeworICAgICAgICAgICAgc2V0IHsgfQorICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gSWYgZG9pbmcgYW4gYXN5bmNocm9ub3VzIGNvbm5lY3QsIHRoZSBtaWxsaXNlY29uZHMgYmVmb3JlIHRpbWluZyBvdXQgaWYgbm8gY29ubmVjdGlvbiBjYW4gYmUgbWFkZQorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHZhbHVlPlRoZSBhc3luYyB0aW1lb3V0LjwvdmFsdWU+CisgICAgICAgIHB1YmxpYyBpbnQgQXN5bmNUaW1lb3V0CisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiAwOyB9CisgICAgICAgICAgICBzZXQgeyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQ29ubmVjdGlvblN0YXRlVHJhY2tlciBTdGF0ZVRyYWNrZXIKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMuc3RhdGVUcmFja2VyOyB9CisgICAgICAgIH0KKworICAgICAgICAjZW5kcmVnaW9uCisKKyAgICAgICAgcHVibGljIGJvb2wgSXNGYXVsdFRvbGVyYW50CisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbCBJc0Rpc3Bvc2VkCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBkaXNwb3NlZDsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgSXNDb25uZWN0ZWQKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGNvbm5lY3RlZDsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgSXNDb25uZWN0ZWRUb1ByaW9yaXR5CisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBjb25uZWN0ZWRUb1ByaW9yaXR5OyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbCBJc1N0YXJ0ZWQKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHN0YXJ0ZWQ7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sIElzUmVjb25uZWN0U3VwcG9ydGVkCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiB0aGlzLnJlY29ubmVjdFN1cHBvcnRlZDsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgSXNVcGRhdGVVUklzU3VwcG9ydGVkCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiB0aGlzLnVwZGF0ZVVSSXNTdXBwb3J0ZWQ7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIE9uRXhjZXB0aW9uKElUcmFuc3BvcnQgc2VuZGVyLCBFeGNlcHRpb24gZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhhbmRsZVRyYW5zcG9ydEZhaWx1cmUoZXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uKQorICAgICAgICAgICAgeworCQkJCXRoaXMuRXhjZXB0aW9uKHRoaXMsIG5ldyBJT0V4Y2VwdGlvbigiVW5leHBlY3RlZCBUcmFuc3BvcnQgRmFpbHVyZS4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlZE9uQ29tbWFuZChJVHJhbnNwb3J0IHNlbmRlciwgQ29tbWFuZCBjKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlZE9uRXhjZXB0aW9uKElUcmFuc3BvcnQgc2VuZGVyLCBFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgSGFuZGxlVHJhbnNwb3J0RmFpbHVyZShFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSBjb25uZWN0ZWRUcmFuc3BvcnQuR2V0QW5kU2V0KG51bGwpOworCSAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBudWxsKSAKKwkJCXsKKwkgICAgICAgICAgICAvLyBzeW5jIHdpdGggcG9zc2libGUgaW4gcHJvZ3Jlc3MgcmVjb25uZWN0CisJICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkgCisJCQkJeworCSAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBjb25uZWN0ZWRUcmFuc3BvcnQuR2V0QW5kU2V0KG51bGwpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKworCQkJaWYodHJhbnNwb3J0ICE9IG51bGwpCisgICAgICAgICAgICB7CisJCQkJRGlzcG9zZVRyYW5zcG9ydCh0cmFuc3BvcnQpOworCisJICAgICAgICAgICAgYm9vbCByZWNvbm5lY3RPayA9IGZhbHNlOworCSAgICAgICAgICAgIGxvY2socmVjb25uZWN0TXV0ZXgpIAorCQkJCXsKKwkgICAgICAgICAgICAgICAgaWYgKENhblJlY29ubmVjdCgpKSAKKwkJCQkJeworICAgICAgICAgICAgICAgICAgICAJVHJhY2VyLldhcm5Gb3JtYXQoIlRyYW5zcG9ydCBmYWlsZWQgdG8gezB9LCBhdHRlbXB0aW5nIHRvIGF1dG9tYXRpY2FsbHkgcmVjb25uZWN0IGR1ZSB0bzogezF9IiwgCisJCQkJCQkgICAgICAgICAgICAgICAgICBDb25uZWN0ZWRUcmFuc3BvcnRVUkksIGUuTWVzc2FnZSk7CisJICAgICAgICAgICAgICAgICAgICByZWNvbm5lY3RPayA9IHRydWU7CisJICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBmYWlsZWRDb25uZWN0VHJhbnNwb3J0VVJJID0gQ29ubmVjdGVkVHJhbnNwb3J0VVJJOworICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWRUcmFuc3BvcnRVUkkgPSBudWxsOworCQkJCQljb25uZWN0ZWRUb1ByaW9yaXR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlOworCisJICAgICAgICAgICAgICAgIGlmIChyZWNvbm5lY3RPaykgCisJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuSW50ZXJydXB0ZWQgIT0gbnVsbCkKKwkgICAgICAgICAgICAgICAgICAgIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkludGVycnVwdGVkKHRyYW5zcG9ydCk7CisJICAgICAgICAgICAgICAgICAgICB9CisKKwkgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQuUmVtb3ZlKGZhaWxlZENvbm5lY3RUcmFuc3BvcnRVUkkpOworCSAgICAgICAgICAgICAgICAgICAgcmVjb25uZWN0VGFzay5XYWtldXAoKTsKKwkgICAgICAgICAgICAgICAgfQorCQkJCQllbHNlIGlmICghZGlzcG9zZWQpIAorCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICBQcm9wYWdhdGVGYWlsdXJlVG9FeGNlcHRpb25MaXN0ZW5lcihlKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisJICAgIHByaXZhdGUgYm9vbCBDYW5SZWNvbm5lY3QoKSAKKwkJeworCSAgICAgICAgcmV0dXJuIHN0YXJ0ZWQgJiYgMCAhPSBDYWxjdWxhdGVSZWNvbm5lY3RBdHRlbXB0TGltaXQoKTsKKwkgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIFN0YXJ0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihzdGFydGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGYWlsb3ZlclRyYW5zcG9ydCBBbHJlYWR5IFN0YXJ0ZWQuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkZhaWxvdmVyVHJhbnNwb3J0IFN0YXJ0ZWQuIik7CisgICAgICAgICAgICAgICAgc3RhcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgc3RhdGVUcmFja2VyLk1heENhY2hlU2l6ZSA9IE1heENhY2hlU2l6ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZVRyYWNrZXIuVHJhY2tNZXNzYWdlcyA9IFRyYWNrTWVzc2FnZXM7CisJCQkJc3RhdGVUcmFja2VyLlRyYWNrVHJhbnNhY3Rpb25Qcm9kdWNlcnMgPSBUcmFja1RyYW5zYWN0aW9uUHJvZHVjZXJzOworICAgICAgICAgICAgICAgIGlmKENvbm5lY3RlZFRyYW5zcG9ydCAhPSBudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGYWlsb3ZlclRyYW5zcG9ydCBhbHJlYWR5IGNvbm5lY3RlZCwgc3RhcnQgaXMgcmVzdG9yaW5nLiIpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZVRyYWNrZXIuRG9SZXN0b3JlKENvbm5lY3RlZFRyYW5zcG9ydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmFpbG92ZXJUcmFuc3BvcnQgbm90IGNvbm5lY3RlZCwgc3RhcnQgaXMgcmVjb25uZWN0aW5nLiIpOworICAgICAgICAgICAgICAgICAgICBSZWNvbm5lY3QoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2aXJ0dWFsIHZvaWQgU3RvcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0VG9TdG9wID0gbnVsbDsKKwkgICAgICAgIExpc3Q8SVRyYW5zcG9ydD4gYmFja3Vwc1RvU3RvcCA9IG5ldyBMaXN0PElUcmFuc3BvcnQ+KGJhY2t1cHMuQ291bnQpOworCisJCQl0cnkgCisJCQl7CisJICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkKKwkgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgIGlmKCFzdGFydGVkKQorCSAgICAgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkZhaWxvdmVyVHJhbnNwb3J0IEFscmVhZHkgU3RvcHBlZC4iKTsKKwkgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwkgICAgICAgICAgICAgICAgfQorCisJICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmFpbG92ZXJUcmFuc3BvcnQgU3RvcHBlZC4iKTsKKwkgICAgICAgICAgICAgICAgc3RhcnRlZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBkaXNwb3NlZCA9IHRydWU7CisJICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBpZihDb25uZWN0ZWRUcmFuc3BvcnQgIT0gbnVsbCkKKwkgICAgICAgICAgICAgICAgeworCSAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0VG9TdG9wID0gY29ubmVjdGVkVHJhbnNwb3J0LkdldEFuZFNldChudWxsKTsKKwkgICAgICAgICAgICAgICAgfQorCisJICAgICAgICAgICAgfQorCQkJCWxvY2soc2xlZXBNdXRleCkKKwkJCQl7CisJCQkJCU1vbml0b3IuUHVsc2VBbGwoc2xlZXBNdXRleCk7CisJCQkJfQorCQkJfQorCQkJZmluYWxseQorCQkJeworICAgICAgICAgICAgCWlmKHJlY29ubmVjdFRhc2sgIT0gbnVsbCkKKyAgICAgICAgICAgIAl7CisJICAgICAgICAgICAgICAgIHJlY29ubmVjdFRhc2suU2h1dGRvd24oKTsKKyAgICAgICAgICAgIAl9CisJCQl9CisKKwkgICAgICAgIGxvY2soYmFja3VwTXV0ZXgpIAorCQkJeworCSAgICAgICAgICAgIGZvcmVhY2ggKEJhY2t1cFRyYW5zcG9ydCBiYWNrdXAgaW4gYmFja3VwcykgCisJCQkJeworCSAgICAgICAgICAgICAgICBiYWNrdXAuRGlzcG9zZWQgPSB0cnVlOworCSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IGJhY2t1cC5UcmFuc3BvcnQ7CisJICAgICAgICAgICAgICAgIGlmICh0cmFuc3BvcnQgIT0gbnVsbCkgCisJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5Db21tYW5kID0gRGlzcG9zZWRPbkNvbW1hbmQ7CisJCQkJCQl0cmFuc3BvcnQuRXhjZXB0aW9uID0gRGlzcG9zZWRPbkV4Y2VwdGlvbjsKKwkgICAgICAgICAgICAgICAgICAgIGJhY2t1cHNUb1N0b3AuQWRkKHRyYW5zcG9ydCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgYmFja3Vwcy5DbGVhcigpOworCSAgICAgICAgfQorCSAgICAgICAgCisJCQlmb3JlYWNoIChJVHJhbnNwb3J0IHRyYW5zcG9ydCBpbiBiYWNrdXBzVG9TdG9wKSAKKwkJCXsKKwkgICAgICAgICAgICB0cnkgCisJCQkJeworCSAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKSAKKwkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJTdG9wcGVkIGJhY2t1cDogIiArIHRyYW5zcG9ydCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgRGlzcG9zZVRyYW5zcG9ydCh0cmFuc3BvcnQpOworCSAgICAgICAgICAgIH0gCisJCQkJY2F0Y2ggKEV4Y2VwdGlvbikgCisJCQkJeworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKworCQkJaWYodHJhbnNwb3J0VG9TdG9wICE9IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0VG9TdG9wLlN0b3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBGdXR1cmVSZXNwb25zZSBBc3luY1JlcXVlc3QoQ29tbWFuZCBjb21tYW5kKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oIkZhaWxvdmVyVHJhbnNwb3J0IGRvZXMgbm90IGltcGxlbWVudCBBc3luY1JlcXVlc3QoQ29tbWFuZCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBSZXNwb25zZSBSZXF1ZXN0KENvbW1hbmQgY29tbWFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCJGYWlsb3ZlclRyYW5zcG9ydCBkb2VzIG5vdCBpbXBsZW1lbnQgUmVxdWVzdChDb21tYW5kKSIpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlc3BvbnNlIFJlcXVlc3QoQ29tbWFuZCBjb21tYW5kLCBUaW1lU3BhbiB0cykKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCJGYWlsb3ZlclRyYW5zcG9ydCBkb2VzIG5vdCBpbXBsZW1lbnQgUmVxdWVzdChDb21tYW5kLCBUaW1lU3BhbikiKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIE9uQ29tbWFuZChJVHJhbnNwb3J0IHNlbmRlciwgQ29tbWFuZCBjb21tYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZihjb21tYW5kICE9IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc1Jlc3BvbnNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZCByZXF1ZXN0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgbG9jaygoKElDb2xsZWN0aW9uKSByZXF1ZXN0TWFwKS5TeW5jUm9vdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHYgPSAoKFJlc3BvbnNlKSBjb21tYW5kKS5Db3JyZWxhdGlvbklkOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVxdWVzdE1hcC5UcnlHZXRWYWx1ZSh2LCBvdXQgcmVxdWVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwLlJlbW92ZSh2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgVHJhY2tlZCB0cmFja2VkID0gcmVxdWVzdCBhcyBUcmFja2VkOworICAgICAgICAgICAgICAgICAgICBpZih0cmFja2VkICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrZWQuT25SZXNwb25zZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoIWluaXRpYWxpemVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKGNvbW1hbmQuSXNDb25uZWN0aW9uQ29udHJvbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuSGFuZGxlQ29ubmVjdGlvbkNvbnRyb2woY29tbWFuZCBhcyBDb25uZWN0aW9uQ29udHJvbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLkNvbW1hbmQoc2VuZGVyLCBjb21tYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIE9uZXdheShDb21tYW5kIGNvbW1hbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbiBlcnJvciA9IG51bGw7CisKKyAgICAgICAgICAgIGxvY2socmVjb25uZWN0TXV0ZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoY29tbWFuZCAhPSBudWxsICYmIENvbm5lY3RlZFRyYW5zcG9ydCA9PSBudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc1NodXRkb3duSW5mbykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcHBpbmcgc2VuZCBvZiBTaHV0ZG93bkluZm8gY29tbWFuZCB3aGVuIG5vdCBjb25uZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjb21tYW5kLklzUmVtb3ZlSW5mbyB8fCBjb21tYW5kLklzTWVzc2FnZUFjaykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVUcmFja2VyLlRyYWNrKGNvbW1hbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltdWxhdGUgcmVzcG9uc2UgdG8gUmVtb3ZlSW5mbyBjb21tYW5kIG9yIGEgTWVzc2FnZUFjaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQgd291bGQgYmUgc3RhbGUgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbW1hbmQuUmVzcG9uc2VSZXF1aXJlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkNvbW1hbmQodGhpcywgbmV3IFJlc3BvbnNlKCkgeyBDb3JyZWxhdGlvbklkID0gY29tbWFuZC5Db21tYW5kSWQgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJZWxzZSBpZihjb21tYW5kLklzTWVzc2FnZVB1bGwpIAorCQkJCQl7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZSByZXNwb25zZSB0byBNZXNzYWdlUHVsbCBpZiB0aW1lZCBhcyB3ZSBjYW4ndCBob25vciB0aGF0IG5vdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQdWxsIHB1bGxSZXF1ZXN0ID0gY29tbWFuZCBhcyBNZXNzYWdlUHVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsUmVxdWVzdC5UaW1lb3V0ICE9IDApIAorCQkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VEaXNwYXRjaCBkaXNwYXRjaCA9IG5ldyBNZXNzYWdlRGlzcGF0Y2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5Db25zdW1lcklkID0gcHVsbFJlcXVlc3QuQ29uc3VtZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5EZXN0aW5hdGlvbiA9IHB1bGxSZXF1ZXN0LkRlc3RpbmF0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uQ29tbWFuZCh0aGlzLCBkaXNwYXRjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBLZWVwIHRyeWluZyB1bnRpbCB0aGUgbWVzc2FnZSBpcyBzZW50LgorICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7ICFkaXNwb3NlZDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFueSBBY2sgdGhhdCB3YXMgYmVpbmcgc2VudCB3aGVuIHRoZSBjb25uZWN0aW9uIGRyb3BwZWQgaXMgbm93CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFsZSBzbyB3ZSBkb24ndCBzZW5kIGl0IGhlcmUgYXMgaXQgd291bGQgY2F1c2UgYW4gdW5tYXRjaGVkIGFjaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gdGhlIGJyb2tlciBzaWRlIGFuZCBwcm9iYWJseSBwcmV2ZW50IGEgY29uc3VtZXIgZnJvbSBnZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbnkgbmV3IG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc01lc3NhZ2VBY2sgJiYgaSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJJbmZsaWdodCBNZXNzYWdlQWNrIGJlaW5nIGRyb3BwZWQgYXMgc3RhbGUuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5SZXNwb25zZVJlcXVpcmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25Db21tYW5kKHRoaXMsIG5ldyBSZXNwb25zZSgpIHsgQ29ycmVsYXRpb25JZCA9IGNvbW1hbmQuQ29tbWFuZElkIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRyYW5zcG9ydCB0byBiZSBjb25uZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IENvbm5lY3RlZFRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIHN0YXJ0ID0gRGF0ZVRpbWUuTm93OworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aW1lZG91dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgVGltZVNwYW4gdGltZXdhaXQgPSBUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKC0xKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUodHJhbnNwb3J0ID09IG51bGwgJiYgIWRpc3Bvc2VkICYmIGNvbm5lY3Rpb25GYWlsdXJlID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJXYWl0aW5nIGZvciB0cmFuc3BvcnQgdG8gcmVjb25uZWN0LiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVsYXBzZWQgPSAoaW50KSAoRGF0ZVRpbWUuTm93IC0gc3RhcnQpLlRvdGFsTWlsbGlzZWNvbmRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudGltZW91dCA+IDAgJiYgZWxhcHNlZCA+IHRoaXMudGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkb3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJGYWlsb3ZlclRyYW5zcG9ydC5vbmV3YXkgLSB0aW1lZCBvdXQgYWZ0ZXIgezB9IG1pbGxzIiwgZWxhcHNlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudGltZW91dCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHRpbWVvdXQgZm9yIHdhaXRpbmcgdG8gYmUgYXQgbW9zdCAxMDBtcyBwYXN0IHRoZSBtYXhpbXVtIHRpbWVvdXQgbGVuZ3RoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nVGltZSA9ICh0aGlzLnRpbWVvdXQgLSBlbGFwc2VkKSArIDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXdhaXQgPSBUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKHJlbWFpbmluZ1RpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbGVhc2Ugc28gdGhhdCB0aGUgcmVjb25uZWN0IHRhc2sgY2FuIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3Igc29tZXRoaW5nLiAgVGhlIG11dGV4IHdpbGwgYmUgcHVsc2VkIGlmIHdlIGNvbm5lY3QsIG9yIGFyZSBzaHV0IGRvd24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuV2FpdChyZWNvbm5lY3RNdXRleCwgdGltZXdhaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChUaHJlYWRJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJJbnRlcnJ1cHRlZDogezB9IiwgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBDb25uZWN0ZWRUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5zcG9ydCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZpb3VzIGxvb3AgbWF5IGhhdmUgZXhpdGVkIGR1ZSB0byB1c2UgYmVpbmcgZGlzcG9zZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGlzcG9zZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBJT0V4Y2VwdGlvbigiVHJhbnNwb3J0IGRpc3Bvc2VkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGNvbm5lY3Rpb25GYWlsdXJlICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbm5lY3Rpb25GYWlsdXJlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHRpbWVkb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSU9FeGNlcHRpb24oIkZhaWxvdmVyIG9uZXdheSB0aW1lZCBvdXQgYWZ0ZXIgIiArIHRpbWVvdXQgKyAiIG1pbGxpc2Vjb25kcy4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSU9FeGNlcHRpb24oIlVuZXhwZWN0ZWQgZmFpbHVyZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0IHdhcyBhIHJlcXVlc3QgYW5kIGl0IHdhcyBub3QgYmVpbmcgdHJhY2tlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlIHRyYWNrZXIsIHRoZW4gaG9sZCBpdCBpbiB0aGUgcmVxdWVzdE1hcCBzbworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBjYW4gcmVwbGF5IGl0IGxhdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2tlZCB0cmFja2VkID0gc3RhdGVUcmFja2VyLlRyYWNrKGNvbW1hbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygoKElDb2xsZWN0aW9uKSByZXF1ZXN0TWFwKS5TeW5jUm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFja2VkICE9IG51bGwgJiYgdHJhY2tlZC5XYWl0aW5nRm9yUmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwLkFkZChjb21tYW5kLkNvbW1hbmRJZCwgdHJhY2tlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodHJhY2tlZCA9PSBudWxsICYmIGNvbW1hbmQuUmVzcG9uc2VSZXF1aXJlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXAuQWRkKGNvbW1hbmQuQ29tbWFuZElkLCBjb21tYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuT25ld2F5KGNvbW1hbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlVHJhY2tlci5UcmFja0JhY2soY29tbWFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY29tbWFuZCB3YXMgbm90IHRyYWNrZWQuLiB3ZSB3aWxsIHJldHJ5IGluIHRoaXMgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIG5lZWQgdG8gdHJpZ2dlciBhIHJlY29ubmVjdCBiZWZvcmUgcmV0dXJuaW5nIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRyYW5zcG9ydCBpcyBmYWlsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrZWQgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgcmV0cnkgaW4gdGhpcyBtZXRob2QuLiB0YWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dCBvZiB0aGUgcmVxdWVzdCBtYXAgc28gdGhhdCBpdCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VudCAyIHRpbWVzIG9uIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbW1hbmQuUmVzcG9uc2VSZXF1aXJlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygoKElDb2xsZWN0aW9uKSByZXF1ZXN0TWFwKS5TeW5jUm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwLlJlbW92ZShjb21tYW5kLkNvbW1hbmRJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXRocm93IHRoZSBleGNlcHRpb24gc28gaXQgd2lsbCBoYW5kbGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvdXRlciBjYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKwkJCQkJCQkJaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkKKwkJCQkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJVHJhY2VyLkRlYnVnRm9ybWF0KCJTZW5kIE9uZXdheSBhdHRlbXB0OiB7MH0gZmFpbGVkOiBNZXNzYWdlID0gezF9IiwgCisJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgaSwgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiRmFpbGVkIE1lc3NhZ2UgV2FzOiB7MH0iLCBjb21tYW5kKTsKKwkJCQkJCQkJfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVUcmFuc3BvcnRGYWlsdXJlKGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgICAgICAgICB7CisJCQkJCQlpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQorCQkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiU2VuZCBPbmV3YXkgYXR0ZW1wdDogezB9IGZhaWxlZDogTWVzc2FnZSA9IHsxfSIsIAorCQkJCQkJCSAgICAgICAgICAgICAgICAgICBpLCBlLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiRmFpbGVkIE1lc3NhZ2UgV2FzOiB7MH0iLCBjb21tYW5kKTsKKwkJCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZVRyYW5zcG9ydEZhaWx1cmUoZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCFkaXNwb3NlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihlcnJvciAhPSBudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgQWRkKGJvb2wgcmViYWxhbmNlLCBVcmlbXSB1cmlzVG9BZGQpCisgICAgICAgIHsKKwkJCWJvb2wgbmV3VXJpID0gZmFsc2U7CisgICAgICAgICAgICBsb2NrKHVyaXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yZWFjaCAoVXJpIHVyaSBpbiB1cmlzVG9BZGQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZighQ29udGFpbnModXJpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdXJpcy5BZGQodXJpKTsKKwkJCQkJCW5ld1VyaSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKwkJCWlmIChuZXdVcmkpCisJCQl7CisgICAgICAgICAgICAJUmVjb25uZWN0KHJlYmFsYW5jZSk7CisJCQl9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBBZGQoYm9vbCByZWJhbGFuY2UsIFN0cmluZyB1KQorICAgICAgICB7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBZGQocmViYWxhbmNlLCBuZXcgVXJpW10geyBuZXcgVXJpKHUpIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVHJhY2VyLkVycm9yRm9ybWF0KCJGYWlsZWQgdG8gcGFyc2UgVVJJICd7MH0nOiB7MX0iLCB1LCBlLk1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgUmVtb3ZlKGJvb2wgcmViYWxhbmNlLCBVcmlbXSB1KQorICAgICAgICB7CisgICAgICAgICAgICBsb2NrKHVyaXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHUuTGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1cmlzLlJlbW92ZSh1W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlY29ubmVjdChyZWJhbGFuY2UpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgUmVtb3ZlKGJvb2wgcmViYWxhbmNlLCBTdHJpbmcgdSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVtb3ZlKHJlYmFsYW5jZSwgbmV3IFVyaVtdIHsgbmV3IFVyaSh1KSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRyYWNlci5FcnJvckZvcm1hdCgiRmFpbGVkIHRvIHBhcnNlIFVSSSAnezB9JzogezF9IiwgdSwgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIFJlY29ubmVjdChVcmkgdXJpKQorICAgICAgICB7CisgICAgICAgICAgICBBZGQodHJ1ZSwgbmV3IFVyaVtdIHsgdXJpIH0pOworICAgICAgICB9CisKKwkgICAgcHVibGljIHZvaWQgUmVjb25uZWN0KGJvb2wgcmViYWxhbmNlKQorCQl7CisJCQlsb2NrKHJlY29ubmVjdE11dGV4KSAKKwkJCXsKKwkgICAgICAgICAgICBpZihzdGFydGVkKSAKKwkJCQl7CisJICAgICAgICAgICAgICAgIGlmIChyZWJhbGFuY2UpIAorCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICBkb1JlYmFsYW5jZSA9IHRydWU7CisJICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJXYWtpbmcgdXAgcmVjb25uZWN0IHRhc2siKTsKKwkgICAgICAgICAgICAgICAgdHJ5IAorCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICByZWNvbm5lY3RUYXNrLldha2V1cCgpOworCSAgICAgICAgICAgICAgICB9IAorCQkJCQljYXRjaCAoVGhyZWFkSW50ZXJydXB0ZWRFeGNlcHRpb24pIAorCQkJCQl7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9IAorCQkJCWVsc2UgCisJCQkJeworICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlJlY29ubmVjdCB3YXMgdHJpZ2dlcmVkIGJ1dCB0cmFuc3BvcnQgaXMgbm90IHN0YXJ0ZWQgeWV0LiBXYWl0IGZvciBzdGFydCB0byBjb25uZWN0IHRoZSB0cmFuc3BvcnQuIik7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBMaXN0PFVyaT4gQ29ubmVjdExpc3QKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0CisgICAgICAgICAgICB7CisJCQkJaWYgKHVwZGF0ZWQuQ291bnQgIT0gMCkKKwkJCQl7CisJCQkJCXJldHVybiB1cGRhdGVkOworCQkJCX0KKworICAgICAgICAgICAgICAgIExpc3Q8VXJpPiBsID0gbmV3IExpc3Q8VXJpPih1cmlzKTsKKyAgICAgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZihmYWlsZWRDb25uZWN0VHJhbnNwb3J0VVJJICE9IG51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gbC5SZW1vdmUoZmFpbGVkQ29ubmVjdFRyYW5zcG9ydFVSSSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoUmFuZG9taXplKQorICAgICAgICAgICAgICAgIHsKKwkJCQkJU2h1ZmZsZShsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZihyZW1vdmVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbC5BZGQoZmFpbGVkQ29ubmVjdFRyYW5zcG9ydFVSSSk7CisgICAgICAgICAgICAgICAgfQorCisJCSAgICAgICAgaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkKKwkJCQl7CisJCQkJCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiVXJpIGNvbm5lY3Rpb24gbGlzdDogezB9IGZyb206IHsxfSIsIAorCQkJCQkgICAgICAgICAgICAgICAgICAgUHJpbnRhYmxlVXJpTGlzdChsKSwgUHJpbnRhYmxlVXJpTGlzdCh1cmlzKSk7CisJCSAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBSZXN0b3JlVHJhbnNwb3J0KElUcmFuc3BvcnQgdCkKKyAgICAgICAgeworICAgICAgICAgICAgVHJhY2VyLkluZm8oIlJlc3RvcmluZyBwcmV2aW91cyB0cmFuc3BvcnQgY29ubmVjdGlvbi4iKTsKKyAgICAgICAgICAgIHQuU3RhcnQoKTsKKworICAgICAgICAgICAgLy8gU2VuZCBpbmZvcm1hdGlvbiB0byB0aGUgYnJva2VyIC0gaW5mb3JtaW5nIGl0IHdlIGFyZSBhIGZhdWx0IHRvbGVyYW50IGNsaWVudAorICAgICAgICAgICAgdC5PbmV3YXkobmV3IENvbm5lY3Rpb25Db250cm9sKCkgeyBGYXVsdFRvbGVyYW50ID0gdHJ1ZSB9KTsKKyAgICAgICAgICAgIHN0YXRlVHJhY2tlci5Eb1Jlc3RvcmUodCk7CisKKyAgICAgICAgICAgIFRyYWNlci5JbmZvKCJTZW5kaW5nIHF1ZXVlZCBjb21tYW5kcy4uLiIpOworICAgICAgICAgICAgRGljdGlvbmFyeTxpbnQsIENvbW1hbmQ+IHRtcE1hcCA9IG51bGw7CisgICAgICAgICAgICBsb2NrKCgoSUNvbGxlY3Rpb24pIHJlcXVlc3RNYXApLlN5bmNSb290KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRtcE1hcCA9IG5ldyBEaWN0aW9uYXJ5PGludCwgQ29tbWFuZD4ocmVxdWVzdE1hcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcmVhY2goQ29tbWFuZCBjb21tYW5kIGluIHRtcE1hcC5WYWx1ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoY29tbWFuZC5Jc01lc3NhZ2VBY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlN0b3JlZCBNZXNzYWdlQWNrIGJlaW5nIGRyb3BwZWQgYXMgc3RhbGUuIik7CisgICAgICAgICAgICAgICAgICAgIE9uQ29tbWFuZCh0aGlzLCBuZXcgUmVzcG9uc2UoKSB7IENvcnJlbGF0aW9uSWQgPSBjb21tYW5kLkNvbW1hbmRJZCB9KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdC5PbmV3YXkoY29tbWFuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVXJpIFJlbW90ZUFkZHJlc3MKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoQ29ubmVjdGVkVHJhbnNwb3J0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29ubmVjdGVkVHJhbnNwb3J0LlJlbW90ZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIE9iamVjdCBOYXJyb3coVHlwZSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZih0aGlzLkdldFR5cGUoKS5FcXVhbHModHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKENvbm5lY3RlZFRyYW5zcG9ydCAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBDb25uZWN0ZWRUcmFuc3BvcnQuTmFycm93KHR5cGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgYm9vbCBEb0Nvbm5lY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBsb2NrKHJlY29ubmVjdE11dGV4KQorICAgICAgICAgICAgeworCQkJCWlmIChkaXNwb3NlZCB8fCBjb25uZWN0aW9uRmFpbHVyZSAhPSBudWxsKQorCQkJCXsKKwkJCQkJTW9uaXRvci5QdWxzZUFsbChyZWNvbm5lY3RNdXRleCk7CisJCQkJfQorCisgICAgICAgICAgICAJaWYgKChjb25uZWN0ZWRUcmFuc3BvcnQuVmFsdWUgIT0gbnVsbCAmJiAhZG9SZWJhbGFuY2UgJiYgIXByaW9yaXR5QmFja3VwQXZhaWxhYmxlKSB8fCBkaXNwb3NlZCB8fCBjb25uZWN0aW9uRmFpbHVyZSAhPSBudWxsKQorCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaXN0PFVyaT4gY29ubmVjdExpc3QgPSBDb25uZWN0TGlzdDsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29ubmVjdExpc3QuQ291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRmFpbHVyZSA9IG5ldyBOTVNDb25uZWN0aW9uRXhjZXB0aW9uKCJObyBVUklzIGF2YWlsYWJsZSBmb3IgY29ubmVjdGlvbi4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmIChkb1JlYmFsYW5jZSkKKwkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGVkVG9Qcmlvcml0eSB8fCBDb21wYXJlVXJpcyhjb25uZWN0TGlzdFswXSwgY29ubmVjdGVkVHJhbnNwb3J0VVJJKSkKKwkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgY29ubmVjdGVkIHRvIGZpcnN0IGluIHRoZSBsaXN0LCBubyBuZWVkIHRvIHJlYmFsYW5jZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1JlYmFsYW5jZSA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgfSAKKwkJCQkJCQllbHNlCisJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQorCQkJCQkJCQl7CisJCQkJCQkJCQlUcmFjZXIuRGVidWdGb3JtYXQoIkRvaW5nIHJlYmFsYW5jZSBmcm9tOiB7MH0gdG8gezF9IiwgCisJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkVHJhbnNwb3J0VVJJLCBQcmludGFibGVVcmlMaXN0KGNvbm5lY3RMaXN0KSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IAorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IGN1cnJlbnQgPSB0aGlzLmNvbm5lY3RlZFRyYW5zcG9ydC5HZXRBbmRTZXQobnVsbCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsKSAKKwkJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlVHJhbnNwb3J0KGN1cnJlbnQpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAorCQkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIAorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiBzdG9wcGluZyBleGlzdGluZyAiICsgCisJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQgZm9yIHJlYmFsYW5jZSB7MH0iLCBlLk1lc3NhZ2UpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCisJICAgICAgICAgICAgICAgICAgICAgICAgZG9SZWJhbGFuY2UgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKworCSAgICAgICAgICAgICAgICAgICAgUmVzZXRSZWNvbm5lY3REZWxheSgpOworCisJICAgICAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IG51bGw7CisJICAgICAgICAgICAgICAgICAgICBVcmkgdXJpID0gbnVsbDsKKworCSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGJhY2t1cCBhbHJlYWR5IHdhaXRpbmcgbGV0cyB0cnkgaXQuCisJICAgICAgICAgICAgICAgICAgICBsb2NrKGJhY2t1cE11dGV4KSAKKwkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByaW9yaXR5QmFja3VwIHx8IGJhY2t1cCkgJiYgYmFja3Vwcy5Db3VudCA+IDApCisJCQkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlMaXN0PEJhY2t1cFRyYW5zcG9ydD4gbCA9IG5ldyBMaXN0PEJhY2t1cFRyYW5zcG9ydD4oYmFja3Vwcyk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5kb21pemUpIAorCQkJCQkJCQl7CisJCQkJCQkJCQlTaHVmZmxlKGwpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJCQkJCUJhY2t1cFRyYW5zcG9ydCBidCA9IGxbMF07CisJCQkJCQkJCWwuUmVtb3ZlQXQoMCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cHMuUmVtb3ZlKGJ0KTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gYnQuVHJhbnNwb3J0OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBidC5Vcmk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmlvcml0eUJhY2t1cCAmJiBwcmlvcml0eUJhY2t1cEF2YWlsYWJsZSkgCisJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgb2xkID0gdGhpcy5jb25uZWN0ZWRUcmFuc3BvcnQuR2V0QW5kU2V0KG51bGwpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZCAhPSBudWxsKSAKKwkJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlVHJhbnNwb3J0KG9sZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eUJhY2t1cEF2YWlsYWJsZSA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgfQorCisJICAgICAgICAgICAgICAgICAgICAvLyBTbGVlcCBmb3IgdGhlIHJlY29ubmVjdERlbGF5IGlmIHRoZXJlJ3Mgbm8gYmFja3VwIGFuZCB3ZSBhcmVuJ3QgdHJ5aW5nCisJICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGZpcnN0IHRpbWUsIG9yIHdlIHdlcmUgZGlzcG9zZWQgZm9yIHNvbWUgcmVhc29uLgorCSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcG9ydCA9PSBudWxsICYmICFmaXJzdENvbm5lY3Rpb24gJiYgKHJlY29ubmVjdERlbGF5ID4gMCkgJiYgIWRpc3Bvc2VkKSAKKwkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKHNsZWVwTXV0ZXgpIAorCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkKKwkJCQkJCQkJeworCQkJCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJXYWl0aW5nIHswfSBtcyBiZWZvcmUgYXR0ZW1wdGluZyBjb25uZWN0aW9uLiIsIHJlY29ubmVjdERlbGF5KTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgCisJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuV2FpdChzbGVlcE11dGV4LCByZWNvbm5lY3REZWxheSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJCQkJY2F0Y2ggKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uKQorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB9CisKKwkJCQkJCUlFbnVtZXJhdG9yPFVyaT4gaXRlciA9IGNvbm5lY3RMaXN0LkdldEVudW1lcmF0b3IoKTsKKwkgICAgICAgICAgICAgICAgICAgIHdoaWxlICgodHJhbnNwb3J0ICE9IG51bGwgfHwgaXRlci5Nb3ZlTmV4dCgpKSAmJiAoY29ubmVjdGVkVHJhbnNwb3J0LlZhbHVlID09IG51bGwgJiYgIWRpc3Bvc2VkKSkKKwkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0cnkgCisJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQorCQkJCQkJCQl7CisJCQkJCQkJCQlUcmFjZXIuRGVidWdGb3JtYXQoIkF0dGVtcHRpbmcgezB9dGggY29ubmVjdCB0bzogezF9IiwKKwkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICBjb25uZWN0RmFpbHVyZXMsIHVyaSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworCQkJCQkJCQkvLyBXZSBjb3VsZCBiZSBzdGFydGluZyB3aXRoIGEgYmFja3VwIGFuZCBpZiBzbyB3ZSB3YWl0IHRvIGdyYWIgYQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVUkkgZnJvbSB0aGUgcG9vbCB1bnRpbCBuZXh0IHRpbWUgYXJvdW5kLgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNwb3J0ID09IG51bGwpIAorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBpdGVyLkN1cnJlbnQ7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBUcmFuc3BvcnRGYWN0b3J5LkNvbXBvc2l0ZUNvbm5lY3QodXJpKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5Db21tYW5kID0gT25Db21tYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuRXhjZXB0aW9uID0gT25FeGNlcHRpb247CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5TdGFydCgpOworCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydGVkICYmICFmaXJzdENvbm5lY3Rpb24pIAorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN0b3JlVHJhbnNwb3J0KHRyYW5zcG9ydCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKQorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkNvbm5lY3Rpb24gZXN0YWJsaXNoZWQiKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbm5lY3REZWxheSA9IGluaXRpYWxSZWNvbm5lY3REZWxheTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkVHJhbnNwb3J0VVJJID0gdXJpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWRUcmFuc3BvcnQuVmFsdWUgPSB0cmFuc3BvcnQ7CisJCQkJCQkJCWNvbm5lY3RlZFRvUHJpb3JpdHkgPSBJc1ByaW9yaXR5KGNvbm5lY3RlZFRyYW5zcG9ydFVSSSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuUHVsc2VBbGwocmVjb25uZWN0TXV0ZXgpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0RmFpbHVyZXMgPSAwOworCisJCQkJCQkJCS8vIFRyeSB0byB3YWl0IGxvbmcgZW5vdWdoIGZvciBjbGllbnQgdG8gaW5pdCB0aGUgZXZlbnQgY2FsbGJhY2tzLgorCQkJCQkJCQlsaXN0ZW5lckxhdGNoLmF3YWl0KFRpbWVTcGFuLkZyb21TZWNvbmRzKDIpKTsKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVzdW1lZCAhPSBudWxsKSAKKwkJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdW1lZCh0cmFuc3BvcnQpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJCQkJCWVsc2UgCisJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpIAorCQkJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygidHJhbnNwb3J0IHJlc3VtZWQgYnkgdHJhbnNwb3J0IGxpc3RlbmVyIG5vdCBzZXQiKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbm5lY3Rpb24pIAorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24gPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5JbmZvKCJTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvICIgKyB1cmkpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJCQkJCWVsc2UgCisJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5JbmZvKCJTdWNjZXNzZnVsbHkgcmVjb25uZWN0ZWQgdG8gIiArIHVyaSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgCisJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkgCisJCQkJCQkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiQ29ubmVjdCBmYWlsIHRvOiAiICsgdXJpICsgIiwgcmVhc29uOiAiICsgZS5NZXNzYWdlKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNwb3J0ICE9IG51bGwpIAorCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgCisJCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LlN0b3AoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBudWxsOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlZSkgCisJCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkgCisJCQkJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlN0b3Agb2YgZmFpbGVkIHRyYW5zcG9ydDogIiArIHRyYW5zcG9ydCArCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCB3aXRoIHJlYXNvbjogIiArIGVlLk1lc3NhZ2UpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJfQorCQkJCX0KKyAgICAgICAgICAgIAorCSAgICAgICAgICAgIGludCByZWNvbm5lY3RMaW1pdCA9IENhbGN1bGF0ZVJlY29ubmVjdEF0dGVtcHRMaW1pdCgpOworCisJICAgICAgICAgICAgY29ubmVjdEZhaWx1cmVzKys7CisJICAgICAgICAgICAgaWYgKHJlY29ubmVjdExpbWl0ICE9IElORklOSVRFICYmIGNvbm5lY3RGYWlsdXJlcyA+PSByZWNvbm5lY3RMaW1pdCkgCisJCQkJeworCQkJCQlUcmFjZXIuRXJyb3JGb3JtYXQoIkZhaWxlZCB0byBjb25uZWN0IHRvIHswfSBhZnRlcjogezF9IGF0dGVtcHQocykiLCAKKwkJCQkJICAgICAgICAgICAgICAgICAgIFByaW50YWJsZVVyaUxpc3QodXJpcyksIGNvbm5lY3RGYWlsdXJlcyk7CisJICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25GYWlsdXJlID0gZmFpbHVyZTsKKworCSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgb24gaW5pdGlhbCBzdGFydHVwLCB0aGF0IHRoZSB0cmFuc3BvcnRMaXN0ZW5lciBoYXMgYmVlbgorCSAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCBmb3IgdGhpcyBpbnN0YW5jZS4KKwkJCQkJbGlzdGVuZXJMYXRjaC5hd2FpdChUaW1lU3Bhbi5Gcm9tU2Vjb25kcygyKSk7CisJICAgICAgICAgICAgICAgIFByb3BhZ2F0ZUZhaWx1cmVUb0V4Y2VwdGlvbkxpc3RlbmVyKGNvbm5lY3Rpb25GYWlsdXJlKTsKKwkgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKworCSAgICAgICAgaWYoIWRpc3Bvc2VkKQorCQkJeworCSAgICAgICAgICAgIERvRGVsYXkoKTsKKwkgICAgICAgIH0KKworCSAgICAgICAgcmV0dXJuICFkaXNwb3NlZDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgYm9vbCBCdWlsZEJhY2t1cHMoKQorICAgICAgICB7CisgICAgICAgICAgICBsb2NrKGJhY2t1cE11dGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgCWlmICghZGlzcG9zZWQgJiYgKGJhY2t1cCB8fCBwcmlvcml0eUJhY2t1cCkgJiYgYmFja3Vwcy5Db3VudCA8IGJhY2t1cFBvb2xTaXplKSAKKwkJCQl7CisJICAgICAgICAgICAgICAgIExpc3Q8VXJpPiBiYWNrdXBMaXN0ID0gbmV3IExpc3Q8VXJpPihwcmlvcml0eUxpc3QpOworICAgICAgICAgICAgICAgICAgICBMaXN0PFVyaT4gY29ubmVjdExpc3QgPSBDb25uZWN0TGlzdDsKKwkgICAgICAgICAgICAgICAgZm9yZWFjaChVcmkgdXJpIGluIGNvbm5lY3RMaXN0KSAKKwkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgaWYgKCFiYWNrdXBMaXN0LkNvbnRhaW5zKHVyaSkpIAorCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cExpc3QuQWRkKHVyaSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yZWFjaChCYWNrdXBUcmFuc3BvcnQgYnQgaW4gYmFja3VwcykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoYnQuRGlzcG9zZWQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3Vwcy5SZW1vdmUoYnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZm9yZWFjaChVcmkgdXJpIGluIGNvbm5lY3RMaXN0KQorICAgICAgICAgICAgICAgICAgICB7CisJCQkJCQlpZiAoZGlzcG9zZWQpCisJCQkJCQl7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKENvbm5lY3RlZFRyYW5zcG9ydFVSSSAhPSBudWxsICYmICFDb25uZWN0ZWRUcmFuc3BvcnRVUkkuRXF1YWxzKHVyaSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrdXBUcmFuc3BvcnQgYnQgPSBuZXcgQmFja3VwVHJhbnNwb3J0KHRoaXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVyaSA9IHVyaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFiYWNrdXBzLkNvbnRhaW5zKGJ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0ID0gVHJhbnNwb3J0RmFjdG9yeS5Db21wb3NpdGVDb25uZWN0KHVyaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LkNvbW1hbmQgPSBidC5PbkNvbW1hbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LkV4Y2VwdGlvbiA9IGJ0Lk9uRXhjZXB0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5TdGFydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQuVHJhbnNwb3J0ID0gdDsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmlvcml0eUJhY2t1cCAmJiBJc1ByaW9yaXR5KHVyaSkpCisJCQkJCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eUJhY2t1cEF2YWlsYWJsZSA9IHRydWU7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXBzLkluc2VydCgwLCBidCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cHMuQWRkKGJ0KTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1Z0Zvcm1hdCgiRmFpbGVkIHRvIGJ1aWxkIGJhY2t1cDogezB9IiwgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJhY2t1cHMuQ291bnQgPT0gQmFja3VwUG9vbFNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIENvbm5lY3Rpb25JbnRlcnJ1cHRQcm9jZXNzaW5nQ29tcGxldGUoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9jayhyZWNvbm5lY3RNdXRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkNvbm5lY3Rpb24gSW50ZXJydXB0IFByb2Nlc3NpbmcgaXMgY29tcGxldGUgZm9yIENvbm5lY3Rpb25JZDogIiArIGNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgc3RhdGVUcmFja2VyLkNvbm5lY3Rpb25JbnRlcnJ1cHRQcm9jZXNzaW5nQ29tcGxldGUodGhpcywgY29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIFVwZGF0ZVVSSXMoYm9vbCByZWJhbGFuY2UsIFVyaVtdIHVwZGF0ZWRVUklzKQorICAgICAgICB7CisgICAgICAgICAgICBpZihJc1VwZGF0ZVVSSXNTdXBwb3J0ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRGljdGlvbmFyeTxVcmksIGJvb2w+IGNvcHkgPSBuZXcgRGljdGlvbmFyeTxVcmksIGJvb2w+KCk7CisgICAgICAgICAgICAgICAgZm9yZWFjaChVcmkgdXJpIGluIHVwZGF0ZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZih1cmkgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29weVt1cmldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwkKKwkJCQl1cGRhdGVkLkNsZWFyKCk7CisKKyAgICAgICAgICAgICAgICBpZih1cGRhdGVkVVJJcyAhPSBudWxsICYmIHVwZGF0ZWRVUklzLkxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEaWN0aW9uYXJ5PFVyaSwgYm9vbD4gdXJpU2V0ID0gbmV3IERpY3Rpb25hcnk8VXJpLCBib29sPigpOworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdXBkYXRlZFVSSXMuTGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVyaSB1cmkgPSB1cGRhdGVkVVJJc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVyaSAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVNldFt1cmldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goVXJpIHVyaSBpbiB1cmlTZXQuS2V5cykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXVwZGF0ZWQuQ29udGFpbnModXJpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKwkJCQkJCQl1cGRhdGVkLkFkZCh1cmkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKwkJCQkJaWYgKFRyYWNlci5Jc0RlYnVnRW5hYmxlZCkKKwkJCQkJeworCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJVcGRhdGVkIFVSSXMgbGlzdCB7MH0iLCBQcmludGFibGVVcmlMaXN0KHVwZGF0ZWQpKTsKKwkJCQkJfQorCisJICAgICAgICAgICAgICAgIGlmICghKGNvcHkuQ291bnQgPT0gMCAmJiB1cGRhdGVkLkNvdW50ID09IDApICYmICFjb3B5LktleXMuRXF1YWxzKHVwZGF0ZWQpKQorCQkJCQl7CisJICAgICAgICAgICAgICAgICAgICBCdWlsZEJhY2t1cHMoKTsKKwkgICAgICAgICAgICAgICAgICAgIGxvY2socmVjb25uZWN0TXV0ZXgpIAorCQkJCQkJeworCSAgICAgICAgICAgICAgICAgICAgICAgIFJlY29ubmVjdChyZWJhbGFuY2UpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgSGFuZGxlQ29ubmVjdGlvbkNvbnRyb2woQ29ubmVjdGlvbkNvbnRyb2wgY29udHJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nIHJlY29ubmVjdFN0ciA9IGNvbnRyb2wuUmVjb25uZWN0VG87CisKKyAgICAgICAgICAgIGlmKHJlY29ubmVjdFN0ciAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY29ubmVjdFN0ciA9IHJlY29ubmVjdFN0ci5UcmltKCk7CisgICAgICAgICAgICAgICAgaWYocmVjb25uZWN0U3RyLkxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVXJpIHVyaSA9IG5ldyBVcmkocmVjb25uZWN0U3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKElzUmVjb25uZWN0U3VwcG9ydGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5JbmZvKCJSZWNvbm5lY3RpbmcgdG86ICIgKyB1cmkuT3JpZ2luYWxTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29ubmVjdCh1cmkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRXJyb3JGb3JtYXQoIkZhaWxlZCB0byBoYW5kbGUgQ29ubmVjdGlvbkNvbnRyb2wgcmVjb25uZWN0IHRvIHswfTogezF9IiwgcmVjb25uZWN0U3RyLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHJvY2Vzc05ld1RyYW5zcG9ydHMoY29udHJvbC5SZWJhbGFuY2VDb25uZWN0aW9uLCBjb250cm9sLkNvbm5lY3RlZEJyb2tlcnMpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIFByb2Nlc3NOZXdUcmFuc3BvcnRzKGJvb2wgcmViYWxhbmNlLCBTdHJpbmcgbmV3VHJhbnNwb3J0cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYobmV3VHJhbnNwb3J0cyAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5ld1RyYW5zcG9ydHMgPSBuZXdUcmFuc3BvcnRzLlRyaW0oKTsKKworICAgICAgICAgICAgICAgIGlmKG5ld1RyYW5zcG9ydHMuTGVuZ3RoID4gMCAmJiBJc1VwZGF0ZVVSSXNTdXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaXN0PFVyaT4gbGlzdCA9IG5ldyBMaXN0PFVyaT4oKTsKKwkJCQkJUHJvY2Vzc0RlbGltaXRlZFVyaUxpc3QobmV3VHJhbnNwb3J0cywgbGlzdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYobGlzdC5Db3VudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVVUklzKHJlYmFsYW5jZSwgbGlzdC5Ub0FycmF5KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgdHJhbnNwb3J0IFVSSSdzIGZyb206ICIgKyBuZXdUcmFuc3BvcnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gICAgICAgIAorCQl9CisKKwkJcHJpdmF0ZSB2b2lkIFByb2Nlc3NEZWxpbWl0ZWRVcmlMaXN0KFN0cmluZyBwcmlvcml0eVVyaXMsIExpc3Q8VXJpPiB0YXJnZXQpCisJCXsKKyAgICAgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IHByaW9yaXR5VXJpcy5TcGxpdChuZXcgQ2hhcltdIHsgJywnIH0pOworCisgICAgICAgICAgICBmb3JlYWNoKFN0cmluZyBzdHIgaW4gdG9rZW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVXJpIHVyaSA9IG5ldyBVcmkoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LkFkZCh1cmkpOworCisJCQkJCWlmIChUcmFjZXIuSXNEZWJ1Z0VuYWJsZWQpCisJCQkJCXsKKwkJCQkJCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiQWRkaW5nIG5ldyBVcmlbezB9XSB0byBsaXN0LCIsIHVyaSk7CisJCQkJCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgICAgIHsKKwkJCQkJVHJhY2VyLkVycm9yRm9ybWF0KCJGYWlsZWQgdG8gcGFyc2UgYnJva2VyIGFkZHJlc3M6IHswfSBiZWNhdXNlIG9mOiB7MX0iLAorCQkJCQkgICAgICAgICAgICAgICAgICAgc3RyLCBlLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkJfQorCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBEaXNwb3NlKHRydWUpOworICAgICAgICAgICAgR0MuU3VwcHJlc3NGaW5hbGl6ZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoYm9vbCBkaXNwb3NpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuU3RvcCgpOworICAgICAgICAgICAgZGlzcG9zZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBDb21wYXJlVG8oT2JqZWN0IG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKG8gaXMgRmFpbG92ZXJUcmFuc3BvcnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRmFpbG92ZXJUcmFuc3BvcnQgb28gPSBvIGFzIEZhaWxvdmVyVHJhbnNwb3J0OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWQgLSBvby5pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBTdHJpbmcgVG9TdHJpbmcoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQ29ubmVjdGVkVHJhbnNwb3J0VVJJID09IG51bGwgPyAidW5jb25uZWN0ZWQiIDogQ29ubmVjdGVkVHJhbnNwb3J0VVJJLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKworCSAgICBpbnRlcm5hbCBib29sIElzUHJpb3JpdHkoVXJpIHVyaSkgCisJCXsKKwkJCWlmIChwcmlvcml0eUJhY2t1cCkKKwkJCXsKKwkJICAgICAgICBpZiAocHJpb3JpdHlMaXN0LkNvdW50ID4gMCkgCisJCQkJeworCQkgICAgICAgICAgICByZXR1cm4gcHJpb3JpdHlMaXN0LkNvbnRhaW5zKHVyaSk7CisJCSAgICAgICAgfQorCisJCQkJaWYgKHRoaXMudXJpcy5Db3VudCA+IDApIAorCQkJCXsKKwkJICAgICAgICAJcmV0dXJuIHVyaXNbMF0uRXF1YWxzKHVyaSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCSAgICB9CisKKwkJcHVibGljIHZvaWQgRGlzcG9zZVRyYW5zcG9ydChJVHJhbnNwb3J0IHRyYW5zcG9ydCkgCisJCXsKKwkJCXRyYW5zcG9ydC5Db21tYW5kID0gRGlzcG9zZWRPbkNvbW1hbmQ7CisJCQl0cmFuc3BvcnQuRXhjZXB0aW9uID0gRGlzcG9zZWRPbkV4Y2VwdGlvbjsKKworCQkJdHJ5IAorCQkJeworCSAgICAgICAgICAgIHRyYW5zcG9ydC5TdG9wKCk7CisgICAgICAgIAl9CisJCQljYXRjaCAoRXhjZXB0aW9uIGUpIAorCQkJeworCQkJCVRyYWNlci5EZWJ1Z0Zvcm1hdCgiQ291bGQgbm90IHN0b3AgdHJhbnNwb3J0OiB7MF0uIFJlYXNvbjogezF9IiwgdHJhbnNwb3J0LCBlLk1lc3NhZ2UpOworICAgICAgICAJfQorICAgIAl9CisKKwkgICAgcHJpdmF0ZSB2b2lkIFJlc2V0UmVjb25uZWN0RGVsYXkoKSAKKwkJeworCSAgICAgICAgaWYgKCF1c2VFeHBvbmVudGlhbEJhY2tPZmYgfHwgcmVjb25uZWN0RGVsYXkgPT0gREVGQVVMVF9JTklUSUFMX1JFQ09OTkVDVF9ERUxBWSkgCisJCQl7CisJICAgICAgICAgICAgcmVjb25uZWN0RGVsYXkgPSBpbml0aWFsUmVjb25uZWN0RGVsYXk7CisJICAgICAgICB9CisJICAgIH0KKworCSAgICBwcml2YXRlIHZvaWQgRG9EZWxheSgpCisJCXsKKwkgICAgICAgIGlmIChyZWNvbm5lY3REZWxheSA+IDApIAorCQkJeworCSAgICAgICAgICAgIGxvY2soc2xlZXBNdXRleCkgCisJCQkJeworCSAgICAgICAgICAgICAgICBpZiAoVHJhY2VyLklzRGVidWdFbmFibGVkKSAKKwkJCQkJeworCQkJCQkJVHJhY2VyLkRlYnVnRm9ybWF0KCJXYWl0aW5nIHswfSBtcyBiZWZvcmUgYXR0ZW1wdGluZyBjb25uZWN0aW9uIiwgcmVjb25uZWN0RGVsYXkpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHRyeSAKKwkJCQkJeworCQkJCQkJTW9uaXRvci5XYWl0KHNsZWVwTXV0ZXgsIHJlY29ubmVjdERlbGF5KTsKKwkgICAgICAgICAgICAgICAgfSAKKwkJCQkJY2F0Y2ggKFRocmVhZEludGVycnVwdGVkRXhjZXB0aW9uKSAKKwkJCQkJeworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCisJICAgICAgICBpZiAodXNlRXhwb25lbnRpYWxCYWNrT2ZmKSAKKwkJCXsKKwkgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBpbmNyZW1lbnQgb2YgcmVjb25uZWN0IGRlbGF5LgorCSAgICAgICAgICAgIHJlY29ubmVjdERlbGF5ICo9IGJhY2tPZmZNdWx0aXBsaWVyOworCSAgICAgICAgICAgIGlmIChyZWNvbm5lY3REZWxheSA+IG1heFJlY29ubmVjdERlbGF5KSAKKwkJCQl7CisJICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5ID0gbWF4UmVjb25uZWN0RGVsYXk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9CisKKwkgICAgcHJpdmF0ZSB2b2lkIFByb3BhZ2F0ZUZhaWx1cmVUb0V4Y2VwdGlvbkxpc3RlbmVyKEV4Y2VwdGlvbiBleGNlcHRpb24pIAorCQl7CisJICAgICAgICBpZiAoRXhjZXB0aW9uICE9IG51bGwpIAorCQkJeworICAgICAgICAgICAgICAgIEV4Y2VwdGlvbih0aGlzLCBleGNlcHRpb24pOworCSAgICAgICAgfQorCQkJZWxzZQorCQkJeworCQkJCUV4Y2VwdGlvbih0aGlzLCBuZXcgSU9FeGNlcHRpb24oKSk7CisJCQl9CisJCQlNb25pdG9yLlB1bHNlQWxsKHJlY29ubmVjdE11dGV4KTsKKwkgICAgfQorCisJICAgIHByaXZhdGUgaW50IENhbGN1bGF0ZVJlY29ubmVjdEF0dGVtcHRMaW1pdCgpIAorCQl7CisJICAgICAgICBpbnQgbWF4UmVjb25uZWN0VmFsdWUgPSB0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzOworCSAgICAgICAgaWYgKGZpcnN0Q29ubmVjdGlvbiAmJiB0aGlzLnN0YXJ0dXBNYXhSZWNvbm5lY3RBdHRlbXB0cyAhPSBJTkZJTklURSkgCisJCQl7CisJICAgICAgICAgICAgbWF4UmVjb25uZWN0VmFsdWUgPSB0aGlzLnN0YXJ0dXBNYXhSZWNvbm5lY3RBdHRlbXB0czsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBtYXhSZWNvbm5lY3RWYWx1ZTsKKwkgICAgfQorCisJCXB1YmxpYyB2b2lkIFNodWZmbGU8VD4oTGlzdDxUPiBsaXN0KSAgCisJCXsgIAorICAgICAgICAgICAgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oRGF0ZVRpbWUuTm93Lk1pbGxpc2Vjb25kKTsKKwkJICAgIGludCBpbmRleCA9IGxpc3QuQ291bnQ7ICAKKwkJICAgIHdoaWxlIChpbmRleCA+IDEpIAorCQkJeyAgCisJCSAgICAgICAgaW5kZXgtLTsgIAorCQkgICAgICAgIGludCBrID0gcmFuZG9tLk5leHQoaW5kZXggKyAxKTsgIAorCQkgICAgICAgIFQgdmFsdWUgPSBsaXN0W2tdOyAgCisJCSAgICAgICAgbGlzdFtrXSA9IGxpc3RbaW5kZXhdOyAgCisJCSAgICAgICAgbGlzdFtpbmRleF0gPSB2YWx1ZTsgIAorCQkgICAgfSAgCisJCX0KKworCQlwcml2YXRlIFN0cmluZyBQcmludGFibGVVcmlMaXN0KExpc3Q8VXJpPiB1cmlMaXN0KQorCQl7CisJCQlpZiAodXJpTGlzdC5Db3VudCA9PSAwKQorCQkJeworCQkJCXJldHVybiAiIjsKKwkJCX0KKworCQkJU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgdXJpTGlzdC5Db3VudDsgKytpKQorCQkJeworCQkJCWJ1aWxkZXIuQXBwZW5kKHVyaUxpc3RbaV0pOworCQkJCWlmIChpIDwgKHVyaUxpc3QuQ291bnQgLSAxKSkKKwkJCQl7CisJCQkJCWJ1aWxkZXIuQXBwZW5kKCIsIik7CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gYnVpbGRlci5Ub1N0cmluZygpOworCQl9CisKKwkJcHJpdmF0ZSBib29sIENvbXBhcmVVcmlzKFVyaSBmaXJzdCwgVXJpIHNlY29uZCkgCisJCXsKKwkJCWJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoZmlyc3QuUG9ydCA9PSBzZWNvbmQuUG9ydCkKKwkJCXsKKyAgICAgICAgICAgICAgICBJUEhvc3RFbnRyeSBmaXJzdEFkZHIgPSBudWxsOworICAgICAgICAgICAgICAgIElQSG9zdEVudHJ5IHNlY29uZEFkZHIgPSBudWxsOworICAgICAgICAgICAgICAgIHRyeSAKKwkJCQl7CisgICAgICAgICAgICAJCWZpcnN0QWRkciA9IERucy5HZXRIb3N0RW50cnkoZmlyc3QuSG9zdCk7CisgICAgICAgICAgICAJCXNlY29uZEFkZHIgPSBEbnMuR2V0SG9zdEVudHJ5KHNlY29uZC5Ib3N0KTsKKworCSAgICAgICAgICAgICAgICBpZiAoZmlyc3RBZGRyLkVxdWFscyhzZWNvbmRBZGRyKSkgCisJCQkJCXsKKwkJCQkJCXJlc3VsdCA9IHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkJCQl9IAorCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKQorCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0QWRkciA9PSBudWxsKSAKKwkJCQkJeworCQkJCQkJVHJhY2VyLldhcm5Gb3JtYXQoIkZhaWxlZCB0byBMb29rdXAgSVBIb3N0RW50cnkgZm9yIFVSSVt7MH1dIDogezF9IiwgZmlyc3QsIGUpOworICAgICAgICAgICAgICAgICAgICB9IAorCQkJCQllbHNlIAorCQkJCQl7CisJCQkJCQlUcmFjZXIuV2FybkZvcm1hdCgiRmFpbGVkIHRvIExvb2t1cCBJUEhvc3RFbnRyeSBmb3IgVVJJW3swfV0gOiB7MX0iLCBzZWNvbmQsIGUpOworICAgICAgICAgICAgICAgICAgICB9CisKKwkJCQkJaWYoU3RyaW5nLkVxdWFscyhmaXJzdC5Ib3N0LCBzZWNvbmQuSG9zdCwgU3RyaW5nQ29tcGFyaXNvbi5DdXJyZW50Q3VsdHVyZUlnbm9yZUNhc2UpKQorCQkJCQl7CisJCQkJCQlyZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKworCSAgICBwcml2YXRlIGJvb2wgQ29udGFpbnMoVXJpIG5ld1VSSSkgCisJCXsKKwkgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisJICAgICAgICBmb3JlYWNoIChVcmkgdXJpIGluIHVyaXMpIAorCQkJeworCSAgICAgICAgICAgIGlmIChDb21wYXJlVXJpcyhuZXdVUkksIHVyaSkpCisJCQkJeworCQkJCQlyZXN1bHQgPSB0cnVlOworCQkJCQlicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisKKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0RmFjdG9yeS5jcyBiL3NyYy9UcmFuc3BvcnQvRmFpbG92ZXIvRmFpbG92ZXJUcmFuc3BvcnRGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0RmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9GYWlsb3Zlci9GYWlsb3ZlclRyYW5zcG9ydEZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRnV0dXJlUmVzcG9uc2UuY3MgYi9zcmMvVHJhbnNwb3J0L0Z1dHVyZVJlc3BvbnNlLmNzCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvRnV0dXJlUmVzcG9uc2UuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvRnV0dXJlUmVzcG9uc2UuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvSUNvbXBvc2l0ZVRyYW5zcG9ydC5jcyBiL3NyYy9UcmFuc3BvcnQvSUNvbXBvc2l0ZVRyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0lDb21wb3NpdGVUcmFuc3BvcnQuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvSUNvbXBvc2l0ZVRyYW5zcG9ydC5jcwppbmRleCBiMDhiMjdhLi44NWNkZjFiIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0lDb21wb3NpdGVUcmFuc3BvcnQuY3MKKysrIGIvc3JjL1RyYW5zcG9ydC9JQ29tcG9zaXRlVHJhbnNwb3J0LmNzCkBAIC0xLDQ5ICsxLDQ5IEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi11c2luZyBTeXN0ZW07DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0DQotew0KLQlwdWJsaWMgaW50ZXJmYWNlIElDb21wb3NpdGVUcmFuc3BvcnQgOiBJVHJhbnNwb3J0DQotCXsNCi0JCS8vLyA8c3VtbWFyeT4NCi0JCS8vLyBBZGRzIGEgbmV3IHNldCBvZiBVcmlzIHRvIHRoZSBsaXN0IG9mIFVyaXMgdGhhdCB0aGlzIFRyYW5zcG9ydCBjYW4gY29ubmVjdCB0by4NCi0JCS8vLyA8L3N1bW1hcnk+DQotCQkvLy8gPHBhcmFtIG5hbWU9InJlYmFsYW5jZSI+DQotCQkvLy8gQSA8c2VlIGNyZWY9IlN5c3RlbS5Cb29sZWFuIi8+DQotCQkvLy8gU2hvdWxkIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gYmUgYnJva2VuIGFuZCBhIG5ldyBvbmUgY3JlYXRlZC4NCi0JCS8vLyA8L3BhcmFtPg0KLQkJLy8vIDxwYXJhbSBuYW1lPSJ1cmlzIj4NCi0JCS8vLyBBIDxzZWUgY3JlZj0iVXJpIi8+DQotCQkvLy8gPC9wYXJhbT4NCi0JCXZvaWQgQWRkKGJvb2wgcmViYWxhbmNlLCBVcmlbXSB1cmlzKTsNCi0NCi0JCS8vLyA8c3VtbWFyeT4NCi0JCS8vLyBSZW1vdmUgdGhlIGdpdmVuIFVyaXMgZnJvbSB0aGlzIFRyYW5zcG9ydHMgbGlzdCBvZiBrbm93biBVcmlzLg0KLQkJLy8vIDwvc3VtbWFyeT4NCi0JCS8vLyA8cGFyYW0gbmFtZT0icmViYWxhbmNlIj4NCi0JCS8vLyBBIDxzZWUgY3JlZj0iU3lzdGVtLkJvb2xlYW4iLz4NCi0JCS8vLyBTaG91bGQgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBiZSBicm9rZW4gYW5kIGEgbmV3IG9uZSBjcmVhdGVkLg0KLQkJLy8vIDwvcGFyYW0+DQotCQkvLy8gPHBhcmFtIG5hbWU9InVyaXMiPg0KLQkJLy8vIEEgPHNlZSBjcmVmPSJVcmkiLz4NCi0JCS8vLyA8L3BhcmFtPg0KLQkJdm9pZCBSZW1vdmUoYm9vbCByZWJhbGFuY2UsIFVyaVtdIHVyaXMpOw0KLQl9DQotfQ0KLQ0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2luZyBTeXN0ZW07CisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zcG9ydAoreworCXB1YmxpYyBpbnRlcmZhY2UgSUNvbXBvc2l0ZVRyYW5zcG9ydCA6IElUcmFuc3BvcnQKKwl7CisJCS8vLyA8c3VtbWFyeT4KKwkJLy8vIEFkZHMgYSBuZXcgc2V0IG9mIFVyaXMgdG8gdGhlIGxpc3Qgb2YgVXJpcyB0aGF0IHRoaXMgVHJhbnNwb3J0IGNhbiBjb25uZWN0IHRvLgorCQkvLy8gPC9zdW1tYXJ5PgorCQkvLy8gPHBhcmFtIG5hbWU9InJlYmFsYW5jZSI+CisJCS8vLyBBIDxzZWUgY3JlZj0iU3lzdGVtLkJvb2xlYW4iLz4KKwkJLy8vIFNob3VsZCB0aGUgY3VycmVudCBjb25uZWN0aW9uIGJlIGJyb2tlbiBhbmQgYSBuZXcgb25lIGNyZWF0ZWQuCisJCS8vLyA8L3BhcmFtPgorCQkvLy8gPHBhcmFtIG5hbWU9InVyaXMiPgorCQkvLy8gQSA8c2VlIGNyZWY9IlVyaSIvPgorCQkvLy8gPC9wYXJhbT4KKwkJdm9pZCBBZGQoYm9vbCByZWJhbGFuY2UsIFVyaVtdIHVyaXMpOworCisJCS8vLyA8c3VtbWFyeT4KKwkJLy8vIFJlbW92ZSB0aGUgZ2l2ZW4gVXJpcyBmcm9tIHRoaXMgVHJhbnNwb3J0cyBsaXN0IG9mIGtub3duIFVyaXMuCisJCS8vLyA8L3N1bW1hcnk+CisJCS8vLyA8cGFyYW0gbmFtZT0icmViYWxhbmNlIj4KKwkJLy8vIEEgPHNlZSBjcmVmPSJTeXN0ZW0uQm9vbGVhbiIvPgorCQkvLy8gU2hvdWxkIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gYmUgYnJva2VuIGFuZCBhIG5ldyBvbmUgY3JlYXRlZC4KKwkJLy8vIDwvcGFyYW0+CisJCS8vLyA8cGFyYW0gbmFtZT0idXJpcyI+CisJCS8vLyBBIDxzZWUgY3JlZj0iVXJpIi8+CisJCS8vLyA8L3BhcmFtPgorCQl2b2lkIFJlbW92ZShib29sIHJlYmFsYW5jZSwgVXJpW10gdXJpcyk7CisJfQorfQorCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0lUcmFuc3BvcnQuY3MgYi9zcmMvVHJhbnNwb3J0L0lUcmFuc3BvcnQuY3MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9JVHJhbnNwb3J0LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0lUcmFuc3BvcnQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvSVRyYW5zcG9ydEZhY3RvcnkuY3MgYi9zcmMvVHJhbnNwb3J0L0lUcmFuc3BvcnRGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0lUcmFuc3BvcnRGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0lUcmFuc3BvcnRGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L0lXaXJlRm9ybWF0LmNzIGIvc3JjL1RyYW5zcG9ydC9JV2lyZUZvcm1hdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9JV2lyZUZvcm1hdC5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9JV2lyZUZvcm1hdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9JbmFjdGl2aXR5TW9uaXRvci5jcyBiL3NyYy9UcmFuc3BvcnQvSW5hY3Rpdml0eU1vbml0b3IuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvSW5hY3Rpdml0eU1vbml0b3IuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvSW5hY3Rpdml0eU1vbml0b3IuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvTG9nZ2luZ1RyYW5zcG9ydC5jcyBiL3NyYy9UcmFuc3BvcnQvTG9nZ2luZ1RyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9Mb2dnaW5nVHJhbnNwb3J0LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L0xvZ2dpbmdUcmFuc3BvcnQuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvTW9jay9JUmVzcG9uc2VCdWlsZGVyLmNzIGIvc3JjL1RyYW5zcG9ydC9Nb2NrL0lSZXNwb25zZUJ1aWxkZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvTW9jay9JUmVzcG9uc2VCdWlsZGVyLmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L01vY2svSVJlc3BvbnNlQnVpbGRlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnQuY3MgYi9zcmMvVHJhbnNwb3J0L01vY2svTW9ja1RyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnQuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvTW9jay9Nb2NrVHJhbnNwb3J0LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L01vY2svTW9ja1RyYW5zcG9ydEZhY3RvcnkuY3MgYi9zcmMvVHJhbnNwb3J0L01vY2svTW9ja1RyYW5zcG9ydEZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvTW9jay9Nb2NrVHJhbnNwb3J0RmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L01vY2svT3BlbldpcmVSZXNwb25zZUJ1aWxkZXIuY3MgYi9zcmMvVHJhbnNwb3J0L01vY2svT3BlbldpcmVSZXNwb25zZUJ1aWxkZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvTW9jay9PcGVuV2lyZVJlc3BvbnNlQnVpbGRlci5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9Nb2NrL09wZW5XaXJlUmVzcG9uc2VCdWlsZGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L011dGV4VHJhbnNwb3J0LmNzIGIvc3JjL1RyYW5zcG9ydC9NdXRleFRyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9NdXRleFRyYW5zcG9ydC5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9NdXRleFRyYW5zcG9ydC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9SZXNwb25zZUNvcnJlbGF0b3IuY3MgYi9zcmMvVHJhbnNwb3J0L1Jlc3BvbnNlQ29ycmVsYXRvci5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9SZXNwb25zZUNvcnJlbGF0b3IuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvUmVzcG9uc2VDb3JyZWxhdG9yLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L1RjcC9Tc2xUcmFuc3BvcnQuY3MgYi9zcmMvVHJhbnNwb3J0L1RjcC9Tc2xUcmFuc3BvcnQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvVGNwL1NzbFRyYW5zcG9ydC5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9UY3AvU3NsVHJhbnNwb3J0LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L1RjcC9Tc2xUcmFuc3BvcnRGYWN0b3J5LmNzIGIvc3JjL1RyYW5zcG9ydC9UY3AvU3NsVHJhbnNwb3J0RmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9UY3AvU3NsVHJhbnNwb3J0RmFjdG9yeS5jcwpyZW5hbWUgdG8gc3JjL1RyYW5zcG9ydC9UY3AvU3NsVHJhbnNwb3J0RmFjdG9yeS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9UY3AvVGNwVHJhbnNwb3J0LmNzIGIvc3JjL1RyYW5zcG9ydC9UY3AvVGNwVHJhbnNwb3J0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVHJhbnNwb3J0L1RjcC9UY3BUcmFuc3BvcnQuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvVGNwL1RjcFRyYW5zcG9ydC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9UY3AvVGNwVHJhbnNwb3J0RmFjdG9yeS5jcyBiL3NyYy9UcmFuc3BvcnQvVGNwL1RjcFRyYW5zcG9ydEZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvVGNwL1RjcFRyYW5zcG9ydEZhY3RvcnkuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvVGNwL1RjcFRyYW5zcG9ydEZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvVHJhbnNwb3J0RmFjdG9yeS5jcyBiL3NyYy9UcmFuc3BvcnQvVHJhbnNwb3J0RmFjdG9yeS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9UcmFuc3BvcnRGYWN0b3J5LmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L1RyYW5zcG9ydEZhY3RvcnkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvVHJhbnNwb3J0RmlsdGVyLmNzIGIvc3JjL1RyYW5zcG9ydC9UcmFuc3BvcnRGaWx0ZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvVHJhbnNwb3J0RmlsdGVyLmNzCnJlbmFtZSB0byBzcmMvVHJhbnNwb3J0L1RyYW5zcG9ydEZpbHRlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1RyYW5zcG9ydC9XaXJlRm9ybWF0TmVnb3RpYXRvci5jcyBiL3NyYy9UcmFuc3BvcnQvV2lyZUZvcm1hdE5lZ290aWF0b3IuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9UcmFuc3BvcnQvV2lyZUZvcm1hdE5lZ290aWF0b3IuY3MKcmVuYW1lIHRvIHNyYy9UcmFuc3BvcnQvV2lyZUZvcm1hdE5lZ290aWF0b3IuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL0FjdGl2ZU1RTWVzc2FnZUF1ZGl0LmNzIGIvc3JjL1V0aWwvQWN0aXZlTVFNZXNzYWdlQXVkaXQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL0FjdGl2ZU1RTWVzc2FnZUF1ZGl0LmNzCnJlbmFtZSB0byBzcmMvVXRpbC9BY3RpdmVNUU1lc3NhZ2VBdWRpdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1V0aWwvQWN0aXZlTVFNZXNzYWdlVHJhbnNmb3JtYXRpb24uY3MgYi9zcmMvVXRpbC9BY3RpdmVNUU1lc3NhZ2VUcmFuc2Zvcm1hdGlvbi5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1V0aWwvQWN0aXZlTVFNZXNzYWdlVHJhbnNmb3JtYXRpb24uY3MKcmVuYW1lIHRvIHNyYy9VdGlsL0FjdGl2ZU1RTWVzc2FnZVRyYW5zZm9ybWF0aW9uLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVXRpbC9BZHZpc29yeVN1cHBvcnQuY3MgYi9zcmMvVXRpbC9BZHZpc29yeVN1cHBvcnQuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL0Fkdmlzb3J5U3VwcG9ydC5jcwpyZW5hbWUgdG8gc3JjL1V0aWwvQWR2aXNvcnlTdXBwb3J0LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVXRpbC9CaXRBcnJheS5jcyBiL3NyYy9VdGlsL0JpdEFycmF5LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVXRpbC9CaXRBcnJheS5jcwpyZW5hbWUgdG8gc3JjL1V0aWwvQml0QXJyYXkuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL0JpdEFycmF5QmluLmNzIGIvc3JjL1V0aWwvQml0QXJyYXlCaW4uY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL0JpdEFycmF5QmluLmNzCnJlbmFtZSB0byBzcmMvVXRpbC9CaXRBcnJheUJpbi5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1V0aWwvQ29ubmVjdGlvbkF1ZGl0LmNzIGIvc3JjL1V0aWwvQ29ubmVjdGlvbkF1ZGl0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVXRpbC9Db25uZWN0aW9uQXVkaXQuY3MKcmVuYW1lIHRvIHNyYy9VdGlsL0Nvbm5lY3Rpb25BdWRpdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1V0aWwvRmFjdG9yeUF0dHJpYnV0ZS5jcyBiL3NyYy9VdGlsL0ZhY3RvcnlBdHRyaWJ1dGUuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL0ZhY3RvcnlBdHRyaWJ1dGUuY3MKcmVuYW1lIHRvIHNyYy9VdGlsL0ZhY3RvcnlBdHRyaWJ1dGUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL0ZhY3RvcnlGaW5kZXIuY3MgYi9zcmMvVXRpbC9GYWN0b3J5RmluZGVyLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVXRpbC9GYWN0b3J5RmluZGVyLmNzCnJlbmFtZSB0byBzcmMvVXRpbC9GYWN0b3J5RmluZGVyLmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVXRpbC9GaWZvTWVzc2FnZURpc3BhdGNoQ2hhbm5lbC5jcyBiL3NyYy9VdGlsL0ZpZm9NZXNzYWdlRGlzcGF0Y2hDaGFubmVsLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVXRpbC9GaWZvTWVzc2FnZURpc3BhdGNoQ2hhbm5lbC5jcwpyZW5hbWUgdG8gc3JjL1V0aWwvRmlmb01lc3NhZ2VEaXNwYXRjaENoYW5uZWwuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL0lTdXNwZW5kYWJsZS5jcyBiL3NyYy9VdGlsL0lTdXNwZW5kYWJsZS5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1V0aWwvSVN1c3BlbmRhYmxlLmNzCnJlbmFtZSB0byBzcmMvVXRpbC9JU3VzcGVuZGFibGUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL0lkR2VuZXJhdG9yLmNzIGIvc3JjL1V0aWwvSWRHZW5lcmF0b3IuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL0lkR2VuZXJhdG9yLmNzCnJlbmFtZSB0byBzcmMvVXRpbC9JZEdlbmVyYXRvci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1V0aWwvSW50cm9zcGVjdGlvblN1cHBvcnQuY3MgYi9zcmMvVXRpbC9JbnRyb3NwZWN0aW9uU3VwcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL21haW4vY3NoYXJwL1V0aWwvSW50cm9zcGVjdGlvblN1cHBvcnQuY3MKcmVuYW1lIHRvIHNyYy9VdGlsL0ludHJvc3BlY3Rpb25TdXBwb3J0LmNzCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9jc2hhcnAvVXRpbC9MUlVDYWNoZS5jcyBiL3NyYy9VdGlsL0xSVUNhY2hlLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVXRpbC9MUlVDYWNoZS5jcwpyZW5hbWUgdG8gc3JjL1V0aWwvTFJVQ2FjaGUuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL01lbW9yeVVzYWdlLmNzIGIvc3JjL1V0aWwvTWVtb3J5VXNhZ2UuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL01lbW9yeVVzYWdlLmNzCnJlbmFtZSB0byBzcmMvVXRpbC9NZW1vcnlVc2FnZS5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1V0aWwvTWVzc2FnZURpc3BhdGNoQ2hhbm5lbC5jcyBiL3NyYy9VdGlsL01lc3NhZ2VEaXNwYXRjaENoYW5uZWwuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL01lc3NhZ2VEaXNwYXRjaENoYW5uZWwuY3MKcmVuYW1lIHRvIHNyYy9VdGlsL01lc3NhZ2VEaXNwYXRjaENoYW5uZWwuY3MKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2NzaGFycC9VdGlsL1NlcnZpY2VTdG9wcGVyLmNzIGIvc3JjL1V0aWwvU2VydmljZVN0b3BwZXIuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9tYWluL2NzaGFycC9VdGlsL1NlcnZpY2VTdG9wcGVyLmNzCnJlbmFtZSB0byBzcmMvVXRpbC9TZXJ2aWNlU3RvcHBlci5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vY3NoYXJwL1V0aWwvU2ltcGxlUHJpb3JpdHlNZXNzYWdlRGlzcGF0Y2hDaGFubmVsLmNzIGIvc3JjL1V0aWwvU2ltcGxlUHJpb3JpdHlNZXNzYWdlRGlzcGF0Y2hDaGFubmVsLmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvbWFpbi9jc2hhcnAvVXRpbC9TaW1wbGVQcmlvcml0eU1lc3NhZ2VEaXNwYXRjaENoYW5uZWwuY3MKcmVuYW1lIHRvIHNyYy9VdGlsL1NpbXBsZVByaW9yaXR5TWVzc2FnZURpc3BhdGNoQ2hhbm5lbC5jcwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vbmRvYy9OYW1lc3BhY2VTdW1tYXJ5LnhtbCBiL3NyYy9tYWluL25kb2MvTmFtZXNwYWNlU3VtbWFyeS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZTE5ZDUuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vbmRvYy9OYW1lc3BhY2VTdW1tYXJ5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwhLS0KLSAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAKLSAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgIAotICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPG5hbWVzcGFjZXM+Ci0gICAgPG5hbWVzcGFjZSBuYW1lPSJOTVMiPgotICAgICAgICBUaGUgPGI+Tk1TPC9iPiBuYW1lc3BhY2UgZGVmaW5lcyB0aGUgLk5ldCBNZXNzYWdlIFN5c3RlbSBBUEkgd2hpY2ggaXMgYW4gaW50ZXJmYWNlIHRvIG1lc3NhZ2luZyBzeXN0ZW1zIHJhdGhlciBsaWtlIEpNUyBpcyBmb3IgSmF2YS4KLSAgICA8L25hbWVzcGFjZT4KLTwvbmFtZXNwYWNlcz4KZGlmZiAtLWdpdCBhL3NyYy9tYWluL3NhbmRjYXN0bGUvZmVlZGJhY2tfY29udGVudC54bWwgYi9zcmMvbWFpbi9zYW5kY2FzdGxlL2ZlZWRiYWNrX2NvbnRlbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTMwYTEyLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL3NhbmRjYXN0bGUvZmVlZGJhY2tfY29udGVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08Y29udGVudCB4bWw6c3BhY2U9InByZXNlcnZlIj4NCi0NCi0gIDxpdGVtIGlkPSJmYl9hbGlhcyI+YWN0aXZlbXEuZG9jc0BhcGFjaGUub3JnPC9pdGVtPg0KLSAgPGl0ZW0gaWQ9ImZiX3Byb2R1Y3QiPjwvaXRlbT4NCi0gIDxpdGVtIGlkPSJmYl9kZWxpdmVyYWJsZSI+PC9pdGVtPg0KLQ0KLSAgPGl0ZW0gaWQ9ImZiX3N1YmplY3QiPkN1c3RvbWVyJTIwRmVlZGJhY2s8L2l0ZW0+DQotICA8aXRlbSBpZD0iZmJfYm9keSI+JTBcZFRoYW5rJTIweW91JTIwZm9yJTIweW91ciUyMGZlZWRiYWNrLiUyMFRoZSUyMGRldmVsb3BlciUyMHdyaXRpbmclMjB0ZWFtcyUyMHVzZSUyMHlvdXIlMjBmZWVkYmFjayUyMHRvJTIwaW1wcm92ZSUyMGRvY3VtZW50YXRpb24uJTIwV2hpbGUlMjB3ZSUyMGFyZSUyMHJldmlld2luZyUyMHlvdXIlMjBmZWVkYmFjaywlMjB3ZSUyMG1heSUyMHNlbmQlMjB5b3UlMjBlLW1haWwlMjB0byUyMGFzayUyMGZvciUyMGNsYXJpZmljYXRpb24lMjBvciUyMGZlZWRiYWNrJTIwb24lMjBhJTIwc29sdXRpb24uJTIwV2UlMjBkbyUyMG5vdCUyMHVzZSUyMHlvdXIlMjBlLW1haWwlMjBhZGRyZXNzJTIwZm9yJTIwYW55JTIwb3RoZXIlMjBwdXJwb3NlLiUwXGQ8L2l0ZW0+DQotIA0KLSAgIDxpdGVtIGlkPSJmYl9oZWFkZXJGZWVkQmFjayI+U2VuZCBGZWVkYmFjazwvaXRlbT4NCi0gIA0KLQ0KLSAgIDwhLS0gZmVlZGJhY2sgdmFsdWVzIGZvciBzYW5kY2FzdGxlIHNjZW5hcmlvIC0tPg0KLQ0KLSAgIDxpdGVtIGlkPSJmZWVkYmFja19hbGlhcyI+PC9pdGVtPg0KLSAgIDxpdGVtIGlkPSJmZWVkYmFja19wcm9kdWN0Ij48L2l0ZW0+DQotICAgPGl0ZW0gaWQ9ImZlZWRiYWNrX2RlbGl2ZXJhYmxlIj48L2l0ZW0+DQotICAgPGl0ZW0gaWQ9ImZlZWRiYWNrX2ZpbGVWZXJzaW9uIj48L2l0ZW0+DQotICAgPGl0ZW0gaWQ9ImZlZWRiYWNrX3RvcGljVmVyc2lvbiI+PC9pdGVtPg0KLSAgIDxpdGVtIGlkPSJmZWVkYmFja19ib2R5Ij48L2l0ZW0+DQotICAgPGl0ZW0gaWQ9ImZlZWRiYWNrX3N1YmplY3QiPjwvaXRlbT4NCi0NCi0gICA8aXRlbSBpZD0iZmJfSW50cm9kdWN0aW9uIj5XZSB2YWx1ZSB5b3VyIGZlZWRiYWNrLiBUbyByYXRlIHRoaXMgdG9waWMgYW5kIHNlbmQgZmVlZGJhY2sgYWJvdXQgdGhpcyB0b3BpYyB0byB0aGUgZG9jdW1lbnRhdGlvbiB0ZWFtLCBjbGljayBhIHJhdGluZywgYW5kIHRoZW4gY2xpY2sgPGI+U2VuZCBGZWVkYmFjazwvYj4uIEZvciBhc3Npc3RhbmNlIHdpdGggc3VwcG9ydCBpc3N1ZXMsIHJlZmVyIHRvIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBpbmZvcm1hdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSBwcm9kdWN0LjwvaXRlbT4NCi0NCi0gICA8aXRlbSBpZD0iZmJfU2VuZCI+U2VuZCBGZWVkYmFjazwvaXRlbT4NCi0gICA8aXRlbSBpZD0iZmJfUG9vciI+UG9vcjwvaXRlbT4NCi0gICA8aXRlbSBpZD0iZmJfRXhjZWxsZW50Ij5PdXRzdGFuZGluZzwvaXRlbT4NCi0gICA8aXRlbSBpZD0iZmJfRW50ZXJGZWVkYmFja1RleHQiPlRvIGUtbWFpbCB5b3VyIGZlZWRiYWNrLCBjbGljayBoZXJlOjwvaXRlbT4NCi0gICA8aXRlbSBpZD0iZmJfVGl0bGUiPkRvY3VtZW50YXRpb24gRmVlZGJhY2s8L2l0ZW0+DQotICAgPGl0ZW0gaWQ9ImZiX2FsdEljb24iPkRpc3BsYXkgZmVlZGJhY2sgaW5zdHJ1Y3Rpb25zIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UuPC9pdGVtPg0KLQ0KLTwvY29udGVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbm1zLW9wZW53aXJlLmNzcHJvaiBiL3NyYy9ubXMtb3BlbndpcmUuY3Nwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNzVlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbm1zLW9wZW53aXJlLmNzcHJvagpAQCAtMCwwICsxLDE4IEBACivvu788UHJvamVjdCBTZGs9Ik1pY3Jvc29mdC5ORVQuU2RrIj4KKworICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrPm5ldHN0YW5kYXJkMi4wPC9UYXJnZXRGcmFtZXdvcms+CisgICAgPFJvb3ROYW1lc3BhY2U+QXBhY2hlLk5NUy5BY3RpdmVNUTwvUm9vdE5hbWVzcGFjZT4KKyAgICA8QXNzZW1ibHlOYW1lPkFwYWNoZS5OTVMuQWN0aXZlTVE8L0Fzc2VtYmx5TmFtZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPENvbnRlbnQgSW5jbHVkZT0iLi5cTElDRU5TRS50eHQiIExpbms9IkxJQ0VOU0UudHh0IiAvPgorICAgIDxDb250ZW50IEluY2x1ZGU9Ii4uXE5PVElDRS50eHQiIExpbms9Ik5PVElDRS50eHQiIC8+CisgIDwvSXRlbUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iQXBhY2hlLk5NUyIgVmVyc2lvbj0iMS44LjAiIC8+CisgIDwvSXRlbUdyb3VwPgorCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9zcmMvc2FuZGJveC9hbHRlcm5hdGl2ZS10aHJlYWRpbmcvQ291bnREb3duTGF0Y2gyLmNzIGIvc3JjL3NhbmRib3gvYWx0ZXJuYXRpdmUtdGhyZWFkaW5nL0NvdW50RG93bkxhdGNoMi5jcwppbmRleCA5ZTgxNjg1Li44YWY3ZjljIDEwMDY0NAotLS0gYS9zcmMvc2FuZGJveC9hbHRlcm5hdGl2ZS10aHJlYWRpbmcvQ291bnREb3duTGF0Y2gyLmNzCisrKyBiL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9Db3VudERvd25MYXRjaDIuY3MKQEAgLTYwLDcgKzYwLDcgQEAKIAkJLy8vIDxzdW1tYXJ5PgogCQkvLy8gV2FpdHMgZm9yZXZlciBmb3IgdGhlIGxhdGNoIHRvIGJlIGNvbXBsZXRlZAogCQkvLy8gPHN1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBib29sIGF3YWl0KCkKKyAgICAgICAgcHVibGljIGJvb2wgQXdhaXQoKQogICAgICAgICB7CiAgICAgICAgICAgICBsb2NrIChtdXRleCkKICAgICAgICAgICAgIHsKQEAgLTc3LDcgKzc3LDcgQEAKIAkJLy8vIFdhaXRzIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgZm9yIHRoZSBsYXRjaAogCQkvLy8gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGxhdGNoIHdhcyBhY3F1aXJlZAogCQkvLy8gPHN1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBib29sIGF3YWl0KFRpbWVTcGFuIHRpbWVvdXQpCisgICAgICAgIHB1YmxpYyBib29sIEF3YWl0KFRpbWVTcGFuIHRpbWVvdXQpCiAgICAgICAgIHsKIAkJCURhdGVUaW1lIGVuZCA9IERhdGVUaW1lLk5vdy5BZGQodGltZW91dCk7CiAgICAgICAgICAgICBsb2NrIChtdXRleCkKQEAgLTEwMSwxMSArMTAxLDExIEBACiAJCS8vLyBXYWl0cyB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIGZvciB0aGUgbGF0Y2gKIAkJLy8vIHJldHVybmluZyB0cnVlIGlmIHRoZSBsYXRjaCB3YXMgYWNxdWlyZWQKIAkJLy8vIDxzdW1tYXJ5PgotICAgICAgICBwdWJsaWMgYm9vbCBhd2FpdChpbnQgbWlsbGlzKQorICAgICAgICBwdWJsaWMgYm9vbCBBd2FpdChpbnQgbWlsbGlzKQogICAgICAgICB7CiAJCQlsb25nIHRpY2tzID0gbWlsbGlzICogKDEwMDAwMDAgLyAxMDApOyAvLyAxLDAwMCwwMDAgbmFub3MgaW4gYSBtaWxsaXNlY29uZAogCQkJVGltZVNwYW4gc3BhbiA9IG5ldyBUaW1lU3Bhbih0aWNrcyk7Ci0JCQlyZXR1cm4gYXdhaXQoc3Bhbik7CisJCQlyZXR1cm4gQXdhaXQoc3Bhbik7CiAJCX0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvc2FuZGJveC9hbHRlcm5hdGl2ZS10aHJlYWRpbmcvRGlzcGF0Y2hlci5jcyBiL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9EaXNwYXRjaGVyLmNzCmluZGV4IDQwNWJmZjIuLjgwOTgxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9EaXNwYXRjaGVyLmNzCisrKyBiL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9EaXNwYXRjaGVyLmNzCkBAIC0xNCwxMiArMTQsMTIgQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCi11c2luZyBBY3RpdmVNUS5Db21tYW5kczsKIHVzaW5nIEFjdGl2ZU1RLlV0aWw7Ci11c2luZyBOTVM7Cit1c2luZyBBcGFjaGUuTk1TOwogdXNpbmcgU3lzdGVtOwogdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwogdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuQ29tbWFuZHM7CiAKIG5hbWVzcGFjZSBBY3RpdmVNUQogewpkaWZmIC0tZ2l0IGEvc3JjL3NhbmRib3gvYWx0ZXJuYXRpdmUtdGhyZWFkaW5nL0Rpc3BhdGNoaW5nVGhyZWFkLmNzIGIvc3JjL3NhbmRib3gvYWx0ZXJuYXRpdmUtdGhyZWFkaW5nL0Rpc3BhdGNoaW5nVGhyZWFkLmNzCmluZGV4IDM2NmViZDIuLjhlMDM5ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9EaXNwYXRjaGluZ1RocmVhZC5jcworKysgYi9zcmMvc2FuZGJveC9hbHRlcm5hdGl2ZS10aHJlYWRpbmcvRGlzcGF0Y2hpbmdUaHJlYWQuY3MKQEAgLTE3LDYgKzE3LDcgQEAKIHVzaW5nIEFjdGl2ZU1RLlV0aWw7CiB1c2luZyBTeXN0ZW07CiB1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgQXBhY2hlLk5NUzsKIAogCiBuYW1lc3BhY2UgQWN0aXZlTVEKZGlmZiAtLWdpdCBhL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9GdXR1cmVSZXNwb25zZS5jcyBiL3NyYy9zYW5kYm94L2FsdGVybmF0aXZlLXRocmVhZGluZy9GdXR1cmVSZXNwb25zZS5jcwppbmRleCA2MWRhNDhkLi5hYjYwNTY3IDEwMDc1NQotLS0gYS9zcmMvc2FuZGJveC9hbHRlcm5hdGl2ZS10aHJlYWRpbmcvRnV0dXJlUmVzcG9uc2UuY3MKKysrIGIvc3JjL3NhbmRib3gvYWx0ZXJuYXRpdmUtdGhyZWFkaW5nL0Z1dHVyZVJlc3BvbnNlLmNzCkBAIC0xNCwxMCArMTQsMTIgQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCi11c2luZyBBY3RpdmVNUS5Db21tYW5kczsKIHVzaW5nIFN5c3RlbTsKIHVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CiB1c2luZyBBY3RpdmVNUS5VdGlsOwordXNpbmcgQXBhY2hlLk5NUzsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuQ29tbWFuZHM7Cit1c2luZyBBcGFjaGUuTk1TLlV0aWw7CiAKIG5hbWVzcGFjZSBBY3RpdmVNUS5UcmFuc3BvcnQKIHsKQEAgLTQ4LDcgKzUwLDcgQEAKIAkgICAgICAgICAgICAgICAgewogCSAgICAgICAgICAgICAgICAgICAgdHJ5CiAJCQkJCQl7Ci0JCQkJCQkJaWYgKG1heFdhaXQgPiAwKSAKKwkJCQkJCQlpZiAobWF4V2FpdCA+IFRpbWVTcGFuLk1pblZhbHVlKSAKIAkJCQkJCQl7CiAJCSAgICAgICAgICAgICAgICAgICAgICAgIGxhdGNoLmF3YWl0KG1heFdhaXQpOwogCQkJCQkJCX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9BTVFORVQzNjZUZXN0LmNzIGIvdGVzdC9BTVFORVQzNjZUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9BTVFORVQzNjZUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0FNUU5FVDM2NlRlc3QuY3MKaW5kZXggMGQ3YWNhMi4uMWU2Nzc3MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvY3NoYXJwL0FNUU5FVDM2NlRlc3QuY3MKKysrIGIvdGVzdC9BTVFORVQzNjZUZXN0LmNzCkBAIC0yMiw4ICsyMiw4IEBACiB1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zcG9ydDsKIHVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuQ29tbWFuZHM7CiB1c2luZyBBcGFjaGUuTk1TLlV0aWw7Ci11c2luZyBBcGFjaGUuTk1TLlRlc3Q7CiB1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zcG9ydC5UY3A7Cit1c2luZyBBcGFjaGUuTk1TLlRlc3Q7CiB1c2luZyBOVW5pdC5GcmFtZXdvcms7CiAKIG5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9BTVFORVQzNzVUZXN0LmNzIGIvdGVzdC9BTVFORVQzNzVUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvQU1RTkVUMzc1VGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9BTVFORVQzNzVUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvQU1RUXVldWVUcmFuc2FjdGlvblRlc3QuY3MgYi90ZXN0L0FNUVF1ZXVlVHJhbnNhY3Rpb25UZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvQU1RUXVldWVUcmFuc2FjdGlvblRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvQU1RUXVldWVUcmFuc2FjdGlvblRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9BTVFSZWRlbGl2ZXJ5UG9saWN5VGVzdC5jcyBiL3Rlc3QvQU1RUmVkZWxpdmVyeVBvbGljeVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9BTVFSZWRlbGl2ZXJ5UG9saWN5VGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9BTVFSZWRlbGl2ZXJ5UG9saWN5VGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0FNUVRvcGljVHJhbnNhY3Rpb25UZXN0LmNzIGIvdGVzdC9BTVFUb3BpY1RyYW5zYWN0aW9uVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0FNUVRvcGljVHJhbnNhY3Rpb25UZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0FNUVRvcGljVHJhbnNhY3Rpb25UZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvQU1RVHJhbnNhY3Rpb25UZXN0U3VwcG9ydC5jcyBiL3Rlc3QvQU1RVHJhbnNhY3Rpb25UZXN0U3VwcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0FNUVRyYW5zYWN0aW9uVGVzdFN1cHBvcnQuY3MKcmVuYW1lIHRvIHRlc3QvQU1RVHJhbnNhY3Rpb25UZXN0U3VwcG9ydC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0JhdGNoZWRNZXNzYWdlUHJpb3JpdHlDb25zdW1lclRlc3QuY3MgYi90ZXN0L0JhdGNoZWRNZXNzYWdlUHJpb3JpdHlDb25zdW1lclRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9CYXRjaGVkTWVzc2FnZVByaW9yaXR5Q29uc3VtZXJUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0JhdGNoZWRNZXNzYWdlUHJpb3JpdHlDb25zdW1lclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9Ccm9rZXJUb05NU0V4Y2VwdGlvbnNUZXN0LmNzIGIvdGVzdC9Ccm9rZXJUb05NU0V4Y2VwdGlvbnNUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvQnJva2VyVG9OTVNFeGNlcHRpb25zVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9Ccm9rZXJUb05NU0V4Y2VwdGlvbnNUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFCeXRlc01lc3NhZ2VUZXN0LmNzIGIvdGVzdC9Db21tYW5kcy9BY3RpdmVNUUJ5dGVzTWVzc2FnZVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUUJ5dGVzTWVzc2FnZVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvQ29tbWFuZHMvQWN0aXZlTVFCeXRlc01lc3NhZ2VUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFNYXBNZXNzYWdlVGVzdC5jcyBiL3Rlc3QvQ29tbWFuZHMvQWN0aXZlTVFNYXBNZXNzYWdlVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RTWFwTWVzc2FnZVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvQ29tbWFuZHMvQWN0aXZlTVFNYXBNZXNzYWdlVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RTWVzc2FnZVRlc3QuY3MgYi90ZXN0L0NvbW1hbmRzL0FjdGl2ZU1RTWVzc2FnZVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RTWVzc2FnZVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvQ29tbWFuZHMvQWN0aXZlTVFNZXNzYWdlVGVzdC5jcwppbmRleCA2Y2U5NzFjLi5kZWI1NTg5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9jc2hhcnAvQ29tbWFuZHMvQWN0aXZlTVFNZXNzYWdlVGVzdC5jcworKysgYi90ZXN0L0NvbW1hbmRzL0FjdGl2ZU1RTWVzc2FnZVRlc3QuY3MKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJLy8gV2Ugc2hvdWxkbid0IGdldCB0aGUgZXhwZWN0ZWQgdmFsdWUgdGhvdWdoIGlmIHdlIHVzZSB0aGUgaW5uZXIgcHJvcGVydHkgCiAJCQkvLyBuYW1lIGZyb20gQWN0aXZlTVFNZXNzYWdlCiAJCQlzdHJpbmcgY29ycmVsYXRpb25JZCA9IChzdHJpbmcpIG1zZy5Qcm9wZXJ0aWVzWyJjb3JyZWxhdGlvbklkIl07Ci0JCQlBc3NlcnQuSXNOdWxsT3JFbXB0eShjb3JyZWxhdGlvbklkKTsJCQkKKwkJCUFzc2VydC5Jc1RydWUoc3RyaW5nLklzTnVsbE9yRW1wdHkoY29ycmVsYXRpb25JZCkpOwkJCQogCQkJbXNnLlByb3BlcnRpZXNbImNvcnJlbGF0aW9uSWQiXSA9ICJURVNUIjsKIAkJCWNvcnJlbGF0aW9uSWQgPSAoc3RyaW5nKSBtc2cuUHJvcGVydGllc1siY29ycmVsYXRpb25JZCJdOwogCQkJQXNzZXJ0LklzRmFsc2UobXNnLlByb3BlcnRpZXNbIk5NU0NvcnJlbGF0aW9uSUQiXS5FcXVhbHMobXNnLlByb3BlcnRpZXNbImNvcnJlbGF0aW9uSWQiXSkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZVRlc3QuY3MgYi90ZXN0L0NvbW1hbmRzL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVN0cmVhbU1lc3NhZ2VUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0NvbW1hbmRzL0FjdGl2ZU1RU3RyZWFtTWVzc2FnZVRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRleHRNZXNzYWdlVGVzdC5jcyBiL3Rlc3QvQ29tbWFuZHMvQWN0aXZlTVFUZXh0TWVzc2FnZVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0NvbW1hbmRzL0FjdGl2ZU1RVGV4dE1lc3NhZ2VUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0NvbW1hbmRzL0FjdGl2ZU1RVGV4dE1lc3NhZ2VUZXN0LmNzCmluZGV4IGUyM2Y3ZDQuLjVjNWJhZGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9BY3RpdmVNUVRleHRNZXNzYWdlVGVzdC5jcworKysgYi90ZXN0L0NvbW1hbmRzL0FjdGl2ZU1RVGV4dE1lc3NhZ2VUZXN0LmNzCkBAIC0xLDE5OCArMSwxOTggQEAKLe+7vy8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSAqLw0KLQ0KLXVzaW5nIFN5c3RlbTsNCi11c2luZyBTeXN0ZW0uSU87DQotdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5Db21tYW5kczsNCi11c2luZyBBcGFjaGUuTk1TLlV0aWw7DQotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOw0KLQ0KLW5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QuQ29tbWFuZHMNCi17DQotICAgIFtUZXN0Rml4dHVyZV0NCi0gICAgcHVibGljIGNsYXNzIEFjdGl2ZU1RVGV4dE1lc3NhZ2VUZXN0DQotICAgIHsNCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdENvbW1hbmQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIEFjdGl2ZU1RVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7DQotDQotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNzYWdlLlRleHQpOyAgICAgICAgICAgIA0KLQ0KLSAgICAgICAgICAgIC8vIFRlc3Qgd2l0aCBBU0NJSSBEYXRhLg0KLSAgICAgICAgICAgIG1lc3NhZ2UuVGV4dCA9ICJIZWxsbyBXb3JsZCI7DQotICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXNzYWdlLlRleHQpOw0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiSGVsbG8gV29ybGQiLCBtZXNzYWdlLlRleHQpOw0KLQ0KLSAgICAgICAgICAgIFN0cmluZyB1bmljb2RlU3RyaW5nID0NCi0gICAgICAgICAgICAgICAgIlRoaXMgdW5pY29kZSBzdHJpbmcgY29udGFpbnMgdHdvIGNoYXJhY3RlcnMgIiArDQotICAgICAgICAgICAgICAgICJ3aXRoIGNvZGVzIG91dHNpZGUgYW4gOC1iaXQgY29kZSByYW5nZSwgIiArDQotICAgICAgICAgICAgICAgICJQaSAoXHUwM2EwKSBhbmQgU2lnbWEgKFx1MDNhMykuIjsNCi0NCi0gICAgICAgICAgICBtZXNzYWdlLlRleHQgPSB1bmljb2RlU3RyaW5nOw0KLSAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobWVzc2FnZS5UZXh0KTsNCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwodW5pY29kZVN0cmluZywgbWVzc2FnZS5UZXh0KTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFNoYWxsb3dDb3B5KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIG1zZyA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7DQotICAgICAgICAgICAgc3RyaW5nIHRlc3RTdHJpbmcgPSAic3RyIjsNCi0gICAgICAgICAgICBtc2cuVGV4dCA9IHRlc3RTdHJpbmc7DQotICAgICAgICAgICAgTWVzc2FnZSBjb3B5ID0gbXNnLkNsb25lKCkgYXMgTWVzc2FnZTsNCi0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKG1zZy5UZXh0ID09ICgoQWN0aXZlTVFUZXh0TWVzc2FnZSkgY29weSkuVGV4dCk7DQotICAgICAgICB9DQotICAgIA0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0U2V0VGV4dCgpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIEFjdGl2ZU1RVGV4dE1lc3NhZ2UgbXNnID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsNCi0gICAgICAgICAgICBzdHJpbmcgc3RyID0gInRlc3RUZXh0IjsNCi0gICAgICAgICAgICBtc2cuVGV4dCA9IHN0cjsNCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobXNnLlRleHQsIHN0cik7DQotICAgICAgICB9DQotICAgIA0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0R2V0Qnl0ZXMoKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIG1zZyA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7DQotICAgICAgICAgICAgU3RyaW5nIHN0ciA9ICJ0ZXN0VGV4dCI7DQotICAgICAgICAgICAgbXNnLlRleHQgPSBzdHI7DQotICAgICAgICAgICAgbXNnLkJlZm9yZU1hcnNoYWxsKG51bGwpOw0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG1zZy5Db250ZW50Ow0KLSAgICAgICAgICAgIG1zZyA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7DQotICAgICAgICAgICAgbXNnLkNvbnRlbnQgPSBieXRlczsNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobXNnLlRleHQsIHN0cik7DQotICAgICAgICB9DQotICAgIA0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0Q2xlYXJCb2R5KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIHRleHRNZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsNCi0gICAgICAgICAgICB0ZXh0TWVzc2FnZS5UZXh0ID0gInN0cmluZyI7DQotICAgICAgICAgICAgdGV4dE1lc3NhZ2UuQ2xlYXJCb2R5KCk7DQotICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UodGV4dE1lc3NhZ2UuUmVhZE9ubHlCb2R5KTsNCi0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKHRleHRNZXNzYWdlLlRleHQpOw0KLSAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGV4dE1lc3NhZ2UuVGV4dCA9ICJTdHJpbmciOw0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKHRleHRNZXNzYWdlLlRleHQuTGVuZ3RoID4gMCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhdGNoKE1lc3NhZ2VOb3RXcml0ZWFibGVFeGNlcHRpb24pDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBBc3NlcnQuRmFpbCgic2hvdWxkIGJlIHdyaXRlYWJsZSIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90UmVhZGFibGVFeGNlcHRpb24pDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBBc3NlcnQuRmFpbCgic2hvdWxkIGJlIHJlYWRhYmxlIik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICANCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlYWRPbmx5Qm9keSgpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIEFjdGl2ZU1RVGV4dE1lc3NhZ2UgdGV4dE1lc3NhZ2UgPSBuZXcgQWN0aXZlTVFUZXh0TWVzc2FnZSgpOw0KLSAgICAgICAgICAgIHRleHRNZXNzYWdlLlRleHQgPSAidGVzdCI7DQotICAgICAgICAgICAgdGV4dE1lc3NhZ2UuUmVhZE9ubHlCb2R5ID0gdHJ1ZTsNCi0gICAgICAgICAgICB0cnkgDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKHRleHRNZXNzYWdlLlRleHQuTGVuZ3RoID4gMCk7DQotICAgICAgICAgICAgfSANCi0gICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90UmVhZGFibGVFeGNlcHRpb24pIA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgQXNzZXJ0LkZhaWwoInNob3VsZCBiZSByZWFkYWJsZSIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB0cnkgDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0ZXh0TWVzc2FnZS5UZXh0ID0gInRlc3QiOw0KLSAgICAgICAgICAgICAgICBBc3NlcnQuRmFpbCgic2hvdWxkIHRocm93IGV4Y2VwdGlvbiIpOw0KLSAgICAgICAgICAgIH0gDQotICAgICAgICAgICAgY2F0Y2goTWVzc2FnZU5vdFdyaXRlYWJsZUV4Y2VwdGlvbikgDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFR0ZXN0V3JpdGVPbmx5Qm9keSgpIA0KLSAgICAgICAgeyANCi0gICAgICAgICAgICAvLyBzaG91bGQgYWx3YXlzIGJlIHJlYWRhYmxlDQotICAgICAgICAgICAgQWN0aXZlTVFUZXh0TWVzc2FnZSB0ZXh0TWVzc2FnZSA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7DQotICAgICAgICAgICAgdGV4dE1lc3NhZ2UuUmVhZE9ubHlCb2R5ID0gZmFsc2U7DQotICAgICAgICAgICAgdHJ5IA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGV4dE1lc3NhZ2UuVGV4dCA9ICJ0ZXN0IjsNCi0gICAgICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZSh0ZXh0TWVzc2FnZS5UZXh0Lkxlbmd0aCA+IDApOw0KLSAgICAgICAgICAgIH0gDQotICAgICAgICAgICAgY2F0Y2goTWVzc2FnZU5vdFJlYWRhYmxlRXhjZXB0aW9uKSANCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEFzc2VydC5GYWlsKCJzaG91bGQgYmUgcmVhZGFibGUiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgdGV4dE1lc3NhZ2UuUmVhZE9ubHlCb2R5ID0gdHJ1ZTsNCi0gICAgICAgICAgICB0cnkgDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKHRleHRNZXNzYWdlLlRleHQuTGVuZ3RoID4gMCk7DQotICAgICAgICAgICAgICAgIHRleHRNZXNzYWdlLlRleHQgPSAidGVzdCI7DQotICAgICAgICAgICAgICAgIEFzc2VydC5GYWlsKCJzaG91bGQgdGhyb3cgZXhjZXB0aW9uIik7DQotICAgICAgICAgICAgfSANCi0gICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90UmVhZGFibGVFeGNlcHRpb24pDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBBc3NlcnQuRmFpbCgic2hvdWxkIGJlIHJlYWRhYmxlIik7DQotICAgICAgICAgICAgfSANCi0gICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90V3JpdGVhYmxlRXhjZXB0aW9uKSANCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RTaG9ydFRleHQoKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICBzdHJpbmcgc2hvcnRUZXh0ID0gIkNvbnRlbnQiOw0KLSAgICAgICAgICAgIEFjdGl2ZU1RVGV4dE1lc3NhZ2Ugc2hvcnRNZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsNCi0gICAgICAgICAgICBTZXRDb250ZW50KHNob3J0TWVzc2FnZSwgc2hvcnRUZXh0KTsNCi0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKHNob3J0TWVzc2FnZS5Ub1N0cmluZygpLkNvbnRhaW5zKCJUZXh0ID0gIiArIHNob3J0VGV4dCkpOw0KLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoc2hvcnRNZXNzYWdlLlRleHQgPT0gc2hvcnRUZXh0KTsNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBzdHJpbmcgbG9uZ1RleHQgPSAiVmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZWVlZWVlZXJ5IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmcgdGV4dCI7DQotICAgICAgICAgICAgc3RyaW5nIGxvbmdFeHBlY3RlZFRleHQgPSAiVmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZWVlZWVlZXJ5IGxvb29vb29vb29vb29vLi4ub29vb29uZyB0ZXh0IjsNCi0gICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIGxvbmdNZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsNCi0gICAgICAgICAgICBTZXRDb250ZW50KGxvbmdNZXNzYWdlLCBsb25nVGV4dCk7DQotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShsb25nTWVzc2FnZS5Ub1N0cmluZygpLkNvbnRhaW5zKCJUZXh0ID0gIiArIGxvbmdFeHBlY3RlZFRleHQpKTsNCi0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGxvbmdNZXNzYWdlLlRleHQgPT0gbG9uZ1RleHQpOyAgICAgICAgIA0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3ROdWxsVGV4dCgpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIEFjdGl2ZU1RVGV4dE1lc3NhZ2UgbnVsbE1lc3NhZ2UgPSBuZXcgQWN0aXZlTVFUZXh0TWVzc2FnZSgpOw0KLSAgICAgICAgICAgIFNldENvbnRlbnQobnVsbE1lc3NhZ2UsIG51bGwpOw0KLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwobnVsbE1lc3NhZ2UuVGV4dCk7DQotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShudWxsTWVzc2FnZS5Ub1N0cmluZygpLkNvbnRhaW5zKCJUZXh0ID0gbnVsbCIpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgU2V0Q29udGVudChNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyB0ZXh0KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIE1lbW9yeVN0cmVhbSBtc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOw0KLSAgICAgICAgICAgIEVuZGlhbkJpbmFyeVdyaXRlciBkYXRhT3V0ID0gbmV3IEVuZGlhbkJpbmFyeVdyaXRlcihtc3RyZWFtKTsNCi0gICAgICAgICAgICBkYXRhT3V0LldyaXRlU3RyaW5nMzIodGV4dCk7DQotICAgICAgICAgICAgZGF0YU91dC5DbG9zZSgpOw0KLSAgICAgICAgICAgIG1lc3NhZ2UuQ29udGVudCA9IG1zdHJlYW0uVG9BcnJheSgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KK++7vy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOwordXNpbmcgQXBhY2hlLk5NUy5VdGlsOwordXNpbmcgTlVuaXQuRnJhbWV3b3JrOworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0LkNvbW1hbmRzCit7CisgICAgW1Rlc3RGaXh0dXJlXQorICAgIHB1YmxpYyBjbGFzcyBBY3RpdmVNUVRleHRNZXNzYWdlVGVzdAorICAgIHsKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RDb21tYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgQWN0aXZlTVFUZXh0TWVzc2FnZSBtZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsKKworICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNzYWdlLlRleHQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICAvLyBUZXN0IHdpdGggQVNDSUkgRGF0YS4KKyAgICAgICAgICAgIG1lc3NhZ2UuVGV4dCA9ICJIZWxsbyBXb3JsZCI7CisgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1lc3NhZ2UuVGV4dCk7CisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIkhlbGxvIFdvcmxkIiwgbWVzc2FnZS5UZXh0KTsKKworICAgICAgICAgICAgU3RyaW5nIHVuaWNvZGVTdHJpbmcgPQorICAgICAgICAgICAgICAgICJUaGlzIHVuaWNvZGUgc3RyaW5nIGNvbnRhaW5zIHR3byBjaGFyYWN0ZXJzICIgKworICAgICAgICAgICAgICAgICJ3aXRoIGNvZGVzIG91dHNpZGUgYW4gOC1iaXQgY29kZSByYW5nZSwgIiArCisgICAgICAgICAgICAgICAgIlBpIChcdTAzYTApIGFuZCBTaWdtYSAoXHUwM2EzKS4iOworCisgICAgICAgICAgICBtZXNzYWdlLlRleHQgPSB1bmljb2RlU3RyaW5nOworICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXNzYWdlLlRleHQpOworICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHVuaWNvZGVTdHJpbmcsIG1lc3NhZ2UuVGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFNoYWxsb3dDb3B5KCkKKyAgICAgICAgeworICAgICAgICAgICAgQWN0aXZlTVFUZXh0TWVzc2FnZSBtc2cgPSBuZXcgQWN0aXZlTVFUZXh0TWVzc2FnZSgpOworICAgICAgICAgICAgc3RyaW5nIHRlc3RTdHJpbmcgPSAic3RyIjsKKyAgICAgICAgICAgIG1zZy5UZXh0ID0gdGVzdFN0cmluZzsKKyAgICAgICAgICAgIE1lc3NhZ2UgY29weSA9IG1zZy5DbG9uZSgpIGFzIE1lc3NhZ2U7CisgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKG1zZy5UZXh0ID09ICgoQWN0aXZlTVFUZXh0TWVzc2FnZSkgY29weSkuVGV4dCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RTZXRUZXh0KCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIEFjdGl2ZU1RVGV4dE1lc3NhZ2UgbXNnID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIHN0cmluZyBzdHIgPSAidGVzdFRleHQiOworICAgICAgICAgICAgbXNnLlRleHQgPSBzdHI7CisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobXNnLlRleHQsIHN0cik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RHZXRCeXRlcygpIAorICAgICAgICB7CisgICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIG1zZyA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gInRlc3RUZXh0IjsKKyAgICAgICAgICAgIG1zZy5UZXh0ID0gc3RyOworICAgICAgICAgICAgbXNnLkJlZm9yZU1hcnNoYWxsKG51bGwpOworICAgICAgICAgICAgCisgICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBtc2cuQ29udGVudDsKKyAgICAgICAgICAgIG1zZyA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7CisgICAgICAgICAgICBtc2cuQ29udGVudCA9IGJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobXNnLlRleHQsIHN0cik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RDbGVhckJvZHkoKQorICAgICAgICB7CisgICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIHRleHRNZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIHRleHRNZXNzYWdlLlRleHQgPSAic3RyaW5nIjsKKyAgICAgICAgICAgIHRleHRNZXNzYWdlLkNsZWFyQm9keSgpOworICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UodGV4dE1lc3NhZ2UuUmVhZE9ubHlCb2R5KTsKKyAgICAgICAgICAgIEFzc2VydC5Jc051bGwodGV4dE1lc3NhZ2UuVGV4dCk7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0TWVzc2FnZS5UZXh0ID0gIlN0cmluZyI7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZSh0ZXh0TWVzc2FnZS5UZXh0Lkxlbmd0aCA+IDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goTWVzc2FnZU5vdFdyaXRlYWJsZUV4Y2VwdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBc3NlcnQuRmFpbCgic2hvdWxkIGJlIHdyaXRlYWJsZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goTWVzc2FnZU5vdFJlYWRhYmxlRXhjZXB0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFzc2VydC5GYWlsKCJzaG91bGQgYmUgcmVhZGFibGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlYWRPbmx5Qm9keSgpIAorICAgICAgICB7CisgICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIHRleHRNZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIHRleHRNZXNzYWdlLlRleHQgPSAidGVzdCI7CisgICAgICAgICAgICB0ZXh0TWVzc2FnZS5SZWFkT25seUJvZHkgPSB0cnVlOworICAgICAgICAgICAgdHJ5IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFzc2VydC5Jc1RydWUodGV4dE1lc3NhZ2UuVGV4dC5MZW5ndGggPiAwKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90UmVhZGFibGVFeGNlcHRpb24pIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFzc2VydC5GYWlsKCJzaG91bGQgYmUgcmVhZGFibGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0TWVzc2FnZS5UZXh0ID0gInRlc3QiOworICAgICAgICAgICAgICAgIEFzc2VydC5GYWlsKCJzaG91bGQgdGhyb3cgZXhjZXB0aW9uIik7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgY2F0Y2goTWVzc2FnZU5vdFdyaXRlYWJsZUV4Y2VwdGlvbikgCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFR0ZXN0V3JpdGVPbmx5Qm9keSgpIAorICAgICAgICB7IAorICAgICAgICAgICAgLy8gc2hvdWxkIGFsd2F5cyBiZSByZWFkYWJsZQorICAgICAgICAgICAgQWN0aXZlTVFUZXh0TWVzc2FnZSB0ZXh0TWVzc2FnZSA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7CisgICAgICAgICAgICB0ZXh0TWVzc2FnZS5SZWFkT25seUJvZHkgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0TWVzc2FnZS5UZXh0ID0gInRlc3QiOworICAgICAgICAgICAgICAgIEFzc2VydC5Jc1RydWUodGV4dE1lc3NhZ2UuVGV4dC5MZW5ndGggPiAwKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90UmVhZGFibGVFeGNlcHRpb24pIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFzc2VydC5GYWlsKCJzaG91bGQgYmUgcmVhZGFibGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRNZXNzYWdlLlJlYWRPbmx5Qm9keSA9IHRydWU7CisgICAgICAgICAgICB0cnkgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZSh0ZXh0TWVzc2FnZS5UZXh0Lkxlbmd0aCA+IDApOworICAgICAgICAgICAgICAgIHRleHRNZXNzYWdlLlRleHQgPSAidGVzdCI7CisgICAgICAgICAgICAgICAgQXNzZXJ0LkZhaWwoInNob3VsZCB0aHJvdyBleGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBjYXRjaChNZXNzYWdlTm90UmVhZGFibGVFeGNlcHRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQXNzZXJ0LkZhaWwoInNob3VsZCBiZSByZWFkYWJsZSIpOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGNhdGNoKE1lc3NhZ2VOb3RXcml0ZWFibGVFeGNlcHRpb24pIAorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFNob3J0VGV4dCgpIAorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgc2hvcnRUZXh0ID0gIkNvbnRlbnQiOworICAgICAgICAgICAgQWN0aXZlTVFUZXh0TWVzc2FnZSBzaG9ydE1lc3NhZ2UgPSBuZXcgQWN0aXZlTVFUZXh0TWVzc2FnZSgpOworICAgICAgICAgICAgU2V0Q29udGVudChzaG9ydE1lc3NhZ2UsIHNob3J0VGV4dCk7CisgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKHNob3J0TWVzc2FnZS5Ub1N0cmluZygpLkNvbnRhaW5zKCJUZXh0ID0gIiArIHNob3J0VGV4dCkpOworICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShzaG9ydE1lc3NhZ2UuVGV4dCA9PSBzaG9ydFRleHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHJpbmcgbG9uZ1RleHQgPSAiVmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZWVlZWVlZXJ5IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmcgdGV4dCI7CisgICAgICAgICAgICBzdHJpbmcgbG9uZ0V4cGVjdGVkVGV4dCA9ICJWZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlZWVlZWVlcnkgbG9vb29vb29vb29vb28uLi5vb29vb25nIHRleHQiOworICAgICAgICAgICAgQWN0aXZlTVFUZXh0TWVzc2FnZSBsb25nTWVzc2FnZSA9IG5ldyBBY3RpdmVNUVRleHRNZXNzYWdlKCk7CisgICAgICAgICAgICBTZXRDb250ZW50KGxvbmdNZXNzYWdlLCBsb25nVGV4dCk7CisgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGxvbmdNZXNzYWdlLlRvU3RyaW5nKCkuQ29udGFpbnMoIlRleHQgPSAiICsgbG9uZ0V4cGVjdGVkVGV4dCkpOworICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShsb25nTWVzc2FnZS5UZXh0ID09IGxvbmdUZXh0KTsgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3ROdWxsVGV4dCgpIAorICAgICAgICB7CisgICAgICAgICAgICBBY3RpdmVNUVRleHRNZXNzYWdlIG51bGxNZXNzYWdlID0gbmV3IEFjdGl2ZU1RVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIFNldENvbnRlbnQobnVsbE1lc3NhZ2UsIG51bGwpOworICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChudWxsTWVzc2FnZS5UZXh0KTsKKyAgICAgICAgICAgIEFzc2VydC5Jc1RydWUobnVsbE1lc3NhZ2UuVG9TdHJpbmcoKS5Db250YWlucygiVGV4dCA9IG51bGwiKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RlY3RlZCB2b2lkIFNldENvbnRlbnQoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgdGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgTWVtb3J5U3RyZWFtIG1zdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICBFbmRpYW5CaW5hcnlXcml0ZXIgZGF0YU91dCA9IG5ldyBFbmRpYW5CaW5hcnlXcml0ZXIobXN0cmVhbSk7CisgICAgICAgICAgICBkYXRhT3V0LldyaXRlU3RyaW5nMzIodGV4dCk7CisgICAgICAgICAgICBkYXRhT3V0LkNsb3NlKCk7CisgICAgICAgICAgICBtZXNzYWdlLkNvbnRlbnQgPSBtc3RyZWFtLlRvQXJyYXkoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9Db21tYW5kVGVzdC5jcyBiL3Rlc3QvQ29tbWFuZHMvQ29tbWFuZFRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9Db21tYW5kVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9Db21tYW5kcy9Db21tYW5kVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0NvbW1hbmRzL01lc3NhZ2VDb21wcmVzc2lvblRlc3QuY3MgYi90ZXN0L0NvbW1hbmRzL01lc3NhZ2VDb21wcmVzc2lvblRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9Db21tYW5kcy9NZXNzYWdlQ29tcHJlc3Npb25UZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0NvbW1hbmRzL01lc3NhZ2VDb21wcmVzc2lvblRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9Db25uZWN0aW9uRmFjdG9yeVRlc3QuY3MgYi90ZXN0L0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9Db25uZWN0aW9uRmFjdG9yeVRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9Db25uZWN0aW9uTWV0YURhdGFUZXN0LmNzIGIvdGVzdC9Db25uZWN0aW9uTWV0YURhdGFUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvQ29ubmVjdGlvbk1ldGFEYXRhVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9Db25uZWN0aW9uTWV0YURhdGFUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvRHRjQmFzaWNUcmFuc2FjdGlvbnNUZXN0LmNzIGIvdGVzdC9EdGNCYXNpY1RyYW5zYWN0aW9uc1Rlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0R0Y0Jhc2ljVHJhbnNhY3Rpb25zVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9EdGNCYXNpY1RyYW5zYWN0aW9uc1Rlc3QuY3MKaW5kZXggYjU1MzY4OS4uMjI5YzViZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvY3NoYXJwL0R0Y0Jhc2ljVHJhbnNhY3Rpb25zVGVzdC5jcworKysgYi90ZXN0L0R0Y0Jhc2ljVHJhbnNhY3Rpb25zVGVzdC5jcwpAQCAtMSwxMDEgKzEsMTAxIEBACi3vu78vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi11c2luZyBTeXN0ZW07DQotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsNCi11c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zYWN0aW9uczsNCi11c2luZyBOVW5pdC5GcmFtZXdvcms7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdA0KLXsNCi0gICAgW1Rlc3RGaXh0dXJlXQ0KLSAgICBbQ2F0ZWdvcnkoIk1hbnVhbCIpXQ0KLSAgICBjbGFzcyBEdGNCYXNpY1RyYW5zYWN0aW9uc1Rlc3QgOiBEdGNUcmFuc2FjdGlvbnNUZXN0U3VwcG9ydA0KLSAgICB7DQotICAgICAgICBbU2V0VXBdDQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXRVcCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgYmFzZS5TZXRVcCgpOw0KLQ0KLSAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeSA9IG5ldyBOZXRUeENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOw0KLSAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeS5Db25maWd1cmVkUmVzb3VyY2VNYW5hZ2VySWQgPSBHdWlkLk5ld0d1aWQoKS5Ub1N0cmluZygpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBbRXhwZWN0ZWRFeGNlcHRpb24oIkFwYWNoZS5OTVMuTk1TRXhjZXB0aW9uIildDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0U2Vzc2lvbkNyZWF0ZUZhaWxzV2l0aEludmFsaWRMb2dMb2NhdGlvbigpDQotICAgICAgICB7DQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgTmV0VHhDb25uZWN0aW9uIGNvbiA9IGNvbm5lY3Rpb24gYXMgTmV0VHhDb25uZWN0aW9uOw0KLSAgICAgICAgICAgICAgICBOZXRUeFJlY292ZXJ5UG9saWN5IHBvbGljeSA9IGNvbi5SZWNvdmVyeVBvbGljeTsNCi0gICAgICAgICAgICAgICAgKHBvbGljeS5SZWNvdmVyeUxvZ2dlciBhcyBSZWNvdmVyeUZpbGVMb2dnZXIpLkxvY2F0aW9uID0gbm9uRXhpc3RhbnRQYXRoOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbigpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFRyYW5zYWN0ZWREQlJlYWRBbmRQcm9kdWNlKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4NCi0gICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0VHJhbnNhY3RlRGVxdWV1ZUFuZERiV3JpdGUoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLg0KLSAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsNCi0gICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gYW5kIHN0b3JlZCBhbGwgbWVzc2FnZXMNCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgbm8gbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlIGFmdGVyIGNvbW1pdC4NCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCivvu78vKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNhY3Rpb25zOwordXNpbmcgTlVuaXQuRnJhbWV3b3JrOworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0Cit7CisgICAgW1Rlc3RGaXh0dXJlXQorICAgIFtDYXRlZ29yeSgiTWFudWFsIildCisgICAgY2xhc3MgRHRjQmFzaWNUcmFuc2FjdGlvbnNUZXN0IDogRHRjVHJhbnNhY3Rpb25zVGVzdFN1cHBvcnQKKyAgICB7CisgICAgICAgIFtTZXRVcF0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgU2V0VXAoKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLlNldFVwKCk7CisKKyAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeSA9IG5ldyBOZXRUeENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworICAgICAgICAgICAgdGhpcy5kdGNGYWN0b3J5LkNvbmZpZ3VyZWRSZXNvdXJjZU1hbmFnZXJJZCA9IEd1aWQuTmV3R3VpZCgpLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgW0V4cGVjdGVkRXhjZXB0aW9uKHR5cGVvZihOTVNFeGNlcHRpb24pKV0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFNlc3Npb25DcmVhdGVGYWlsc1dpdGhJbnZhbGlkTG9nTG9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgTmV0VHhDb25uZWN0aW9uIGNvbiA9IGNvbm5lY3Rpb24gYXMgTmV0VHhDb25uZWN0aW9uOworICAgICAgICAgICAgICAgIE5ldFR4UmVjb3ZlcnlQb2xpY3kgcG9saWN5ID0gY29uLlJlY292ZXJ5UG9saWN5OworICAgICAgICAgICAgICAgIChwb2xpY3kuUmVjb3ZlcnlMb2dnZXIgYXMgUmVjb3ZlcnlGaWxlTG9nZ2VyKS5Mb2NhdGlvbiA9IG5vbkV4aXN0YW50UGF0aDsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RUcmFuc2FjdGVkREJSZWFkQW5kUHJvZHVjZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLgorICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7CisKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOworCisgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RUcmFuc2FjdGVEZXF1ZXVlQW5kRGJXcml0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLgorICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOworICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOworCisgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uIGFuZCBzdG9yZWQgYWxsIG1lc3NhZ2VzCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG5vIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZSBhZnRlciBjb21taXQuCisgICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9EdGNDb25zdW1lclRyYW5zYWN0aW9uc1Rlc3QuY3MgYi90ZXN0L0R0Y0NvbnN1bWVyVHJhbnNhY3Rpb25zVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvRHRjQ29uc3VtZXJUcmFuc2FjdGlvbnNUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L0R0Y0NvbnN1bWVyVHJhbnNhY3Rpb25zVGVzdC5jcwppbmRleCBjYWExOTU4Li45NjE1NDU2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9jc2hhcnAvRHRjQ29uc3VtZXJUcmFuc2FjdGlvbnNUZXN0LmNzCisrKyBiL3Rlc3QvRHRjQ29uc3VtZXJUcmFuc2FjdGlvbnNUZXN0LmNzCkBAIC0xLDc0NSArMSw3NDUgQEAKLe+7vy8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSAqLw0KLQ0KLXVzaW5nIFN5c3RlbTsNCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7DQotdXNpbmcgU3lzdGVtLkRhdGEuU3FsQ2xpZW50Ow0KLXVzaW5nIFN5c3RlbS5JTzsNCi11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOw0KLXVzaW5nIFN5c3RlbS5UcmFuc2FjdGlvbnM7DQotdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5UcmFuc3BvcnQ7DQotdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5UcmFuc3BvcnQuVGNwOw0KLXVzaW5nIE5Vbml0LkZyYW1ld29yazsNCi0NCi1uYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0DQotew0KLSAgICBbVGVzdEZpeHR1cmVdDQotICAgIFtDYXRlZ29yeSgiTWFudWFsIildDQotICAgIGNsYXNzIER0Y0NvbnN1bWVyVHJhbnNhY3Rpb25zVGVzdCA6IER0Y1RyYW5zYWN0aW9uc1Rlc3RTdXBwb3J0DQotICAgIHsNCi0gICAgICAgIFtTZXRVcF0NCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIFNldFVwKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBiYXNlLlNldFVwKCk7DQotDQotICAgICAgICAgICAgdGhpcy5kdGNGYWN0b3J5ID0gbmV3IE5ldFR4Q29ubmVjdGlvbkZhY3RvcnkoUmVwbGFjZUVudlZhcihjb25uZWN0aW9uVVJJKSk7DQotICAgICAgICAgICAgdGhpcy5kdGNGYWN0b3J5LkNvbmZpZ3VyZWRSZXNvdXJjZU1hbmFnZXJJZCA9IEd1aWQuTmV3R3VpZCgpLlRvU3RyaW5nKCk7DQotICAgICAgICB9DQotDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWRlbGl2ZXJlZCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7DQotDQotICAgICAgICAgICAgLy8gcmVjZWl2ZSBqdXN0IG9uZQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgbWVzc2FnZSBmcm9tIHF1ZXVlIGFuZCBpbnNlcnQgaW50byBkYiB0YWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpDQotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsSW5zZXJ0Q29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db25uZWN0aW9uID0gc3FsQ29ubmVjdGlvbjsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoMTAwMDApKSBhcyBJVGV4dE1lc3NhZ2U7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiSU5TRVJUIElOVE8gezB9IFZBTFVFUyAoezF9KSIsIHRlc3RUYWJsZSwgQ29udmVydC5Ub0ludDMyKG1lc3NhZ2UuVGV4dCkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWQuQ29tcGxldGUoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLkNsb3NlKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBvdGhlcnMgbWVzc2FnZSBoYXZlIHN0YXR1cyByZWRlbGl2ZXJlZCA9IGZhbHNlDQotICAgICAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGNoZWNrRmFjdG9yeSA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGNoZWNrRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIHVzaW5nIChJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKCkpDQotICAgICAgICAgICAgICAgIHVzaW5nIChJUXVldWVCcm93c2VyIGJyb3dzZXIgPSBzZXNzaW9uLkNyZWF0ZUJyb3dzZXIoc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKSkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIElFbnVtZXJhdG9yIGVudW1lcmF0b3IgPSBicm93c2VyLkdldEVudW1lcmF0b3IoKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbnVtZXJhdG9yLk1vdmVOZXh0KCkpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgSU1lc3NhZ2UgbXNnID0gZW51bWVyYXRvci5DdXJyZW50IGFzIElNZXNzYWdlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobXNnLCAibWVzc2FnZSBpcyBub3QgaW4gdGhlIHF1ZXVlISIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKG1zZy5OTVNSZWRlbGl2ZXJlZCwgIm1lc3NhZ2UgaXMgcmVkZWxpdmVyZWQhIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWRlbGl2ZXJlZENhc2UyKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25zdCBpbnQgbWVzc2FnZUNvdW50ID0gMzAwOw0KLSAgICAgICAgICAgIGNvbnN0IGludCByZWNlaXZlQ291bnQgPSAxNTA7DQotDQotICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKG1lc3NhZ2VDb3VudCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIC8vIHJlY2VpdmUgaGFsZiBvZiB0b3RhbCBtZXNzYWdlcw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2VpdmVDb3VudDsgaSsrKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBJUXVldWUgcXVldWUgPSBzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgbWVzc2FnZSBmcm9tIHF1ZXVlIGFuZCBpbnNlcnQgaW50byBkYiB0YWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxJbnNlcnRDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbm5lY3Rpb24gPSBzcWxDb25uZWN0aW9uOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIG1lc3NhZ2UgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygxMDAwMCkpIGFzIElUZXh0TWVzc2FnZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIklOU0VSVCBJTlRPIHswfSBWQUxVRVMgKHsxfSkiLCB0ZXN0VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0LlRvSW50MzIobWVzc2FnZS5UZXh0KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5DbG9zZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJDb21wbGV0ZWQgZm9yIGxvb3AgaXRlcmF0aW9uICMiICsgaSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBvdGhlcnMgbWVzc2FnZSBoYXZlIHN0YXR1cyByZWRlbGl2ZXJlZCA9IGZhbHNlDQotICAgICAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGNoZWNrRmFjdG9yeSA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGNoZWNrRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIHVzaW5nIChJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKCkpDQotICAgICAgICAgICAgICAgIHVzaW5nIChJUXVldWVCcm93c2VyIGJyb3dzZXIgPSBzZXNzaW9uLkNyZWF0ZUJyb3dzZXIoc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKSkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIElFbnVtZXJhdG9yIGVudW1lcmF0b3IgPSBicm93c2VyLkdldEVudW1lcmF0b3IoKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbnVtZXJhdG9yLk1vdmVOZXh0KCkpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgSU1lc3NhZ2UgbXNnID0gZW51bWVyYXRvci5DdXJyZW50IGFzIElNZXNzYWdlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobXNnLCAibWVzc2FnZSBpcyBub3QgaW4gdGhlIHF1ZXVlISIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKG1zZy5OTVNSZWRlbGl2ZXJlZCwgIm1lc3NhZ2UgaXMgcmVkZWxpdmVyZWQhIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWRlbGl2ZXJlZENhc2UzKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25zdCBpbnQgbWVzc2FnZUNvdW50ID0gMzAwOw0KLSAgICAgICAgICAgIGNvbnN0IGludCByZWNlaXZlQ291bnQgPSAxNTA7DQotDQotICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKG1lc3NhZ2VDb3VudCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIC8vIHJlY2VpdmUgaGFsZiBvZiB0b3RhbCBtZXNzYWdlcw0KLSAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgbWVzc2FnZSBmcm9tIHF1ZXVlIGFuZCBpbnNlcnQgaW50byBkYiB0YWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2VpdmVDb3VudDsgaSsrKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFRyYW5zYWN0aW9uU2NvcGUgc2NvcGVkID0gbmV3IFRyYW5zYWN0aW9uU2NvcGUoVHJhbnNhY3Rpb25TY29wZU9wdGlvbi5SZXF1aXJlc05ldykpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsSW5zZXJ0Q29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uT3BlbigpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db25uZWN0aW9uID0gc3FsQ29ubmVjdGlvbjsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSBtZXNzYWdlID0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoMTAwMDApKSBhcyBJVGV4dE1lc3NhZ2U7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbW1hbmRUZXh0ID0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJJTlNFUlQgSU5UTyB7MH0gVkFMVUVTICh7MX0pIiwgdGVzdFRhYmxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydC5Ub0ludDMyKG1lc3NhZ2UuVGV4dCkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5FeGVjdXRlTm9uUXVlcnkoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5Db21wbGV0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5DbG9zZSgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmlyc3Qgc3RhZ2Ugb2siKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IG90aGVycyBtZXNzYWdlIGhhdmUgc3RhdHVzIHJlZGVsaXZlcmVkID0gZmFsc2UNCi0gICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgY2hlY2tGYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gY2hlY2tGYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgdXNpbmcgKElRdWV1ZUJyb3dzZXIgYnJvd3NlciA9IHNlc3Npb24uQ3JlYXRlQnJvd3NlcihzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSUVudW1lcmF0b3IgZW51bWVyYXRvciA9IGJyb3dzZXIuR2V0RW51bWVyYXRvcigpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudW1lcmF0b3IuTW92ZU5leHQoKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSBtc2cgPSBlbnVtZXJhdG9yLkN1cnJlbnQgYXMgSU1lc3NhZ2U7DQotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUhIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UobXNnLk5NU1JlZGVsaXZlcmVkLCAibWVzc2FnZSBpcyByZWRlbGl2ZXJlZCEiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlZGVsaXZlcmVkTm9Db21wbGV0ZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgY29uc3QgaW50IG1lc3NhZ2VDb3VudCA9IDMwMDsNCi0gICAgICAgICAgICBjb25zdCBpbnQgcmVjZWl2ZUNvdW50ID0gMTUwOw0KLQ0KLSAgICAgICAgICAgIC8vIGVucXVldWUgc2V2ZXJhbCBtZXNzYWdlcw0KLSAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsNCi0gICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZShtZXNzYWdlQ291bnQpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gYWxsb3cgbm8gcmVkZWxpdmVyeSBzbyB0aGF0IG1lc3NhZ2UgaW1tZWRpYXRseSBnb2VzIHRvIHRoZSBETFEgaWYgZmlyc3QgcmVhZCBmYWlscw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlJlZGVsaXZlcnlQb2xpY3kuTWF4aW11bVJlZGVsaXZlcmllcyA9IDA7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgLy8gcmVjZWl2ZSBoYWxmIG9mIHRvdGFsIG1lc3NhZ2VzDQotICAgICAgICAgICAgICAgIHVzaW5nIChJTmV0VHhTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbigpKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBJUXVldWUgcXVldWUgPSBzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBtZXNzYWdlIGZyb20gcXVldWUgYW5kIGluc2VydCBpbnRvIGRiIHRhYmxlDQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZUNvdW50OyBpKyspDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxJbnNlcnRDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbm5lY3Rpb24gPSBzcWxDb25uZWN0aW9uOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIG1lc3NhZ2UgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygxMDAwMCkpIGFzIElUZXh0TWVzc2FnZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIklOU0VSVCBJTlRPIHswfSBWQUxVRVMgKHsxfSkiLCB0ZXN0VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0LlRvSW50MzIobWVzc2FnZS5UZXh0KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5DbG9zZSgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmlyc3Qgc3RhZ2Ugb2siKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IG90aGVycyBtZXNzYWdlIGhhdmUgc3RhdHVzIHJlZGVsaXZlcmVkID0gZmFsc2UNCi0gICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgY2hlY2tGYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gY2hlY2tGYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgdXNpbmcgKElRdWV1ZUJyb3dzZXIgYnJvd3NlciA9IHNlc3Npb24uQ3JlYXRlQnJvd3NlcihzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSUVudW1lcmF0b3IgZW51bWVyYXRvciA9IGJyb3dzZXIuR2V0RW51bWVyYXRvcigpOw0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudW1lcmF0b3IuTW92ZU5leHQoKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSBtc2cgPSBlbnVtZXJhdG9yLkN1cnJlbnQgYXMgSU1lc3NhZ2U7DQotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUhIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UobXNnLk5NU1JlZGVsaXZlcmVkLCAibWVzc2FnZSBpcyByZWRlbGl2ZXJlZCEiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJ5QWZ0ZXJDb21taXRGYWlsc0JlZm9yZVNlbnQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIHF1ZXVlIHdpdGggZGF0YSB0byBzZW5kIGFuZCBjbGVhcnMgdGhlIERCLg0KLSAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsNCi0gICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOw0KLSAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFByZVByb2Nlc3NvciArPSB0aGlzLkZhaWxPbkNvbW1pdFRyYW5zcG9ydEhvb2s7DQotDQotICAgICAgICAgICAgICAgIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMTAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNvbW1pdGVkDQotICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWVOb1JlY292ZXJ5KCk7DQotDQotICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbCgpOw0KLQ0KLSAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlcnlBZnRlckNvbW1pdEZhaWxzQWZ0ZXJTZW50KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBxdWV1ZSB3aXRoIGRhdGEgdG8gc2VuZCBhbmQgY2xlYXJzIHRoZSBEQi4NCi0gICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7DQotICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsNCi0gICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQb3N0UHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uQ29tbWl0VHJhbnNwb3J0SG9vazsNCi0NCi0gICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7DQotDQotICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgxMDAwKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjb21taXRlZA0KLSAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpOw0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdEl0ZXJhdGl2ZVRyYW5zYWN0ZWRDb25zdW1lKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBxdWV1ZSB3aXRoIGRhdGEgdG8gc2VuZCBhbmQgY2xlYXJzIHRoZSBEQi4NCi0gICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7DQotICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoNSAqIE1TR19DT1VOVCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7DQotICAgICAgICAgICAgICAgIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0gICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7DQotICAgICAgICAgICAgICAgIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoNSAqIE1TR19DT1VOVCk7DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIE5PVCBwcmVzZW50IGluIHRoZSBxdWV1ZQ0KLSAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0Q29uc3VtZVdpdGhEQkluc2VydExvZ0xvY2F0aW9uKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25zdCBzdHJpbmcgbG9nTG9jYXRpb24gPSBAIi5cUmVjb3ZlcnlEaXIiOw0KLSAgICAgICAgICAgIHN0cmluZyBuZXdDb25uZWN0aW9uVXJpID0NCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvblVSSSArICI/bm1zLlJlY292ZXJ5UG9saWN5LlJlY292ZXJ5TG9nZ2VyLkxvY2F0aW9uPSIgKyBsb2dMb2NhdGlvbiArDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJm5tcy5jb25maWd1cmVkUmVzb3VyY2VNYW5hZ2VySWQ9IiArIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRjRmFjdG9yeS5Db25maWd1cmVkUmVzb3VyY2VNYW5hZ2VySWQ7DQotDQotICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7DQotDQotICAgICAgICAgICAgaWYgKERpcmVjdG9yeS5FeGlzdHMobG9nTG9jYXRpb24pKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgRGlyZWN0b3J5LkRlbGV0ZShsb2dMb2NhdGlvbiwgdHJ1ZSk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIERpcmVjdG9yeS5DcmVhdGVEaXJlY3RvcnkobG9nTG9jYXRpb24pOw0KLQ0KLSAgICAgICAgICAgIGR0Y0ZhY3RvcnkgPSBuZXcgTmV0VHhDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKG5ld0Nvbm5lY3Rpb25VcmkpKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsNCi0gICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQcmVQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25Db21taXRUcmFuc3BvcnRIb29rOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgRGlyZWN0b3J5LkdldEZpbGVzKGxvZ0xvY2F0aW9uKS5MZW5ndGgpOw0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgTk9UIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuUmVzZXREdGNSZWNvdmVyeSgpOw0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoMCwgbmV3Q29ubmVjdGlvblVyaSk7DQotDQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIERpcmVjdG9yeS5HZXRGaWxlcyhsb2dMb2NhdGlvbikuTGVuZ3RoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJBZnRlclRyYW5zYWN0aW9uU2NvcGVBYm9ydGVkKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBxdWV1ZSB3aXRoIGRhdGEgdG8gc2VuZCBhbmQgY2xlYXJzIHRoZSBEQi4NCi0gICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7DQotICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aFNjb3BlQWJvcnRlZChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgTk9UIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRW1wdHkoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICBOZXRUeFRyYW5zYWN0aW9uQ29udGV4dC5SZXNldER0Y1JlY292ZXJ5KCk7DQotICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyUm9sbGJhY2tGYWlsV2hlblNjb3BlQWJvcnRlZCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7DQotICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUHJlUHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uUm9sbGJhY2tUcmFuc3BvcnRIb29rOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aFNjb3BlQWJvcnRlZChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgTk9UIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRW1wdHkoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcmVjb3ZlcmVkIGFuZCBwcmVzZW50IGluIHRoZSBxdWV1ZSANCi0gICAgICAgICAgICBOZXRUeFRyYW5zYWN0aW9uQ29udGV4dC5SZXNldER0Y1JlY292ZXJ5KCk7DQotICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyRmFpbE9uVHJhbnNhY3Rpb25CZWZvcmVQcmVwYXJlU2VudCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsNCi0gICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQcmVQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25QcmVwYXJlVHJhbnNwb3J0SG9vazsNCi0NCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIE1lc3NhZ2VzIGFyZSB2aXNpYmxlIHNpbmNlIG5vIHByZXBhcmUgc2VudA0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnROb1JlY292ZXJ5KCk7DQotDQotICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIE5PVCBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuUmVzZXREdGNSZWNvdmVyeSgpOw0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJBZnRlckZhaWxPblRyYW5zYWN0aW9uQWZ0ZXJQcmVwYXJlU2VudCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsNCi0gICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQb3N0UHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uUHJlcGFyZVRyYW5zcG9ydEhvb2s7DQotDQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyBub3QgdmlzaWJsZSB5ZXQgYmVjYXVzZSBpdCBtdXN0IGJlIHJvbGxlZCBiYWNrDQotICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWVOb1JlY292ZXJ5KCk7DQotDQotICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIE5PVCBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuUmVzZXREdGNSZWNvdmVyeSgpOw0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgTWVzc2FnZVNob3VsZEVubGlzdFRvVGhlQ29ycmVjdFRyYW5zYWN0aW9uKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25zdCBpbnQgbWVzc2FnZUNvdW50ID0gMTAwOw0KLSAgICAgICAgICAgIGNvbnN0IGludCByZWNlaXZlQ291bnQgPSAxMDA7DQotDQotICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzDQotICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKG1lc3NhZ2VDb3VudCk7DQotDQotICAgICAgICAgICAgdmFyIGVubGlzdG1lbnQgPSBuZXcgVGVzdFNpbmdsZVBoYXNlQ29tbWl0KCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIC8vIHJlY2VpdmUgaGFsZiBvZiB0b3RhbCBtZXNzYWdlcw0KLSAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSkpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNlaXZlQ291bnQ7IGkrKykNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygxMDAwMCkpIGFzIElUZXh0TWVzc2FnZTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbi5DdXJyZW50LkVubGlzdER1cmFibGUoR3VpZC5OZXdHdWlkKCksIGVubGlzdG1lbnQsIEVubGlzdG1lbnRPcHRpb25zLk5vbmUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXcgUmFuZG9tKCkuTmV4dCgyKSA9PSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkluZm9Gb3JtYXQoIlRocm93aW5nIHJhbmRvbSBFeGNlcHRpb24gZm9yIE1lc3NhZ2UgezB9IiwgbWVzc2FnZS5OTVNNZXNzYWdlSWQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5Db21wbGV0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuRmFsc2UoZW5saXN0bWVudC5zaW5nbGVQaGFzZUNvbW1pdCwgIk5vIHNpbmdsZSBwaGFzZSBjb21taXQgc2hvdWxkIGhhcHBlbi4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBpbnRlcm5hbCBjbGFzcyBUZXN0U2luZ2xlUGhhc2VDb21taXQgOiBJU2luZ2xlUGhhc2VOb3RpZmljYXRpb24NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwdWJsaWMgYm9vbCBzaW5nbGVQaGFzZUNvbW1pdCA9IGZhbHNlOw0KLQ0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIFByZXBhcmUoUHJlcGFyaW5nRW5saXN0bWVudCBwcmVwYXJpbmdFbmxpc3RtZW50KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcHJlcGFyaW5nRW5saXN0bWVudC5QcmVwYXJlZCgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBDb21taXQoRW5saXN0bWVudCBlbmxpc3RtZW50KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgZW5saXN0bWVudC5Eb25lKCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIFJvbGxiYWNrKEVubGlzdG1lbnQgZW5saXN0bWVudCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGVubGlzdG1lbnQuRG9uZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBJbkRvdWJ0KEVubGlzdG1lbnQgZW5saXN0bWVudCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGVubGlzdG1lbnQuRG9uZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBTaW5nbGVQaGFzZUNvbW1pdChTaW5nbGVQaGFzZUVubGlzdG1lbnQgc2luZ2xlUGhhc2VFbmxpc3RtZW50KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgVHJhY2VyLkluZm8oIlBlcmZvcm1pbmcgaW52YWxpZCBzaW5nbGUgcGhhc2UgY29tbWl0LiIpOw0KLSAgICAgICAgICAgICAgICBzaW5nbGVQaGFzZUNvbW1pdCA9IHRydWU7DQotICAgICAgICAgICAgICAgIHNpbmdsZVBoYXNlRW5saXN0bWVudC5Db21taXR0ZWQoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAjcmVnaW9uIEFzeW5jaHJvbm91cyBDb25zdW1lciBJbnNpZGUgb2YgYSBUcmFuc2FjdGlvbiBUZXN0IC8gRXhhbXBsZQ0KLQ0KLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgQkFUQ0hfQ09VTlQgPSA1Ow0KLSAgICAgICAgcHJpdmF0ZSBpbnQgYmF0Y2hTZXF1ZW5jZTsNCi0gICAgICAgIHByaXZhdGUgRGVwZW5kZW50VHJhbnNhY3Rpb24gYmF0Y2hUeENvbnRyb2w7DQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IE1hbnVhbFJlc2V0RXZlbnQgYXdhaXRCYXRjaFByb2Nlc3NpbmdTdGFydCA9IG5ldyBNYW51YWxSZXNldEV2ZW50KGZhbHNlKTsNCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFRyYW5zYWN0ZWRBc3luY0NvbnN1bXB0aW9uKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7DQotICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoTVNHX0NPVU5UICogQkFUQ0hfQ09VTlQpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHVzaW5nIChOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKCkgYXMgTmV0VHhTZXNzaW9uKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0gICAgICAgICAgICAgICAgSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpOw0KLSAgICAgICAgICAgICAgICBjb25zdW1lci5MaXN0ZW5lciArPSBBc3luY1R4QXdhcmVPbk1lc3NhZ2U7DQotDQotICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWxsLCBtZXNzYWdlIGFyZSBkaXNwYXRjaGVkIG9uY2UgdGhpcyBpcyBkb25lLCBzbyB5b3UgY291bGQgcmVjZWl2ZQ0KLSAgICAgICAgICAgICAgICAvLyBhIE1lc3NhZ2Ugb3V0c2lkZSBhIFRYLiAgV2UgdXNlIHRoZSBhd2FpdEJhdGNoUHJvY2Vzc2luZ1N0YXJ0IGV2ZW50IGhlcmUgdG8NCi0gICAgICAgICAgICAgICAgLy8gZ2F0ZSB0ZSBPbk1lc3NhZ2UgY2FsbGJhY2ssIG9uY2UgdGhhdCBtZXRob2QgcmV0dXJucyB0aGUgTWVzc2FnZSBpcyBhY2snZCBhbmQNCi0gICAgICAgICAgICAgICAgLy8gbm8gbG9uZ2VyIGhhcyBhIGNoYW5jZSB0byBwYXJ0aWNpcGF0ZSBpbiBhIFRYLg0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQkFUQ0hfQ09VTlQ7ICsraSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFRyYW5zYWN0aW9uU2NvcGUgc2NvcGVkID0gbmV3IFRyYW5zYWN0aW9uU2NvcGUoVHJhbnNhY3Rpb25TY29wZU9wdGlvbi5SZXF1aXJlc05ldykpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5Fbmxpc3QoVHJhbnNhY3Rpb24uQ3VycmVudCk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hUeENvbnRyb2wgPSBUcmFuc2FjdGlvbi5DdXJyZW50LkRlcGVuZGVudENsb25lKERlcGVuZGVudENsb25lT3B0aW9uLkJsb2NrQ29tbWl0VW50aWxDb21wbGV0ZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXRCYXRjaFByb2Nlc3NpbmdTdGFydC5TZXQoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZWQuQ29tcGxldGUoKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlZW5saXN0aW5nIHRvIGZhc3Qgc2VlbXMgdG8gYW5ub3kgdGhlIERUQy4gIEFsc28gc2luY2UgRFRDIG9wZXJhdGlvbnMgYXJlDQotICAgICAgICAgICAgICAgICAgICAvLyBhc3luYyB3ZSBuZWVkIHRvIGFsbG93IGEgbGl0dGxlIHRpbWUgZm9yIGxhZyBzbyB0aGF0IHRoZSBsYXN0IFRYIGFjdHVhbGx5IA0KLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVzIGJlZm9yZSB3ZSBzdGFydCBhIG5ldyBvbmUuDQotICAgICAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjUwKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKE1TR19DT1VOVCAqIEJBVENIX0NPVU5UKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgTk9UIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByaXZhdGUgdm9pZCBBc3luY1R4QXdhcmVPbk1lc3NhZ2UoSU1lc3NhZ2UgbWVzc2FnZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhd2FpdEJhdGNoUHJvY2Vzc2luZ1N0YXJ0LldhaXRPbmUoKTsNCi0NCi0gICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHVzaW5nIChUcmFuc2FjdGlvblNjb3BlIHNjb3BlZCA9IG5ldyBUcmFuc2FjdGlvblNjb3BlKGJhdGNoVHhDb250cm9sKSkNCi0gICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQ0KLSAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxJbnNlcnRDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7DQotICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbm5lY3Rpb24gPSBzcWxDb25uZWN0aW9uOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIHRleHRNZXNzYWdlID0gbWVzc2FnZSBhcyBJVGV4dE1lc3NhZ2U7DQotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1lc3NhZ2UsICJtaXNzaW5nIG1lc3NhZ2UiKTsNCi0gICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIklOU0VSVCBJTlRPIHswfSBWQUxVRVMgKHsxfSkiLCB0ZXN0VGFibGUsIENvbnZlcnQuVG9JbnQzMih0ZXh0TWVzc2FnZS5UZXh0KSk7DQotICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLSAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7DQotICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgaWYoKytiYXRjaFNlcXVlbmNlID09IE1TR19DT1VOVCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgYmF0Y2hTZXF1ZW5jZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICBhd2FpdEJhdGNoUHJvY2Vzc2luZ1N0YXJ0LlJlc2V0KCk7DQotICAgICAgICAgICAgICAgICAgICBiYXRjaFR4Q29udHJvbC5Db21wbGV0ZSgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiVFg7RXJyb3IgZnJvbSBUcmFuc2FjdGlvblNjb3BlOiAiICsgZS5NZXNzYWdlKTsNCi0gICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgI2VuZHJlZ2lvbg0KLSAgICB9DQotfQ0KK++7vy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Cit1c2luZyBTeXN0ZW0uRGF0YS5TcWxDbGllbnQ7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRyYW5zYWN0aW9uczsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0OwordXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5UcmFuc3BvcnQuVGNwOwordXNpbmcgTlVuaXQuRnJhbWV3b3JrOworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0Cit7CisgICAgW1Rlc3RGaXh0dXJlXQorICAgIFtDYXRlZ29yeSgiTWFudWFsIildCisgICAgY2xhc3MgRHRjQ29uc3VtZXJUcmFuc2FjdGlvbnNUZXN0IDogRHRjVHJhbnNhY3Rpb25zVGVzdFN1cHBvcnQKKyAgICB7CisgICAgICAgIFtTZXRVcF0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgU2V0VXAoKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLlNldFVwKCk7CisKKyAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeSA9IG5ldyBOZXRUeENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworICAgICAgICAgICAgdGhpcy5kdGNGYWN0b3J5LkNvbmZpZ3VyZWRSZXNvdXJjZU1hbmFnZXJJZCA9IEd1aWQuTmV3R3VpZCgpLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlZGVsaXZlcmVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOworCisgICAgICAgICAgICAvLyByZWNlaXZlIGp1c3Qgb25lCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBtZXNzYWdlIGZyb20gcXVldWUgYW5kIGluc2VydCBpbnRvIGRiIHRhYmxlCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChUcmFuc2FjdGlvblNjb3BlIHNjb3BlZCA9IG5ldyBUcmFuc2FjdGlvblNjb3BlKFRyYW5zYWN0aW9uU2NvcGVPcHRpb24uUmVxdWlyZXNOZXcpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsSW5zZXJ0Q29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db25uZWN0aW9uID0gc3FsQ29ubmVjdGlvbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSBtZXNzYWdlID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDEwMDAwKSkgYXMgSVRleHRNZXNzYWdlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJJTlNFUlQgSU5UTyB7MH0gVkFMVUVTICh7MX0pIiwgdGVzdFRhYmxlLCBDb252ZXJ0LlRvSW50MzIobWVzc2FnZS5UZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5FeGVjdXRlTm9uUXVlcnkoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5Db21wbGV0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5DbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBvdGhlcnMgbWVzc2FnZSBoYXZlIHN0YXR1cyByZWRlbGl2ZXJlZCA9IGZhbHNlCisgICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgY2hlY2tGYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworCisgICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGNoZWNrRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB1c2luZyAoSVF1ZXVlQnJvd3NlciBicm93c2VyID0gc2Vzc2lvbi5DcmVhdGVCcm93c2VyKHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSUVudW1lcmF0b3IgZW51bWVyYXRvciA9IGJyb3dzZXIuR2V0RW51bWVyYXRvcigpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbnVtZXJhdG9yLk1vdmVOZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIG1zZyA9IGVudW1lcmF0b3IuQ3VycmVudCBhcyBJTWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobXNnLCAibWVzc2FnZSBpcyBub3QgaW4gdGhlIHF1ZXVlISIpOworICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UobXNnLk5NU1JlZGVsaXZlcmVkLCAibWVzc2FnZSBpcyByZWRlbGl2ZXJlZCEiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVkZWxpdmVyZWRDYXNlMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBtZXNzYWdlQ291bnQgPSAzMDA7CisgICAgICAgICAgICBjb25zdCBpbnQgcmVjZWl2ZUNvdW50ID0gMTUwOworCisgICAgICAgICAgICAvLyBlbnF1ZXVlIHNldmVyYWwgbWVzc2FnZXMKKyAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsKKyAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKG1lc3NhZ2VDb3VudCk7CisKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIC8vIHJlY2VpdmUgaGFsZiBvZiB0b3RhbCBtZXNzYWdlcworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZUNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBtZXNzYWdlIGZyb20gcXVldWUgYW5kIGluc2VydCBpbnRvIGRiIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChUcmFuc2FjdGlvblNjb3BlIHNjb3BlZCA9IG5ldyBUcmFuc2FjdGlvblNjb3BlKFRyYW5zYWN0aW9uU2NvcGVPcHRpb24uUmVxdWlyZXNOZXcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxJbnNlcnRDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uT3BlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbm5lY3Rpb24gPSBzcWxDb25uZWN0aW9uOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSBtZXNzYWdlID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygxMDAwMCkpIGFzIElUZXh0TWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db21tYW5kVGV4dCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJJTlNFUlQgSU5UTyB7MH0gVkFMVUVTICh7MX0pIiwgdGVzdFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0LlRvSW50MzIobWVzc2FnZS5UZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLkNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIkNvbXBsZXRlZCBmb3IgbG9vcCBpdGVyYXRpb24gIyIgKyBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgb3RoZXJzIG1lc3NhZ2UgaGF2ZSBzdGF0dXMgcmVkZWxpdmVyZWQgPSBmYWxzZQorICAgICAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGNoZWNrRmFjdG9yeSA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsKKworICAgICAgICAgICAgdXNpbmcgKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBjaGVja0ZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIHVzaW5nIChJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgdXNpbmcgKElRdWV1ZUJyb3dzZXIgYnJvd3NlciA9IHNlc3Npb24uQ3JlYXRlQnJvd3NlcihzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIElFbnVtZXJhdG9yIGVudW1lcmF0b3IgPSBicm93c2VyLkdldEVudW1lcmF0b3IoKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSBtc2cgPSBlbnVtZXJhdG9yLkN1cnJlbnQgYXMgSU1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1zZywgIm1lc3NhZ2UgaXMgbm90IGluIHRoZSBxdWV1ZSEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKG1zZy5OTVNSZWRlbGl2ZXJlZCwgIm1lc3NhZ2UgaXMgcmVkZWxpdmVyZWQhIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlZGVsaXZlcmVkQ2FzZTMoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgbWVzc2FnZUNvdW50ID0gMzAwOworICAgICAgICAgICAgY29uc3QgaW50IHJlY2VpdmVDb3VudCA9IDE1MDsKKworICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZShtZXNzYWdlQ291bnQpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICAvLyByZWNlaXZlIGhhbGYgb2YgdG90YWwgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBtZXNzYWdlIGZyb20gcXVldWUgYW5kIGluc2VydCBpbnRvIGRiIHRhYmxlCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZUNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFRyYW5zYWN0aW9uU2NvcGUgc2NvcGVkID0gbmV3IFRyYW5zYWN0aW9uU2NvcGUoVHJhbnNhY3Rpb25TY29wZU9wdGlvbi5SZXF1aXJlc05ldykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb21tYW5kIHNxbEluc2VydENvbW1hbmQgPSBuZXcgU3FsQ29tbWFuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29ubmVjdGlvbiA9IHNxbENvbm5lY3Rpb247CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIG1lc3NhZ2UgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDEwMDAwKSkgYXMgSVRleHRNZXNzYWdlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbW1hbmRUZXh0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIklOU0VSVCBJTlRPIHswfSBWQUxVRVMgKHsxfSkiLCB0ZXN0VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnQuVG9JbnQzMihtZXNzYWdlLlRleHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5FeGVjdXRlTm9uUXVlcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5DbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJGaXJzdCBzdGFnZSBvayIpOworCisgICAgICAgICAgICAvLyBjaGVjayB0aGF0IG90aGVycyBtZXNzYWdlIGhhdmUgc3RhdHVzIHJlZGVsaXZlcmVkID0gZmFsc2UKKyAgICAgICAgICAgIElDb25uZWN0aW9uRmFjdG9yeSBjaGVja0ZhY3RvcnkgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnkoUmVwbGFjZUVudlZhcihjb25uZWN0aW9uVVJJKSk7CisKKyAgICAgICAgICAgIHVzaW5nIChJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gY2hlY2tGYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICB1c2luZyAoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbigpKQorICAgICAgICAgICAgICAgIHVzaW5nIChJUXVldWVCcm93c2VyIGJyb3dzZXIgPSBzZXNzaW9uLkNyZWF0ZUJyb3dzZXIoc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJRW51bWVyYXRvciBlbnVtZXJhdG9yID0gYnJvd3Nlci5HZXRFbnVtZXJhdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudW1lcmF0b3IuTW92ZU5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgSU1lc3NhZ2UgbXNnID0gZW51bWVyYXRvci5DdXJyZW50IGFzIElNZXNzYWdlOworICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShtc2cuTk1TUmVkZWxpdmVyZWQsICJtZXNzYWdlIGlzIHJlZGVsaXZlcmVkISIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWRlbGl2ZXJlZE5vQ29tcGxldGUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgbWVzc2FnZUNvdW50ID0gMzAwOworICAgICAgICAgICAgY29uc3QgaW50IHJlY2VpdmVDb3VudCA9IDE1MDsKKworICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZShtZXNzYWdlQ291bnQpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBhbGxvdyBubyByZWRlbGl2ZXJ5IHNvIHRoYXQgbWVzc2FnZSBpbW1lZGlhdGx5IGdvZXMgdG8gdGhlIERMUSBpZiBmaXJzdCByZWFkIGZhaWxzCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5SZWRlbGl2ZXJ5UG9saWN5Lk1heGltdW1SZWRlbGl2ZXJpZXMgPSAwOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIC8vIHJlY2VpdmUgaGFsZiBvZiB0b3RhbCBtZXNzYWdlcworICAgICAgICAgICAgICAgIHVzaW5nIChJTmV0VHhTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKworICAgICAgICAgICAgICAgICAgICAvLyByZWFkIG1lc3NhZ2UgZnJvbSBxdWV1ZSBhbmQgaW5zZXJ0IGludG8gZGIgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNlaXZlQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsSW5zZXJ0Q29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db25uZWN0aW9uID0gc3FsQ29ubmVjdGlvbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoMTAwMDApKSBhcyBJVGV4dE1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiSU5TRVJUIElOVE8gezB9IFZBTFVFUyAoezF9KSIsIHRlc3RUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydC5Ub0ludDMyKG1lc3NhZ2UuVGV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uQ2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiRmlyc3Qgc3RhZ2Ugb2siKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBvdGhlcnMgbWVzc2FnZSBoYXZlIHN0YXR1cyByZWRlbGl2ZXJlZCA9IGZhbHNlCisgICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgY2hlY2tGYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworCisgICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGNoZWNrRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB1c2luZyAoSVF1ZXVlQnJvd3NlciBicm93c2VyID0gc2Vzc2lvbi5DcmVhdGVCcm93c2VyKHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSUVudW1lcmF0b3IgZW51bWVyYXRvciA9IGJyb3dzZXIuR2V0RW51bWVyYXRvcigpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSBtc2cgPSBlbnVtZXJhdG9yLkN1cnJlbnQgYXMgSU1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1zZywgIm1lc3NhZ2UgaXMgbm90IGluIHRoZSBxdWV1ZSEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKG1zZy5OTVNSZWRlbGl2ZXJlZCwgIm1lc3NhZ2UgaXMgcmVkZWxpdmVyZWQhIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJ5QWZ0ZXJDb21taXRGYWlsc0JlZm9yZVNlbnQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBxdWV1ZSB3aXRoIGRhdGEgdG8gc2VuZCBhbmQgY2xlYXJzIHRoZSBEQi4KKyAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsKKyAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7CisKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7CisgICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQcmVQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25Db21taXRUcmFuc3BvcnRIb29rOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMTAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNvbW1pdGVkCisgICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKTsKKworICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlKCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJ5QWZ0ZXJDb21taXRGYWlsc0FmdGVyU2VudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIHF1ZXVlIHdpdGggZGF0YSB0byBzZW5kIGFuZCBjbGVhcnMgdGhlIERCLgorICAgICAgICAgICAgUHVyZ2VEYXRhYmFzZSgpOworICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0OworICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsKKyAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFBvc3RQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25Db21taXRUcmFuc3BvcnRIb29rOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMTAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29tbWl0ZWQKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpOworCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0SXRlcmF0aXZlVHJhbnNhY3RlZENvbnN1bWUoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBxdWV1ZSB3aXRoIGRhdGEgdG8gc2VuZCBhbmQgY2xlYXJzIHRoZSBEQi4KKyAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsKKyAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKDUgKiBNU0dfQ09VTlQpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbCg1ICogTVNHX0NPVU5UKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIE5PVCBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWVOb1JlY292ZXJ5KCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdENvbnN1bWVXaXRoREJJbnNlcnRMb2dMb2NhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0cmluZyBsb2dMb2NhdGlvbiA9IEAiLlxSZWNvdmVyeURpciI7CisgICAgICAgICAgICBzdHJpbmcgbmV3Q29ubmVjdGlvblVyaSA9CisgICAgICAgICAgICAgICAgY29ubmVjdGlvblVSSSArICI/bm1zLlJlY292ZXJ5UG9saWN5LlJlY292ZXJ5TG9nZ2VyLkxvY2F0aW9uPSIgKyBsb2dMb2NhdGlvbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICImbm1zLmNvbmZpZ3VyZWRSZXNvdXJjZU1hbmFnZXJJZD0iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0Y0ZhY3RvcnkuQ29uZmlndXJlZFJlc291cmNlTWFuYWdlcklkOworCisgICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBxdWV1ZSB3aXRoIGRhdGEgdG8gc2VuZCBhbmQgY2xlYXJzIHRoZSBEQi4KKyAgICAgICAgICAgIFB1cmdlRGF0YWJhc2UoKTsKKyAgICAgICAgICAgIFB1cmdlQW5kRmlsbFF1ZXVlKCk7CisKKyAgICAgICAgICAgIGlmIChEaXJlY3RvcnkuRXhpc3RzKGxvZ0xvY2F0aW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEaXJlY3RvcnkuRGVsZXRlKGxvZ0xvY2F0aW9uLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRGlyZWN0b3J5LkNyZWF0ZURpcmVjdG9yeShsb2dMb2NhdGlvbik7CisKKyAgICAgICAgICAgIGR0Y0ZhY3RvcnkgPSBuZXcgTmV0VHhDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKG5ld0Nvbm5lY3Rpb25VcmkpKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0OworICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsKKyAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFByZVByb2Nlc3NvciArPSB0aGlzLkZhaWxPbkNvbW1pdFRyYW5zcG9ydEhvb2s7CisKKyAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIERpcmVjdG9yeS5HZXRGaWxlcyhsb2dMb2NhdGlvbikuTGVuZ3RoKTsKKworICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBOT1QgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0LlJlc2V0RHRjUmVjb3ZlcnkoKTsKKyAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoMCwgbmV3Q29ubmVjdGlvblVyaSk7CisKKyAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBEaXJlY3RvcnkuR2V0RmlsZXMobG9nTG9jYXRpb24pLkxlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJBZnRlclRyYW5zYWN0aW9uU2NvcGVBYm9ydGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhTY29wZUFib3J0ZWQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBOT1QgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuUmVzZXREdGNSZWNvdmVyeSgpOworICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJSb2xsYmFja0ZhaWxXaGVuU2NvcGVBYm9ydGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0OworICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOworICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUHJlUHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uUm9sbGJhY2tUcmFuc3BvcnRIb29rOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhTY29wZUFib3J0ZWQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBOT1QgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSByZWNvdmVyZWQgYW5kIHByZXNlbnQgaW4gdGhlIHF1ZXVlIAorICAgICAgICAgICAgTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuUmVzZXREdGNSZWNvdmVyeSgpOworICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvbkJlZm9yZVByZXBhcmVTZW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7CisgICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQcmVQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25QcmVwYXJlVHJhbnNwb3J0SG9vazsKKworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWVzc2FnZXMgYXJlIHZpc2libGUgc2luY2Ugbm8gcHJlcGFyZSBzZW50CisgICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50Tm9SZWNvdmVyeSgpOworCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgTk9UIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpOworCisgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0LlJlc2V0RHRjUmVjb3ZlcnkoKTsKKyAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyRmFpbE9uVHJhbnNhY3Rpb25BZnRlclByZXBhcmVTZW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gcXVldWUgd2l0aCBkYXRhIHRvIHNlbmQgYW5kIGNsZWFycyB0aGUgREIuCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7CisgICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQb3N0UHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uUHJlcGFyZVRyYW5zcG9ydEhvb2s7CisKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhDb21taXQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5vdCB2aXNpYmxlIHlldCBiZWNhdXNlIGl0IG11c3QgYmUgcm9sbGVkIGJhY2sKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpOworCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgTk9UIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpOworCisgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0LlJlc2V0RHRjUmVjb3ZlcnkoKTsKKyAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBNZXNzYWdlU2hvdWxkRW5saXN0VG9UaGVDb3JyZWN0VHJhbnNhY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgbWVzc2FnZUNvdW50ID0gMTAwOworICAgICAgICAgICAgY29uc3QgaW50IHJlY2VpdmVDb3VudCA9IDEwMDsKKworICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZShtZXNzYWdlQ291bnQpOworCisgICAgICAgICAgICB2YXIgZW5saXN0bWVudCA9IG5ldyBUZXN0U2luZ2xlUGhhc2VDb21taXQoKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZSBoYWxmIG9mIHRvdGFsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJUXVldWUgcXVldWUgPSBzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpOworICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2VpdmVDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFRyYW5zYWN0aW9uU2NvcGUgc2NvcGVkID0gbmV3IFRyYW5zYWN0aW9uU2NvcGUoVHJhbnNhY3Rpb25TY29wZU9wdGlvbi5SZXF1aXJlc05ldykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSBtZXNzYWdlID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDEwMDAwKSkgYXMgSVRleHRNZXNzYWdlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbi5DdXJyZW50LkVubGlzdER1cmFibGUoR3VpZC5OZXdHdWlkKCksIGVubGlzdG1lbnQsIEVubGlzdG1lbnRPcHRpb25zLk5vbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyBSYW5kb20oKS5OZXh0KDIpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkluZm9Gb3JtYXQoIlRocm93aW5nIHJhbmRvbSBFeGNlcHRpb24gZm9yIE1lc3NhZ2UgezB9IiwgbWVzc2FnZS5OTVNNZXNzYWdlSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkZhbHNlKGVubGlzdG1lbnQuc2luZ2xlUGhhc2VDb21taXQsICJObyBzaW5nbGUgcGhhc2UgY29tbWl0IHNob3VsZCBoYXBwZW4uIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnRlcm5hbCBjbGFzcyBUZXN0U2luZ2xlUGhhc2VDb21taXQgOiBJU2luZ2xlUGhhc2VOb3RpZmljYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgcHVibGljIGJvb2wgc2luZ2xlUGhhc2VDb21taXQgPSBmYWxzZTsKKworICAgICAgICAgICAgcHVibGljIHZvaWQgUHJlcGFyZShQcmVwYXJpbmdFbmxpc3RtZW50IHByZXBhcmluZ0VubGlzdG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJlcGFyaW5nRW5saXN0bWVudC5QcmVwYXJlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVibGljIHZvaWQgQ29tbWl0KEVubGlzdG1lbnQgZW5saXN0bWVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbmxpc3RtZW50LkRvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgUm9sbGJhY2soRW5saXN0bWVudCBlbmxpc3RtZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVubGlzdG1lbnQuRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVibGljIHZvaWQgSW5Eb3VidChFbmxpc3RtZW50IGVubGlzdG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW5saXN0bWVudC5Eb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBTaW5nbGVQaGFzZUNvbW1pdChTaW5nbGVQaGFzZUVubGlzdG1lbnQgc2luZ2xlUGhhc2VFbmxpc3RtZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRyYWNlci5JbmZvKCJQZXJmb3JtaW5nIGludmFsaWQgc2luZ2xlIHBoYXNlIGNvbW1pdC4iKTsKKyAgICAgICAgICAgICAgICBzaW5nbGVQaGFzZUNvbW1pdCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2luZ2xlUGhhc2VFbmxpc3RtZW50LkNvbW1pdHRlZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgI3JlZ2lvbiBBc3luY2hyb25vdXMgQ29uc3VtZXIgSW5zaWRlIG9mIGEgVHJhbnNhY3Rpb24gVGVzdCAvIEV4YW1wbGUKKworICAgICAgICBwcml2YXRlIGNvbnN0IGludCBCQVRDSF9DT1VOVCA9IDU7CisgICAgICAgIHByaXZhdGUgaW50IGJhdGNoU2VxdWVuY2U7CisgICAgICAgIHByaXZhdGUgRGVwZW5kZW50VHJhbnNhY3Rpb24gYmF0Y2hUeENvbnRyb2w7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTWFudWFsUmVzZXRFdmVudCBhd2FpdEJhdGNoUHJvY2Vzc2luZ1N0YXJ0ID0gbmV3IE1hbnVhbFJlc2V0RXZlbnQoZmFsc2UpOworCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0VHJhbnNhY3RlZEFzeW5jQ29uc3VtcHRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBQdXJnZURhdGFiYXNlKCk7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZShNU0dfQ09VTlQgKiBCQVRDSF9DT1VOVCk7CisKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQorICAgICAgICAgICAgdXNpbmcgKE5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSBhcyBOZXRUeFNlc3Npb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKyAgICAgICAgICAgICAgICBJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSk7CisgICAgICAgICAgICAgICAgY29uc3VtZXIuTGlzdGVuZXIgKz0gQXN5bmNUeEF3YXJlT25NZXNzYWdlOworCisgICAgICAgICAgICAgICAgLy8gQmUgY2FyZWZ1bGwsIG1lc3NhZ2UgYXJlIGRpc3BhdGNoZWQgb25jZSB0aGlzIGlzIGRvbmUsIHNvIHlvdSBjb3VsZCByZWNlaXZlCisgICAgICAgICAgICAgICAgLy8gYSBNZXNzYWdlIG91dHNpZGUgYSBUWC4gIFdlIHVzZSB0aGUgYXdhaXRCYXRjaFByb2Nlc3NpbmdTdGFydCBldmVudCBoZXJlIHRvCisgICAgICAgICAgICAgICAgLy8gZ2F0ZSB0ZSBPbk1lc3NhZ2UgY2FsbGJhY2ssIG9uY2UgdGhhdCBtZXRob2QgcmV0dXJucyB0aGUgTWVzc2FnZSBpcyBhY2snZCBhbmQKKyAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgaGFzIGEgY2hhbmNlIHRvIHBhcnRpY2lwYXRlIGluIGEgVFguCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBCQVRDSF9DT1VOVDsgKytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFRyYW5zYWN0aW9uU2NvcGUgc2NvcGVkID0gbmV3IFRyYW5zYWN0aW9uU2NvcGUoVHJhbnNhY3Rpb25TY29wZU9wdGlvbi5SZXF1aXJlc05ldykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uRW5saXN0KFRyYW5zYWN0aW9uLkN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaFR4Q29udHJvbCA9IFRyYW5zYWN0aW9uLkN1cnJlbnQuRGVwZW5kZW50Q2xvbmUoRGVwZW5kZW50Q2xvbmVPcHRpb24uQmxvY2tDb21taXRVbnRpbENvbXBsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0QmF0Y2hQcm9jZXNzaW5nU3RhcnQuU2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWQuQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlZW5saXN0aW5nIHRvIGZhc3Qgc2VlbXMgdG8gYW5ub3kgdGhlIERUQy4gIEFsc28gc2luY2UgRFRDIG9wZXJhdGlvbnMgYXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGFzeW5jIHdlIG5lZWQgdG8gYWxsb3cgYSBsaXR0bGUgdGltZSBmb3IgbGFnIHNvIHRoYXQgdGhlIGxhc3QgVFggYWN0dWFsbHkgCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlcyBiZWZvcmUgd2Ugc3RhcnQgYSBuZXcgb25lLgorICAgICAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjUwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbChNU0dfQ09VTlQgKiBCQVRDSF9DT1VOVCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBOT1QgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlKCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgQXN5bmNUeEF3YXJlT25NZXNzYWdlKElNZXNzYWdlIG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0QmF0Y2hQcm9jZXNzaW5nU3RhcnQuV2FpdE9uZSgpOworCisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShiYXRjaFR4Q29udHJvbCkpCisgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQorICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb21tYW5kIHNxbEluc2VydENvbW1hbmQgPSBuZXcgU3FsQ29tbWFuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7CisgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29ubmVjdGlvbiA9IHNxbENvbm5lY3Rpb247CisKKyAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIHRleHRNZXNzYWdlID0gbWVzc2FnZSBhcyBJVGV4dE1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobWVzc2FnZSwgIm1pc3NpbmcgbWVzc2FnZSIpOworICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbW1hbmRUZXh0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIklOU0VSVCBJTlRPIHswfSBWQUxVRVMgKHsxfSkiLCB0ZXN0VGFibGUsIENvbnZlcnQuVG9JbnQzMih0ZXh0TWVzc2FnZS5UZXh0KSk7CisgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7CisgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5Db21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCsrYmF0Y2hTZXF1ZW5jZSA9PSBNU0dfQ09VTlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiYXRjaFNlcXVlbmNlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYXdhaXRCYXRjaFByb2Nlc3NpbmdTdGFydC5SZXNldCgpOworICAgICAgICAgICAgICAgICAgICBiYXRjaFR4Q29udHJvbC5Db21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlRYO0Vycm9yIGZyb20gVHJhbnNhY3Rpb25TY29wZTogIiArIGUuTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjZW5kcmVnaW9uCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0R0Y1Byb2R1Y2VyVHJhbnNhY3Rpb25zVGVzdC5jcyBiL3Rlc3QvRHRjUHJvZHVjZXJUcmFuc2FjdGlvbnNUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9EdGNQcm9kdWNlclRyYW5zYWN0aW9uc1Rlc3QuY3MKcmVuYW1lIHRvIHRlc3QvRHRjUHJvZHVjZXJUcmFuc2FjdGlvbnNUZXN0LmNzCmluZGV4IDI2MGNmZjQuLjQ0M2NjZjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9EdGNQcm9kdWNlclRyYW5zYWN0aW9uc1Rlc3QuY3MKKysrIGIvdGVzdC9EdGNQcm9kdWNlclRyYW5zYWN0aW9uc1Rlc3QuY3MKQEAgLTEsMzIzICsxLDMyMyBAQAot77u/LyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLXVzaW5nIFN5c3RlbS5JTzsNCi11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOw0KLXVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNhY3Rpb25zOw0KLXVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0Ow0KLXVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0LlRjcDsNCi11c2luZyBOVW5pdC5GcmFtZXdvcms7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdA0KLXsNCi0gICAgW1Rlc3RGaXh0dXJlXQ0KLSAgICBbQ2F0ZWdvcnkoIk1hbnVhbCIpXQ0KLSAgICBjbGFzcyBEdGNQcm9kdWNlclRyYW5zYWN0aW9uc1Rlc3QgOiBEdGNUcmFuc2FjdGlvbnNUZXN0U3VwcG9ydA0KLSAgICB7DQotICAgICAgICBbU2V0VXBdDQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXRVcCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgYmFzZS5TZXRVcCgpOw0KLQ0KLSAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeSA9IG5ldyBOZXRUeENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOw0KLSAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeS5Db25maWd1cmVkUmVzb3VyY2VNYW5hZ2VySWQgPSBHdWlkLk5ld0d1aWQoKS5Ub1N0cmluZygpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyRmFpbE9uVHJhbnNhY3Rpb25Db21taXQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLg0KLSAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOw0KLSAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFByZVByb2Nlc3NvciArPSB0aGlzLkZhaWxPbkNvbW1pdFRyYW5zcG9ydEhvb2s7DQotDQotICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhDb21taXQoY29ubmVjdGlvbik7DQotDQotICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgxMDAwKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY29tbWl0ZWQNCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKTsNCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpOw0KLQ0KLSAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQ0KLSAgICAgICAgICAgIE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0LlJlc2V0RHRjUmVjb3ZlcnkoKTsNCi0gICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KCk7DQotICAgICAgICB9DQotDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvblBvc3RDb21taXRTZW5kKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4NCi0gICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsNCi0gICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQb3N0UHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uQ29tbWl0VHJhbnNwb3J0SG9vazsNCi0NCi0gICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDEwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNvbW1pdGVkDQotICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudE5vUmVjb3ZlcnkoKTsNCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpOw0KLQ0KLSAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQ0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdE5vUmVjb3ZlckFmdGVyRmFpbE9uVHJhbnNhY3Rpb25XaGVuTG9nRGVsZXRlZCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gREIgd2l0aCBkYXRhIHRvIHNlbmQuDQotICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7DQotDQotICAgICAgICAgICAgTmV0VHhDb25uZWN0aW9uRmFjdG9yeSBuZXRUeEZhY3RvcnkgPSBkdGNGYWN0b3J5Ow0KLSAgICAgICAgICAgIFJlY292ZXJ5RmlsZUxvZ2dlciBsb2dnZXIgPSBuZXRUeEZhY3RvcnkuUmVjb3ZlcnlQb2xpY3kuUmVjb3ZlcnlMb2dnZXIgYXMgUmVjb3ZlcnlGaWxlTG9nZ2VyOw0KLSAgICAgICAgICAgIHN0cmluZyBsb2dEaXJlY3RvcnkgPSBsb2dnZXIuTG9jYXRpb247DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7DQotICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUHJlUHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uQ29tbWl0VHJhbnNwb3J0SG9vazsNCi0NCi0gICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiBzaG91bGQgbm90IGhhdmUgYmVlbiBjb21taXRlZA0KLSAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpOw0KLQ0KLSAgICAgICAgICAgIC8vIGRlbGV0ZSBhbGwgcmVjb3ZlcnkgZmlsZXMgICAgICAgICAgICANCi0gICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgZmlsZSBpbiBEaXJlY3RvcnkuR2V0RmlsZXMobG9nRGlyZWN0b3J5LCAiKi5iaW4iKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEZpbGUuRGVsZXRlKGZpbGUpOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpOw0KLQ0KLSAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBOT1QgcHJlc2VudCBpbiB0aGUgcXVldWUgYmFjYXVzZSByZWNvdmVyeSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQNCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0Tm9SZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvbldoZW5Mb2dXcml0ZUZhaWxzKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4NCi0gICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsNCi0NCi0gICAgICAgICAgICBzdHJpbmcgbmV3Q29ubmVjdGlvblVyaSA9IA0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uVVJJICsgIj9ubXMuUmVjb3ZlcnlQb2xpY3kuUmVjb3ZlcnlMb2dnZXJUeXBlPWhhcm5lc3MiICsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICImbm1zLmNvbmZpZ3VyZWRSZXNvdXJjZU1hbmFnZXJJZD0iICsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0Y0ZhY3RvcnkuQ29uZmlndXJlZFJlc291cmNlTWFuYWdlcklkOw0KLQ0KLSAgICAgICAgICAgIGR0Y0ZhY3RvcnkgPSBuZXcgTmV0VHhDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKG5ld0Nvbm5lY3Rpb25VcmkpKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIElSZWNvdmVyeUxvZ2dlciBsb2dnZXIgPSAoY29ubmVjdGlvbiBhcyBOZXRUeENvbm5lY3Rpb24pLlJlY292ZXJ5UG9saWN5LlJlY292ZXJ5TG9nZ2VyOw0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKGxvZ2dlcik7DQotICAgICAgICAgICAgICAgIFJlY292ZXJ5TG9nZ2VySGFybmVzcyBoYXJuZXNzID0gbG9nZ2VyIGFzIFJlY292ZXJ5TG9nZ2VySGFybmVzczsNCi0gICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChoYXJuZXNzKTsNCi0NCi0gICAgICAgICAgICAgICAgaGFybmVzcy5QcmVMb2dSZWNvdmVyeUluZm9FdmVudCArPSBGYWlsT25QcmVMb2dSZWNvdmVyeUhvb2s7DQotDQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBub3QgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7DQotDQotICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBxdWV1ZQ0KLSAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlKCk7DQotICAgICAgICB9DQotDQotICAgICAgICBbVGVzdF0NCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvbkJlZm9yZVByZXBhcmVTZW50KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4NCi0gICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7DQotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsNCi0gICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQcmVQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25QcmVwYXJlVHJhbnNwb3J0SG9vazsNCi0NCi0gICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgbm90IGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbCgpOw0KLQ0KLSAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyRmFpbE9uVHJhbnNhY3Rpb25EdXJpbmdQcmVwYXJlU2VuZCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gREIgd2l0aCBkYXRhIHRvIHNlbmQuDQotICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0Ow0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7DQotICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUG9zdFByb2Nlc3NvciArPSB0aGlzLkZhaWxPblByZXBhcmVUcmFuc3BvcnRIb29rOw0KLQ0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyVHJhbnNhY3Rpb25TY29wZUFib3J0ZWQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLg0KLSAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhTY29wZUFib3J0ZWQoY29ubmVjdGlvbik7DQotDQotICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIE5PVCBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgTk9UIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZXN0XQ0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJBZnRlclJvbGxiYWNrRmFpbFdoZW5TY29wZUFib3J0ZWQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLg0KLSAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsNCi0gICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOw0KLSAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFByZVByb2Nlc3NvciArPSB0aGlzLkZhaWxPblJvbGxiYWNrVHJhbnNwb3J0SG9vazsNCi0NCi0gICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aFNjb3BlQWJvcnRlZChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7DQotDQotICAgICAgICAgICAgLy8gYmVmb3JlIHJlY292ZXJpbmcsIG1lc3NhZ2VzIHNob3VsZCBOT1QgYmUgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHF1ZXVlIGFmdGVyIHJlY292ZXINCi0gICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgW1Rlc3RdDQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0SXRlcmF0aXZlVHJhbnNhY3RlZFByb2R1Y2VXaXRoREJEZWxldGUoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOw0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsNCi0gICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0NCi0gICAgICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7DQotICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhDb21taXQoY29ubmVjdGlvbik7DQotDQotICAgICAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOw0KLSAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOw0KLQ0KLSAgICAgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsNCi0gICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRW1wdHkoKTsNCi0NCi0gICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KE1TR19DT1VOVCAqIDUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KK++7vy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5UcmFuc2FjdGlvbnM7Cit1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zcG9ydDsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0LlRjcDsKK3VzaW5nIE5Vbml0LkZyYW1ld29yazsKKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdAoreworICAgIFtUZXN0Rml4dHVyZV0KKyAgICBbQ2F0ZWdvcnkoIk1hbnVhbCIpXQorICAgIGNsYXNzIER0Y1Byb2R1Y2VyVHJhbnNhY3Rpb25zVGVzdCA6IER0Y1RyYW5zYWN0aW9uc1Rlc3RTdXBwb3J0CisgICAgeworICAgICAgICBbU2V0VXBdCisgICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIFNldFVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS5TZXRVcCgpOworCisgICAgICAgICAgICB0aGlzLmR0Y0ZhY3RvcnkgPSBuZXcgTmV0VHhDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsKKyAgICAgICAgICAgIHRoaXMuZHRjRmFjdG9yeS5Db25maWd1cmVkUmVzb3VyY2VNYW5hZ2VySWQgPSBHdWlkLk5ld0d1aWQoKS5Ub1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvbkNvbW1pdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRlc3QgaW5pdGlhbGl6ZSAtIEZpbGxzIGluIERCIHdpdGggZGF0YSB0byBzZW5kLgorICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7CisKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICBJVHJhbnNwb3J0IHRyYW5zcG9ydCA9IChjb25uZWN0aW9uIGFzIENvbm5lY3Rpb24pLklUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgVGNwRmF1bHR5VHJhbnNwb3J0IHRjcEZhdWx0eSA9IHRyYW5zcG9ydC5OYXJyb3codHlwZW9mKFRjcEZhdWx0eVRyYW5zcG9ydCkpIGFzIFRjcEZhdWx0eVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHRjcEZhdWx0eSk7CisgICAgICAgICAgICAgICAgdGNwRmF1bHR5Lk9uZXdheUNvbW1hbmRQcmVQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25Db21taXRUcmFuc3BvcnRIb29rOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgxMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY29tbWl0ZWQKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpOworCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgY29tbWl0ZWQgdGhlIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgTmV0VHhUcmFuc2FjdGlvbkNvbnRleHQuUmVzZXREdGNSZWNvdmVyeSgpOworICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvblBvc3RDb21taXRTZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gREIgd2l0aCBkYXRhIHRvIHNlbmQuCisgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0OworICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsKKyAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFBvc3RQcm9jZXNzb3IgKz0gdGhpcy5GYWlsT25Db21taXRUcmFuc3BvcnRIb29rOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgxMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjb21taXRlZAorICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudE5vUmVjb3ZlcnkoKTsKKworICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpOworCisgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0Tm9SZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvbldoZW5Mb2dEZWxldGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gREIgd2l0aCBkYXRhIHRvIHNlbmQuCisgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsKKworICAgICAgICAgICAgTmV0VHhDb25uZWN0aW9uRmFjdG9yeSBuZXRUeEZhY3RvcnkgPSBkdGNGYWN0b3J5OworICAgICAgICAgICAgUmVjb3ZlcnlGaWxlTG9nZ2VyIGxvZ2dlciA9IG5ldFR4RmFjdG9yeS5SZWNvdmVyeVBvbGljeS5SZWNvdmVyeUxvZ2dlciBhcyBSZWNvdmVyeUZpbGVMb2dnZXI7CisgICAgICAgICAgICBzdHJpbmcgbG9nRGlyZWN0b3J5ID0gbG9nZ2VyLkxvY2F0aW9uOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0OworICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOworICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUHJlUHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uQ29tbWl0VHJhbnNwb3J0SG9vazsKKworICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhDb21taXQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNvbW1pdGVkCisgICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKTsKKworICAgICAgICAgICAgLy8gZGVsZXRlIGFsbCByZWNvdmVyeSBmaWxlcyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yZWFjaCAoc3RyaW5nIGZpbGUgaW4gRGlyZWN0b3J5LkdldEZpbGVzKGxvZ0RpcmVjdG9yeSwgIiouYmluIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRmlsZS5EZWxldGUoZmlsZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRW1wdHkoKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIE5PVCBwcmVzZW50IGluIHRoZSBxdWV1ZSBiYWNhdXNlIHJlY292ZXJ5IGZpbGUgaGFzIGJlZW4gZGVsZXRlZAorICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0Tm9SZWNvdmVyQWZ0ZXJGYWlsT25UcmFuc2FjdGlvbldoZW5Mb2dXcml0ZUZhaWxzKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gREIgd2l0aCBkYXRhIHRvIHNlbmQuCisgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsKKworICAgICAgICAgICAgc3RyaW5nIG5ld0Nvbm5lY3Rpb25VcmkgPSAKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uVVJJICsgIj9ubXMuUmVjb3ZlcnlQb2xpY3kuUmVjb3ZlcnlMb2dnZXJUeXBlPWhhcm5lc3MiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiZubXMuY29uZmlndXJlZFJlc291cmNlTWFuYWdlcklkPSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGNGYWN0b3J5LkNvbmZpZ3VyZWRSZXNvdXJjZU1hbmFnZXJJZDsKKworICAgICAgICAgICAgZHRjRmFjdG9yeSA9IG5ldyBOZXRUeENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIobmV3Q29ubmVjdGlvblVyaSkpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJUmVjb3ZlcnlMb2dnZXIgbG9nZ2VyID0gKGNvbm5lY3Rpb24gYXMgTmV0VHhDb25uZWN0aW9uKS5SZWNvdmVyeVBvbGljeS5SZWNvdmVyeUxvZ2dlcjsKKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKGxvZ2dlcik7CisgICAgICAgICAgICAgICAgUmVjb3ZlcnlMb2dnZXJIYXJuZXNzIGhhcm5lc3MgPSBsb2dnZXIgYXMgUmVjb3ZlcnlMb2dnZXJIYXJuZXNzOworICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwoaGFybmVzcyk7CisKKyAgICAgICAgICAgICAgICBoYXJuZXNzLlByZUxvZ1JlY292ZXJ5SW5mb0V2ZW50ICs9IEZhaWxPblByZUxvZ1JlY292ZXJ5SG9vazsKKworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRXhjZXB0aW9uTGlzdGVuZXIgKz0gdGhpcy5PbkV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisKKyAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOworCisgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgbm90IGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlKCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJBZnRlckZhaWxPblRyYW5zYWN0aW9uQmVmb3JlUHJlcGFyZVNlbnQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4KKyAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0OworICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOworICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUHJlUHJvY2Vzc29yICs9IHRoaXMuRmFpbE9uUHJlcGFyZVRyYW5zcG9ydEhvb2s7CisKKyAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOworCisgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2ZXJpZnkgc3FsIHNlcnZlciBoYXMgbm90IGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlKCk7CisgICAgICAgIH0KKworICAgICAgICBbVGVzdF0KKyAgICAgICAgcHVibGljIHZvaWQgVGVzdFJlY292ZXJBZnRlckZhaWxPblRyYW5zYWN0aW9uRHVyaW5nUHJlcGFyZVNlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4KKyAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgSVRyYW5zcG9ydCB0cmFuc3BvcnQgPSAoY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uKS5JVHJhbnNwb3J0OworICAgICAgICAgICAgICAgIFRjcEZhdWx0eVRyYW5zcG9ydCB0Y3BGYXVsdHkgPSB0cmFuc3BvcnQuTmFycm93KHR5cGVvZihUY3BGYXVsdHlUcmFuc3BvcnQpKSBhcyBUY3BGYXVsdHlUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbCh0Y3BGYXVsdHkpOworICAgICAgICAgICAgICAgIHRjcEZhdWx0eS5PbmV3YXlDb21tYW5kUG9zdFByb2Nlc3NvciArPSB0aGlzLkZhaWxPblByZXBhcmVUcmFuc3BvcnRIb29rOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIGNvbW1pdGVkIHRoZSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0UmVjb3ZlckFmdGVyVHJhbnNhY3Rpb25TY29wZUFib3J0ZWQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUZXN0IGluaXRpYWxpemUgLSBGaWxscyBpbiBEQiB3aXRoIGRhdGEgdG8gc2VuZC4KKyAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aFNjb3BlQWJvcnRlZChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmVyaWZ5IHNxbCBzZXJ2ZXIgaGFzIE5PVCBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbCgpOworCisgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgTk9UIHByZXNlbnQgaW4gdGhlIHF1ZXVlCisgICAgICAgICAgICBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgW1Rlc3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRlc3RSZWNvdmVyQWZ0ZXJSb2xsYmFja0ZhaWxXaGVuU2NvcGVBYm9ydGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGVzdCBpbml0aWFsaXplIC0gRmlsbHMgaW4gREIgd2l0aCBkYXRhIHRvIHNlbmQuCisgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5FeGNlcHRpb25MaXN0ZW5lciArPSB0aGlzLk9uRXhjZXB0aW9uOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIElUcmFuc3BvcnQgdHJhbnNwb3J0ID0gKGNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvbikuSVRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICBUY3BGYXVsdHlUcmFuc3BvcnQgdGNwRmF1bHR5ID0gdHJhbnNwb3J0Lk5hcnJvdyh0eXBlb2YoVGNwRmF1bHR5VHJhbnNwb3J0KSkgYXMgVGNwRmF1bHR5VHJhbnNwb3J0OworICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwodGNwRmF1bHR5KTsKKyAgICAgICAgICAgICAgICB0Y3BGYXVsdHkuT25ld2F5Q29tbWFuZFByZVByb2Nlc3NvciArPSB0aGlzLkZhaWxPblJvbGxiYWNrVHJhbnNwb3J0SG9vazsKKworICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhTY29wZUFib3J0ZWQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMjAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbCgpOworCisgICAgICAgICAgICAvLyBiZWZvcmUgcmVjb3ZlcmluZywgbWVzc2FnZXMgc2hvdWxkIE5PVCBiZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWVOb1JlY292ZXJ5KCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgcXVldWUgYWZ0ZXIgcmVjb3ZlcgorICAgICAgICAgICAgVmVyaWZ5Tm9NZXNzYWdlc0luUXVldWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0SXRlcmF0aXZlVHJhbnNhY3RlZFByb2R1Y2VXaXRoREJEZWxldGUoKQorICAgICAgICB7CisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkV4Y2VwdGlvbkxpc3RlbmVyICs9IHRoaXMuT25FeGNlcHRpb247CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7CisgICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOworICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhDb21taXQoY29ubmVjdGlvbik7CisKKyAgICAgICAgICAgICAgICBQcmVwYXJlRGF0YWJhc2UoKTsKKyAgICAgICAgICAgICAgICBSZWFkRnJvbURiQW5kUHJvZHVjZVRvUXVldWVXaXRoQ29tbWl0KGNvbm5lY3Rpb24pOworCisgICAgICAgICAgICAgICAgUHJlcGFyZURhdGFiYXNlKCk7CisgICAgICAgICAgICAgICAgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChjb25uZWN0aW9uKTsKKworICAgICAgICAgICAgICAgIFByZXBhcmVEYXRhYmFzZSgpOworICAgICAgICAgICAgICAgIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhDb21taXQoY29ubmVjdGlvbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZlcmlmeSBzcWwgc2VydmVyIGhhcyBjb21taXRlZCB0aGUgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRW1wdHkoKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlCisgICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KE1TR19DT1VOVCAqIDUpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL0R0Y1RyYW5zYWN0aW9uc1Rlc3RTdXBwb3J0LmNzIGIvdGVzdC9EdGNUcmFuc2FjdGlvbnNUZXN0U3VwcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvRHRjVHJhbnNhY3Rpb25zVGVzdFN1cHBvcnQuY3MKcmVuYW1lIHRvIHRlc3QvRHRjVHJhbnNhY3Rpb25zVGVzdFN1cHBvcnQuY3MKaW5kZXggMDMwYTlkMy4uMDdkMzE1NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvY3NoYXJwL0R0Y1RyYW5zYWN0aW9uc1Rlc3RTdXBwb3J0LmNzCisrKyBiL3Rlc3QvRHRjVHJhbnNhY3Rpb25zVGVzdFN1cHBvcnQuY3MKQEAgLTEsNjYyICsxLDY2MiBAQAot77u/LyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLXVzaW5nIFN5c3RlbS5JTzsNCi11c2luZyBTeXN0ZW0uVHJhbnNhY3Rpb25zOw0KLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQotDQotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOw0KLXVzaW5nIEFwYWNoZS5OTVMuVGVzdDsNCi11c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOw0KLXVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0Ow0KLXVzaW5nIFN5c3RlbS5EYXRhLlNxbENsaWVudDsNCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdA0KLXsNCi0gICAgLy8gUFJFUkVRVUlTSVRFUyB0byBydW4gdGhvc2UgdGVzdHMgOg0KLSAgICAvLyAtIEEgbG9jYWwgaW5zdGFuY2Ugb2Ygc3FsIHNlcnZlciAyMDA4IHJ1bm5pbmcsIHdpdGggYSBkYiAoZS5nLiBUZXN0REIpIHRoYXQgDQotICAgIC8vICAgYXMgYSB0YWJsZSAoZS5nLiBUZXN0VGFibGUpIHdpdGggYSBzaW5nbGUgY29sdW1uIChlLmcuIFRlc3RJRCkgb2YgdHlwZSBJTlQuDQotICAgIC8vICAgVGhlIHRlc3QgZGVmYXVsdCB0byB1c2luZyBhbiBTUUwgQ29ubmVjdGlvbiBzdHJpbmcgd2l0aCBhIHVzZXIgaWQgb2YgDQotICAgIC8vICAgJ3VzZXInIGFuZCB0aGUgcGFzc3dvcmQgJ3Bhc3N3b3JkJw0KLSAgICAvLyAtIEFNUSBTZXJ2ZXIgNS40LjIrDQotICAgIC8vIC0gTk1TIDEuNSsNCi0gICAgLy8NCi0gICAgLy8gSU1QT1JUQU5UDQotICAgIC8vIEJlY2F1c2UgeW91IGNhbm5vdCBwZXJmb3JtIHJlY292ZXJ5IGluIGEgcHJvY2VzcyBtb3JlIHRoYW4gb25jZSB5b3UgY2Fubm90DQotICAgIC8vIHJ1biB0aGVzZSB0ZXN0cyBzZXF1ZW50aWFsbHkgaW4gdGhlIE5Vbml0IEdVSSBvciBOVW5pdCBDb25zb2xlIHJ1bm5lciB5b3UNCi0gICAgLy8gbXVzdCBydW4gdGhlbSBvbmUgYXQgYSB0aW1lIGZyb20gdGhlIGNvbnNvbGUgb3IgdXNpbmcgYSB0b29sIGxpa2UgdGhlIFJlU2hhcnBlcg0KLSAgICAvLyBwbHVnaW4gZm9yIFZpc3VhbCBTdHVkaW8uDQotICAgIC8vDQotDQotICAgIHB1YmxpYyBjbGFzcyBEdGNUcmFuc2FjdGlvbnNUZXN0U3VwcG9ydCA6IE5NU1Rlc3RTdXBwb3J0DQotICAgIHsNCi0gICAgICAgIHByb3RlY3RlZCBjb25zdCBpbnQgTVNHX0NPVU5UID0gNTsNCi0gICAgICAgIHByb3RlY3RlZCBzdHJpbmcgbm9uRXhpc3RhbnRQYXRoOw0KLSAgICAgICAgcHJvdGVjdGVkIE5ldFR4Q29ubmVjdGlvbkZhY3RvcnkgZHRjRmFjdG9yeTsNCi0gICAgICAgIA0KLSAgICAgICAgcHJpdmF0ZSBJVHJhY2Ugb2xkVHJhY2VyOw0KLQ0KLSAgICAgICAgcHJvdGVjdGVkIGNvbnN0IHN0cmluZyBzcWxDb25uZWN0aW9uU3RyaW5nID0NCi0gICAgICAgICAgICAvLyAiRGF0YSBTb3VyY2U9bG9jYWxob3N0O0luaXRpYWwgQ2F0YWxvZz1UZXN0REI7VXNlciBJRD11c2VyO1Bhc3N3b3JkPXBhc3N3b3JkIjsNCi0gICAgICAgICAgICAiRGF0YSBTb3VyY2U9LlxcU1FMRVhQUkVTUztJbml0aWFsIENhdGFsb2c9VGVzdERCO0ludGVncmF0ZWQgU2VjdXJpdHkgPSB0cnVlIjsNCi0gICAgICAgIHByb3RlY3RlZCBjb25zdCBzdHJpbmcgdGVzdFRhYmxlID0gIlRlc3RUYWJsZSI7DQotICAgICAgICBwcm90ZWN0ZWQgY29uc3Qgc3RyaW5nIHRlc3RDb2x1bW4gPSAiVGVzdElEIjsNCi0gICAgICAgIHByb3RlY3RlZCBjb25zdCBzdHJpbmcgdGVzdFF1ZXVlTmFtZSA9ICJUZXN0UXVldWUiOw0KLSAgICAgICAgcHJvdGVjdGVkIGNvbnN0IHN0cmluZyBjb25uZWN0aW9uVVJJID0gInRjcGZhdWx0eTovLyR7YWN0aXZlbXFob3N0fTo2MTYxNiI7DQotDQotICAgICAgICBbU2V0VXBdDQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXRVcCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy5vbGRUcmFjZXIgPSBUcmFjZXIuVHJhY2U7DQotICAgICAgICAgICAgdGhpcy5ub25FeGlzdGFudFBhdGggPSBQYXRoLkNvbWJpbmUoRGlyZWN0b3J5LkdldEN1cnJlbnREaXJlY3RvcnkoKSwgR3VpZC5OZXdHdWlkKCkuVG9TdHJpbmcoKSk7DQotDQotICAgICAgICAgICAgYmFzZS5TZXRVcCgpOw0KLQ0KLSAgICAgICAgICAgIFB1cmdlRGVzdGluYXRpb24oKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFtUZWFyRG93bl0NCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIFRlYXJEb3duKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBEZWxldGVEZXN0aW5hdGlvbigpOw0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIGJhc2UuVGVhckRvd24oKTsNCi0NCi0gICAgICAgICAgICBUcmFjZXIuVHJhY2UgPSB0aGlzLm9sZFRyYWNlcjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIE9uRXhjZXB0aW9uKEV4Y2VwdGlvbiBleCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBUcmFjZXIuRGVidWdGb3JtYXQoIlRlc3QgRHJpdmVyIHJlY2VpdmVkIEVycm9yIE5vdGlmaWNhdGlvbjogezB9IiwgZXguTWVzc2FnZSk7DQotICAgICAgICB9DQotDQotICAgICAgICAjcmVnaW9uIERhdGFiYXNlIFV0aWxpdHkgTWV0aG9kcw0KLQ0KLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFByZXBhcmVEYXRhYmFzZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7DQotDQotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgZGF0YSBmcm9tIHRlc3QgdGFibGUNCi0gICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKHN0cmluZy5Gb3JtYXQoIlRSVU5DQVRFIFRBQkxFIHswfSIsIHRlc3RUYWJsZSksIHNxbENvbm5lY3Rpb24pKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBzcWxDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIC8vIGFkZCBzb21lIGRhdGEgdG8gdGVzdCB0YWJsZQ0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1TR19DT1VOVDsgKytpKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoDQotICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIHswfSAoezF9KSB2YWx1ZXMgKHsyfSkiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb2x1bW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpLCBzcWxDb25uZWN0aW9uKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcWxDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uQ2xvc2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUHVyZ2VEYXRhYmFzZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7DQotDQotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgZGF0YSBmcm9tIHRlc3QgdGFibGUNCi0gICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKHN0cmluZy5Gb3JtYXQoIlRSVU5DQVRFIFRBQkxFIHswfSIsIHRlc3RUYWJsZSksIHNxbENvbm5lY3Rpb24pKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBzcWxDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uQ2xvc2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIElMaXN0IEV4dHJhY3REYXRhU2V0KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBJTGlzdCBlbnRyaWVzID0gbmV3IEFycmF5TGlzdCgpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uT3BlbigpOw0KLQ0KLSAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxSZWFkQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKA0KLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiU0VMRUNUIHswfSBGUk9NIHsxfSIsIHRlc3RDb2x1bW4sIHRlc3RUYWJsZSksIHNxbENvbm5lY3Rpb24pKQ0KLSAgICAgICAgICAgICAgICB1c2luZyAoU3FsRGF0YVJlYWRlciByZWFkZXIgPSBzcWxSZWFkQ29tbWFuZC5FeGVjdXRlUmVhZGVyKCkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuUmVhZCgpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMuQWRkKCJIZWxsbyBXb3JsZCAiICsgKGludClyZWFkZXJbMF0pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIHJldHVybiBlbnRyaWVzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFZlcmlmeURhdGFiYXNlVGFibGVJc0VtcHR5KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsNCi0gICAgICAgICAgICAgICAgU3FsQ29tbWFuZCBzcWxDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoDQotICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7MH0iLCB0ZXN0VGFibGUpLA0KLSAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbik7DQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IChpbnQpc3FsQ29tbWFuZC5FeGVjdXRlU2NhbGFyKCk7DQotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBjb3VudCwgIndyb25nIG51bWJlciBvZiByb3dzIGluIERCIik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoTVNHX0NPVU5UKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKGludCBleHBlY3RlZCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsNCi0gICAgICAgICAgICAgICAgU3FsQ29tbWFuZCBzcWxDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoDQotICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7MH0iLCB0ZXN0VGFibGUpLA0KLSAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbik7DQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IChpbnQpc3FsQ29tbWFuZC5FeGVjdXRlU2NhbGFyKCk7DQotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZCwgY291bnQsICJ3cm9uZyBudW1iZXIgb2Ygcm93cyBpbiBEQiIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgICNlbmRyZWdpb24NCi0NCi0gICAgICAgICNyZWdpb24gRGVzdGluYXRpb24gVXRpbGl0eSBNZXRob2RzDQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgRGVsZXRlRGVzdGluYXRpb24oKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIElDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBmYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSBhcyBDb25uZWN0aW9uKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRGVsZXRlRGVzdGluYXRpb24ocXVldWUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgY2F0Y2gNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBQdXJnZURlc3RpbmF0aW9uKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLQ0KLSAgICAgICAgICAgICAgICB1c2luZyAoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbigpKQ0KLSAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKSkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIHJlY3ZkOw0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZWN2ZCA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygzMDAwKSkpICE9IG51bGwpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJTZXR1cCBQdXJnZWQgTWVzc2FnZTogIiArIHJlY3ZkKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBQdXJnZUFuZEZpbGxRdWV1ZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgUHVyZ2VBbmRGaWxsUXVldWUoTVNHX0NPVU5UKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBQdXJnZUFuZEZpbGxRdWV1ZShpbnQgbXNnQ291bnQpDQotICAgICAgICB7DQotICAgICAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnkoUmVwbGFjZUVudlZhcihjb25uZWN0aW9uVVJJKSk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBmYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uU3RhcnQoKTsNCi0NCi0gICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIC8vIGVtcHR5IHF1ZXVlDQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDIwMDApKSkgIT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzDQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VQcm9kdWNlciBwcm9kdWNlciA9IHNlc3Npb24uQ3JlYXRlUHJvZHVjZXIocXVldWUpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyLkRlbGl2ZXJ5TW9kZSA9IE1zZ0RlbGl2ZXJ5TW9kZS5QZXJzaXN0ZW50Ow0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXNnQ291bnQ7IGkrKykNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyLlNlbmQoc2Vzc2lvbi5DcmVhdGVUZXh0TWVzc2FnZShpLlRvU3RyaW5nKCkpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAjZW5kcmVnaW9uDQotDQotICAgICAgICAjcmVnaW9uIEJyb2tlciBRdWV1ZSBTdGF0ZSBWYWxpZGF0aW9uIFJvdXRpbmVzDQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgVmVyaWZ5QnJva2VyUXVldWVDb3VudE5vUmVjb3ZlcnkoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnROb1JlY292ZXJ5KE1TR19DT1VOVCk7DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgVmVyaWZ5QnJva2VyUXVldWVDb3VudE5vUmVjb3ZlcnkoaW50IGV4cGVjdGVkTnVtYmVyT2ZNZXNzYWdlcykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsNCi0NCi0gICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgICAgIHVzaW5nIChJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKCkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7DQotDQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSVF1ZXVlQnJvd3NlciBicm93c2VyID0gc2Vzc2lvbi5DcmVhdGVCcm93c2VyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBJRW51bWVyYXRvciBlbnVtZXJhdG9yID0gYnJvd3Nlci5HZXRFbnVtZXJhdG9yKCk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1lc3NhZ2UgbXNnID0gZW51bWVyYXRvci5DdXJyZW50IGFzIElNZXNzYWdlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1zZywgIm1lc3NhZ2UgaXMgbm90IGluIHRoZSBxdWV1ZSAhIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50IHNob3VsZCBtYXRjaCB0aGUgZXhwZWN0ZWQgY291bnQNCi0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWROdW1iZXJPZk1lc3NhZ2VzLCBjb3VudCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KE1TR19DT1VOVCwgY29ubmVjdGlvblVSSSk7DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KGludCBleHBlY3RlZENvdW50KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoZXhwZWN0ZWRDb3VudCwgY29ubmVjdGlvblVSSSk7DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KHN0cmluZyBjb25uZWN0aW9uVXJpKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoTVNHX0NPVU5ULCBjb25uZWN0aW9uVXJpKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoaW50IGV4cGVjdGVkQ291bnQsIHN0cmluZyBjb25uZWN0aW9uVXJpKQ0KLSAgICAgICAgeyAgICAgICAgICAgDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGR0Y0ZhY3RvcnkuQ3JlYXRlTmV0VHhDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKCkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7DQotDQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSVF1ZXVlQnJvd3NlciBicm93c2VyID0gc2Vzc2lvbi5DcmVhdGVCcm93c2VyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBJRW51bWVyYXRvciBlbnVtZXJhdG9yID0gYnJvd3Nlci5HZXRFbnVtZXJhdG9yKCk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudW1lcmF0b3IuTW92ZU5leHQoKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIG1zZyA9IGVudW1lcmF0b3IuQ3VycmVudCBhcyBJTWVzc2FnZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUgISIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudCBzaG91bGQgbWF0Y2ggdGhlIGV4cGVjdGVkIGNvdW50DQotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGV4cGVjdGVkQ291bnQsIGNvdW50KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlTm9SZWNvdmVyeSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudE5vUmVjb3ZlcnkoMCk7DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgwKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBWZXJpZnlCcm9rZXJTdGF0ZU5vUmVjb3ZlcihpbnQgZXhwZWN0ZWROdW1iZXJPZk1lc3NhZ2VzKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIElDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOw0KLQ0KLSAgICAgICAgICAgIHVzaW5nIChJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUNCi0gICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgSURlc3RpbmF0aW9uIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSkpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIG1zZzsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkTnVtYmVyT2ZNZXNzYWdlczsgKytpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDIwMDApKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUgISIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IG1lc3NhZ2Ugc2hvdWxkIGJlIGVtcHR5DQotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDIwMDApKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOdWxsKG1zZywgIm1lc3NhZ2UgZm91bmQgYnV0IG5vdCBleHBlY3RlZCAhIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIuQ2xvc2UoKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkNsb3NlKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgVmVyaWZ5QnJva2VySGFzTWVzc2FnZXNJblF1ZXVlKHN0cmluZyBjb25uZWN0aW9uVVJJKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gdGhlIHF1ZXVlDQotICAgICAgICAgICAgICAgIHVzaW5nIChJTmV0VHhTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbigpKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBJRGVzdGluYXRpb24gcXVldWUgPSBzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNU0dfQ09VTlQ7ICsraSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIG1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygyMDAwKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobXNnLCAibWVzc2FnZSBpcyBub3QgaW4gdGhlIHF1ZXVlICEiKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIuQ2xvc2UoKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0NCi0gICAgICAgICNlbmRyZWdpb24NCi0NCi0gICAgICAgICNyZWdpb24gVHJhbnNwb3J0IEhvb2xzIGZvciBjb250cm9sbGluZyBmYWlsdXJlIHBvaW50Lg0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgRmFpbE9uUHJlcGFyZVRyYW5zcG9ydEhvb2soSVRyYW5zcG9ydCB0cmFuc3BvcnQsIENvbW1hbmQgY29tbWFuZCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoY29tbWFuZCBpcyBUcmFuc2FjdGlvbkluZm8pDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkluZm8gdHhJbmZvID0gY29tbWFuZCBhcyBUcmFuc2FjdGlvbkluZm87DQotICAgICAgICAgICAgICAgIGlmICh0eEluZm8uVHlwZSA9PSAoYnl0ZSlUcmFuc2FjdGlvblR5cGUuUHJlcGFyZSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDEwMDApOw0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUaHJvd2luZyBFcnJvciBvbiBQcmVwYXJlLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3Igd3JpdGluZyBQcmVwYXJlIGNvbW1hbmQiKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIEZhaWxPblJvbGxiYWNrVHJhbnNwb3J0SG9vayhJVHJhbnNwb3J0IHRyYW5zcG9ydCwgQ29tbWFuZCBjb21tYW5kKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmIChjb21tYW5kIGlzIFRyYW5zYWN0aW9uSW5mbykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5mbyB0eEluZm8gPSBjb21tYW5kIGFzIFRyYW5zYWN0aW9uSW5mbzsNCi0gICAgICAgICAgICAgICAgaWYgKHR4SW5mby5UeXBlID09IChieXRlKVRyYW5zYWN0aW9uVHlwZS5Sb2xsYmFjaykNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUaHJvd2luZyBFcnJvciBvbiBSb2xsYmFjay4iKTsNCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkVycm9yIHdyaXRpbmcgUm9sbGJhY2sgY29tbWFuZCIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgRmFpbE9uQ29tbWl0VHJhbnNwb3J0SG9vayhJVHJhbnNwb3J0IHRyYW5zcG9ydCwgQ29tbWFuZCBjb21tYW5kKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmIChjb21tYW5kIGlzIFRyYW5zYWN0aW9uSW5mbykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5mbyB0eEluZm8gPSBjb21tYW5kIGFzIFRyYW5zYWN0aW9uSW5mbzsNCi0gICAgICAgICAgICAgICAgaWYgKHR4SW5mby5UeXBlID09IChieXRlKVRyYW5zYWN0aW9uVHlwZS5Db21taXRUd29QaGFzZSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUaHJvd2luZyBFcnJvciBvbiBDb21taXQuIik7DQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJFcnJvciB3cml0aW5nIENvbW1pdCBjb21tYW5kIik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAjZW5kcmVnaW9uDQotDQotICAgICAgICAjcmVnaW9uIFJlY292ZXJ5IEhhcm5lc3MgSG9va3MgZm9yIGNvbnRyb2xsaW5nIGZhaWx1cmUgY29uZGl0aW9ucw0KLQ0KLSAgICAgICAgcHVibGljIHZvaWQgRmFpbE9uUHJlTG9nUmVjb3ZlcnlIb29rKFhBVHJhbnNhY3Rpb25JZCB4aWQsIGJ5dGVbXSByZWNvdmVyeUluZm9ybWF0aW8pDQotICAgICAgICB7DQotICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUaHJvd2luZyBFcnJvciBiZWZvcmUgdGhlIFJlY292ZXJ5IEluZm9ybWF0aW9uIGlzIExvZ2dlZC4iKTsNCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnRlbnRpb25hbCBFcnJvciBMb2dnaW5nIFJlY292ZXJ5IEluZm9ybWF0aW9uIik7DQotICAgICAgICB9DQotDQotICAgICAgICAjZW5kcmVnaW9uDQotDQotICAgICAgICAjcmVnaW9uIFByb2R1Y2UgTWVzc2FnZXMgdXNlIGNhc2VzDQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24pDQotICAgICAgICB7DQotICAgICAgICAgICAgSUxpc3QgZW50cmllcyA9IEV4dHJhY3REYXRhU2V0KCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKHRydWUpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzIHJlYWQgZnJvbSBEQg0KLSAgICAgICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLkNyZWF0ZVByb2R1Y2VyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5EZWxpdmVyeU1vZGUgPSBNc2dEZWxpdmVyeU1vZGUuUGVyc2lzdGVudDsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChUcmFuc2FjdGlvbi5DdXJyZW50KTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJTZW5kaW5nIHswfSBtZXNzYWdlcyB0byBCcm9rZXIgaW4gdGhpcyBUWCIsIGVudHJpZXMuQ291bnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgdGV4dEJvZHkgaW4gZW50cmllcykNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIuU2VuZChzZXNzaW9uLkNyZWF0ZVRleHRNZXNzYWdlKHRleHRCb2R5KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsRGVsZXRlQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiREVMRVRFIEZST00gezB9IiwgdGVzdFRhYmxlKSwgc3FsQ29ubmVjdGlvbikpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHNxbERlbGV0ZUNvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZW50cmllcy5Db3VudCwgY291bnQsICJ3cm9uZyBudW1iZXIgb2Ygcm93cyBkZWxldGVkIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgLy8gZXhjZXB0aW9uIHRocm93biBpbiBUcmFuc2FjdGlvbkNvbnRleHQuQ29tbWl0KEVubGlzdG1lbnQgZW5saXN0bWVudCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUWDtFcnJvciBmcm9tIFRyYW5zYWN0aW9uU2NvcGU6ICIgKyBlLk1lc3NhZ2UpOw0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aFNjb3BlQWJvcnRlZChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24pDQotICAgICAgICB7DQotICAgICAgICAgICAgSUxpc3QgZW50cmllcyA9IEV4dHJhY3REYXRhU2V0KCk7DQotDQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKHRydWUpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzIHJlYWQgZnJvbSBEQg0KLSAgICAgICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLkNyZWF0ZVByb2R1Y2VyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5EZWxpdmVyeU1vZGUgPSBNc2dEZWxpdmVyeU1vZGUuUGVyc2lzdGVudDsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChUcmFuc2FjdGlvbi5DdXJyZW50KTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJTZW5kaW5nIHswfSBtZXNzYWdlcyB0byBCcm9rZXIgaW4gdGhpcyBUWCIsIGVudHJpZXMuQ291bnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgdGV4dEJvZHkgaW4gZW50cmllcykNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIuU2VuZChzZXNzaW9uLkNyZWF0ZVRleHRNZXNzYWdlKHRleHRCb2R5KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsRGVsZXRlQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiREVMRVRFIEZST00gezB9IiwgdGVzdFRhYmxlKSwgc3FsQ29ubmVjdGlvbikpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHNxbERlbGV0ZUNvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZW50cmllcy5Db3VudCwgY291bnQsICJ3cm9uZyBudW1iZXIgb2Ygcm93cyBkZWxldGVkIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlRYO0Vycm9yIGZyb20gVHJhbnNhY3Rpb25TY29wZTogIiArIGUuTWVzc2FnZSk7DQotICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoZS5Ub1N0cmluZygpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgICNlbmRyZWdpb24NCi0NCi0gICAgICAgICNyZWdpb24gQ29uc3VtZSBNZXNzYWdlcyBVc2UgQ2FzZXMNCi0NCi0gICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24pDQotICAgICAgICB7DQotICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKHRydWUpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgLy8gcmVhZCBtZXNzYWdlIGZyb20gcXVldWUgYW5kIGluc2VydCBpbnRvIGRiIHRhYmxlDQotICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChUcmFuc2FjdGlvblNjb3BlIHNjb3BlZCA9IG5ldyBUcmFuc2FjdGlvblNjb3BlKFRyYW5zYWN0aW9uU2NvcGVPcHRpb24uUmVxdWlyZXNOZXcpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxJbnNlcnRDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uT3BlbigpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbm5lY3Rpb24gPSBzcWxDb25uZWN0aW9uOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKFRyYW5zYWN0aW9uLkN1cnJlbnQpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1TR19DT1VOVDsgaSsrKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IGNvbnN1bWVyLlJlY2VpdmUoKSBhcyBJVGV4dE1lc3NhZ2U7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1lc3NhZ2UsICJtaXNzaW5nIG1lc3NhZ2UiKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIklOU0VSVCBJTlRPIHswfSBWQUxVRVMgKHsxfSkiLCB0ZXN0VGFibGUsIENvbnZlcnQuVG9JbnQzMihtZXNzYWdlLlRleHQpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkLkNvbXBsZXRlKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUWDtFcnJvciBmcm9tIFRyYW5zYWN0aW9uU2NvcGU6ICIgKyBlLk1lc3NhZ2UpOw0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUmVhZEZyb21RdWV1ZUFuZEluc2VydEludG9EYldpdGhTY29wZUFib3J0ZWQoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVzaW5nIChJTmV0VHhTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbih0cnVlKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7DQotDQotICAgICAgICAgICAgICAgIC8vIHJlYWQgbWVzc2FnZSBmcm9tIHF1ZXVlIGFuZCBpbnNlcnQgaW50byBkYiB0YWJsZQ0KLSAgICAgICAgICAgICAgICB0cnkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpDQotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsSW5zZXJ0Q29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db25uZWN0aW9uID0gc3FsQ29ubmVjdGlvbjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChUcmFuc2FjdGlvbi5DdXJyZW50KTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNU0dfQ09VTlQ7IGkrKykNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBjb25zdW1lci5SZWNlaXZlKCkgYXMgSVRleHRNZXNzYWdlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXNzYWdlLCAibWlzc2luZyBtZXNzYWdlIik7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkNvbW1hbmRUZXh0ID0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJJTlNFUlQgSU5UTyB7MH0gVkFMVUVTICh7MX0pIiwgdGVzdFRhYmxlLCBDb252ZXJ0LlRvSW50MzIobWVzc2FnZS5UZXh0KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUWDtFcnJvciBmcm9tIFRyYW5zYWN0aW9uU2NvcGU6ICIgKyBlLk1lc3NhZ2UpOw0KLSAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAjZW5kcmVnaW9uDQotICAgIH0NCi19DQor77u/LyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UcmFuc2FjdGlvbnM7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOworCit1c2luZyBOVW5pdC5GcmFtZXdvcms7Cit1c2luZyBBcGFjaGUuTk1TLlRlc3Q7Cit1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOwordXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUS5UcmFuc3BvcnQ7Cit1c2luZyBTeXN0ZW0uRGF0YS5TcWxDbGllbnQ7Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QKK3sKKyAgICAvLyBQUkVSRVFVSVNJVEVTIHRvIHJ1biB0aG9zZSB0ZXN0cyA6CisgICAgLy8gLSBBIGxvY2FsIGluc3RhbmNlIG9mIHNxbCBzZXJ2ZXIgMjAwOCBydW5uaW5nLCB3aXRoIGEgZGIgKGUuZy4gVGVzdERCKSB0aGF0IAorICAgIC8vICAgYXMgYSB0YWJsZSAoZS5nLiBUZXN0VGFibGUpIHdpdGggYSBzaW5nbGUgY29sdW1uIChlLmcuIFRlc3RJRCkgb2YgdHlwZSBJTlQuCisgICAgLy8gICBUaGUgdGVzdCBkZWZhdWx0IHRvIHVzaW5nIGFuIFNRTCBDb25uZWN0aW9uIHN0cmluZyB3aXRoIGEgdXNlciBpZCBvZiAKKyAgICAvLyAgICd1c2VyJyBhbmQgdGhlIHBhc3N3b3JkICdwYXNzd29yZCcKKyAgICAvLyAtIEFNUSBTZXJ2ZXIgNS40LjIrCisgICAgLy8gLSBOTVMgMS41KworICAgIC8vCisgICAgLy8gSU1QT1JUQU5UCisgICAgLy8gQmVjYXVzZSB5b3UgY2Fubm90IHBlcmZvcm0gcmVjb3ZlcnkgaW4gYSBwcm9jZXNzIG1vcmUgdGhhbiBvbmNlIHlvdSBjYW5ub3QKKyAgICAvLyBydW4gdGhlc2UgdGVzdHMgc2VxdWVudGlhbGx5IGluIHRoZSBOVW5pdCBHVUkgb3IgTlVuaXQgQ29uc29sZSBydW5uZXIgeW91CisgICAgLy8gbXVzdCBydW4gdGhlbSBvbmUgYXQgYSB0aW1lIGZyb20gdGhlIGNvbnNvbGUgb3IgdXNpbmcgYSB0b29sIGxpa2UgdGhlIFJlU2hhcnBlcgorICAgIC8vIHBsdWdpbiBmb3IgVmlzdWFsIFN0dWRpby4KKyAgICAvLworCisgICAgcHVibGljIGNsYXNzIER0Y1RyYW5zYWN0aW9uc1Rlc3RTdXBwb3J0IDogTk1TVGVzdFN1cHBvcnQKKyAgICB7CisgICAgICAgIHByb3RlY3RlZCBjb25zdCBpbnQgTVNHX0NPVU5UID0gNTsKKyAgICAgICAgcHJvdGVjdGVkIHN0cmluZyBub25FeGlzdGFudFBhdGg7CisgICAgICAgIHByb3RlY3RlZCBOZXRUeENvbm5lY3Rpb25GYWN0b3J5IGR0Y0ZhY3Rvcnk7CisgICAgICAgIAorICAgICAgICBwcml2YXRlIElUcmFjZSBvbGRUcmFjZXI7CisKKyAgICAgICAgcHJvdGVjdGVkIGNvbnN0IHN0cmluZyBzcWxDb25uZWN0aW9uU3RyaW5nID0KKyAgICAgICAgICAgIC8vICJEYXRhIFNvdXJjZT1sb2NhbGhvc3Q7SW5pdGlhbCBDYXRhbG9nPVRlc3REQjtVc2VyIElEPXVzZXI7UGFzc3dvcmQ9cGFzc3dvcmQiOworICAgICAgICAgICAgIkRhdGEgU291cmNlPS5cXFNRTEVYUFJFU1M7SW5pdGlhbCBDYXRhbG9nPVRlc3REQjtJbnRlZ3JhdGVkIFNlY3VyaXR5ID0gdHJ1ZSI7CisgICAgICAgIHByb3RlY3RlZCBjb25zdCBzdHJpbmcgdGVzdFRhYmxlID0gIlRlc3RUYWJsZSI7CisgICAgICAgIHByb3RlY3RlZCBjb25zdCBzdHJpbmcgdGVzdENvbHVtbiA9ICJUZXN0SUQiOworICAgICAgICBwcm90ZWN0ZWQgY29uc3Qgc3RyaW5nIHRlc3RRdWV1ZU5hbWUgPSAiVGVzdFF1ZXVlIjsKKyAgICAgICAgcHJvdGVjdGVkIGNvbnN0IHN0cmluZyBjb25uZWN0aW9uVVJJID0gInRjcGZhdWx0eTovLyR7YWN0aXZlbXFob3N0fTo2MTYxNiI7CisKKyAgICAgICAgW1NldFVwXQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXRVcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMub2xkVHJhY2VyID0gVHJhY2VyLlRyYWNlOworICAgICAgICAgICAgdGhpcy5ub25FeGlzdGFudFBhdGggPSBQYXRoLkNvbWJpbmUoRGlyZWN0b3J5LkdldEN1cnJlbnREaXJlY3RvcnkoKSwgR3VpZC5OZXdHdWlkKCkuVG9TdHJpbmcoKSk7CisKKyAgICAgICAgICAgIGJhc2UuU2V0VXAoKTsKKworICAgICAgICAgICAgUHVyZ2VEZXN0aW5hdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgW1RlYXJEb3duXQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBUZWFyRG93bigpCisgICAgICAgIHsKKyAgICAgICAgICAgIERlbGV0ZURlc3RpbmF0aW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJhc2UuVGVhckRvd24oKTsKKworICAgICAgICAgICAgVHJhY2VyLlRyYWNlID0gdGhpcy5vbGRUcmFjZXI7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBPbkV4Y2VwdGlvbihFeGNlcHRpb24gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRyYWNlci5EZWJ1Z0Zvcm1hdCgiVGVzdCBEcml2ZXIgcmVjZWl2ZWQgRXJyb3IgTm90aWZpY2F0aW9uOiB7MH0iLCBleC5NZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgICNyZWdpb24gRGF0YWJhc2UgVXRpbGl0eSBNZXRob2RzCisKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFByZXBhcmVEYXRhYmFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsKKworICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgZGF0YSBmcm9tIHRlc3QgdGFibGUKKyAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoc3RyaW5nLkZvcm1hdCgiVFJVTkNBVEUgVEFCTEUgezB9IiwgdGVzdFRhYmxlKSwgc3FsQ29ubmVjdGlvbikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcWxDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGFkZCBzb21lIGRhdGEgdG8gdGVzdCB0YWJsZQorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTVNHX0NPVU5UOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyB7MH0gKHsxfSkgdmFsdWVzICh7Mn0pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKSwgc3FsQ29ubmVjdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxbENvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLkNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUHVyZ2VEYXRhYmFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsKKworICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgZGF0YSBmcm9tIHRlc3QgdGFibGUKKyAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoc3RyaW5nLkZvcm1hdCgiVFJVTkNBVEUgVEFCTEUgezB9IiwgdGVzdFRhYmxlKSwgc3FsQ29ubmVjdGlvbikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcWxDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uQ2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgSUxpc3QgRXh0cmFjdERhdGFTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBJTGlzdCBlbnRyaWVzID0gbmV3IEFycmF5TGlzdCgpOworCisgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7CisKKyAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxSZWFkQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKAorICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJTRUxFQ1QgezB9IEZST00gezF9IiwgdGVzdENvbHVtbiwgdGVzdFRhYmxlKSwgc3FsQ29ubmVjdGlvbikpCisgICAgICAgICAgICAgICAgdXNpbmcgKFNxbERhdGFSZWFkZXIgcmVhZGVyID0gc3FsUmVhZENvbW1hbmQuRXhlY3V0ZVJlYWRlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5SZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMuQWRkKCJIZWxsbyBXb3JsZCAiICsgKGludClyZWFkZXJbMF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZW50cmllczsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBWZXJpZnlEYXRhYmFzZVRhYmxlSXNFbXB0eSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsKKyAgICAgICAgICAgICAgICBTcWxDb21tYW5kIHNxbENvbW1hbmQgPSBuZXcgU3FsQ29tbWFuZCgKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiU0VMRUNUIENPVU5UKCopIEZST00gezB9IiwgdGVzdFRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gKGludClzcWxDb21tYW5kLkV4ZWN1dGVTY2FsYXIoKTsKKyAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgY291bnQsICJ3cm9uZyBudW1iZXIgb2Ygcm93cyBpbiBEQiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFZlcmlmeURhdGFiYXNlVGFibGVJc0Z1bGwoKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlEYXRhYmFzZVRhYmxlSXNGdWxsKE1TR19DT1VOVCk7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgVmVyaWZ5RGF0YWJhc2VUYWJsZUlzRnVsbChpbnQgZXhwZWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsKKyAgICAgICAgICAgICAgICBTcWxDb21tYW5kIHNxbENvbW1hbmQgPSBuZXcgU3FsQ29tbWFuZCgKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiU0VMRUNUIENPVU5UKCopIEZST00gezB9IiwgdGVzdFRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gKGludClzcWxDb21tYW5kLkV4ZWN1dGVTY2FsYXIoKTsKKyAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWQsIGNvdW50LCAid3JvbmcgbnVtYmVyIG9mIHJvd3MgaW4gREIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICNlbmRyZWdpb24KKworICAgICAgICAjcmVnaW9uIERlc3RpbmF0aW9uIFV0aWxpdHkgTWV0aG9kcworCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBEZWxldGVEZXN0aW5hdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIElDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworCisgICAgICAgICAgICB1c2luZyAoQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkgYXMgQ29ubmVjdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2luZyAoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uRGVsZXRlRGVzdGluYXRpb24ocXVldWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBQdXJnZURlc3RpbmF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnkoUmVwbGFjZUVudlZhcihjb25uZWN0aW9uVVJJKSk7CisKKyAgICAgICAgICAgIHVzaW5nIChJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSByZWN2ZDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZWN2ZCA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygzMDAwKSkpICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiU2V0dXAgUHVyZ2VkIE1lc3NhZ2U6ICIgKyByZWN2ZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUHVyZ2VBbmRGaWxsUXVldWUoKQorICAgICAgICB7CisgICAgICAgICAgICBQdXJnZUFuZEZpbGxRdWV1ZShNU0dfQ09VTlQpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFB1cmdlQW5kRmlsbFF1ZXVlKGludCBtc2dDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnkoUmVwbGFjZUVudlZhcihjb25uZWN0aW9uVVJJKSk7CisKKyAgICAgICAgICAgIHVzaW5nIChJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgdXNpbmcgKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZW1wdHkgcXVldWUKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoMjAwMCkpKSAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZW5xdWV1ZSBzZXZlcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihxdWV1ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyLkRlbGl2ZXJ5TW9kZSA9IE1zZ0RlbGl2ZXJ5TW9kZS5QZXJzaXN0ZW50OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1zZ0NvdW50OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIuU2VuZChzZXNzaW9uLkNyZWF0ZVRleHRNZXNzYWdlKGkuVG9TdHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgI2VuZHJlZ2lvbgorCisgICAgICAgICNyZWdpb24gQnJva2VyIFF1ZXVlIFN0YXRlIFZhbGlkYXRpb24gUm91dGluZXMKKworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgVmVyaWZ5QnJva2VyUXVldWVDb3VudE5vUmVjb3ZlcnkoKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50Tm9SZWNvdmVyeShNU0dfQ09VTlQpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFZlcmlmeUJyb2tlclF1ZXVlQ291bnROb1JlY292ZXJ5KGludCBleHBlY3RlZE51bWJlck9mTWVzc2FnZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIElDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5KFJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworCisgICAgICAgICAgICB1c2luZyAoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgICAgIHVzaW5nIChJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJUXVldWUgcXVldWUgPSBzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpOworCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJUXVldWVCcm93c2VyIGJyb3dzZXIgPSBzZXNzaW9uLkNyZWF0ZUJyb3dzZXIocXVldWUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgSUVudW1lcmF0b3IgZW51bWVyYXRvciA9IGJyb3dzZXIuR2V0RW51bWVyYXRvcigpOworCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShlbnVtZXJhdG9yLk1vdmVOZXh0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1lc3NhZ2UgbXNnID0gZW51bWVyYXRvci5DdXJyZW50IGFzIElNZXNzYWdlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwobXNnLCAibWVzc2FnZSBpcyBub3QgaW4gdGhlIHF1ZXVlICEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudCBzaG91bGQgbWF0Y2ggdGhlIGV4cGVjdGVkIGNvdW50CisgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWROdW1iZXJPZk1lc3NhZ2VzLCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudChNU0dfQ09VTlQsIGNvbm5lY3Rpb25VUkkpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgVmVyaWZ5QnJva2VyUXVldWVDb3VudChpbnQgZXhwZWN0ZWRDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudChleHBlY3RlZENvdW50LCBjb25uZWN0aW9uVVJJKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoc3RyaW5nIGNvbm5lY3Rpb25VcmkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoTVNHX0NPVU5ULCBjb25uZWN0aW9uVXJpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIFZlcmlmeUJyb2tlclF1ZXVlQ291bnQoaW50IGV4cGVjdGVkQ291bnQsIHN0cmluZyBjb25uZWN0aW9uVXJpKQorICAgICAgICB7ICAgICAgICAgICAKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkdGNGYWN0b3J5LkNyZWF0ZU5ldFR4Q29ubmVjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGNoZWNrIG1lc3NhZ2VzIGFyZSBwcmVzZW50IGluIHRoZSBxdWV1ZQorICAgICAgICAgICAgICAgIHVzaW5nIChJTmV0VHhTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKworICAgICAgICAgICAgICAgICAgICB1c2luZyAoSVF1ZXVlQnJvd3NlciBicm93c2VyID0gc2Vzc2lvbi5DcmVhdGVCcm93c2VyKHF1ZXVlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIElFbnVtZXJhdG9yIGVudW1lcmF0b3IgPSBicm93c2VyLkdldEVudW1lcmF0b3IoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudW1lcmF0b3IuTW92ZU5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSBtc2cgPSBlbnVtZXJhdG9yLkN1cnJlbnQgYXMgSU1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUgISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50IHNob3VsZCBtYXRjaCB0aGUgZXhwZWN0ZWQgY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZENvdW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBWZXJpZnlOb01lc3NhZ2VzSW5RdWV1ZU5vUmVjb3ZlcnkoKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlCcm9rZXJRdWV1ZUNvdW50Tm9SZWNvdmVyeSgwKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIFZlcmlmeU5vTWVzc2FnZXNJblF1ZXVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5QnJva2VyUXVldWVDb3VudCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBWZXJpZnlCcm9rZXJTdGF0ZU5vUmVjb3ZlcihpbnQgZXhwZWN0ZWROdW1iZXJPZk1lc3NhZ2VzKQorICAgICAgICB7CisgICAgICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeShSZXBsYWNlRW52VmFyKGNvbm5lY3Rpb25VUkkpKTsKKworICAgICAgICAgICAgdXNpbmcgKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBmYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgICAgICB1c2luZyAoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSURlc3RpbmF0aW9uIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKworICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBJTWVzc2FnZSBtc2c7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWROdW1iZXJPZk1lc3NhZ2VzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDIwMDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKG1zZywgIm1lc3NhZ2UgaXMgbm90IGluIHRoZSBxdWV1ZSAhIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgbWVzc2FnZSBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygyMDAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOdWxsKG1zZywgIm1lc3NhZ2UgZm91bmQgYnV0IG5vdCBleHBlY3RlZCAhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5DbG9zZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5DbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgVmVyaWZ5QnJva2VySGFzTWVzc2FnZXNJblF1ZXVlKHN0cmluZyBjb25uZWN0aW9uVVJJKQorICAgICAgICB7CisgICAgICAgICAgICB1c2luZyAoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uID0gZHRjRmFjdG9yeS5DcmVhdGVOZXRUeENvbm5lY3Rpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIElEZXN0aW5hdGlvbiBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHF1ZXVlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdGFydCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1TR19DT1VOVDsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIG1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcygyMDAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtc2csICJtZXNzYWdlIGlzIG5vdCBpbiB0aGUgcXVldWUgISIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5DbG9zZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAgICAjZW5kcmVnaW9uCisKKyAgICAgICAgI3JlZ2lvbiBUcmFuc3BvcnQgSG9vbHMgZm9yIGNvbnRyb2xsaW5nIGZhaWx1cmUgcG9pbnQuCisKKyAgICAgICAgcHVibGljIHZvaWQgRmFpbE9uUHJlcGFyZVRyYW5zcG9ydEhvb2soSVRyYW5zcG9ydCB0cmFuc3BvcnQsIENvbW1hbmQgY29tbWFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbW1hbmQgaXMgVHJhbnNhY3Rpb25JbmZvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5mbyB0eEluZm8gPSBjb21tYW5kIGFzIFRyYW5zYWN0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICBpZiAodHhJbmZvLlR5cGUgPT0gKGJ5dGUpVHJhbnNhY3Rpb25UeXBlLlByZXBhcmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUaHJlYWQuU2xlZXAoMTAwMCk7CisgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiVGhyb3dpbmcgRXJyb3Igb24gUHJlcGFyZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3Igd3JpdGluZyBQcmVwYXJlIGNvbW1hbmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBGYWlsT25Sb2xsYmFja1RyYW5zcG9ydEhvb2soSVRyYW5zcG9ydCB0cmFuc3BvcnQsIENvbW1hbmQgY29tbWFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbW1hbmQgaXMgVHJhbnNhY3Rpb25JbmZvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5mbyB0eEluZm8gPSBjb21tYW5kIGFzIFRyYW5zYWN0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICBpZiAodHhJbmZvLlR5cGUgPT0gKGJ5dGUpVHJhbnNhY3Rpb25UeXBlLlJvbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUaHJvd2luZyBFcnJvciBvbiBSb2xsYmFjay4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3Igd3JpdGluZyBSb2xsYmFjayBjb21tYW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgRmFpbE9uQ29tbWl0VHJhbnNwb3J0SG9vayhJVHJhbnNwb3J0IHRyYW5zcG9ydCwgQ29tbWFuZCBjb21tYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29tbWFuZCBpcyBUcmFuc2FjdGlvbkluZm8pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JbmZvIHR4SW5mbyA9IGNvbW1hbmQgYXMgVHJhbnNhY3Rpb25JbmZvOworICAgICAgICAgICAgICAgIGlmICh0eEluZm8uVHlwZSA9PSAoYnl0ZSlUcmFuc2FjdGlvblR5cGUuQ29tbWl0VHdvUGhhc2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlRocm93aW5nIEVycm9yIG9uIENvbW1pdC4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3Igd3JpdGluZyBDb21taXQgY29tbWFuZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICNlbmRyZWdpb24KKworICAgICAgICAjcmVnaW9uIFJlY292ZXJ5IEhhcm5lc3MgSG9va3MgZm9yIGNvbnRyb2xsaW5nIGZhaWx1cmUgY29uZGl0aW9ucworCisgICAgICAgIHB1YmxpYyB2b2lkIEZhaWxPblByZUxvZ1JlY292ZXJ5SG9vayhYQVRyYW5zYWN0aW9uSWQgeGlkLCBieXRlW10gcmVjb3ZlcnlJbmZvcm1hdGlvKQorICAgICAgICB7CisgICAgICAgICAgICBUcmFjZXIuRGVidWcoIlRocm93aW5nIEVycm9yIGJlZm9yZSB0aGUgUmVjb3ZlcnkgSW5mb3JtYXRpb24gaXMgTG9nZ2VkLiIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW50ZW50aW9uYWwgRXJyb3IgTG9nZ2luZyBSZWNvdmVyeSBJbmZvcm1hdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgI2VuZHJlZ2lvbgorCisgICAgICAgICNyZWdpb24gUHJvZHVjZSBNZXNzYWdlcyB1c2UgY2FzZXMKKworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgUmVhZEZyb21EYkFuZFByb2R1Y2VUb1F1ZXVlV2l0aENvbW1pdChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIElMaXN0IGVudHJpZXMgPSBFeHRyYWN0RGF0YVNldCgpOworCisgICAgICAgICAgICB1c2luZyAoSU5ldFR4U2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVOZXRUeFNlc3Npb24odHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSVF1ZXVlIHF1ZXVlID0gc2Vzc2lvbi5HZXRRdWV1ZSh0ZXN0UXVldWVOYW1lKTsKKworICAgICAgICAgICAgICAgIC8vIGVucXVldWUgc2V2ZXJhbCBtZXNzYWdlcyByZWFkIGZyb20gREIKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihxdWV1ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyLkRlbGl2ZXJ5TW9kZSA9IE1zZ0RlbGl2ZXJ5TW9kZS5QZXJzaXN0ZW50OworCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxDb25uZWN0aW9uLk9wZW4oKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwoVHJhbnNhY3Rpb24uQ3VycmVudCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWdGb3JtYXQoIlNlbmRpbmcgezB9IG1lc3NhZ2VzIHRvIEJyb2tlciBpbiB0aGlzIFRYIiwgZW50cmllcy5Db3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoc3RyaW5nIHRleHRCb2R5IGluIGVudHJpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5TZW5kKHNlc3Npb24uQ3JlYXRlVGV4dE1lc3NhZ2UodGV4dEJvZHkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29tbWFuZCBzcWxEZWxldGVDb21tYW5kID0gbmV3IFNxbENvbW1hbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIkRFTEVURSBGUk9NIHswfSIsIHRlc3RUYWJsZSksIHNxbENvbm5lY3Rpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gc3FsRGVsZXRlQ29tbWFuZC5FeGVjdXRlTm9uUXVlcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGVudHJpZXMuQ291bnQsIGNvdW50LCAid3JvbmcgbnVtYmVyIG9mIHJvd3MgZGVsZXRlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5Db21wbGV0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgLy8gZXhjZXB0aW9uIHRocm93biBpbiBUcmFuc2FjdGlvbkNvbnRleHQuQ29tbWl0KEVubGlzdG1lbnQgZW5saXN0bWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiVFg7RXJyb3IgZnJvbSBUcmFuc2FjdGlvblNjb3BlOiAiICsgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFJlYWRGcm9tRGJBbmRQcm9kdWNlVG9RdWV1ZVdpdGhTY29wZUFib3J0ZWQoSU5ldFR4Q29ubmVjdGlvbiBjb25uZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBJTGlzdCBlbnRyaWVzID0gRXh0cmFjdERhdGFTZXQoKTsKKworICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAvLyBlbnF1ZXVlIHNldmVyYWwgbWVzc2FnZXMgcmVhZCBmcm9tIERCCisgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VQcm9kdWNlciBwcm9kdWNlciA9IHNlc3Npb24uQ3JlYXRlUHJvZHVjZXIocXVldWUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5EZWxpdmVyeU1vZGUgPSBNc2dEZWxpdmVyeU1vZGUuUGVyc2lzdGVudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFRyYW5zYWN0aW9uU2NvcGUgc2NvcGVkID0gbmV3IFRyYW5zYWN0aW9uU2NvcGUoVHJhbnNhY3Rpb25TY29wZU9wdGlvbi5SZXF1aXJlc05ldykpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoU3FsQ29ubmVjdGlvbiBzcWxDb25uZWN0aW9uID0gbmV3IFNxbENvbm5lY3Rpb24oc3FsQ29ubmVjdGlvblN0cmluZykpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKFRyYW5zYWN0aW9uLkN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnRm9ybWF0KCJTZW5kaW5nIHswfSBtZXNzYWdlcyB0byBCcm9rZXIgaW4gdGhpcyBUWCIsIGVudHJpZXMuQ291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHN0cmluZyB0ZXh0Qm9keSBpbiBlbnRyaWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIuU2VuZChzZXNzaW9uLkNyZWF0ZVRleHRNZXNzYWdlKHRleHRCb2R5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsRGVsZXRlQ29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJERUxFVEUgRlJPTSB7MH0iLCB0ZXN0VGFibGUpLCBzcWxDb25uZWN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHNxbERlbGV0ZUNvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChlbnRyaWVzLkNvdW50LCBjb3VudCwgIndyb25nIG51bWJlciBvZiByb3dzIGRlbGV0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKCJUWDtFcnJvciBmcm9tIFRyYW5zYWN0aW9uU2NvcGU6ICIgKyBlLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBUcmFjZXIuRGVidWcoZS5Ub1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjZW5kcmVnaW9uCisKKyAgICAgICAgI3JlZ2lvbiBDb25zdW1lIE1lc3NhZ2VzIFVzZSBDYXNlcworCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBSZWFkRnJvbVF1ZXVlQW5kSW5zZXJ0SW50b0RiV2l0aENvbW1pdChJTmV0VHhDb25uZWN0aW9uIGNvbm5lY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIChJTmV0VHhTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZU5ldFR4U2Vzc2lvbih0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJUXVldWUgcXVldWUgPSBzZXNzaW9uLkdldFF1ZXVlKHRlc3RRdWV1ZU5hbWUpOworCisgICAgICAgICAgICAgICAgLy8gcmVhZCBtZXNzYWdlIGZyb20gcXVldWUgYW5kIGluc2VydCBpbnRvIGRiIHRhYmxlCisgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2luZyAoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIocXVldWUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAoVHJhbnNhY3Rpb25TY29wZSBzY29wZWQgPSBuZXcgVHJhbnNhY3Rpb25TY29wZShUcmFuc2FjdGlvblNjb3BlT3B0aW9uLlJlcXVpcmVzTmV3KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb25uZWN0aW9uIHNxbENvbm5lY3Rpb24gPSBuZXcgU3FsQ29ubmVjdGlvbihzcWxDb25uZWN0aW9uU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChTcWxDb21tYW5kIHNxbEluc2VydENvbW1hbmQgPSBuZXcgU3FsQ29tbWFuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbENvbm5lY3Rpb24uT3BlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29ubmVjdGlvbiA9IHNxbENvbm5lY3Rpb247CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKFRyYW5zYWN0aW9uLkN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNU0dfQ09VTlQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSBtZXNzYWdlID0gY29uc3VtZXIuUmVjZWl2ZSgpIGFzIElUZXh0TWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXNzYWdlLCAibWlzc2luZyBtZXNzYWdlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuQ29tbWFuZFRleHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiSU5TRVJUIElOVE8gezB9IFZBTFVFUyAoezF9KSIsIHRlc3RUYWJsZSwgQ29udmVydC5Ub0ludDMyKG1lc3NhZ2UuVGV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxJbnNlcnRDb21tYW5kLkV4ZWN1dGVOb25RdWVyeSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZC5Db21wbGV0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiVFg7RXJyb3IgZnJvbSBUcmFuc2FjdGlvblNjb3BlOiAiICsgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIFJlYWRGcm9tUXVldWVBbmRJbnNlcnRJbnRvRGJXaXRoU2NvcGVBYm9ydGVkKElOZXRUeENvbm5lY3Rpb24gY29ubmVjdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgKElOZXRUeFNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlTmV0VHhTZXNzaW9uKHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElRdWV1ZSBxdWV1ZSA9IHNlc3Npb24uR2V0UXVldWUodGVzdFF1ZXVlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAvLyByZWFkIG1lc3NhZ2UgZnJvbSBxdWV1ZSBhbmQgaW5zZXJ0IGludG8gZGIgdGFibGUKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVzaW5nIChJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihxdWV1ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIChUcmFuc2FjdGlvblNjb3BlIHNjb3BlZCA9IG5ldyBUcmFuc2FjdGlvblNjb3BlKFRyYW5zYWN0aW9uU2NvcGVPcHRpb24uUmVxdWlyZXNOZXcpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbm5lY3Rpb24gc3FsQ29ubmVjdGlvbiA9IG5ldyBTcWxDb25uZWN0aW9uKHNxbENvbm5lY3Rpb25TdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgKFNxbENvbW1hbmQgc3FsSW5zZXJ0Q29tbWFuZCA9IG5ldyBTcWxDb21tYW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsQ29ubmVjdGlvbi5PcGVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db25uZWN0aW9uID0gc3FsQ29ubmVjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKFRyYW5zYWN0aW9uLkN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNU0dfQ09VTlQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSBtZXNzYWdlID0gY29uc3VtZXIuUmVjZWl2ZSgpIGFzIElUZXh0TWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXNzYWdlLCAibWlzc2luZyBtZXNzYWdlIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsSW5zZXJ0Q29tbWFuZC5Db21tYW5kVGV4dCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KCJJTlNFUlQgSU5UTyB7MH0gVkFMVUVTICh7MX0pIiwgdGVzdFRhYmxlLCBDb252ZXJ0LlRvSW50MzIobWVzc2FnZS5UZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbEluc2VydENvbW1hbmQuRXhlY3V0ZU5vblF1ZXJ5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRyYWNlci5EZWJ1ZygiVFg7RXJyb3IgZnJvbSBUcmFuc2FjdGlvblNjb3BlOiAiICsgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VyLkRlYnVnKGUuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgI2VuZHJlZ2lvbgorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9FeGNsdXNpdmVDb25zdW1lclRlc3QuY3MgYi90ZXN0L0V4Y2x1c2l2ZUNvbnN1bWVyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL0V4Y2x1c2l2ZUNvbnN1bWVyVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9FeGNsdXNpdmVDb25zdW1lclRlc3QuY3MKZGlmZiAtLWdpdCBhL3Rlc3QvRXh0ZW5zaW9ucy9FeHBlY3RlZEV4Y2VwdGlvbkF0dHJpYnV0ZS5jcyBiL3Rlc3QvRXh0ZW5zaW9ucy9FeHBlY3RlZEV4Y2VwdGlvbkF0dHJpYnV0ZS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU5YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9FeHRlbnNpb25zL0V4cGVjdGVkRXhjZXB0aW9uQXR0cmlidXRlLmNzCkBAIC0wLDAgKzEsNjYgQEAKK++7v3VzaW5nIFN5c3RlbTsKK3VzaW5nIE5Vbml0LkZyYW1ld29yazsKK3VzaW5nIE5Vbml0LkZyYW1ld29yay5JbnRlcmZhY2VzOwordXNpbmcgTlVuaXQuRnJhbWV3b3JrLkludGVybmFsOwordXNpbmcgTlVuaXQuRnJhbWV3b3JrLkludGVybmFsLkNvbW1hbmRzOworCituYW1lc3BhY2UgTlVuaXQuRnJhbWV3b3JrCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIHNpbXBsZSBFeHBlY3RlZEV4Y2VwdGlvbkF0dHJpYnV0ZQorICAgIC8vLyBodHRwczovL2dpdGh1Yi5jb20vbnVuaXQvbnVuaXQtY3NoYXJwLXNhbXBsZXMvYmxvYi9tYXN0ZXIvRXhwZWN0ZWRFeGNlcHRpb25FeGFtcGxlL0V4cGVjdGVkRXhjZXB0aW9uQXR0cmlidXRlLmNzCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBbQXR0cmlidXRlVXNhZ2UoQXR0cmlidXRlVGFyZ2V0cy5NZXRob2QsIEFsbG93TXVsdGlwbGUgPSBmYWxzZSwgSW5oZXJpdGVkID0gZmFsc2UpXQorICAgIHB1YmxpYyBjbGFzcyBFeHBlY3RlZEV4Y2VwdGlvbkF0dHJpYnV0ZSA6IE5Vbml0QXR0cmlidXRlLCBJV3JhcFRlc3RNZXRob2QKKyAgICB7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgVHlwZSBfZXhwZWN0ZWRFeGNlcHRpb25UeXBlOworCisgICAgICAgIHB1YmxpYyBFeHBlY3RlZEV4Y2VwdGlvbkF0dHJpYnV0ZShUeXBlIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9leHBlY3RlZEV4Y2VwdGlvblR5cGUgPSB0eXBlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRlc3RDb21tYW5kIFdyYXAoVGVzdENvbW1hbmQgY29tbWFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBlY3RlZEV4Y2VwdGlvbkNvbW1hbmQoY29tbWFuZCwgX2V4cGVjdGVkRXhjZXB0aW9uVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGNsYXNzIEV4cGVjdGVkRXhjZXB0aW9uQ29tbWFuZCA6IERlbGVnYXRpbmdUZXN0Q29tbWFuZAorICAgICAgICB7CisgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFR5cGUgX2V4cGVjdGVkVHlwZTsKKworICAgICAgICAgICAgcHVibGljIEV4cGVjdGVkRXhjZXB0aW9uQ29tbWFuZChUZXN0Q29tbWFuZCBpbm5lckNvbW1hbmQsIFR5cGUgZXhwZWN0ZWRUeXBlKQorICAgICAgICAgICAgICAgIDogYmFzZShpbm5lckNvbW1hbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2V4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIG92ZXJyaWRlIFRlc3RSZXN1bHQgRXhlY3V0ZShUZXN0RXhlY3V0aW9uQ29udGV4dCBjb250ZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFR5cGUgY2F1Z2h0VHlwZSA9IG51bGw7CisKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlubmVyQ29tbWFuZC5FeGVjdXRlKGNvbnRleHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGlzIE5Vbml0RXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgZXggPSBleC5Jbm5lckV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgY2F1Z2h0VHlwZSA9IGV4LkdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY2F1Z2h0VHlwZSA9PSBfZXhwZWN0ZWRUeXBlKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LkN1cnJlbnRSZXN1bHQuU2V0UmVzdWx0KFJlc3VsdFN0YXRlLlN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhdWdodFR5cGUgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5DdXJyZW50UmVzdWx0LlNldFJlc3VsdChSZXN1bHRTdGF0ZS5GYWlsdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgiRXhwZWN0ZWQgezB9IGJ1dCBnb3QgezF9IiwgX2V4cGVjdGVkVHlwZS5OYW1lLCBjYXVnaHRUeXBlLk5hbWUpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuQ3VycmVudFJlc3VsdC5TZXRSZXN1bHQoUmVzdWx0U3RhdGUuRmFpbHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXQoIkV4cGVjdGVkIHswfSBidXQgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24iLCBfZXhwZWN0ZWRUeXBlLk5hbWUpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LkN1cnJlbnRSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvSW5kaXZpZHVhbEFja1Rlc3QuY3MgYi90ZXN0L0luZGl2aWR1YWxBY2tUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvSW5kaXZpZHVhbEFja1Rlc3QuY3MKcmVuYW1lIHRvIHRlc3QvSW5kaXZpZHVhbEFja1Rlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9JbnZhbGlkQ3JlZGVudGlhbHNUZXN0LmNzIGIvdGVzdC9JbnZhbGlkQ3JlZGVudGlhbHNUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvSW52YWxpZENyZWRlbnRpYWxzVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9JbnZhbGlkQ3JlZGVudGlhbHNUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvTWVzc2FnZUNvbnN1bWVyVGVzdC5jcyBiL3Rlc3QvTWVzc2FnZUNvbnN1bWVyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL01lc3NhZ2VDb25zdW1lclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvTWVzc2FnZUNvbnN1bWVyVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL01lc3NhZ2VMaXN0ZW5lclJlZGVsaXZlcnlUZXN0LmNzIGIvdGVzdC9NZXNzYWdlTGlzdGVuZXJSZWRlbGl2ZXJ5VGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL01lc3NhZ2VMaXN0ZW5lclJlZGVsaXZlcnlUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L01lc3NhZ2VMaXN0ZW5lclJlZGVsaXZlcnlUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvTWVzc2FnZVByb2R1Y2VyVGVzdC5jcyBiL3Rlc3QvTWVzc2FnZVByb2R1Y2VyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL01lc3NhZ2VQcm9kdWNlclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvTWVzc2FnZVByb2R1Y2VyVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL05NU0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcyBiL3Rlc3QvTk1TQ29ubmVjdGlvbkZhY3RvcnlUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9OTVNDb25uZWN0aW9uRmFjdG9yeVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvTk1TQ29ubmVjdGlvbkZhY3RvcnlUZXN0LmNzCmluZGV4IGE4YjMyZTIuLmNkOTllZTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9OTVNDb25uZWN0aW9uRmFjdG9yeVRlc3QuY3MKKysrIGIvdGVzdC9OTVNDb25uZWN0aW9uRmFjdG9yeVRlc3QuY3MKQEAgLTIyLDYgKzIyLDcgQEAKIHVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNwb3J0Lk1vY2s7CiB1c2luZyBBcGFjaGUuTk1TLlRlc3Q7CiB1c2luZyBOVW5pdC5GcmFtZXdvcms7Cit1c2luZyBOVW5pdC5GcmFtZXdvcmsuQ29uc3RyYWludHM7CiAKIG5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QKIHsKQEAgLTU1LDI4ICs1Niw2IEBACiAJCVtUZXN0Q2FzZSgiYWN0aXZlbXE6ZmFpbG92ZXI6ZGlzY292ZXJ5OihtdWx0aWNhc3Q6Ly9kZWZhdWx0KSIpXQogCQlbVGVzdENhc2UoImFjdGl2ZW1xOmZhaWxvdmVyOihkaXNjb3Zlcnk6KG11bHRpY2FzdDovL2RlZmF1bHQpKSIpXQogI2VuZGlmCi0KLQkJW1Rlc3RDYXNlKCJhY3RpdmVtcTp0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYvSW52YWxpZEhvc3Q6MCIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJhY3RpdmVtcTp0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYvMC4wLjAuMDotMSIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJ0Y3A6Ly9JbnZhbGlkSG9zdDo2MTYxNiIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJhY3RpdmVtcTp0Y3A6Ly9JbnZhbGlkSG9zdDo2MTYxNiIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJhY3RpdmVtcTp0Y3A6Ly9JbnZhbGlkSG9zdDo2MTYxNj9jb25uZWN0aW9uLmFzeW5jY2xvc2U9ZmFsc2UiLCBFeHBlY3RlZEV4Y2VwdGlvbiA9IHR5cGVvZihOTVNDb25uZWN0aW9uRXhjZXB0aW9uKSldCi0KLQkJW1Rlc3RDYXNlKCJ0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTY/Y29ubmVjdGlvbi5JbnZhbGlkUGFyYW1ldGVyPXRydWUiLCBFeHBlY3RlZEV4Y2VwdGlvbiA9IHR5cGVvZihOTVNDb25uZWN0aW9uRXhjZXB0aW9uKSldCi0JCVtUZXN0Q2FzZSgiYWN0aXZlbXE6dGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2P2Nvbm5lY3Rpb24uSW52YWxpZFBhcmFtZXRlcj10cnVlIiwgRXhwZWN0ZWRFeGNlcHRpb24gPSB0eXBlb2YoTk1TQ29ubmVjdGlvbkV4Y2VwdGlvbikpXQotCQlbVGVzdENhc2UoImFjdGl2ZW1xOmZhaWxvdmVyOnRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNj9jb25uZWN0aW9uLkludmFsaWRQYXJhbWV0ZXI9dHJ1ZSIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJhY3RpdmVtcTpmYWlsb3ZlcjoodGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2KT9jb25uZWN0aW9uLkludmFsaWRQYXJhbWV0ZXI9dHJ1ZSIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJhY3RpdmVtcTpmYWlsb3ZlcjoodGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2LHRjcDovLyR7YWN0aXZlbXFiYWNrdXBob3N0fTo2MTYxNik/Y29ubmVjdGlvbi5JbnZhbGlkUGFyYW1ldGVyPXRydWUiLCBFeHBlY3RlZEV4Y2VwdGlvbiA9IHR5cGVvZihOTVNDb25uZWN0aW9uRXhjZXB0aW9uKSldCi0KLQkJW1Rlc3RDYXNlKCJmdHA6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYiLCBFeHBlY3RlZEV4Y2VwdGlvbiA9IHR5cGVvZihOTVNDb25uZWN0aW9uRXhjZXB0aW9uKSldCi0JCVtUZXN0Q2FzZSgiaHR0cDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNiIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJkaXNjb3Zlcnk6Ly8ke2FjdGl2ZW1xaG9zdH06NjE1NSIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKE5NU0Nvbm5lY3Rpb25FeGNlcHRpb24pKV0KLQkJW1Rlc3RDYXNlKCJzbXM6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYiLCBFeHBlY3RlZEV4Y2VwdGlvbiA9IHR5cGVvZihOTVNDb25uZWN0aW9uRXhjZXB0aW9uKSldCi0JCVtUZXN0Q2FzZSgiYWN0aXZlbXE6bXVsdGljYXN0Oi8vJHthY3RpdmVtcWhvc3R9OjYxNTUiLCBFeHBlY3RlZEV4Y2VwdGlvbiA9IHR5cGVvZihOTVNDb25uZWN0aW9uRXhjZXB0aW9uKSldCi0JCVtUZXN0Q2FzZSgiYWN0aXZlbXE6KHRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNik/Y29ubmVjdGlvbi5hc3luY0Nsb3NlPWZhbHNlIiwgRXhwZWN0ZWRFeGNlcHRpb24gPSB0eXBlb2YoTk1TQ29ubmVjdGlvbkV4Y2VwdGlvbikpXQotCi0JCVtUZXN0Q2FzZSgiKHRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNix0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYpIiwgRXhwZWN0ZWRFeGNlcHRpb24gPSB0eXBlb2YoVXJpRm9ybWF0RXhjZXB0aW9uKSldCi0JCVtUZXN0Q2FzZSgidGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2LHRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNiIsIEV4cGVjdGVkRXhjZXB0aW9uID0gdHlwZW9mKFVyaUZvcm1hdEV4Y2VwdGlvbikpXQogCQlwdWJsaWMgdm9pZCBUZXN0VVJJKHN0cmluZyBjb25uZWN0aW9uVVJJKQogCQl7CiAJCQlOTVNDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IE5NU0Nvbm5lY3Rpb25GYWN0b3J5KE5NU1Rlc3RTdXBwb3J0LlJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOwpAQCAtODksNiArNjgsNTYgQEAKIAkJCX0KIAkJfQogCisgICAgICAgIFtUZXN0Q2FzZSgiYWN0aXZlbXE6dGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2L0ludmFsaWRIb3N0OjAiKV0KKwkJW1Rlc3RDYXNlKCJhY3RpdmVtcTp0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYvMC4wLjAuMDotMSIpXQorCQlbVGVzdENhc2UoInRjcDovL0ludmFsaWRIb3N0OjYxNjE2IildCisJCVtUZXN0Q2FzZSgiYWN0aXZlbXE6dGNwOi8vSW52YWxpZEhvc3Q6NjE2MTYiKV0KKwkJW1Rlc3RDYXNlKCJhY3RpdmVtcTp0Y3A6Ly9JbnZhbGlkSG9zdDo2MTYxNj9jb25uZWN0aW9uLmFzeW5jY2xvc2U9ZmFsc2UiKV0KKworCQlbVGVzdENhc2UoInRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNj9jb25uZWN0aW9uLkludmFsaWRQYXJhbWV0ZXI9dHJ1ZSIpXQorCQlbVGVzdENhc2UoImFjdGl2ZW1xOnRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNj9jb25uZWN0aW9uLkludmFsaWRQYXJhbWV0ZXI9dHJ1ZSIpXQorCQlbVGVzdENhc2UoImFjdGl2ZW1xOmZhaWxvdmVyOnRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNj9jb25uZWN0aW9uLkludmFsaWRQYXJhbWV0ZXI9dHJ1ZSIpXQorCQlbVGVzdENhc2UoImFjdGl2ZW1xOmZhaWxvdmVyOih0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYpP2Nvbm5lY3Rpb24uSW52YWxpZFBhcmFtZXRlcj10cnVlIildCisJCVtUZXN0Q2FzZSgiYWN0aXZlbXE6ZmFpbG92ZXI6KHRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNix0Y3A6Ly8ke2FjdGl2ZW1xYmFja3VwaG9zdH06NjE2MTYpP2Nvbm5lY3Rpb24uSW52YWxpZFBhcmFtZXRlcj10cnVlIildCisKKwkJW1Rlc3RDYXNlKCJmdHA6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYiKV0KKwkJW1Rlc3RDYXNlKCJodHRwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2IildCisJCVtUZXN0Q2FzZSgiZGlzY292ZXJ5Oi8vJHthY3RpdmVtcWhvc3R9OjYxNTUiKV0KKwkJW1Rlc3RDYXNlKCJzbXM6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYiKV0KKwkJW1Rlc3RDYXNlKCJhY3RpdmVtcTptdWx0aWNhc3Q6Ly8ke2FjdGl2ZW1xaG9zdH06NjE1NSIpXQorCQlbVGVzdENhc2UoImFjdGl2ZW1xOih0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYpP2Nvbm5lY3Rpb24uYXN5bmNDbG9zZT1mYWxzZSIpXQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0VVJJRmFpbHVyZXNfTk1TQ29ubmVjdGlvbkV4Y2VwdGlvbihzdHJpbmcgY29ubmVjdGlvblVSSSkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LlRocm93czxOTVNDb25uZWN0aW9uRXhjZXB0aW9uPigoKSA9PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5NU0Nvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgTk1TQ29ubmVjdGlvbkZhY3RvcnkoTk1TVGVzdFN1cHBvcnQuUmVwbGFjZUVudlZhcihjb25uZWN0aW9uVVJJKSk7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChmYWN0b3J5KTsKKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKGZhY3RvcnkuQ29ubmVjdGlvbkZhY3RvcnkpOworICAgICAgICAgICAgICAgIHVzaW5nKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBmYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oIiIsICIiKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uQ2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIFtUZXN0Q2FzZSgiKHRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNix0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYpIildCisgICAgICAgIFtUZXN0Q2FzZSgidGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2LHRjcDovLyR7YWN0aXZlbXFob3N0fTo2MTYxNiIpXQorICAgICAgICBwdWJsaWMgdm9pZCBUZXN0VVJJRmFpbHVyZXNfVXJpRm9ybWF0RXhjZXB0aW9uKHN0cmluZyBjb25uZWN0aW9uVVJJKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuVGhyb3dzPFVyaUZvcm1hdEV4Y2VwdGlvbj4oKCkgPT4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOTVNDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IE5NU0Nvbm5lY3Rpb25GYWN0b3J5KE5NU1Rlc3RTdXBwb3J0LlJlcGxhY2VFbnZWYXIoY29ubmVjdGlvblVSSSkpOworICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwoZmFjdG9yeSk7CisgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChmYWN0b3J5LkNvbm5lY3Rpb25GYWN0b3J5KTsKKyAgICAgICAgICAgICAgICB1c2luZyhJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCIiLCAiIikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKGNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkNsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwogICAgICAgICBbVGVzdF0KICAgICAgICAgcHVibGljIHZvaWQgVGVzdENvbm5lY3Rpb25TZW5kc0F1dGhlbnRpY2F0aW9uRGF0YSgpCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9OTVNTZXNzaW9uUmVjb3ZlclRlc3QuY3MgYi90ZXN0L05NU1Nlc3Npb25SZWNvdmVyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL05NU1Nlc3Npb25SZWNvdmVyVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9OTVNTZXNzaW9uUmVjb3ZlclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9OZXRUeENvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcyBiL3Rlc3QvTmV0VHhDb25uZWN0aW9uRmFjdG9yeVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL05ldFR4Q29ubmVjdGlvbkZhY3RvcnlUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L05ldFR4Q29ubmVjdGlvbkZhY3RvcnlUZXN0LmNzCmluZGV4IGY3Nzk2ZWYuLjU1YjhhN2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9OZXRUeENvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcworKysgYi90ZXN0L05ldFR4Q29ubmVjdGlvbkZhY3RvcnlUZXN0LmNzCkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgfQogCQkKICAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtFeHBlY3RlZEV4Y2VwdGlvbiggIkFwYWNoZS5OTVMuTk1TRXhjZXB0aW9uIiApXQorICAgICAgICBbRXhwZWN0ZWRFeGNlcHRpb24oIHR5cGVvZihBcGFjaGUuTk1TLk5NU0V4Y2VwdGlvbikpXQogICAgICAgICBwdWJsaWMgdm9pZCBUZXN0Q29uZmlndXJlUmVjb3ZlcnlQb2xpY3lMb2dnZXJUeXBlV2l0aEludmFsaWRUeXBlKAogICAgICAgICAgICAgW1ZhbHVlcygidGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2P25tcy5SZWNvdmVyeVBvbGljeS5SZWNvdmVyeUxvZ2dlclR5cGU9aW52YWxpZCIpXQogICAgICAgICAgICAgc3RyaW5nIGJhc2VDb25uZWN0aW9uVVJJKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL05ldFR4VHJhbnNhY3Rpb25UZXN0LmNzIGIvdGVzdC9OZXRUeFRyYW5zYWN0aW9uVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL05ldFR4VHJhbnNhY3Rpb25UZXN0LmNzCnJlbmFtZSB0byB0ZXN0L05ldFR4VHJhbnNhY3Rpb25UZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvTm1zQ29uc29sZVRyYWNlci5jcyBiL3Rlc3QvTm1zQ29uc29sZVRyYWNlci5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvTm1zQ29uc29sZVRyYWNlci5jcwpyZW5hbWUgdG8gdGVzdC9ObXNDb25zb2xlVHJhY2VyLmNzCmluZGV4IDM3ZjdhZDcuLjkwNjgyM2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9ObXNDb25zb2xlVHJhY2VyLmNzCisrKyBiL3Rlc3QvTm1zQ29uc29sZVRyYWNlci5jcwpAQCAtMSw3NSArMSw3NSBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdA0KLXsNCi0JcHVibGljIGNsYXNzIE5tc0NvbnNvbGVUcmFjZXIgOiBBcGFjaGUuTk1TLklUcmFjZQ0KLQl7DQotCQkjcmVnaW9uIElUcmFjZSBNZW1iZXJzDQotCQlwdWJsaWMgdm9pZCBEZWJ1ZyhzdHJpbmcgbWVzc2FnZSkNCi0JCXsNCi0JCQlTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkZvcm1hdCgiREVCVUc6IHswfSIsIG1lc3NhZ2UpKTsNCi0JCX0NCi0NCi0JCXB1YmxpYyB2b2lkIEVycm9yKHN0cmluZyBtZXNzYWdlKQ0KLQkJew0KLQkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZShzdHJpbmcuRm9ybWF0KCJFUlJPUjogezB9IiwgbWVzc2FnZSkpOw0KLQkJfQ0KLQ0KLQkJcHVibGljIHZvaWQgRmF0YWwoc3RyaW5nIG1lc3NhZ2UpDQotCQl7DQotCQkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Gb3JtYXQoIkZBVEFMOiB7MH0iLCBtZXNzYWdlKSk7DQotCQl9DQotDQotCQlwdWJsaWMgdm9pZCBJbmZvKHN0cmluZyBtZXNzYWdlKQ0KLQkJew0KLQkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZShzdHJpbmcuRm9ybWF0KCJJTkZPOiB7MH0iLCBtZXNzYWdlKSk7DQotCQl9DQotDQotCQlwdWJsaWMgdm9pZCBXYXJuKHN0cmluZyBtZXNzYWdlKQ0KLQkJew0KLQkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZShzdHJpbmcuRm9ybWF0KCJXQVJOOiB7MH0iLCBtZXNzYWdlKSk7DQotCQl9DQotDQotCQlwdWJsaWMgYm9vbCBJc0RlYnVnRW5hYmxlZA0KLQkJew0KLQkJCWdldCB7IHJldHVybiB0cnVlOyB9DQotCQl9DQotDQotCQlwdWJsaWMgYm9vbCBJc0Vycm9yRW5hYmxlZA0KLQkJew0KLQkJCWdldCB7IHJldHVybiB0cnVlOyB9DQotCQl9DQotDQotCQlwdWJsaWMgYm9vbCBJc0ZhdGFsRW5hYmxlZA0KLQkJew0KLQkJCWdldCB7IHJldHVybiB0cnVlOyB9DQotCQl9DQotDQotCQlwdWJsaWMgYm9vbCBJc0luZm9FbmFibGVkDQotCQl7DQotCQkJZ2V0IHsgcmV0dXJuIHRydWU7IH0NCi0JCX0NCi0NCi0JCXB1YmxpYyBib29sIElzV2FybkVuYWJsZWQNCi0JCXsNCi0JCQlnZXQgeyByZXR1cm4gdHJ1ZTsgfQ0KLQkJfQ0KLQ0KLQkJI2VuZHJlZ2lvbg0KLQl9DQotfQ0KKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0Cit7CisJcHVibGljIGNsYXNzIE5tc0NvbnNvbGVUcmFjZXIgOiBBcGFjaGUuTk1TLklUcmFjZQorCXsKKwkJI3JlZ2lvbiBJVHJhY2UgTWVtYmVycworCQlwdWJsaWMgdm9pZCBEZWJ1ZyhzdHJpbmcgbWVzc2FnZSkKKwkJeworCQkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Gb3JtYXQoIkRFQlVHOiB7MH0iLCBtZXNzYWdlKSk7CisJCX0KKworCQlwdWJsaWMgdm9pZCBFcnJvcihzdHJpbmcgbWVzc2FnZSkKKwkJeworCQkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Gb3JtYXQoIkVSUk9SOiB7MH0iLCBtZXNzYWdlKSk7CisJCX0KKworCQlwdWJsaWMgdm9pZCBGYXRhbChzdHJpbmcgbWVzc2FnZSkKKwkJeworCQkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Gb3JtYXQoIkZBVEFMOiB7MH0iLCBtZXNzYWdlKSk7CisJCX0KKworCQlwdWJsaWMgdm9pZCBJbmZvKHN0cmluZyBtZXNzYWdlKQorCQl7CisJCQlTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkZvcm1hdCgiSU5GTzogezB9IiwgbWVzc2FnZSkpOworCQl9CisKKwkJcHVibGljIHZvaWQgV2FybihzdHJpbmcgbWVzc2FnZSkKKwkJeworCQkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Gb3JtYXQoIldBUk46IHswfSIsIG1lc3NhZ2UpKTsKKwkJfQorCisJCXB1YmxpYyBib29sIElzRGVidWdFbmFibGVkCisJCXsKKwkJCWdldCB7IHJldHVybiB0cnVlOyB9CisJCX0KKworCQlwdWJsaWMgYm9vbCBJc0Vycm9yRW5hYmxlZAorCQl7CisJCQlnZXQgeyByZXR1cm4gdHJ1ZTsgfQorCQl9CisKKwkJcHVibGljIGJvb2wgSXNGYXRhbEVuYWJsZWQKKwkJeworCQkJZ2V0IHsgcmV0dXJuIHRydWU7IH0KKwkJfQorCisJCXB1YmxpYyBib29sIElzSW5mb0VuYWJsZWQKKwkJeworCQkJZ2V0IHsgcmV0dXJuIHRydWU7IH0KKwkJfQorCisJCXB1YmxpYyBib29sIElzV2FybkVuYWJsZWQKKwkJeworCQkJZ2V0IHsgcmV0dXJuIHRydWU7IH0KKwkJfQorCisJCSNlbmRyZWdpb24KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvTm9uQmxvY2tpbmdDb25zdW1lclJlZGVsaXZlcnlUZXN0LmNzIGIvdGVzdC9Ob25CbG9ja2luZ0NvbnN1bWVyUmVkZWxpdmVyeVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9Ob25CbG9ja2luZ0NvbnN1bWVyUmVkZWxpdmVyeVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvTm9uQmxvY2tpbmdDb25zdW1lclJlZGVsaXZlcnlUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvT3BlbldpcmUvQmFzZURhdGFTdHJlYW1NYXJzaGFsbGVyVGVzdC5jcyBiL3Rlc3QvT3BlbldpcmUvQmFzZURhdGFTdHJlYW1NYXJzaGFsbGVyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL09wZW5XaXJlL0Jhc2VEYXRhU3RyZWFtTWFyc2hhbGxlclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvT3BlbldpcmUvQmFzZURhdGFTdHJlYW1NYXJzaGFsbGVyVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL09wZW5XaXJlL0Jvb2xlYW5TdHJlYW1UZXN0LmNzIGIvdGVzdC9PcGVuV2lyZS9Cb29sZWFuU3RyZWFtVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL09wZW5XaXJlL0Jvb2xlYW5TdHJlYW1UZXN0LmNzCnJlbmFtZSB0byB0ZXN0L09wZW5XaXJlL0Jvb2xlYW5TdHJlYW1UZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvT3BlbldpcmUvTWF4SW5hY3Rpdml0eUR1cmF0aW9uVGVzdC5jcyBiL3Rlc3QvT3BlbldpcmUvTWF4SW5hY3Rpdml0eUR1cmF0aW9uVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvT3BlbldpcmUvTWF4SW5hY3Rpdml0eUR1cmF0aW9uVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9PcGVuV2lyZS9NYXhJbmFjdGl2aXR5RHVyYXRpb25UZXN0LmNzCmluZGV4IGIzYzhjNjcuLjFjMTgyMzggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9PcGVuV2lyZS9NYXhJbmFjdGl2aXR5RHVyYXRpb25UZXN0LmNzCisrKyBiL3Rlc3QvT3BlbldpcmUvTWF4SW5hY3Rpdml0eUR1cmF0aW9uVGVzdC5jcwpAQCAtMSwxMjAgKzEsMTIwIEBACi3vu78vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi11c2luZyBTeXN0ZW07DQotdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOw0KLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7DQotdXNpbmcgQXBhY2hlLk5NUy5UZXN0Ow0KLXVzaW5nIEFwYWNoZS5OTVMuVXRpbDsNCi11c2luZyBOVW5pdC5GcmFtZXdvcms7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdA0KLXsNCi0JW1Rlc3RGaXh0dXJlXQ0KLQlwdWJsaWMgY2xhc3MgTWF4SW5hY3Rpdml0eUR1cmF0aW9uVGVzdCA6IE5NU1Rlc3RTdXBwb3J0DQotCXsNCi0JCXByb3RlY3RlZCBzdGF0aWMgc3RyaW5nIERFU1RJTkFUSU9OX05BTUUgPSAiVEVTVC5NYXhJbmFjdGl2aXR5RHVyYXRpb24iOw0KLQkJcHJvdGVjdGVkIHN0YXRpYyBzdHJpbmcgQ09SUkVMQVRJT05fSUQgPSAiTWF4SW5hY3Rpdml0eUNvcnJlbGF0aW9uSUQiOw0KLQ0KLQkJW1Rlc3RdDQotCQlwdWJsaWMgdm9pZCBUZXN0TWF4SW5hY3Rpdml0eUR1cmF0aW9uKCkNCi0JCXsNCi0JCQlzdHJpbmcgdGVzdHVyaSA9ICJhY3RpdmVtcTp0Y3A6Ly8ke2FjdGl2ZW1xaG9zdH06NjE2MTYiICsNCi0JCQkJCQkJCQkJIj93aXJlRm9ybWF0Lm1heEluYWN0aXZpdHlEdXJhdGlvbkluaXRpYWxEZWxheT01MDAwIiArDQotCQkJCQkJCQkJCSImd2lyZUZvcm1hdC5tYXhJbmFjdGl2aXR5RHVyYXRpb249MTAwMDAiICsNCi0JCQkJCQkJCQkJIiZjb25uZWN0aW9uLmFzeW5jQ2xvc2U9ZmFsc2UiOw0KLQ0KLQkJCU5NU0Nvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgTk1TQ29ubmVjdGlvbkZhY3RvcnkoTk1TVGVzdFN1cHBvcnQuUmVwbGFjZUVudlZhcih0ZXN0dXJpKSk7DQotCQkJdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigiIiwgIiIpKQ0KLQkJCXsNCi0JCQkJY29ubmVjdGlvbi5TdGFydCgpOw0KLQkJCQl1c2luZyhJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKEFja25vd2xlZGdlbWVudE1vZGUuQXV0b0Fja25vd2xlZGdlKSkNCi0JCQkJew0KLQkJCQkJSURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gU2Vzc2lvblV0aWwuR2V0RGVzdGluYXRpb24oc2Vzc2lvbiwgREVTVElOQVRJT05fTkFNRSk7DQotCQkJCQl1c2luZyhJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihkZXN0aW5hdGlvbikpDQotCQkJCQl1c2luZyhJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihkZXN0aW5hdGlvbikpDQotCQkJCQl7DQotCQkJCQkJU2VuZE1lc3NhZ2UocHJvZHVjZXIpOw0KLQ0KLQkJCQkJCUlNZXNzYWdlIHJlY2VpdmVkTXNnID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tU2Vjb25kcyg1KSk7DQotCQkJCQkJQXNzZXJ0LkFyZUVxdWFsKENPUlJFTEFUSU9OX0lELCByZWNlaXZlZE1zZy5OTVNDb3JyZWxhdGlvbklELCAiSW52YWxpZCBjb3JyZWxhdGlvbiBJRC4iKTsNCi0NCi0JCQkJCQkvLyBHbyBpbmFjdGl2ZS4uLg0KLQkJCQkJCVRocmVhZC5TbGVlcChUaW1lU3Bhbi5Gcm9tU2Vjb25kcygzMCkpOw0KLQ0KLQkJCQkJCS8vIFNlbmQgYW5vdGhlciBtZXNzYWdlLg0KLQkJCQkJCVNlbmRNZXNzYWdlKHByb2R1Y2VyKTsNCi0JCQkJCQlyZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOw0KLQkJCQkJCUFzc2VydC5BcmVFcXVhbChDT1JSRUxBVElPTl9JRCwgcmVjZWl2ZWRNc2cuTk1TQ29ycmVsYXRpb25JRCwgIkludmFsaWQgY29ycmVsYXRpb24gSUQuIik7DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotDQotCQlwcm90ZWN0ZWQgdm9pZCBTZW5kTWVzc2FnZShJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyKQ0KLQkJew0KLQkJCUlNZXNzYWdlIHJlcXVlc3QgPSBwcm9kdWNlci5DcmVhdGVNZXNzYWdlKCk7DQotCQkJcmVxdWVzdC5OTVNDb3JyZWxhdGlvbklEID0gQ09SUkVMQVRJT05fSUQ7DQotCQkJcmVxdWVzdC5OTVNUeXBlID0gIlRlc3QiOw0KLQkJCXByb2R1Y2VyLlNlbmQocmVxdWVzdCk7DQotCQl9DQotDQotCQlbVGVzdCwgU2VxdWVudGlhbF0NCi0JCXB1YmxpYyB2b2lkIFRlc3RJbmFjdGl2aXR5TW9uaXRvclRocmVhZExlYWsoDQotCQkJW1ZhbHVlcygwLCAxMDAwKV0NCi0JCQlpbnQgaW5hY3Rpdml0eUR1cmF0aW9uKQ0KLQkJew0KLQkJCVByb2Nlc3MgY3VycmVudFByb2Nlc3MgPSBQcm9jZXNzLkdldEN1cnJlbnRQcm9jZXNzKCk7DQotCQkJVHJhY2VyLkluZm9Gb3JtYXQoIkJlZ2lubmluZyB0aHJlYWQgY291bnQ6IHswfSwgaGFuZGxlIGNvdW50OiB7MX0iLCBjdXJyZW50UHJvY2Vzcy5UaHJlYWRzLkNvdW50LCBjdXJyZW50UHJvY2Vzcy5IYW5kbGVDb3VudCk7DQotDQotCQkJc3RyaW5nIHRlc3R1cmkgPSBzdHJpbmcuRm9ybWF0KCJhY3RpdmVtcTp0Y3A6Ly8ke3thY3RpdmVtcWhvc3R9fTo2MTYxNj93aXJlRm9ybWF0Lm1heEluYWN0aXZpdHlEdXJhdGlvbj17MH0iLCBpbmFjdGl2aXR5RHVyYXRpb24pOw0KLQkNCi0JCQlOTVNDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IE5NU0Nvbm5lY3Rpb25GYWN0b3J5KE5NU1Rlc3RTdXBwb3J0LlJlcGxhY2VFbnZWYXIodGVzdHVyaSkpOw0KLQ0KLQkJCS8vIFdlIG1lYXN1cmUgdGhlIGluaXRpYWwgcmVzb3VyY2UgY291bnRzLCBhbmQgdGhlbiBhbGxvdyBhIGNlcnRhaW4gZnVkZ2UgZmFjdG9yIGZvciB0aGUgcmVzb3VyY2VzDQotCQkJLy8gdG8gZmx1Y3R1YXRlIGF0IHJ1bi10aW1lLiAgV2UgYWxsb3cgZm9yIGEgY2VydGFpbiBhbW91bnQgb2YgZmx1Y3R1YXRpb24sIGJ1dCBpZiB0aGUgY291bnRzDQotCQkJLy8gZ3JvdyBvdXRzaWRlIHRoZSBzYWZlIGJvdW5kYXJpZXMgb2YgZGVsYXllZCBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZW4gd2UgZmFpbCB0aGUgdGVzdC4NCi0JCQljdXJyZW50UHJvY2VzcyA9IFByb2Nlc3MuR2V0Q3VycmVudFByb2Nlc3MoKTsNCi0JCQlpbnQgYmVnaW5UaHJlYWRDb3VudCA9IGN1cnJlbnRQcm9jZXNzLlRocmVhZHMuQ291bnQ7DQotCQkJaW50IGJlZ2luSGFuZGxlQ291bnQgPSBjdXJyZW50UHJvY2Vzcy5IYW5kbGVDb3VudDsNCi0JCQlpbnQgbWF4VGhyZWFkR3Jvd3RoID0gMTA7DQotCQkJaW50IG1heEhhbmRsZUdyb3d0aCA9IDUwMDsNCi0NCi0JCQlmb3IoaW50IGkgPSAwOyBpIDwgMjAwOyBpKyspDQotCQkJew0KLQkJCQl1c2luZyhJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCJSZXNvdXJjZUxlYWtUZXN0IiwgIlBhc3N3b3JkIikpDQotCQkJCXsNCi0JCQkJCXVzaW5nKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0JCQkJCXsNCi0JCQkJCQlJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBTZXNzaW9uVXRpbC5HZXREZXN0aW5hdGlvbihzZXNzaW9uLCAidG9waWM6Ly9URVNULk5NU1Jlc291cmNlTGVhayIpOw0KLQkJCQkJCXVzaW5nKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKGRlc3RpbmF0aW9uKSkNCi0JCQkJCQl7DQotCQkJCQkJCWNvbm5lY3Rpb24uU3RhcnQoKTsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCX0NCi0NCi0JCQkJY3VycmVudFByb2Nlc3MgPSBQcm9jZXNzLkdldEN1cnJlbnRQcm9jZXNzKCk7DQotCQkJCWludCBlbmRUaHJlYWRDb3VudCA9IGN1cnJlbnRQcm9jZXNzLlRocmVhZHMuQ291bnQ7DQotCQkJCWludCBlbmRIYW5kbGVDb3VudCA9IGN1cnJlbnRQcm9jZXNzLkhhbmRsZUNvdW50Ow0KLQ0KLQkJCQlBc3NlcnQuTGVzcyhlbmRUaHJlYWRDb3VudCwgYmVnaW5UaHJlYWRDb3VudCArIG1heFRocmVhZEdyb3d0aCwgc3RyaW5nLkZvcm1hdCgiVGhyZWFkIGNvdW50IGdyZXcgYmV5b25kIG1heGltdW0gb2YgezB9IG9uIGl0ZXJhdGlvbiAjezF9LiIsIG1heFRocmVhZEdyb3d0aCwgaSkpOw0KLQkJCQlBc3NlcnQuTGVzcyhlbmRIYW5kbGVDb3VudCwgYmVnaW5IYW5kbGVDb3VudCArIG1heEhhbmRsZUdyb3d0aCwgc3RyaW5nLkZvcm1hdCgiSGFuZGxlIGNvdW50IGdyZXcgYmV5b25kIG1heGltdW0gb2YgezB9IG9uIGl0ZXJhdGlvbiAjezF9LiIsIG1heEhhbmRsZUdyb3d0aCwgaSkpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCivvu78vKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIEFwYWNoZS5OTVMuVGVzdDsKK3VzaW5nIEFwYWNoZS5OTVMuVXRpbDsKK3VzaW5nIE5Vbml0LkZyYW1ld29yazsKKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdAoreworCVtUZXN0Rml4dHVyZV0KKwlwdWJsaWMgY2xhc3MgTWF4SW5hY3Rpdml0eUR1cmF0aW9uVGVzdCA6IE5NU1Rlc3RTdXBwb3J0CisJeworCQlwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBERVNUSU5BVElPTl9OQU1FID0gIlRFU1QuTWF4SW5hY3Rpdml0eUR1cmF0aW9uIjsKKwkJcHJvdGVjdGVkIHN0YXRpYyBzdHJpbmcgQ09SUkVMQVRJT05fSUQgPSAiTWF4SW5hY3Rpdml0eUNvcnJlbGF0aW9uSUQiOworCisJCVtUZXN0XQorCQlwdWJsaWMgdm9pZCBUZXN0TWF4SW5hY3Rpdml0eUR1cmF0aW9uKCkKKwkJeworCQkJc3RyaW5nIHRlc3R1cmkgPSAiYWN0aXZlbXE6dGNwOi8vJHthY3RpdmVtcWhvc3R9OjYxNjE2IiArCisJCQkJCQkJCQkJIj93aXJlRm9ybWF0Lm1heEluYWN0aXZpdHlEdXJhdGlvbkluaXRpYWxEZWxheT01MDAwIiArCisJCQkJCQkJCQkJIiZ3aXJlRm9ybWF0Lm1heEluYWN0aXZpdHlEdXJhdGlvbj0xMDAwMCIgKworCQkJCQkJCQkJCSImY29ubmVjdGlvbi5hc3luY0Nsb3NlPWZhbHNlIjsKKworCQkJTk1TQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBOTVNDb25uZWN0aW9uRmFjdG9yeShOTVNUZXN0U3VwcG9ydC5SZXBsYWNlRW52VmFyKHRlc3R1cmkpKTsKKwkJCXVzaW5nKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBmYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oIiIsICIiKSkKKwkJCXsKKwkJCQljb25uZWN0aW9uLlN0YXJ0KCk7CisJCQkJdXNpbmcoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbihBY2tub3dsZWRnZW1lbnRNb2RlLkF1dG9BY2tub3dsZWRnZSkpCisJCQkJeworCQkJCQlJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBTZXNzaW9uVXRpbC5HZXREZXN0aW5hdGlvbihzZXNzaW9uLCBERVNUSU5BVElPTl9OQU1FKTsKKwkJCQkJdXNpbmcoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoZGVzdGluYXRpb24pKQorCQkJCQl1c2luZyhJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihkZXN0aW5hdGlvbikpCisJCQkJCXsKKwkJCQkJCVNlbmRNZXNzYWdlKHByb2R1Y2VyKTsKKworCQkJCQkJSU1lc3NhZ2UgcmVjZWl2ZWRNc2cgPSBjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21TZWNvbmRzKDUpKTsKKwkJCQkJCUFzc2VydC5BcmVFcXVhbChDT1JSRUxBVElPTl9JRCwgcmVjZWl2ZWRNc2cuTk1TQ29ycmVsYXRpb25JRCwgIkludmFsaWQgY29ycmVsYXRpb24gSUQuIik7CisKKwkJCQkJCS8vIEdvIGluYWN0aXZlLi4uCisJCQkJCQlUaHJlYWQuU2xlZXAoVGltZVNwYW4uRnJvbVNlY29uZHMoMzApKTsKKworCQkJCQkJLy8gU2VuZCBhbm90aGVyIG1lc3NhZ2UuCisJCQkJCQlTZW5kTWVzc2FnZShwcm9kdWNlcik7CisJCQkJCQlyZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOworCQkJCQkJQXNzZXJ0LkFyZUVxdWFsKENPUlJFTEFUSU9OX0lELCByZWNlaXZlZE1zZy5OTVNDb3JyZWxhdGlvbklELCAiSW52YWxpZCBjb3JyZWxhdGlvbiBJRC4iKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXByb3RlY3RlZCB2b2lkIFNlbmRNZXNzYWdlKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIpCisJCXsKKwkJCUlNZXNzYWdlIHJlcXVlc3QgPSBwcm9kdWNlci5DcmVhdGVNZXNzYWdlKCk7CisJCQlyZXF1ZXN0Lk5NU0NvcnJlbGF0aW9uSUQgPSBDT1JSRUxBVElPTl9JRDsKKwkJCXJlcXVlc3QuTk1TVHlwZSA9ICJUZXN0IjsKKwkJCXByb2R1Y2VyLlNlbmQocmVxdWVzdCk7CisJCX0KKworCQlbVGVzdCwgU2VxdWVudGlhbF0KKwkJcHVibGljIHZvaWQgVGVzdEluYWN0aXZpdHlNb25pdG9yVGhyZWFkTGVhaygKKwkJCVtWYWx1ZXMoMCwgMTAwMCldCisJCQlpbnQgaW5hY3Rpdml0eUR1cmF0aW9uKQorCQl7CisJCQlQcm9jZXNzIGN1cnJlbnRQcm9jZXNzID0gUHJvY2Vzcy5HZXRDdXJyZW50UHJvY2VzcygpOworCQkJVHJhY2VyLkluZm9Gb3JtYXQoIkJlZ2lubmluZyB0aHJlYWQgY291bnQ6IHswfSwgaGFuZGxlIGNvdW50OiB7MX0iLCBjdXJyZW50UHJvY2Vzcy5UaHJlYWRzLkNvdW50LCBjdXJyZW50UHJvY2Vzcy5IYW5kbGVDb3VudCk7CisKKwkJCXN0cmluZyB0ZXN0dXJpID0gc3RyaW5nLkZvcm1hdCgiYWN0aXZlbXE6dGNwOi8vJHt7YWN0aXZlbXFob3N0fX06NjE2MTY/d2lyZUZvcm1hdC5tYXhJbmFjdGl2aXR5RHVyYXRpb249ezB9IiwgaW5hY3Rpdml0eUR1cmF0aW9uKTsKKwkKKwkJCU5NU0Nvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgTk1TQ29ubmVjdGlvbkZhY3RvcnkoTk1TVGVzdFN1cHBvcnQuUmVwbGFjZUVudlZhcih0ZXN0dXJpKSk7CisKKwkJCS8vIFdlIG1lYXN1cmUgdGhlIGluaXRpYWwgcmVzb3VyY2UgY291bnRzLCBhbmQgdGhlbiBhbGxvdyBhIGNlcnRhaW4gZnVkZ2UgZmFjdG9yIGZvciB0aGUgcmVzb3VyY2VzCisJCQkvLyB0byBmbHVjdHVhdGUgYXQgcnVuLXRpbWUuICBXZSBhbGxvdyBmb3IgYSBjZXJ0YWluIGFtb3VudCBvZiBmbHVjdHVhdGlvbiwgYnV0IGlmIHRoZSBjb3VudHMKKwkJCS8vIGdyb3cgb3V0c2lkZSB0aGUgc2FmZSBib3VuZGFyaWVzIG9mIGRlbGF5ZWQgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVuIHdlIGZhaWwgdGhlIHRlc3QuCisJCQljdXJyZW50UHJvY2VzcyA9IFByb2Nlc3MuR2V0Q3VycmVudFByb2Nlc3MoKTsKKwkJCWludCBiZWdpblRocmVhZENvdW50ID0gY3VycmVudFByb2Nlc3MuVGhyZWFkcy5Db3VudDsKKwkJCWludCBiZWdpbkhhbmRsZUNvdW50ID0gY3VycmVudFByb2Nlc3MuSGFuZGxlQ291bnQ7CisJCQlpbnQgbWF4VGhyZWFkR3Jvd3RoID0gMTA7CisJCQlpbnQgbWF4SGFuZGxlR3Jvd3RoID0gNTAwOworCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgMjAwOyBpKyspCisJCQl7CisJCQkJdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigiUmVzb3VyY2VMZWFrVGVzdCIsICJQYXNzd29yZCIpKQorCQkJCXsKKwkJCQkJdXNpbmcoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbigpKQorCQkJCQl7CisJCQkJCQlJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBTZXNzaW9uVXRpbC5HZXREZXN0aW5hdGlvbihzZXNzaW9uLCAidG9waWM6Ly9URVNULk5NU1Jlc291cmNlTGVhayIpOworCQkJCQkJdXNpbmcoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoZGVzdGluYXRpb24pKQorCQkJCQkJeworCQkJCQkJCWNvbm5lY3Rpb24uU3RhcnQoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCWN1cnJlbnRQcm9jZXNzID0gUHJvY2Vzcy5HZXRDdXJyZW50UHJvY2VzcygpOworCQkJCWludCBlbmRUaHJlYWRDb3VudCA9IGN1cnJlbnRQcm9jZXNzLlRocmVhZHMuQ291bnQ7CisJCQkJaW50IGVuZEhhbmRsZUNvdW50ID0gY3VycmVudFByb2Nlc3MuSGFuZGxlQ291bnQ7CisKKwkJCQlBc3NlcnQuTGVzcyhlbmRUaHJlYWRDb3VudCwgYmVnaW5UaHJlYWRDb3VudCArIG1heFRocmVhZEdyb3d0aCwgc3RyaW5nLkZvcm1hdCgiVGhyZWFkIGNvdW50IGdyZXcgYmV5b25kIG1heGltdW0gb2YgezB9IG9uIGl0ZXJhdGlvbiAjezF9LiIsIG1heFRocmVhZEdyb3d0aCwgaSkpOworCQkJCUFzc2VydC5MZXNzKGVuZEhhbmRsZUNvdW50LCBiZWdpbkhhbmRsZUNvdW50ICsgbWF4SGFuZGxlR3Jvd3RoLCBzdHJpbmcuRm9ybWF0KCJIYW5kbGUgY291bnQgZ3JldyBiZXlvbmQgbWF4aW11bSBvZiB7MH0gb24gaXRlcmF0aW9uICN7MX0uIiwgbWF4SGFuZGxlR3Jvd3RoLCBpKSk7CisJCQl9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvT3BlbldpcmUvUHJlZmV0Y2hTaXplWmVyb1Rlc3QuY3MgYi90ZXN0L09wZW5XaXJlL1ByZWZldGNoU2l6ZVplcm9UZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9PcGVuV2lyZS9QcmVmZXRjaFNpemVaZXJvVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9PcGVuV2lyZS9QcmVmZXRjaFNpemVaZXJvVGVzdC5jcwppbmRleCA3YzZjMDMyLi5kY2Q3YjYyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9jc2hhcnAvT3BlbldpcmUvUHJlZmV0Y2hTaXplWmVyb1Rlc3QuY3MKKysrIGIvdGVzdC9PcGVuV2lyZS9QcmVmZXRjaFNpemVaZXJvVGVzdC5jcwpAQCAtMSw3MiArMSw3MiBAQAot77u/LyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtOw0KLXVzaW5nIEFwYWNoZS5OTVMuVGVzdDsNCi11c2luZyBBcGFjaGUuTk1TLlV0aWw7DQotdXNpbmcgQXBhY2hlLk5NUy5BY3RpdmVNUTsNCi11c2luZyBOVW5pdC5GcmFtZXdvcms7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdA0KLXsNCi0JW1Rlc3RGaXh0dXJlXQ0KLQlwdWJsaWMgY2xhc3MgUHJlZmV0Y2hTaXplWmVyb1Rlc3QgOiBOTVNUZXN0U3VwcG9ydA0KLQl7CQ0KLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBzdHJpbmcgREVTVElOQVRJT05fTkFNRSA9ICJURVNULlByZWZldGNoU2l6ZVplcm8iOw0KLQkJCQ0KLQkJW1Rlc3RdDQotCQlwdWJsaWMgdm9pZCBUZXN0WmVyb1ByZWZldGNoU2l6ZSgpDQotCQl7DQotCQkJdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IENyZWF0ZUNvbm5lY3Rpb24oKSkNCi0JCQl7DQotCQkJCShjb25uZWN0aW9uIGFzIEFwYWNoZS5OTVMuQWN0aXZlTVEuQ29ubmVjdGlvbikuUHJlZmV0Y2hQb2xpY3kuQWxsID0gMDsNCi0NCi0JCQkJY29ubmVjdGlvbi5TdGFydCgpOw0KLQkJCQl1c2luZyhTZXNzaW9uIHNlc3Npb24gPSAoU2Vzc2lvbiljb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oQWNrbm93bGVkZ2VtZW50TW9kZS5BdXRvQWNrbm93bGVkZ2UpKQ0KLQkJCQl7DQotCQkJCQlJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBTZXNzaW9uVXRpbC5HZXREZXN0aW5hdGlvbihzZXNzaW9uLCBERVNUSU5BVElPTl9OQU1FKTsNCi0JCQkJCXVzaW5nKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKGRlc3RpbmF0aW9uKSkNCi0JCQkJCXVzaW5nKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLkNyZWF0ZVByb2R1Y2VyKGRlc3RpbmF0aW9uKSkNCi0JCQkJCXsNCi0JCQkJCQlTZW5kTWVzc2FnZShwcm9kdWNlcik7DQotICAgICAgICAgICAgICAgICAgICAgICAgU2VuZE1lc3NhZ2UocHJvZHVjZXIpOw0KLQ0KLQkJCQkJCUlNZXNzYWdlIHJlY2VpdmVkTXNnID0gY29uc3VtZXIuUmVjZWl2ZShUaW1lU3Bhbi5Gcm9tU2Vjb25kcyg1KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChyZWNlaXZlZE1zZyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRNc2cgPSBjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21TZWNvbmRzKDUpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHJlY2VpdmVkTXNnKTsNCi0JCQkJCQlyZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Jc051bGwocmVjZWl2ZWRNc2cpOw0KLQ0KLQkJCQkJCS8vIFNlbmQgYW5vdGhlciBtZXNzYWdlLg0KLQkJCQkJCVNlbmRNZXNzYWdlKHByb2R1Y2VyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOw0KLQkJCQkJCUFzc2VydC5Jc05vdE51bGwocmVjZWl2ZWRNc2cpOw0KLSAgICAgICAgICAgICAgICAgICANCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JDQotCQlwcm90ZWN0ZWQgdm9pZCBTZW5kTWVzc2FnZShJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyKQ0KLQkJew0KLQkJCUlNZXNzYWdlIHJlcXVlc3QgPSBwcm9kdWNlci5DcmVhdGVNZXNzYWdlKCk7DQotCQkJcmVxdWVzdC5OTVNUeXBlID0gIlRlc3QiOw0KLQkJCXByb2R1Y2VyLlNlbmQocmVxdWVzdCk7DQotCQl9DQotCX0NCi19DQor77u/LyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIEFwYWNoZS5OTVMuVGVzdDsKK3VzaW5nIEFwYWNoZS5OTVMuVXRpbDsKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVE7Cit1c2luZyBOVW5pdC5GcmFtZXdvcms7CisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QKK3sKKwlbVGVzdEZpeHR1cmVdCisJcHVibGljIGNsYXNzIFByZWZldGNoU2l6ZVplcm9UZXN0IDogTk1TVGVzdFN1cHBvcnQKKwl7CQorICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBERVNUSU5BVElPTl9OQU1FID0gIlRFU1QuUHJlZmV0Y2hTaXplWmVybyI7CisJCQkKKwkJW1Rlc3RdCisJCXB1YmxpYyB2b2lkIFRlc3RaZXJvUHJlZmV0Y2hTaXplKCkKKwkJeworCQkJdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IENyZWF0ZUNvbm5lY3Rpb24oKSkKKwkJCXsKKwkJCQkoY29ubmVjdGlvbiBhcyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbm5lY3Rpb24pLlByZWZldGNoUG9saWN5LkFsbCA9IDA7CisKKwkJCQljb25uZWN0aW9uLlN0YXJ0KCk7CisJCQkJdXNpbmcoU2Vzc2lvbiBzZXNzaW9uID0gKFNlc3Npb24pY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKEFja25vd2xlZGdlbWVudE1vZGUuQXV0b0Fja25vd2xlZGdlKSkKKwkJCQl7CisJCQkJCUlEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IFNlc3Npb25VdGlsLkdldERlc3RpbmF0aW9uKHNlc3Npb24sIERFU1RJTkFUSU9OX05BTUUpOworCQkJCQl1c2luZyhJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihkZXN0aW5hdGlvbikpCisJCQkJCXVzaW5nKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLkNyZWF0ZVByb2R1Y2VyKGRlc3RpbmF0aW9uKSkKKwkJCQkJeworCQkJCQkJU2VuZE1lc3NhZ2UocHJvZHVjZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgU2VuZE1lc3NhZ2UocHJvZHVjZXIpOworCisJCQkJCQlJTWVzc2FnZSByZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOworICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChyZWNlaXZlZE1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOworICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChyZWNlaXZlZE1zZyk7CisJCQkJCQlyZWNlaXZlZE1zZyA9IGNvbnN1bWVyLlJlY2VpdmUoVGltZVNwYW4uRnJvbVNlY29uZHMoNSkpOworICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChyZWNlaXZlZE1zZyk7CisKKwkJCQkJCS8vIFNlbmQgYW5vdGhlciBtZXNzYWdlLgorCQkJCQkJU2VuZE1lc3NhZ2UocHJvZHVjZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRNc2cgPSBjb25zdW1lci5SZWNlaXZlKFRpbWVTcGFuLkZyb21TZWNvbmRzKDUpKTsKKwkJCQkJCUFzc2VydC5Jc05vdE51bGwocmVjZWl2ZWRNc2cpOworICAgICAgICAgICAgICAgICAgIAorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCisJCXByb3RlY3RlZCB2b2lkIFNlbmRNZXNzYWdlKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIpCisJCXsKKwkJCUlNZXNzYWdlIHJlcXVlc3QgPSBwcm9kdWNlci5DcmVhdGVNZXNzYWdlKCk7CisJCQlyZXF1ZXN0Lk5NU1R5cGUgPSAiVGVzdCI7CisJCQlwcm9kdWNlci5TZW5kKHJlcXVlc3QpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL09wdGltaXplZEFja1Rlc3QuY3MgYi90ZXN0L09wdGltaXplZEFja1Rlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9PcHRpbWl6ZWRBY2tUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L09wdGltaXplZEFja1Rlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9RdWV1ZUJyb3dzZXJUZXN0cy5jcyBiL3Rlc3QvUXVldWVCcm93c2VyVGVzdHMuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1F1ZXVlQnJvd3NlclRlc3RzLmNzCnJlbmFtZSB0byB0ZXN0L1F1ZXVlQnJvd3NlclRlc3RzLmNzCmluZGV4IGM3MzcwOTAuLjg1Yzk2ZGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9RdWV1ZUJyb3dzZXJUZXN0cy5jcworKysgYi90ZXN0L1F1ZXVlQnJvd3NlclRlc3RzLmNzCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJfQogCQkKICAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtFeHBlY3RlZEV4Y2VwdGlvbigiQXBhY2hlLk5NUy5OTVNFeGNlcHRpb24iKV0KKyAgICAgICAgW0V4cGVjdGVkRXhjZXB0aW9uKHR5cGVvZihOTVNFeGNlcHRpb24pKV0KICAgICAgICAgcHVibGljIHZvaWQgVGVzdENyZWF0ZUJyb3dzZXJGYWlsc1dpdGhaZXJvUHJlZmV0Y2goKQogICAgICAgICB7CiAgICAgICAgICAgICB1c2luZyAoQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gQ3JlYXRlQ29ubmVjdGlvbigpIGFzIENvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvUXVldWVDb25zdW1lclByaW9yaXR5VGVzdC5jcyBiL3Rlc3QvUXVldWVDb25zdW1lclByaW9yaXR5VGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1F1ZXVlQ29uc3VtZXJQcmlvcml0eVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvUXVldWVDb25zdW1lclByaW9yaXR5VGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1JvbGxiYWNrUmVkZWxpdmVyeVRlc3QuY3MgYi90ZXN0L1JvbGxiYWNrUmVkZWxpdmVyeVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9Sb2xsYmFja1JlZGVsaXZlcnlUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1JvbGxiYWNrUmVkZWxpdmVyeVRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUZXN0LmNzIGIvdGVzdC9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvU3RhdGUvQ29ubmVjdGlvblN0YXRlVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9TdGF0ZS9Db25uZWN0aW9uU3RhdGVUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvU3RhdGUvQ29ubmVjdGlvblN0YXRlVHJhY2tlclRlc3QuY3MgYi90ZXN0L1N0YXRlL0Nvbm5lY3Rpb25TdGF0ZVRyYWNrZXJUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvU3RhdGUvQ29ubmVjdGlvblN0YXRlVHJhY2tlclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvU3RhdGUvQ29ubmVjdGlvblN0YXRlVHJhY2tlclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9TdGF0ZS9Db25zdW1lclN0YXRlVGVzdC5jcyBiL3Rlc3QvU3RhdGUvQ29uc3VtZXJTdGF0ZVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9TdGF0ZS9Db25zdW1lclN0YXRlVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9TdGF0ZS9Db25zdW1lclN0YXRlVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1N0YXRlL1Byb2R1Y2VyU3RhdGVUZXN0LmNzIGIvdGVzdC9TdGF0ZS9Qcm9kdWNlclN0YXRlVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1N0YXRlL1Byb2R1Y2VyU3RhdGVUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1N0YXRlL1Byb2R1Y2VyU3RhdGVUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvU3RhdGUvU2Vzc2lvblN0YXRlVGVzdC5jcyBiL3Rlc3QvU3RhdGUvU2Vzc2lvblN0YXRlVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1N0YXRlL1Nlc3Npb25TdGF0ZVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvU3RhdGUvU2Vzc2lvblN0YXRlVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1N0YXRlL1RyYW5zYWN0aW9uU3RhdGVUZXN0LmNzIGIvdGVzdC9TdGF0ZS9UcmFuc2FjdGlvblN0YXRlVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1N0YXRlL1RyYW5zYWN0aW9uU3RhdGVUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1N0YXRlL1RyYW5zYWN0aW9uU3RhdGVUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVGVtcERlc3RpbmF0aW9uVGVzdC5jcyBiL3Rlc3QvVGVtcERlc3RpbmF0aW9uVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RlbXBEZXN0aW5hdGlvblRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVGVtcERlc3RpbmF0aW9uVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1Rlc3RNYWluLmNzIGIvdGVzdC9UZXN0TWFpbi5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1Rlc3RNYWluLmNzCnJlbmFtZSB0byB0ZXN0L1Rlc3RNYWluLmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVGVzdE1haW5Bc3luYy5jcyBiL3Rlc3QvVGVzdE1haW5Bc3luYy5jcwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVGVzdE1haW5Bc3luYy5jcwpyZW5hbWUgdG8gdGVzdC9UZXN0TWFpbkFzeW5jLmNzCmluZGV4IDIwMDE4YTUuLjQ3OWJkZTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9UZXN0TWFpbkFzeW5jLmNzCisrKyBiL3Rlc3QvVGVzdE1haW5Bc3luYy5jcwpAQCAtMSwxMjIgKzEsMTIyIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi0vLyBOT1RFOiBLZWVwIGxlYWRpbmcgc3BhY2VzLiAgRG8gbm90IGNvbnZlcnQgdG8gdGFicy4gIFRoaXMgZmlsZQ0KLS8vIGlzIGF1dG8tbGlua2VkIG9uIHRoZSBOTVMgd2Vic2l0ZSBhcyBleGFtcGxlIGNvZGUuDQotDQotI2lmIGZhbHNlCS8vIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGNvbXBpbGVkIGludG8gdGhlIHByb2R1Y3QuICBEZW1vIG9ubHkuDQotLy8gU1RBUlQgU05JUFBFVDogZGVtbw0KLXVzaW5nIFN5c3RlbTsNCi11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOw0KLXVzaW5nIEFwYWNoZS5OTVM7DQotdXNpbmcgQXBhY2hlLk5NUy5VdGlsOw0KLQ0KLW5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QNCi17DQotcHVibGljIGNsYXNzIFRlc3RNYWluDQotew0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIEF1dG9SZXNldEV2ZW50IHNlbWFwaG9yZSA9IG5ldyBBdXRvUmVzZXRFdmVudChmYWxzZSk7DQotICAgIHByb3RlY3RlZCBzdGF0aWMgSVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOw0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIFRpbWVTcGFuIHJlY2VpdmVUaW1lb3V0ID0gVGltZVNwYW4uRnJvbVNlY29uZHMoMTApOw0KLSAgICANCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykNCi0gICAgew0KLSAgICAgICAgLy8gRXhhbXBsZSBjb25uZWN0aW9uIHN0cmluZ3M6DQotICAgICAgICAvLyAgICBhY3RpdmVtcTp0Y3A6Ly9hY3RpdmVtcWhvc3Q6NjE2MTYNCi0gICAgICAgIC8vICAgIHN0b21wOnRjcDovL2FjdGl2ZW1xaG9zdDo2MTYxMw0KLSAgICAgICAgLy8gICAgZW1zOnRjcDovL3RpYmNvaG9zdDo3MjIyDQotICAgICAgICAvLyAgICBtc21xOi8vbG9jYWxob3N0DQotDQotICAgICAgICBVcmkgY29ubmVjdHVyaSA9IG5ldyBVcmkoImFjdGl2ZW1xOnRjcDovL2FjdGl2ZW1xaG9zdDo2MTYxNiIpOw0KLSAgICAgICAgDQotICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiQWJvdXQgdG8gY29ubmVjdCB0byAiICsgY29ubmVjdHVyaSk7DQotDQotICAgICAgICAvLyBOT1RFOiBlbnN1cmUgdGhlIG5tc3Byb3ZpZGVyLWFjdGl2ZW1xLmNvbmZpZyBmaWxlIGV4aXN0cyBpbiB0aGUgZXhlY3V0YWJsZSBmb2xkZXIuDQotICAgICAgICBJQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBOTVNDb25uZWN0aW9uRmFjdG9yeShjb25uZWN0dXJpKTsNCi0NCi0gICAgICAgIHVzaW5nKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBmYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKSkNCi0gICAgICAgIHVzaW5nKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAgLy8gRXhhbXBsZXMgZm9yIGdldHRpbmcgYSBkZXN0aW5hdGlvbjoNCi0gICAgICAgICAgICAgLy8NCi0gICAgICAgICAgICAgLy8gSGFyZCBjb2RlZCBkZXN0aW5hdGlvbnM6DQotICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IHNlc3Npb24uR2V0UXVldWUoIkZPTy5CQVIiKTsNCi0gICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElRdWV1ZSk7DQotICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IHNlc3Npb24uR2V0VG9waWMoIkZPTy5CQVIiKTsNCi0gICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElUb3BpYyk7DQotICAgICAgICAgICAgIC8vDQotICAgICAgICAgICAgIC8vIEVtYmVkZGVkIGRlc3RpbmF0aW9uIHR5cGUgaW4gdGhlIG5hbWU6DQotICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IFNlc3Npb25VdGlsLkdldERlc3RpbmF0aW9uKHNlc3Npb24sICJxdWV1ZTovL0ZPTy5CQVIiKTsNCi0gICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElRdWV1ZSk7DQotICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IFNlc3Npb25VdGlsLkdldERlc3RpbmF0aW9uKHNlc3Npb24sICJ0b3BpYzovL0ZPTy5CQVIiKTsNCi0gICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElUb3BpYyk7DQotICAgICAgICAgICAgIC8vDQotICAgICAgICAgICAgIC8vIERlZmF1bHRzIHRvIHF1ZXVlIGlmIHR5cGUgaXMgbm90IHNwZWNpZmllZDoNCi0gICAgICAgICAgICAgLy8gICAgSURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gU2Vzc2lvblV0aWwuR2V0RGVzdGluYXRpb24oc2Vzc2lvbiwgIkZPTy5CQVIiKTsNCi0gICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElRdWV1ZSk7DQotICAgICAgICAgICAgIC8vDQotICAgICAgICAgICAgIC8vIC5ORVQgMy41IFN1cHBvcnRzIEV4dGVuc2lvbiBtZXRob2RzIGZvciBhIHNpbXBsaWZpZWQgc3ludGF4Og0KLSAgICAgICAgICAgICAvLyAgICBJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBzZXNzaW9uLkdldERlc3RpbmF0aW9uKCJxdWV1ZTovL0ZPTy5CQVIiKTsNCi0gICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElRdWV1ZSk7DQotICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IHNlc3Npb24uR2V0RGVzdGluYXRpb24oInRvcGljOi8vRk9PLkJBUiIpOw0KLSAgICAgICAgICAgICAvLyAgICBEZWJ1Zy5Bc3NlcnQoZGVzdGluYXRpb24gaXMgSVRvcGljKTsNCi0NCi0gICAgICAgICAgICBJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBTZXNzaW9uVXRpbC5HZXREZXN0aW5hdGlvbihzZXNzaW9uLCAicXVldWU6Ly9GT08uQkFSIik7DQotICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlVzaW5nIGRlc3RpbmF0aW9uOiAiICsgZGVzdGluYXRpb24pOw0KLQ0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNvbnN1bWVyIGFuZCBwcm9kdWNlcg0KLSAgICAgICAgICAgIHVzaW5nKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKGRlc3RpbmF0aW9uKSkNCi0gICAgICAgICAgICB1c2luZyhJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihkZXN0aW5hdGlvbikpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgY29ubmVjdGlvbiBzbyB0aGF0IG1lc3NhZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkLg0KLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7DQotCQkJCXByb2R1Y2VyLkRlbGl2ZXJ5TW9kZSA9IE1zZ0RlbGl2ZXJ5TW9kZS5QZXJzaXN0ZW50Ow0KLSAgICAgICAgICAgICAgICBwcm9kdWNlci5SZXF1ZXN0VGltZW91dCA9IHJlY2VpdmVUaW1lb3V0Ow0KLSAgICAgICAgICAgICAgICBjb25zdW1lci5MaXN0ZW5lciArPSBuZXcgTWVzc2FnZUxpc3RlbmVyKE9uTWVzc2FnZSk7DQotDQotICAgICAgICAgICAgICAgIC8vIFNlbmQgYSBtZXNzYWdlDQotICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSByZXF1ZXN0ID0gc2Vzc2lvbi5DcmVhdGVUZXh0TWVzc2FnZSgiSGVsbG8gV29ybGQhIik7DQotICAgICAgICAgICAgICAgIHJlcXVlc3QuTk1TQ29ycmVsYXRpb25JRCA9ICJhYmMiOw0KLSAgICAgICAgICAgICAgICByZXF1ZXN0LlByb3BlcnRpZXNbIk5NU1hHcm91cElEIl0gPSAiY2hlZXNlIjsNCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5Qcm9wZXJ0aWVzWyJteUhlYWRlciJdID0gIkNoZWRkYXIiOw0KLQ0KLSAgICAgICAgICAgICAgICBwcm9kdWNlci5TZW5kKHJlcXVlc3QpOw0KLQ0KLSAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICBzZW1hcGhvcmUuV2FpdE9uZSgoaW50KSByZWNlaXZlVGltZW91dC5Ub3RhbE1pbGxpc2Vjb25kcywgdHJ1ZSk7DQotICAgICAgICAgICAgICAgIGlmKG1lc3NhZ2UgPT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIk5vIG1lc3NhZ2UgcmVjZWl2ZWQhIik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUmVjZWl2ZWQgbWVzc2FnZSB3aXRoIElEOiAgICIgKyBtZXNzYWdlLk5NU01lc3NhZ2VJZCk7DQotICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUmVjZWl2ZWQgbWVzc2FnZSB3aXRoIHRleHQ6ICIgKyBtZXNzYWdlLlRleHQpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBPbk1lc3NhZ2UoSU1lc3NhZ2UgcmVjZWl2ZWRNc2cpDQotICAgIHsNCi0gICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlZE1zZyBhcyBJVGV4dE1lc3NhZ2U7DQotICAgICAgICBzZW1hcGhvcmUuU2V0KCk7DQotICAgIH0NCi19DQotfQ0KLS8vIEVORCBTTklQUEVUOiBkZW1vDQotI2VuZGlmDQorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vIE5PVEU6IEtlZXAgbGVhZGluZyBzcGFjZXMuICBEbyBub3QgY29udmVydCB0byB0YWJzLiAgVGhpcyBmaWxlCisvLyBpcyBhdXRvLWxpbmtlZCBvbiB0aGUgTk1TIHdlYnNpdGUgYXMgZXhhbXBsZSBjb2RlLgorCisjaWYgZmFsc2UJLy8gVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgY29tcGlsZWQgaW50byB0aGUgcHJvZHVjdC4gIERlbW8gb25seS4KKy8vIFNUQVJUIFNOSVBQRVQ6IGRlbW8KK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBBcGFjaGUuTk1TOwordXNpbmcgQXBhY2hlLk5NUy5VdGlsOworCituYW1lc3BhY2UgQXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0Cit7CitwdWJsaWMgY2xhc3MgVGVzdE1haW4KK3sKKyAgICBwcm90ZWN0ZWQgc3RhdGljIEF1dG9SZXNldEV2ZW50IHNlbWFwaG9yZSA9IG5ldyBBdXRvUmVzZXRFdmVudChmYWxzZSk7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBUaW1lU3BhbiByZWNlaXZlVGltZW91dCA9IFRpbWVTcGFuLkZyb21TZWNvbmRzKDEwKTsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQorICAgIHsKKyAgICAgICAgLy8gRXhhbXBsZSBjb25uZWN0aW9uIHN0cmluZ3M6CisgICAgICAgIC8vICAgIGFjdGl2ZW1xOnRjcDovL2FjdGl2ZW1xaG9zdDo2MTYxNgorICAgICAgICAvLyAgICBzdG9tcDp0Y3A6Ly9hY3RpdmVtcWhvc3Q6NjE2MTMKKyAgICAgICAgLy8gICAgZW1zOnRjcDovL3RpYmNvaG9zdDo3MjIyCisgICAgICAgIC8vICAgIG1zbXE6Ly9sb2NhbGhvc3QKKworICAgICAgICBVcmkgY29ubmVjdHVyaSA9IG5ldyBVcmkoImFjdGl2ZW1xOnRjcDovL2FjdGl2ZW1xaG9zdDo2MTYxNiIpOworICAgICAgICAKKyAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkFib3V0IHRvIGNvbm5lY3QgdG8gIiArIGNvbm5lY3R1cmkpOworCisgICAgICAgIC8vIE5PVEU6IGVuc3VyZSB0aGUgbm1zcHJvdmlkZXItYWN0aXZlbXEuY29uZmlnIGZpbGUgZXhpc3RzIGluIHRoZSBleGVjdXRhYmxlIGZvbGRlci4KKyAgICAgICAgSUNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgTk1TQ29ubmVjdGlvbkZhY3RvcnkoY29ubmVjdHVyaSk7CisKKyAgICAgICAgdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpKQorICAgICAgICB1c2luZyhJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgICAvLyBFeGFtcGxlcyBmb3IgZ2V0dGluZyBhIGRlc3RpbmF0aW9uOgorICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgLy8gSGFyZCBjb2RlZCBkZXN0aW5hdGlvbnM6CisgICAgICAgICAgICAgLy8gICAgSURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gc2Vzc2lvbi5HZXRRdWV1ZSgiRk9PLkJBUiIpOworICAgICAgICAgICAgIC8vICAgIERlYnVnLkFzc2VydChkZXN0aW5hdGlvbiBpcyBJUXVldWUpOworICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IHNlc3Npb24uR2V0VG9waWMoIkZPTy5CQVIiKTsKKyAgICAgICAgICAgICAvLyAgICBEZWJ1Zy5Bc3NlcnQoZGVzdGluYXRpb24gaXMgSVRvcGljKTsKKyAgICAgICAgICAgICAvLworICAgICAgICAgICAgIC8vIEVtYmVkZGVkIGRlc3RpbmF0aW9uIHR5cGUgaW4gdGhlIG5hbWU6CisgICAgICAgICAgICAgLy8gICAgSURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gU2Vzc2lvblV0aWwuR2V0RGVzdGluYXRpb24oc2Vzc2lvbiwgInF1ZXVlOi8vRk9PLkJBUiIpOworICAgICAgICAgICAgIC8vICAgIERlYnVnLkFzc2VydChkZXN0aW5hdGlvbiBpcyBJUXVldWUpOworICAgICAgICAgICAgIC8vICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IFNlc3Npb25VdGlsLkdldERlc3RpbmF0aW9uKHNlc3Npb24sICJ0b3BpYzovL0ZPTy5CQVIiKTsKKyAgICAgICAgICAgICAvLyAgICBEZWJ1Zy5Bc3NlcnQoZGVzdGluYXRpb24gaXMgSVRvcGljKTsKKyAgICAgICAgICAgICAvLworICAgICAgICAgICAgIC8vIERlZmF1bHRzIHRvIHF1ZXVlIGlmIHR5cGUgaXMgbm90IHNwZWNpZmllZDoKKyAgICAgICAgICAgICAvLyAgICBJRGVzdGluYXRpb24gZGVzdGluYXRpb24gPSBTZXNzaW9uVXRpbC5HZXREZXN0aW5hdGlvbihzZXNzaW9uLCAiRk9PLkJBUiIpOworICAgICAgICAgICAgIC8vICAgIERlYnVnLkFzc2VydChkZXN0aW5hdGlvbiBpcyBJUXVldWUpOworICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgLy8gLk5FVCAzLjUgU3VwcG9ydHMgRXh0ZW5zaW9uIG1ldGhvZHMgZm9yIGEgc2ltcGxpZmllZCBzeW50YXg6CisgICAgICAgICAgICAgLy8gICAgSURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gc2Vzc2lvbi5HZXREZXN0aW5hdGlvbigicXVldWU6Ly9GT08uQkFSIik7CisgICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElRdWV1ZSk7CisgICAgICAgICAgICAgLy8gICAgSURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gc2Vzc2lvbi5HZXREZXN0aW5hdGlvbigidG9waWM6Ly9GT08uQkFSIik7CisgICAgICAgICAgICAgLy8gICAgRGVidWcuQXNzZXJ0KGRlc3RpbmF0aW9uIGlzIElUb3BpYyk7CisKKyAgICAgICAgICAgIElEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiA9IFNlc3Npb25VdGlsLkdldERlc3RpbmF0aW9uKHNlc3Npb24sICJxdWV1ZTovL0ZPTy5CQVIiKTsKKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJVc2luZyBkZXN0aW5hdGlvbjogIiArIGRlc3RpbmF0aW9uKTsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgY29uc3VtZXIgYW5kIHByb2R1Y2VyCisgICAgICAgICAgICB1c2luZyhJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihkZXN0aW5hdGlvbikpCisgICAgICAgICAgICB1c2luZyhJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihkZXN0aW5hdGlvbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGNvbm5lY3Rpb24gc28gdGhhdCBtZXNzYWdlcyB3aWxsIGJlIHByb2Nlc3NlZC4KKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlN0YXJ0KCk7CisJCQkJcHJvZHVjZXIuRGVsaXZlcnlNb2RlID0gTXNnRGVsaXZlcnlNb2RlLlBlcnNpc3RlbnQ7CisgICAgICAgICAgICAgICAgcHJvZHVjZXIuUmVxdWVzdFRpbWVvdXQgPSByZWNlaXZlVGltZW91dDsKKyAgICAgICAgICAgICAgICBjb25zdW1lci5MaXN0ZW5lciArPSBuZXcgTWVzc2FnZUxpc3RlbmVyKE9uTWVzc2FnZSk7CisKKyAgICAgICAgICAgICAgICAvLyBTZW5kIGEgbWVzc2FnZQorICAgICAgICAgICAgICAgIElUZXh0TWVzc2FnZSByZXF1ZXN0ID0gc2Vzc2lvbi5DcmVhdGVUZXh0TWVzc2FnZSgiSGVsbG8gV29ybGQhIik7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5OTVNDb3JyZWxhdGlvbklEID0gImFiYyI7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5Qcm9wZXJ0aWVzWyJOTVNYR3JvdXBJRCJdID0gImNoZWVzZSI7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5Qcm9wZXJ0aWVzWyJteUhlYWRlciJdID0gIkNoZWRkYXIiOworCisgICAgICAgICAgICAgICAgcHJvZHVjZXIuU2VuZChyZXF1ZXN0KTsKKworICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBtZXNzYWdlCisgICAgICAgICAgICAgICAgc2VtYXBob3JlLldhaXRPbmUoKGludCkgcmVjZWl2ZVRpbWVvdXQuVG90YWxNaWxsaXNlY29uZHMsIHRydWUpOworICAgICAgICAgICAgICAgIGlmKG1lc3NhZ2UgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJObyBtZXNzYWdlIHJlY2VpdmVkISIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUmVjZWl2ZWQgbWVzc2FnZSB3aXRoIElEOiAgICIgKyBtZXNzYWdlLk5NU01lc3NhZ2VJZCk7CisgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJSZWNlaXZlZCBtZXNzYWdlIHdpdGggdGV4dDogIiArIG1lc3NhZ2UuVGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIE9uTWVzc2FnZShJTWVzc2FnZSByZWNlaXZlZE1zZykKKyAgICB7CisgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlZE1zZyBhcyBJVGV4dE1lc3NhZ2U7CisgICAgICAgIHNlbWFwaG9yZS5TZXQoKTsKKyAgICB9Cit9Cit9CisvLyBFTkQgU05JUFBFVDogZGVtbworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVGhyZWFkcy9Db21wb3NpdGVUYXNrUnVubmVyVGVzdC5jcyBiL3Rlc3QvVGhyZWFkcy9Db21wb3NpdGVUYXNrUnVubmVyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RocmVhZHMvQ29tcG9zaXRlVGFza1J1bm5lclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVGhyZWFkcy9Db21wb3NpdGVUYXNrUnVubmVyVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1RocmVhZHMvRGVkaWNhdGVkVGFza1J1bm5lclRlc3QuY3MgYi90ZXN0L1RocmVhZHMvRGVkaWNhdGVkVGFza1J1bm5lclRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UaHJlYWRzL0RlZGljYXRlZFRhc2tSdW5uZXJUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1RocmVhZHMvRGVkaWNhdGVkVGFza1J1bm5lclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9UaHJlYWRzL1NjaGVkdWxlclRlc3QuY3MgYi90ZXN0L1RocmVhZHMvU2NoZWR1bGVyVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RocmVhZHMvU2NoZWR1bGVyVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9UaHJlYWRzL1NjaGVkdWxlclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9UaHJlYWRzL1RocmVhZFBvb2xFeGVjdXRvclRlc3QuY3MgYi90ZXN0L1RocmVhZHMvVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RocmVhZHMvVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9UaHJlYWRzL1RocmVhZFBvb2xFeGVjdXRvclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9UaHJlYWRzL1RpbWVyRXhUZXN0LmNzIGIvdGVzdC9UaHJlYWRzL1RpbWVyRXhUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVGhyZWFkcy9UaW1lckV4VGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9UaHJlYWRzL1RpbWVyRXhUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNhY3Rpb25zL1JlY292ZXJ5RmlsZUxvZ2dlclRlc3QuY3MgYi90ZXN0L1RyYW5zYWN0aW9ucy9SZWNvdmVyeUZpbGVMb2dnZXJUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVHJhbnNhY3Rpb25zL1JlY292ZXJ5RmlsZUxvZ2dlclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVHJhbnNhY3Rpb25zL1JlY292ZXJ5RmlsZUxvZ2dlclRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzLmNzIGIvdGVzdC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzLmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzLmNzCnJlbmFtZSB0byB0ZXN0L1RyYW5zYWN0aW9ucy9SZWNvdmVyeUxvZ2dlckhhcm5lc3MuY3MKaW5kZXggZmI2OTMzOC4uYWM1NzRjZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvY3NoYXJwL1RyYW5zYWN0aW9ucy9SZWNvdmVyeUxvZ2dlckhhcm5lc3MuY3MKKysrIGIvdGVzdC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzLmNzCkBAIC0xLDIyOSArMSwyMjkgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSAqLw0KLQ0KLXVzaW5nIFN5c3RlbTsNCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsNCi0NCi11c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLkNvbW1hbmRzOw0KLXVzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuVXRpbDsNCi11c2luZyBBcGFjaGUuTk1TLlV0aWw7DQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNhY3Rpb25zDQotew0KLSAgICBwdWJsaWMgY2xhc3MgUmVjb3ZlcnlMb2dnZXJIYXJuZXNzIDogSVJlY292ZXJ5TG9nZ2VyDQotICAgIHsNCi0gICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEhhcm5lc3NlZEV2ZW50SGFuZGxlcigpOw0KLSAgICAgICAgcHVibGljIGRlbGVnYXRlIHZvaWQgSGFybmVzc2VkTG9nUmVjb3ZlcnlJbmZvSGFuZGxlcihYQVRyYW5zYWN0aW9uSWQgeGlkLCBieXRlW10gcmVjb3ZlcnlJbmZvKTsNCi0gICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEhhcm5lc3NlZExvZ1JlY292ZXJlZEhhbmRsZXIoWEFUcmFuc2FjdGlvbklkIHhpZCk7DQotICAgICAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBIYXJuZXNzZWRHZXRSZWNvdmVyYWJsZXNIYW5kbGVyKEtleVZhbHVlUGFpcjxYQVRyYW5zYWN0aW9uSWQsIGJ5dGVbXT5bXSByZWNvdmVyYWJsZXMpOw0KLSAgICAgICAgDQotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBGYWN0b3J5RmluZGVyPFJlY292ZXJ5TG9nZ2VyRmFjdG9yeUF0dHJpYnV0ZSwgSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeT4gRkFDVE9SWV9GSU5ERVIgPQ0KLSAgICAgICAgICAgIG5ldyBGYWN0b3J5RmluZGVyPFJlY292ZXJ5TG9nZ2VyRmFjdG9yeUF0dHJpYnV0ZSwgSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeT4oKTsNCi0NCi0gICAgICAgIHByaXZhdGUgSVJlY292ZXJ5TG9nZ2VyIGNvbnRhaW5lZExvZ2dlcjsNCi0NCi0gICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRFdmVudEhhbmRsZXIgUHJlSW5pdGlhbGl6ZUV2ZW50Ow0KLSAgICAgICAgcHVibGljIGV2ZW50IEhhcm5lc3NlZEV2ZW50SGFuZGxlciBQb3N0SW5pdGlhbGl6ZUV2ZW50Ow0KLQ0KLSAgICAgICAgcHVibGljIGV2ZW50IEhhcm5lc3NlZExvZ1JlY292ZXJ5SW5mb0hhbmRsZXIgUHJlTG9nUmVjb3ZlcnlJbmZvRXZlbnQ7DQotICAgICAgICBwdWJsaWMgZXZlbnQgSGFybmVzc2VkTG9nUmVjb3ZlcnlJbmZvSGFuZGxlciBQb3N0TG9nUmVjb3ZlcnlJbmZvRXZlbnQ7DQotDQotICAgICAgICBwdWJsaWMgZXZlbnQgSGFybmVzc2VkTG9nUmVjb3ZlcmVkSGFuZGxlciBQcmVMb2dSZWNvdmVyZEV2ZW50Ow0KLSAgICAgICAgcHVibGljIGV2ZW50IEhhcm5lc3NlZExvZ1JlY292ZXJlZEhhbmRsZXIgUG9zdExvZ1JlY292ZXJkRXZlbnQ7DQotDQotICAgICAgICBwdWJsaWMgZXZlbnQgSGFybmVzc2VkR2V0UmVjb3ZlcmFibGVzSGFuZGxlciBQcmVHZXRSZWNvdmVyYWJsZXNFdmVudDsNCi0gICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRHZXRSZWNvdmVyYWJsZXNIYW5kbGVyIFBvc3RHZXRSZWNvdmVyYWJsZXNFdmVudDsNCi0NCi0gICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRFdmVudEhhbmRsZXIgUHJlUHVyZ2VFdmVudDsNCi0gICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRFdmVudEhhbmRsZXIgUG9zdFB1cmdlRXZlbnQ7DQotDQotICAgICAgICBwdWJsaWMgUmVjb3ZlcnlMb2dnZXJIYXJuZXNzKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlciA9IG5ldyBSZWNvdmVyeUZpbGVMb2dnZXIoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBzdHJpbmcgUmVzb3VyY2VNYW5hZ2VySWQNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gdGhpcy5jb250YWluZWRMb2dnZXIuUmVzb3VyY2VNYW5hZ2VySWQ7IH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyB2b2lkIEluaXRpYWxpemUoc3RyaW5nIHJlc291cmNlTWFuYWdlcklkKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKHRoaXMuUHJlSW5pdGlhbGl6ZUV2ZW50ICE9IG51bGwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0aGlzLlByZUluaXRpYWxpemVFdmVudCgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCi0gICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlci5Jbml0aWFsaXplKHJlc291cmNlTWFuYWdlcklkKTsNCi0NCi0gICAgICAgICAgICBpZiAodGhpcy5Qb3N0SW5pdGlhbGl6ZUV2ZW50ICE9IG51bGwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0aGlzLlBvc3RJbml0aWFsaXplRXZlbnQoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBMb2dSZWNvdmVyeUluZm8oWEFUcmFuc2FjdGlvbklkIHhpZCwgYnl0ZVtdIHJlY292ZXJ5SW5mb3JtYXRpb24pDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKHJlY292ZXJ5SW5mb3JtYXRpb24gPT0gbnVsbCB8fCByZWNvdmVyeUluZm9ybWF0aW9uLkxlbmd0aCA9PSAwKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICBpZiAodGhpcy5QcmVMb2dSZWNvdmVyeUluZm9FdmVudCAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhpcy5QcmVMb2dSZWNvdmVyeUluZm9FdmVudCh4aWQsIHJlY292ZXJ5SW5mb3JtYXRpb24pOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlci5Mb2dSZWNvdmVyeUluZm8oeGlkLCByZWNvdmVyeUluZm9ybWF0aW9uKTsNCi0NCi0gICAgICAgICAgICBpZiAodGhpcy5Qb3N0TG9nUmVjb3ZlcnlJbmZvRXZlbnQgIT0gbnVsbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRoaXMuUG9zdExvZ1JlY292ZXJ5SW5mb0V2ZW50KHhpZCwgcmVjb3ZlcnlJbmZvcm1hdGlvbik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIEtleVZhbHVlUGFpcjxYQVRyYW5zYWN0aW9uSWQsIGJ5dGVbXT5bXSBHZXRSZWNvdmVyYWJsZXMoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIEtleVZhbHVlUGFpcjxYQVRyYW5zYWN0aW9uSWQsIGJ5dGVbXT5bXSByZXN1bHQgPSBuZXcgS2V5VmFsdWVQYWlyPFhBVHJhbnNhY3Rpb25JZCwgYnl0ZVtdPlswXTsNCi0NCi0gICAgICAgICAgICBpZiAodGhpcy5QcmVHZXRSZWNvdmVyYWJsZXNFdmVudCAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhpcy5QcmVHZXRSZWNvdmVyYWJsZXNFdmVudChyZXN1bHQpOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmNvbnRhaW5lZExvZ2dlci5HZXRSZWNvdmVyYWJsZXMoKTsNCi0NCi0gICAgICAgICAgICBpZiAodGhpcy5Qb3N0R2V0UmVjb3ZlcmFibGVzRXZlbnQgIT0gbnVsbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRoaXMuUG9zdEdldFJlY292ZXJhYmxlc0V2ZW50KHJlc3VsdCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBMb2dSZWNvdmVyZWQoWEFUcmFuc2FjdGlvbklkIHhpZCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAodGhpcy5QcmVMb2dSZWNvdmVyZEV2ZW50ICE9IG51bGwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0aGlzLlByZUxvZ1JlY292ZXJkRXZlbnQoeGlkKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgdGhpcy5jb250YWluZWRMb2dnZXIuTG9nUmVjb3ZlcmVkKHhpZCk7DQotDQotICAgICAgICAgICAgaWYgKHRoaXMuUG9zdExvZ1JlY292ZXJkRXZlbnQgIT0gbnVsbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRoaXMuUG9zdExvZ1JlY292ZXJkRXZlbnQoeGlkKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgdm9pZCBQdXJnZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKHRoaXMuUHJlUHVyZ2VFdmVudCAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhpcy5QcmVQdXJnZUV2ZW50KCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIHRoaXMuY29udGFpbmVkTG9nZ2VyLlB1cmdlKCk7DQotDQotICAgICAgICAgICAgaWYgKHRoaXMuUG9zdFB1cmdlRXZlbnQgIT0gbnVsbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRoaXMuUG9zdFB1cmdlRXZlbnQoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBwdWJsaWMgc3RyaW5nIExvZ2dlclR5cGUNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBnZXQgeyByZXR1cm4gdGhpcy5jb250YWluZWRMb2dnZXIuTG9nZ2VyVHlwZTsgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgI3JlZ2lvbiBIYXJuZXNzIE1ldGhvZHMNCi0NCi0gICAgICAgIHB1YmxpYyBJUmVjb3ZlcnlMb2dnZXIgSGFybmVzc2VkDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMuY29udGFpbmVkTG9nZ2VyOyB9ICAgIA0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHVibGljIHN0cmluZyBIYXJuZXNzZWRUeXBlDQotICAgICAgICB7DQotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMuY29udGFpbmVkTG9nZ2VyICE9IG51bGwgPyB0aGlzLmNvbnRhaW5lZExvZ2dlci5Mb2dnZXJUeXBlIDogIiI7IH0NCi0gICAgICAgICAgICBzZXQNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWx1ZSkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOTVNFeGNlcHRpb24oU3RyaW5nLkZvcm1hdCgiUmVjb3ZlcnkgTG9nZ2VyIG5hbWUgaW52YWxpZDogW3swfV0iLCB2YWx1ZSkpOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIElSZWNvdmVyeUxvZ2dlckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7DQotDQotICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gTmV3SW5zdGFuY2UodmFsdWUuVG9Mb3dlcigpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjYXRjaCAoTk1TRXhjZXB0aW9uKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHRocm93IE5NU0V4Y2VwdGlvblN1cHBvcnQuQ3JlYXRlKCJFcnJvciBjcmVhdGluZyBSZWNvdmVyeSBMb2dnZXIiLCBlKTsNCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlciA9IGZhY3RvcnkuQ3JlYXRlKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeSBOZXdJbnN0YW5jZShzdHJpbmcgc2NoZW1lKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgVHlwZSBmYWN0b3J5VHlwZSA9IEZpbmRMb2dnZXJGYWN0b3J5KHNjaGVtZSk7DQotDQotICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5VHlwZSA9PSBudWxsKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJOZXdJbnN0YW5jZSBmYWlsZWQgdG8gZmluZCBhIG1hdGNoIGZvciBpZCA9ICIgKyBzY2hlbWUpOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIHJldHVybiAoSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeSlBY3RpdmF0b3IuQ3JlYXRlSW5zdGFuY2UoZmFjdG9yeVR5cGUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgVHJhY2VyLldhcm5Gb3JtYXQoIk5ld0luc3RhbmNlIGZhaWxlZCB0byBjcmVhdGUgYW4gSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeSB3aXRoIGVycm9yOiB7MX0iLCBleC5NZXNzYWdlKTsNCi0gICAgICAgICAgICAgICAgdGhyb3c7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgVHlwZSBGaW5kTG9nZ2VyRmFjdG9yeShzdHJpbmcgc2NoZW1lKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBQ1RPUllfRklOREVSLkZpbmRGYWN0b3J5VHlwZShzY2hlbWUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXRjaA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5NU0V4Y2VwdGlvbigiRmFpbGVkIHRvIGZpbmQgRmFjdG9yeSBmb3IgUmVjb3ZlcnkgTG9nZ2VyIHR5cGU6ICIgKyBzY2hlbWUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBPYmplY3QgQ2xvbmUoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLk1lbWJlcndpc2VDbG9uZSgpOw0KLSAgICAgICAgfSAgICAgICANCi0NCi0gICAgICAgICNlbmRyZWdpb24NCi0gICAgfQ0KLX0NCi0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CisKK3VzaW5nIEFwYWNoZS5OTVMuQWN0aXZlTVEuQ29tbWFuZHM7Cit1c2luZyBBcGFjaGUuTk1TLkFjdGl2ZU1RLlV0aWw7Cit1c2luZyBBcGFjaGUuTk1TLlV0aWw7CisKK25hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRyYW5zYWN0aW9ucworeworICAgIHB1YmxpYyBjbGFzcyBSZWNvdmVyeUxvZ2dlckhhcm5lc3MgOiBJUmVjb3ZlcnlMb2dnZXIKKyAgICB7CisgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEhhcm5lc3NlZEV2ZW50SGFuZGxlcigpOworICAgICAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBIYXJuZXNzZWRMb2dSZWNvdmVyeUluZm9IYW5kbGVyKFhBVHJhbnNhY3Rpb25JZCB4aWQsIGJ5dGVbXSByZWNvdmVyeUluZm8pOworICAgICAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBIYXJuZXNzZWRMb2dSZWNvdmVyZWRIYW5kbGVyKFhBVHJhbnNhY3Rpb25JZCB4aWQpOworICAgICAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBIYXJuZXNzZWRHZXRSZWNvdmVyYWJsZXNIYW5kbGVyKEtleVZhbHVlUGFpcjxYQVRyYW5zYWN0aW9uSWQsIGJ5dGVbXT5bXSByZWNvdmVyYWJsZXMpOworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRmFjdG9yeUZpbmRlcjxSZWNvdmVyeUxvZ2dlckZhY3RvcnlBdHRyaWJ1dGUsIElSZWNvdmVyeUxvZ2dlckZhY3Rvcnk+IEZBQ1RPUllfRklOREVSID0KKyAgICAgICAgICAgIG5ldyBGYWN0b3J5RmluZGVyPFJlY292ZXJ5TG9nZ2VyRmFjdG9yeUF0dHJpYnV0ZSwgSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeT4oKTsKKworICAgICAgICBwcml2YXRlIElSZWNvdmVyeUxvZ2dlciBjb250YWluZWRMb2dnZXI7CisKKyAgICAgICAgcHVibGljIGV2ZW50IEhhcm5lc3NlZEV2ZW50SGFuZGxlciBQcmVJbml0aWFsaXplRXZlbnQ7CisgICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRFdmVudEhhbmRsZXIgUG9zdEluaXRpYWxpemVFdmVudDsKKworICAgICAgICBwdWJsaWMgZXZlbnQgSGFybmVzc2VkTG9nUmVjb3ZlcnlJbmZvSGFuZGxlciBQcmVMb2dSZWNvdmVyeUluZm9FdmVudDsKKyAgICAgICAgcHVibGljIGV2ZW50IEhhcm5lc3NlZExvZ1JlY292ZXJ5SW5mb0hhbmRsZXIgUG9zdExvZ1JlY292ZXJ5SW5mb0V2ZW50OworCisgICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRMb2dSZWNvdmVyZWRIYW5kbGVyIFByZUxvZ1JlY292ZXJkRXZlbnQ7CisgICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRMb2dSZWNvdmVyZWRIYW5kbGVyIFBvc3RMb2dSZWNvdmVyZEV2ZW50OworCisgICAgICAgIHB1YmxpYyBldmVudCBIYXJuZXNzZWRHZXRSZWNvdmVyYWJsZXNIYW5kbGVyIFByZUdldFJlY292ZXJhYmxlc0V2ZW50OworICAgICAgICBwdWJsaWMgZXZlbnQgSGFybmVzc2VkR2V0UmVjb3ZlcmFibGVzSGFuZGxlciBQb3N0R2V0UmVjb3ZlcmFibGVzRXZlbnQ7CisKKyAgICAgICAgcHVibGljIGV2ZW50IEhhcm5lc3NlZEV2ZW50SGFuZGxlciBQcmVQdXJnZUV2ZW50OworICAgICAgICBwdWJsaWMgZXZlbnQgSGFybmVzc2VkRXZlbnRIYW5kbGVyIFBvc3RQdXJnZUV2ZW50OworCisgICAgICAgIHB1YmxpYyBSZWNvdmVyeUxvZ2dlckhhcm5lc3MoKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlciA9IG5ldyBSZWNvdmVyeUZpbGVMb2dnZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdHJpbmcgUmVzb3VyY2VNYW5hZ2VySWQKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMuY29udGFpbmVkTG9nZ2VyLlJlc291cmNlTWFuYWdlcklkOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBJbml0aWFsaXplKHN0cmluZyByZXNvdXJjZU1hbmFnZXJJZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYodGhpcy5QcmVJbml0aWFsaXplRXZlbnQgIT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLlByZUluaXRpYWxpemVFdmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlci5Jbml0aWFsaXplKHJlc291cmNlTWFuYWdlcklkKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuUG9zdEluaXRpYWxpemVFdmVudCAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuUG9zdEluaXRpYWxpemVFdmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgTG9nUmVjb3ZlcnlJbmZvKFhBVHJhbnNhY3Rpb25JZCB4aWQsIGJ5dGVbXSByZWNvdmVyeUluZm9ybWF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnlJbmZvcm1hdGlvbiA9PSBudWxsIHx8IHJlY292ZXJ5SW5mb3JtYXRpb24uTGVuZ3RoID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5QcmVMb2dSZWNvdmVyeUluZm9FdmVudCAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuUHJlTG9nUmVjb3ZlcnlJbmZvRXZlbnQoeGlkLCByZWNvdmVyeUluZm9ybWF0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5jb250YWluZWRMb2dnZXIuTG9nUmVjb3ZlcnlJbmZvKHhpZCwgcmVjb3ZlcnlJbmZvcm1hdGlvbik7CisKKyAgICAgICAgICAgIGlmICh0aGlzLlBvc3RMb2dSZWNvdmVyeUluZm9FdmVudCAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuUG9zdExvZ1JlY292ZXJ5SW5mb0V2ZW50KHhpZCwgcmVjb3ZlcnlJbmZvcm1hdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgS2V5VmFsdWVQYWlyPFhBVHJhbnNhY3Rpb25JZCwgYnl0ZVtdPltdIEdldFJlY292ZXJhYmxlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEtleVZhbHVlUGFpcjxYQVRyYW5zYWN0aW9uSWQsIGJ5dGVbXT5bXSByZXN1bHQgPSBuZXcgS2V5VmFsdWVQYWlyPFhBVHJhbnNhY3Rpb25JZCwgYnl0ZVtdPlswXTsKKworICAgICAgICAgICAgaWYgKHRoaXMuUHJlR2V0UmVjb3ZlcmFibGVzRXZlbnQgIT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLlByZUdldFJlY292ZXJhYmxlc0V2ZW50KHJlc3VsdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY29udGFpbmVkTG9nZ2VyLkdldFJlY292ZXJhYmxlcygpOworCisgICAgICAgICAgICBpZiAodGhpcy5Qb3N0R2V0UmVjb3ZlcmFibGVzRXZlbnQgIT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLlBvc3RHZXRSZWNvdmVyYWJsZXNFdmVudChyZXN1bHQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgTG9nUmVjb3ZlcmVkKFhBVHJhbnNhY3Rpb25JZCB4aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0aGlzLlByZUxvZ1JlY292ZXJkRXZlbnQgIT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLlByZUxvZ1JlY292ZXJkRXZlbnQoeGlkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5jb250YWluZWRMb2dnZXIuTG9nUmVjb3ZlcmVkKHhpZCk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLlBvc3RMb2dSZWNvdmVyZEV2ZW50ICE9IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5Qb3N0TG9nUmVjb3ZlcmRFdmVudCh4aWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgUHVyZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcy5QcmVQdXJnZUV2ZW50ICE9IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5QcmVQdXJnZUV2ZW50KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuY29udGFpbmVkTG9nZ2VyLlB1cmdlKCk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLlBvc3RQdXJnZUV2ZW50ICE9IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5Qb3N0UHVyZ2VFdmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0cmluZyBMb2dnZXJUeXBlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiB0aGlzLmNvbnRhaW5lZExvZ2dlci5Mb2dnZXJUeXBlOyB9CisgICAgICAgIH0KKworICAgICAgICAjcmVnaW9uIEhhcm5lc3MgTWV0aG9kcworCisgICAgICAgIHB1YmxpYyBJUmVjb3ZlcnlMb2dnZXIgSGFybmVzc2VkCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiB0aGlzLmNvbnRhaW5lZExvZ2dlcjsgfSAgICAKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdHJpbmcgSGFybmVzc2VkVHlwZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gdGhpcy5jb250YWluZWRMb2dnZXIgIT0gbnVsbCA/IHRoaXMuY29udGFpbmVkTG9nZ2VyLkxvZ2dlclR5cGUgOiAiIjsgfQorICAgICAgICAgICAgc2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOTVNFeGNlcHRpb24oU3RyaW5nLkZvcm1hdCgiUmVjb3ZlcnkgTG9nZ2VyIG5hbWUgaW52YWxpZDogW3swfV0iLCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIElSZWNvdmVyeUxvZ2dlckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7CisKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkgPSBOZXdJbnN0YW5jZSh2YWx1ZS5Ub0xvd2VyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoTk1TRXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IE5NU0V4Y2VwdGlvblN1cHBvcnQuQ3JlYXRlKCJFcnJvciBjcmVhdGluZyBSZWNvdmVyeSBMb2dnZXIiLCBlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lZExvZ2dlciA9IGZhY3RvcnkuQ3JlYXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBJUmVjb3ZlcnlMb2dnZXJGYWN0b3J5IE5ld0luc3RhbmNlKHN0cmluZyBzY2hlbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFR5cGUgZmFjdG9yeVR5cGUgPSBGaW5kTG9nZ2VyRmFjdG9yeShzY2hlbWUpOworCisgICAgICAgICAgICAgICAgaWYgKGZhY3RvcnlUeXBlID09IG51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJOZXdJbnN0YW5jZSBmYWlsZWQgdG8gZmluZCBhIG1hdGNoIGZvciBpZCA9ICIgKyBzY2hlbWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiAoSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeSlBY3RpdmF0b3IuQ3JlYXRlSW5zdGFuY2UoZmFjdG9yeVR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUcmFjZXIuV2FybkZvcm1hdCgiTmV3SW5zdGFuY2UgZmFpbGVkIHRvIGNyZWF0ZSBhbiBJUmVjb3ZlcnlMb2dnZXJGYWN0b3J5IHdpdGggZXJyb3I6IHsxfSIsIGV4Lk1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHRocm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgVHlwZSBGaW5kTG9nZ2VyRmFjdG9yeShzdHJpbmcgc2NoZW1lKQorICAgICAgICB7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFDVE9SWV9GSU5ERVIuRmluZEZhY3RvcnlUeXBlKHNjaGVtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBOTVNFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kIEZhY3RvcnkgZm9yIFJlY292ZXJ5IExvZ2dlciB0eXBlOiAiICsgc2NoZW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBPYmplY3QgQ2xvbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5NZW1iZXJ3aXNlQ2xvbmUoKTsKKyAgICAgICAgfSAgICAgICAKKworICAgICAgICAjZW5kcmVnaW9uCisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNhY3Rpb25zL1JlY292ZXJ5TG9nZ2VySGFybmVzc0ZhY3RvcnkuY3MgYi90ZXN0L1RyYW5zYWN0aW9ucy9SZWNvdmVyeUxvZ2dlckhhcm5lc3NGYWN0b3J5LmNzCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzRmFjdG9yeS5jcwpyZW5hbWUgdG8gdGVzdC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzRmFjdG9yeS5jcwppbmRleCA1YmQ1MzBlLi5lZWJkNmFhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNhY3Rpb25zL1JlY292ZXJ5TG9nZ2VySGFybmVzc0ZhY3RvcnkuY3MKKysrIGIvdGVzdC9UcmFuc2FjdGlvbnMvUmVjb3ZlcnlMb2dnZXJIYXJuZXNzRmFjdG9yeS5jcwpAQCAtMSwyOSArMSwyOSBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNhY3Rpb25zDQotew0KLSAgICBbUmVjb3ZlcnlMb2dnZXJGYWN0b3J5KCJoYXJuZXNzIildDQotICAgIHB1YmxpYyBjbGFzcyBSZWNvdmVyeUxvZ2dlckhhcm5lc3NGYWN0b3J5IDogSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeQ0KLSAgICB7DQotICAgICAgICBwdWJsaWMgSVJlY292ZXJ5TG9nZ2VyIENyZWF0ZSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWNvdmVyeUxvZ2dlckhhcm5lc3MoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVHJhbnNhY3Rpb25zCit7CisgICAgW1JlY292ZXJ5TG9nZ2VyRmFjdG9yeSgiaGFybmVzcyIpXQorICAgIHB1YmxpYyBjbGFzcyBSZWNvdmVyeUxvZ2dlckhhcm5lc3NGYWN0b3J5IDogSVJlY292ZXJ5TG9nZ2VyRmFjdG9yeQorICAgIHsKKyAgICAgICAgcHVibGljIElSZWNvdmVyeUxvZ2dlciBDcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJlY292ZXJ5TG9nZ2VySGFybmVzcygpOworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNwb3J0L0luYWN0aXZpdHkvSW5hY3Rpdml0eU1vbml0b3JUZXN0LmNzIGIvdGVzdC9UcmFuc3BvcnQvSW5hY3Rpdml0eS9JbmFjdGl2aXR5TW9uaXRvclRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UcmFuc3BvcnQvSW5hY3Rpdml0eS9JbmFjdGl2aXR5TW9uaXRvclRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVHJhbnNwb3J0L0luYWN0aXZpdHkvSW5hY3Rpdml0eU1vbml0b3JUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNwb3J0L01vY2svTW9ja1RyYW5zcG9ydEZhY3RvcnlUZXN0LmNzIGIvdGVzdC9UcmFuc3BvcnQvTW9jay9Nb2NrVHJhbnNwb3J0RmFjdG9yeVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRGYWN0b3J5VGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9UcmFuc3BvcnQvTW9jay9Nb2NrVHJhbnNwb3J0RmFjdG9yeVRlc3QuY3MKaW5kZXggNjYxZTczMS4uZGI1MTE4OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvY3NoYXJwL1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRGYWN0b3J5VGVzdC5jcworKysgYi90ZXN0L1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRGYWN0b3J5VGVzdC5jcwpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtFeHBlY3RlZEV4Y2VwdGlvbiggIkFwYWNoZS5OTVMuQWN0aXZlTVEuSU9FeGNlcHRpb24iICldICAgICAgICAKKyAgICAgICAgW0V4cGVjdGVkRXhjZXB0aW9uKCB0eXBlb2YoSU9FeGNlcHRpb24pKV0gICAgICAgIAogICAgICAgICBwdWJsaWMgdm9pZCBDcmVhdGlvbkZhaWxNb2NrVHJhbnNwb3J0VGVzdCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIE1vY2tUcmFuc3BvcnRGYWN0b3J5IGZhY3RvcnkgPSBuZXcgTW9ja1RyYW5zcG9ydEZhY3RvcnkoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9UcmFuc3BvcnQvTW9jay9Nb2NrVHJhbnNwb3J0VGVzdC5jcyBiL3Rlc3QvVHJhbnNwb3J0L01vY2svTW9ja1RyYW5zcG9ydFRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRUZXN0LmNzCmluZGV4IGYzYzUwNGMuLjk1OGE3YTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NzaGFycC9UcmFuc3BvcnQvTW9jay9Nb2NrVHJhbnNwb3J0VGVzdC5jcworKysgYi90ZXN0L1RyYW5zcG9ydC9Nb2NrL01vY2tUcmFuc3BvcnRUZXN0LmNzCkBAIC01Miw3ICs1Miw3IEBACiAJCX0KIAogCQlbVGVzdF0KLQkJW0V4cGVjdGVkRXhjZXB0aW9uKCJTeXN0ZW0uSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiIpXQorCQlbRXhwZWN0ZWRFeGNlcHRpb24odHlwZW9mKEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24pKV0KIAkJcHVibGljIHZvaWQgU3RhcnRVbml0aWFsaXplZFRyYW5zcG9ydFRlc3QoKQogCQl7CiAJCQlNb2NrVHJhbnNwb3J0IHRyYW5zcG9ydCA9IG5ldyBNb2NrVHJhbnNwb3J0KG1vY2tVcmkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1RyYW5zcG9ydC9UY3AvVGNwRmF1bHR5VHJhbnNwb3J0LmNzIGIvdGVzdC9UcmFuc3BvcnQvVGNwL1RjcEZhdWx0eVRyYW5zcG9ydC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RyYW5zcG9ydC9UY3AvVGNwRmF1bHR5VHJhbnNwb3J0LmNzCnJlbmFtZSB0byB0ZXN0L1RyYW5zcG9ydC9UY3AvVGNwRmF1bHR5VHJhbnNwb3J0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNwb3J0L1RjcC9UY3BGYXVsdHlUcmFuc3BvcnRGYWN0b3J5LmNzIGIvdGVzdC9UcmFuc3BvcnQvVGNwL1RjcEZhdWx0eVRyYW5zcG9ydEZhY3RvcnkuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UcmFuc3BvcnQvVGNwL1RjcEZhdWx0eVRyYW5zcG9ydEZhY3RvcnkuY3MKcmVuYW1lIHRvIHRlc3QvVHJhbnNwb3J0L1RjcC9UY3BGYXVsdHlUcmFuc3BvcnRGYWN0b3J5LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNwb3J0L1RjcC9UY3BGYXVsdHlUcmFuc3BvcnRUZXN0LmNzIGIvdGVzdC9UcmFuc3BvcnQvVGNwL1RjcEZhdWx0eVRyYW5zcG9ydFRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UcmFuc3BvcnQvVGNwL1RjcEZhdWx0eVRyYW5zcG9ydFRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVHJhbnNwb3J0L1RjcC9UY3BGYXVsdHlUcmFuc3BvcnRUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNwb3J0L2ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNhY3Rpb25UZXN0LmNzIGIvdGVzdC9UcmFuc3BvcnQvZmFpbG92ZXIvRmFpbG92ZXJUcmFuc2FjdGlvblRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9UcmFuc3BvcnQvZmFpbG92ZXIvRmFpbG92ZXJUcmFuc2FjdGlvblRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVHJhbnNwb3J0L2ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNhY3Rpb25UZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVHJhbnNwb3J0L2ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0VGVzdC5jcyBiL3Rlc3QvVHJhbnNwb3J0L2ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0VGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1RyYW5zcG9ydC9mYWlsb3Zlci9GYWlsb3ZlclRyYW5zcG9ydFRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVHJhbnNwb3J0L2ZhaWxvdmVyL0ZhaWxvdmVyVHJhbnNwb3J0VGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1V0aWwvQWN0aXZlTVFNZXNzYWdlQXVkaXRUZXN0LmNzIGIvdGVzdC9VdGlsL0FjdGl2ZU1RTWVzc2FnZUF1ZGl0VGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1V0aWwvQWN0aXZlTVFNZXNzYWdlQXVkaXRUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1V0aWwvQWN0aXZlTVFNZXNzYWdlQXVkaXRUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVXRpbC9BY3RpdmVNUU1lc3NhZ2VUcmFuc2Zvcm1hdGlvblRlc3QuY3MgYi90ZXN0L1V0aWwvQWN0aXZlTVFNZXNzYWdlVHJhbnNmb3JtYXRpb25UZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVXRpbC9BY3RpdmVNUU1lc3NhZ2VUcmFuc2Zvcm1hdGlvblRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVXRpbC9BY3RpdmVNUU1lc3NhZ2VUcmFuc2Zvcm1hdGlvblRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9VdGlsL0JpdEFycmF5QmluVGVzdC5jcyBiL3Rlc3QvVXRpbC9CaXRBcnJheUJpblRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9VdGlsL0JpdEFycmF5QmluVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9VdGlsL0JpdEFycmF5QmluVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1V0aWwvQ29ubmVjdGlvbkF1ZGl0VGVzdC5jcyBiL3Rlc3QvVXRpbC9Db25uZWN0aW9uQXVkaXRUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVXRpbC9Db25uZWN0aW9uQXVkaXRUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1V0aWwvQ29ubmVjdGlvbkF1ZGl0VGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1V0aWwvRmlmb01lc3NhZ2VEaXNwYXRjaENoYW5uZWxUZXN0LmNzIGIvdGVzdC9VdGlsL0ZpZm9NZXNzYWdlRGlzcGF0Y2hDaGFubmVsVGVzdC5jcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1V0aWwvRmlmb01lc3NhZ2VEaXNwYXRjaENoYW5uZWxUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1V0aWwvRmlmb01lc3NhZ2VEaXNwYXRjaENoYW5uZWxUZXN0LmNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jc2hhcnAvVXRpbC9MUlVDYWNoZVRlc3QuY3MgYi90ZXN0L1V0aWwvTFJVQ2FjaGVUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVXRpbC9MUlVDYWNoZVRlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVXRpbC9MUlVDYWNoZVRlc3QuY3MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NzaGFycC9VdGlsL01lbW9yeVVzYWdlVGVzdC5jcyBiL3Rlc3QvVXRpbC9NZW1vcnlVc2FnZVRlc3QuY3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy90ZXN0L2NzaGFycC9VdGlsL01lbW9yeVVzYWdlVGVzdC5jcwpyZW5hbWUgdG8gdGVzdC9VdGlsL01lbW9yeVVzYWdlVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1V0aWwvU2ltcGxlUHJpb3JpdHlNZXNzYWdlRGlzcGF0Y2hDaGFubmVsVGVzdC5jcyBiL3Rlc3QvVXRpbC9TaW1wbGVQcmlvcml0eU1lc3NhZ2VEaXNwYXRjaENoYW5uZWxUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvVXRpbC9TaW1wbGVQcmlvcml0eU1lc3NhZ2VEaXNwYXRjaENoYW5uZWxUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1V0aWwvU2ltcGxlUHJpb3JpdHlNZXNzYWdlRGlzcGF0Y2hDaGFubmVsVGVzdC5jcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1ZpcnR1YWxUb3BpY1Rlc3QuY3MgYi90ZXN0L1ZpcnR1YWxUb3BpY1Rlc3QuY3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL3Rlc3QvY3NoYXJwL1ZpcnR1YWxUb3BpY1Rlc3QuY3MKcmVuYW1lIHRvIHRlc3QvVmlydHVhbFRvcGljVGVzdC5jcwppbmRleCBiM2VhZDM2Li45M2Y2NjhlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9jc2hhcnAvVmlydHVhbFRvcGljVGVzdC5jcworKysgYi90ZXN0L1ZpcnR1YWxUb3BpY1Rlc3QuY3MKQEAgLTEsMTg3ICsxLDE4NyBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsNCi11c2luZyBBcGFjaGUuTk1TLlRlc3Q7DQotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOw0KLQ0KLW5hbWVzcGFjZSBBcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3QNCi17DQotCVtUZXN0Rml4dHVyZV0NCi0JcHVibGljIGNsYXNzIFZpcnR1YWxUb3BpY1Rlc3QgOiBOTVNUZXN0U3VwcG9ydA0KLQl7DQotCQlwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBERVNUSU5BVElPTl9OQU1FID0gIlRFU1QuVlRvcGljRGVzdGluYXRpb24iOw0KLQkJcHJvdGVjdGVkIHN0YXRpYyBzdHJpbmcgUFJPRFVDRVJfREVTVElOQVRJT05fTkFNRSA9ICJWaXJ0dWFsVG9waWMuIiArIERFU1RJTkFUSU9OX05BTUU7DQotCQlwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBDT05TVU1FUl9BX0RFU1RJTkFUSU9OX05BTUUgPSAiQ29uc3VtZXIuQS4iICsgUFJPRFVDRVJfREVTVElOQVRJT05fTkFNRTsNCi0JCXByb3RlY3RlZCBzdGF0aWMgc3RyaW5nIENPTlNVTUVSX0JfREVTVElOQVRJT05fTkFNRSA9ICJDb25zdW1lci5CLiIgKyBQUk9EVUNFUl9ERVNUSU5BVElPTl9OQU1FOw0KLQkJcHJvdGVjdGVkIHN0YXRpYyBzdHJpbmcgVEVTVF9DTElFTlRfSUQgPSAiVmlydHVhbFRvcGljVGVzdENsaWVudElkIjsNCi0NCi0JCXByb3RlY3RlZCBjb25zdCBpbnQgdG90YWxNc2dzID0gNTsNCi0NCi0JCVtUZXN0XQ0KLQkJcHVibGljIHZvaWQgU2VuZFJlY2VpdmVWaXJ0dWFsVG9waWNNZXNzYWdlKA0KLQkJCVtWYWx1ZXMoQWNrbm93bGVkZ2VtZW50TW9kZS5BdXRvQWNrbm93bGVkZ2UsIEFja25vd2xlZGdlbWVudE1vZGUuQ2xpZW50QWNrbm93bGVkZ2UsDQotCQkJCUFja25vd2xlZGdlbWVudE1vZGUuRHVwc09rQWNrbm93bGVkZ2UsIEFja25vd2xlZGdlbWVudE1vZGUuVHJhbnNhY3Rpb25hbCldDQotCQkJQWNrbm93bGVkZ2VtZW50TW9kZSBhY2tNb2RlLA0KLQkJCVtWYWx1ZXMoTXNnRGVsaXZlcnlNb2RlLk5vblBlcnNpc3RlbnQsIE1zZ0RlbGl2ZXJ5TW9kZS5QZXJzaXN0ZW50KV0NCi0JCQlNc2dEZWxpdmVyeU1vZGUgZGVsaXZlcnlNb2RlKQ0KLQkJew0KLQkJCXVzaW5nKElDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBDcmVhdGVDb25uZWN0aW9uKFRFU1RfQ0xJRU5UX0lEKSkNCi0JCQl7DQotCQkJCWNvbm5lY3Rpb24uU3RhcnQoKTsNCi0JCQkJdXNpbmcoSVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uQ3JlYXRlU2Vzc2lvbihhY2tNb2RlKSkNCi0JCQkJew0KLQkJCQkJdXNpbmcoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lckEgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHNlc3Npb24uR2V0UXVldWUoQ09OU1VNRVJfQV9ERVNUSU5BVElPTl9OQU1FKSkpDQotCQkJCQl1c2luZyhJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyQiA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoc2Vzc2lvbi5HZXRRdWV1ZShDT05TVU1FUl9CX0RFU1RJTkFUSU9OX05BTUUpKSkNCi0JCQkJCXVzaW5nKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLkNyZWF0ZVByb2R1Y2VyKHNlc3Npb24uR2V0VG9waWMoUFJPRFVDRVJfREVTVElOQVRJT05fTkFNRSkpKQ0KLQkJCQkJew0KLQkJCQkJCXByb2R1Y2VyLkRlbGl2ZXJ5TW9kZSA9IGRlbGl2ZXJ5TW9kZTsNCi0NCi0JCQkJCQlmb3IoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0b3RhbE1zZ3M7IGluZGV4KyspDQotCQkJCQkJew0KLQkJCQkJCQlzdHJpbmcgbXNnVGV4dCA9ICJNZXNzYWdlICMiICsgaW5kZXg7DQotCQkJCQkJCVRyYWNlci5JbmZvKCJTZW5kaW5nOiAiICsgbXNnVGV4dCk7DQotCQkJCQkJCXByb2R1Y2VyLlNlbmQoc2Vzc2lvbi5DcmVhdGVUZXh0TWVzc2FnZShtc2dUZXh0KSk7DQotCQkJCQkJfQ0KLQ0KLQkJCQkJCWlmKEFja25vd2xlZGdlbWVudE1vZGUuVHJhbnNhY3Rpb25hbCA9PSBhY2tNb2RlKQ0KLQkJCQkJCXsNCi0JCQkJCQkJc2Vzc2lvbi5Db21taXQoKTsNCi0JCQkJCQl9DQotDQotCQkJCQkJZm9yKGludCBpbmRleCA9IDA7IGluZGV4IDwgdG90YWxNc2dzOyBpbmRleCsrKQ0KLQkJCQkJCXsNCi0JCQkJCQkJc3RyaW5nIG1zZ1RleHQgPSAiTWVzc2FnZSAjIiArIGluZGV4Ow0KLQkJCQkJCQlJVGV4dE1lc3NhZ2UgbWVzc2FnZUEgPSBjb25zdW1lckEuUmVjZWl2ZShyZWNlaXZlVGltZW91dCkgYXMgSVRleHRNZXNzYWdlOw0KLQkJCQkJCQlBc3NlcnQuSXNOb3ROdWxsKG1lc3NhZ2VBLCAiRGlkIG5vdCByZWNlaXZlIG1lc3NhZ2UgZm9yIGNvbnN1bWVyIEEuIik7DQotCQkJCQkJCW1lc3NhZ2VBLkFja25vd2xlZGdlKCk7DQotCQkJCQkJCVRyYWNlci5JbmZvKCJSZWNlaXZlZCBBOiAiICsgbXNnVGV4dCk7DQotDQotCQkJCQkJCUlUZXh0TWVzc2FnZSBtZXNzYWdlQiA9IGNvbnN1bWVyQi5SZWNlaXZlKHJlY2VpdmVUaW1lb3V0KSBhcyBJVGV4dE1lc3NhZ2U7DQotCQkJCQkJCUFzc2VydC5Jc05vdE51bGwobWVzc2FnZUIsICJEaWQgbm90IHJlY2VpdmUgbWVzc2FnZSBmb3IgY29uc3VtZXIgQi4iKTsNCi0JCQkJCQkJbWVzc2FnZUIuQWNrbm93bGVkZ2UoKTsNCi0JCQkJCQkJVHJhY2VyLkluZm8oIlJlY2VpdmVkIEI6ICIgKyBtc2dUZXh0KTsNCi0NCi0JCQkJCQkJQXNzZXJ0LkFyZUVxdWFsKG1zZ1RleHQsIG1lc3NhZ2VBLlRleHQsICJNZXNzYWdlIHRleHQgQSBkb2VzIG5vdCBtYXRjaC4iKTsNCi0JCQkJCQkJQXNzZXJ0LkFyZUVxdWFsKG1zZ1RleHQsIG1lc3NhZ2VCLlRleHQsICJNZXNzYWdlIHRleHQgQiBkb2VzIG5vdCBtYXRjaC4iKTsNCi0JCQkJCQl9DQotDQotCQkJCQkJaWYoQWNrbm93bGVkZ2VtZW50TW9kZS5UcmFuc2FjdGlvbmFsID09IGFja01vZGUpDQotCQkJCQkJew0KLQkJCQkJCQlzZXNzaW9uLkNvbW1pdCgpOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0NCi0gICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgdGhlIEJyb2tlciBzb21lIHRpbWUgdG8gcmVtb3ZlIHRoZSBzdWJzY3JpcHRpb25zLg0KLSAgICAgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKChTZXNzaW9uKSBzZXNzaW9uKS5EZWxldGVEZXN0aW5hdGlvbihzZXNzaW9uLkdldFF1ZXVlKENPTlNVTUVSX0FfREVTVElOQVRJT05fTkFNRSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICgoU2Vzc2lvbikgc2Vzc2lvbikuRGVsZXRlRGVzdGluYXRpb24oc2Vzc2lvbi5HZXRRdWV1ZShDT05TVU1FUl9CX0RFU1RJTkFUSU9OX05BTUUpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNhdGNoDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotDQotCQlwcm90ZWN0ZWQgaW50IHJlY2VpdmVkQTsNCi0JCXByb3RlY3RlZCBpbnQgcmVjZWl2ZWRCOw0KLQ0KLQkJW1Rlc3RdDQotCQkvLyBEbyBub3QgdXNlIGxpc3RlbmVycyB3aXRoIHRyYW5zYWN0aW9uYWwgcHJvY2Vzc2luZy4NCi0JCXB1YmxpYyB2b2lkIEFzeW5jU2VuZFJlY2VpdmVWaXJ0dWFsVG9waWNNZXNzYWdlKA0KLQkJCVtWYWx1ZXMoQWNrbm93bGVkZ2VtZW50TW9kZS5BdXRvQWNrbm93bGVkZ2UsIEFja25vd2xlZGdlbWVudE1vZGUuQ2xpZW50QWNrbm93bGVkZ2UsIEFja25vd2xlZGdlbWVudE1vZGUuRHVwc09rQWNrbm93bGVkZ2UpXQ0KLQkJCUFja25vd2xlZGdlbWVudE1vZGUgYWNrTW9kZSwNCi0JCQlbVmFsdWVzKE1zZ0RlbGl2ZXJ5TW9kZS5Ob25QZXJzaXN0ZW50LCBNc2dEZWxpdmVyeU1vZGUuUGVyc2lzdGVudCldDQotCQkJTXNnRGVsaXZlcnlNb2RlIGRlbGl2ZXJ5TW9kZSkNCi0JCXsNCi0JCQlyZWNlaXZlZEEgPSAwOw0KLQkJCXJlY2VpdmVkQiA9IDA7DQotDQotCQkJdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IENyZWF0ZUNvbm5lY3Rpb24oVEVTVF9DTElFTlRfSUQpKQ0KLQkJCXsNCi0JCQkJY29ubmVjdGlvbi5TdGFydCgpOw0KLQkJCQl1c2luZyhJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKGFja01vZGUpKQ0KLQkJCQl7DQotCQkJCQl1c2luZyhJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyQSA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoc2Vzc2lvbi5HZXRRdWV1ZShDT05TVU1FUl9BX0RFU1RJTkFUSU9OX05BTUUpKSkNCi0JCQkJCXVzaW5nKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXJCID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihzZXNzaW9uLkdldFF1ZXVlKENPTlNVTUVSX0JfREVTVElOQVRJT05fTkFNRSkpKQ0KLQkJCQkJdXNpbmcoSU1lc3NhZ2VQcm9kdWNlciBwcm9kdWNlciA9IHNlc3Npb24uQ3JlYXRlUHJvZHVjZXIoc2Vzc2lvbi5HZXRUb3BpYyhQUk9EVUNFUl9ERVNUSU5BVElPTl9OQU1FKSkpDQotCQkJCQl7DQotCQkJCQkJcHJvZHVjZXIuRGVsaXZlcnlNb2RlID0gZGVsaXZlcnlNb2RlOw0KLQ0KLQkJCQkJCWNvbnN1bWVyQS5MaXN0ZW5lciArPSBNZXNzYWdlTGlzdGVuZXJBOw0KLQkJCQkJCWNvbnN1bWVyQi5MaXN0ZW5lciArPSBNZXNzYWdlTGlzdGVuZXJCOw0KLQ0KLQkJCQkJCWZvcihpbnQgaW5kZXggPSAwOyBpbmRleCA8IHRvdGFsTXNnczsgaW5kZXgrKykNCi0JCQkJCQl7DQotCQkJCQkJCXN0cmluZyBtc2dUZXh0ID0gIk1lc3NhZ2UgIyIgKyBpbmRleDsNCi0JCQkJCQkJVHJhY2VyLkluZm8oIlNlbmRpbmc6ICIgKyBtc2dUZXh0KTsNCi0JCQkJCQkJcHJvZHVjZXIuU2VuZChzZXNzaW9uLkNyZWF0ZVRleHRNZXNzYWdlKG1zZ1RleHQpKTsNCi0JCQkJCQl9DQotDQotCQkJCQkJaW50IHdhaXRDb3VudCA9IDA7DQotCQkJCQkJd2hpbGUocmVjZWl2ZWRBIDwgdG90YWxNc2dzICYmIHJlY2VpdmVkQiA8IHRvdGFsTXNncykNCi0JCQkJCQl7DQotCQkJCQkJCWlmKHdhaXRDb3VudCsrID4gNTApDQotCQkJCQkJCXsNCi0JCQkJCQkJCUFzc2VydC5GYWlsKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWVzc2FnZSBjb25zdW1lcnMuICBBID0gIiArIHJlY2VpdmVkQSArICIsIEIgPSAiICsgcmVjZWl2ZWRCKTsNCi0JCQkJCQkJfQ0KLQ0KLQkJCQkJCQlUcmFjZXIuSW5mbygiV2FpdGluZy4uLiBSZWNlaXZlZCBBID0gIiArIHJlY2VpdmVkQSArICIsIFJlY2VpdmVkIEIgPSAiICsgcmVjZWl2ZWRCKTsNCi0JCQkJCQkJVGhyZWFkLlNsZWVwKDI1MCk7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLSAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHRoZSBCcm9rZXIgc29tZSB0aW1lIHRvIHJlbW92ZSB0aGUgc3Vic2NyaXB0aW9ucy4NCi0gICAgICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICgoU2Vzc2lvbikgc2Vzc2lvbikuRGVsZXRlRGVzdGluYXRpb24oc2Vzc2lvbi5HZXRRdWV1ZShDT05TVU1FUl9BX0RFU1RJTkFUSU9OX05BTUUpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAoKFNlc3Npb24pIHNlc3Npb24pLkRlbGV0ZURlc3RpbmF0aW9uKHNlc3Npb24uR2V0UXVldWUoQ09OU1VNRVJfQl9ERVNUSU5BVElPTl9OQU1FKSk7DQotCQkJCSAgICB9DQotICAgICAgICAgICAgICAgICAgICBjYXRjaA0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJcHJpdmF0ZSB2b2lkIE1lc3NhZ2VMaXN0ZW5lckEoSU1lc3NhZ2UgbWVzc2FnZSkNCi0JCXsNCi0JCQltZXNzYWdlLkFja25vd2xlZGdlKCk7DQotCQkJSVRleHRNZXNzYWdlIG1lc3NhZ2VBID0gbWVzc2FnZSBhcyBJVGV4dE1lc3NhZ2U7DQotCQkJc3RyaW5nIG1zZ1RleHQgPSAiTWVzc2FnZSAjIiArIHJlY2VpdmVkQTsNCi0JCQlBc3NlcnQuQXJlRXF1YWwobXNnVGV4dCwgbWVzc2FnZUEuVGV4dCwgIk1lc3NhZ2UgdGV4dCBBIGRvZXMgbm90IG1hdGNoLiIpOw0KLQkJCVRyYWNlci5JbmZvKCJSZWNlaXZlZCBMaXN0ZW5lciBBOiAiICsgbXNnVGV4dCk7DQotCQkJcmVjZWl2ZWRBKys7DQotCQl9DQotDQotCQlwcml2YXRlIHZvaWQgTWVzc2FnZUxpc3RlbmVyQihJTWVzc2FnZSBtZXNzYWdlKQ0KLQkJew0KLQkJCW1lc3NhZ2UuQWNrbm93bGVkZ2UoKTsNCi0JCQlJVGV4dE1lc3NhZ2UgbWVzc2FnZUIgPSBtZXNzYWdlIGFzIElUZXh0TWVzc2FnZTsNCi0JCQlzdHJpbmcgbXNnVGV4dCA9ICJNZXNzYWdlICMiICsgcmVjZWl2ZWRCOw0KLQkJCUFzc2VydC5BcmVFcXVhbChtc2dUZXh0LCBtZXNzYWdlQi5UZXh0LCAiTWVzc2FnZSB0ZXh0IEIgZG9lcyBub3QgbWF0Y2guIik7DQotCQkJVHJhY2VyLkluZm8oIlJlY2VpdmVkIExpc3RlbmVyIEI6ICIgKyBtc2dUZXh0KTsNCi0JCQlyZWNlaXZlZEIrKzsNCi0JCX0NCi0JfQ0KLX0NCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIEFwYWNoZS5OTVMuVGVzdDsKK3VzaW5nIE5Vbml0LkZyYW1ld29yazsKKworbmFtZXNwYWNlIEFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdAoreworCVtUZXN0Rml4dHVyZV0KKwlwdWJsaWMgY2xhc3MgVmlydHVhbFRvcGljVGVzdCA6IE5NU1Rlc3RTdXBwb3J0CisJeworCQlwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBERVNUSU5BVElPTl9OQU1FID0gIlRFU1QuVlRvcGljRGVzdGluYXRpb24iOworCQlwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBQUk9EVUNFUl9ERVNUSU5BVElPTl9OQU1FID0gIlZpcnR1YWxUb3BpYy4iICsgREVTVElOQVRJT05fTkFNRTsKKwkJcHJvdGVjdGVkIHN0YXRpYyBzdHJpbmcgQ09OU1VNRVJfQV9ERVNUSU5BVElPTl9OQU1FID0gIkNvbnN1bWVyLkEuIiArIFBST0RVQ0VSX0RFU1RJTkFUSU9OX05BTUU7CisJCXByb3RlY3RlZCBzdGF0aWMgc3RyaW5nIENPTlNVTUVSX0JfREVTVElOQVRJT05fTkFNRSA9ICJDb25zdW1lci5CLiIgKyBQUk9EVUNFUl9ERVNUSU5BVElPTl9OQU1FOworCQlwcm90ZWN0ZWQgc3RhdGljIHN0cmluZyBURVNUX0NMSUVOVF9JRCA9ICJWaXJ0dWFsVG9waWNUZXN0Q2xpZW50SWQiOworCisJCXByb3RlY3RlZCBjb25zdCBpbnQgdG90YWxNc2dzID0gNTsKKworCQlbVGVzdF0KKwkJcHVibGljIHZvaWQgU2VuZFJlY2VpdmVWaXJ0dWFsVG9waWNNZXNzYWdlKAorCQkJW1ZhbHVlcyhBY2tub3dsZWRnZW1lbnRNb2RlLkF1dG9BY2tub3dsZWRnZSwgQWNrbm93bGVkZ2VtZW50TW9kZS5DbGllbnRBY2tub3dsZWRnZSwKKwkJCQlBY2tub3dsZWRnZW1lbnRNb2RlLkR1cHNPa0Fja25vd2xlZGdlLCBBY2tub3dsZWRnZW1lbnRNb2RlLlRyYW5zYWN0aW9uYWwpXQorCQkJQWNrbm93bGVkZ2VtZW50TW9kZSBhY2tNb2RlLAorCQkJW1ZhbHVlcyhNc2dEZWxpdmVyeU1vZGUuTm9uUGVyc2lzdGVudCwgTXNnRGVsaXZlcnlNb2RlLlBlcnNpc3RlbnQpXQorCQkJTXNnRGVsaXZlcnlNb2RlIGRlbGl2ZXJ5TW9kZSkKKwkJeworCQkJdXNpbmcoSUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IENyZWF0ZUNvbm5lY3Rpb24oVEVTVF9DTElFTlRfSUQpKQorCQkJeworCQkJCWNvbm5lY3Rpb24uU3RhcnQoKTsKKwkJCQl1c2luZyhJU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5DcmVhdGVTZXNzaW9uKGFja01vZGUpKQorCQkJCXsKKwkJCQkJdXNpbmcoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lckEgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHNlc3Npb24uR2V0UXVldWUoQ09OU1VNRVJfQV9ERVNUSU5BVElPTl9OQU1FKSkpCisJCQkJCXVzaW5nKElNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXJCID0gc2Vzc2lvbi5DcmVhdGVDb25zdW1lcihzZXNzaW9uLkdldFF1ZXVlKENPTlNVTUVSX0JfREVTVElOQVRJT05fTkFNRSkpKQorCQkJCQl1c2luZyhJTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5DcmVhdGVQcm9kdWNlcihzZXNzaW9uLkdldFRvcGljKFBST0RVQ0VSX0RFU1RJTkFUSU9OX05BTUUpKSkKKwkJCQkJeworCQkJCQkJcHJvZHVjZXIuRGVsaXZlcnlNb2RlID0gZGVsaXZlcnlNb2RlOworCisJCQkJCQlmb3IoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0b3RhbE1zZ3M7IGluZGV4KyspCisJCQkJCQl7CisJCQkJCQkJc3RyaW5nIG1zZ1RleHQgPSAiTWVzc2FnZSAjIiArIGluZGV4OworCQkJCQkJCVRyYWNlci5JbmZvKCJTZW5kaW5nOiAiICsgbXNnVGV4dCk7CisJCQkJCQkJcHJvZHVjZXIuU2VuZChzZXNzaW9uLkNyZWF0ZVRleHRNZXNzYWdlKG1zZ1RleHQpKTsKKwkJCQkJCX0KKworCQkJCQkJaWYoQWNrbm93bGVkZ2VtZW50TW9kZS5UcmFuc2FjdGlvbmFsID09IGFja01vZGUpCisJCQkJCQl7CisJCQkJCQkJc2Vzc2lvbi5Db21taXQoKTsKKwkJCQkJCX0KKworCQkJCQkJZm9yKGludCBpbmRleCA9IDA7IGluZGV4IDwgdG90YWxNc2dzOyBpbmRleCsrKQorCQkJCQkJeworCQkJCQkJCXN0cmluZyBtc2dUZXh0ID0gIk1lc3NhZ2UgIyIgKyBpbmRleDsKKwkJCQkJCQlJVGV4dE1lc3NhZ2UgbWVzc2FnZUEgPSBjb25zdW1lckEuUmVjZWl2ZShyZWNlaXZlVGltZW91dCkgYXMgSVRleHRNZXNzYWdlOworCQkJCQkJCUFzc2VydC5Jc05vdE51bGwobWVzc2FnZUEsICJEaWQgbm90IHJlY2VpdmUgbWVzc2FnZSBmb3IgY29uc3VtZXIgQS4iKTsKKwkJCQkJCQltZXNzYWdlQS5BY2tub3dsZWRnZSgpOworCQkJCQkJCVRyYWNlci5JbmZvKCJSZWNlaXZlZCBBOiAiICsgbXNnVGV4dCk7CisKKwkJCQkJCQlJVGV4dE1lc3NhZ2UgbWVzc2FnZUIgPSBjb25zdW1lckIuUmVjZWl2ZShyZWNlaXZlVGltZW91dCkgYXMgSVRleHRNZXNzYWdlOworCQkJCQkJCUFzc2VydC5Jc05vdE51bGwobWVzc2FnZUIsICJEaWQgbm90IHJlY2VpdmUgbWVzc2FnZSBmb3IgY29uc3VtZXIgQi4iKTsKKwkJCQkJCQltZXNzYWdlQi5BY2tub3dsZWRnZSgpOworCQkJCQkJCVRyYWNlci5JbmZvKCJSZWNlaXZlZCBCOiAiICsgbXNnVGV4dCk7CisKKwkJCQkJCQlBc3NlcnQuQXJlRXF1YWwobXNnVGV4dCwgbWVzc2FnZUEuVGV4dCwgIk1lc3NhZ2UgdGV4dCBBIGRvZXMgbm90IG1hdGNoLiIpOworCQkJCQkJCUFzc2VydC5BcmVFcXVhbChtc2dUZXh0LCBtZXNzYWdlQi5UZXh0LCAiTWVzc2FnZSB0ZXh0IEIgZG9lcyBub3QgbWF0Y2guIik7CisJCQkJCQl9CisKKwkJCQkJCWlmKEFja25vd2xlZGdlbWVudE1vZGUuVHJhbnNhY3Rpb25hbCA9PSBhY2tNb2RlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb24uQ29tbWl0KCk7CisJCQkJCQl9CisJCQkJCX0KKworICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHRoZSBCcm9rZXIgc29tZSB0aW1lIHRvIHJlbW92ZSB0aGUgc3Vic2NyaXB0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhyZWFkLlNsZWVwKDIwMDApOworCisgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKFNlc3Npb24pIHNlc3Npb24pLkRlbGV0ZURlc3RpbmF0aW9uKHNlc3Npb24uR2V0UXVldWUoQ09OU1VNRVJfQV9ERVNUSU5BVElPTl9OQU1FKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoKFNlc3Npb24pIHNlc3Npb24pLkRlbGV0ZURlc3RpbmF0aW9uKHNlc3Npb24uR2V0UXVldWUoQ09OU1VNRVJfQl9ERVNUSU5BVElPTl9OQU1FKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2F0Y2gKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB9CisJCQkJfQorCQkJfQorCQl9CisKKwkJcHJvdGVjdGVkIGludCByZWNlaXZlZEE7CisJCXByb3RlY3RlZCBpbnQgcmVjZWl2ZWRCOworCisJCVtUZXN0XQorCQkvLyBEbyBub3QgdXNlIGxpc3RlbmVycyB3aXRoIHRyYW5zYWN0aW9uYWwgcHJvY2Vzc2luZy4KKwkJcHVibGljIHZvaWQgQXN5bmNTZW5kUmVjZWl2ZVZpcnR1YWxUb3BpY01lc3NhZ2UoCisJCQlbVmFsdWVzKEFja25vd2xlZGdlbWVudE1vZGUuQXV0b0Fja25vd2xlZGdlLCBBY2tub3dsZWRnZW1lbnRNb2RlLkNsaWVudEFja25vd2xlZGdlLCBBY2tub3dsZWRnZW1lbnRNb2RlLkR1cHNPa0Fja25vd2xlZGdlKV0KKwkJCUFja25vd2xlZGdlbWVudE1vZGUgYWNrTW9kZSwKKwkJCVtWYWx1ZXMoTXNnRGVsaXZlcnlNb2RlLk5vblBlcnNpc3RlbnQsIE1zZ0RlbGl2ZXJ5TW9kZS5QZXJzaXN0ZW50KV0KKwkJCU1zZ0RlbGl2ZXJ5TW9kZSBkZWxpdmVyeU1vZGUpCisJCXsKKwkJCXJlY2VpdmVkQSA9IDA7CisJCQlyZWNlaXZlZEIgPSAwOworCisJCQl1c2luZyhJQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gQ3JlYXRlQ29ubmVjdGlvbihURVNUX0NMSUVOVF9JRCkpCisJCQl7CisJCQkJY29ubmVjdGlvbi5TdGFydCgpOworCQkJCXVzaW5nKElTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oYWNrTW9kZSkpCisJCQkJeworCQkJCQl1c2luZyhJTWVzc2FnZUNvbnN1bWVyIGNvbnN1bWVyQSA9IHNlc3Npb24uQ3JlYXRlQ29uc3VtZXIoc2Vzc2lvbi5HZXRRdWV1ZShDT05TVU1FUl9BX0RFU1RJTkFUSU9OX05BTUUpKSkKKwkJCQkJdXNpbmcoSU1lc3NhZ2VDb25zdW1lciBjb25zdW1lckIgPSBzZXNzaW9uLkNyZWF0ZUNvbnN1bWVyKHNlc3Npb24uR2V0UXVldWUoQ09OU1VNRVJfQl9ERVNUSU5BVElPTl9OQU1FKSkpCisJCQkJCXVzaW5nKElNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLkNyZWF0ZVByb2R1Y2VyKHNlc3Npb24uR2V0VG9waWMoUFJPRFVDRVJfREVTVElOQVRJT05fTkFNRSkpKQorCQkJCQl7CisJCQkJCQlwcm9kdWNlci5EZWxpdmVyeU1vZGUgPSBkZWxpdmVyeU1vZGU7CisKKwkJCQkJCWNvbnN1bWVyQS5MaXN0ZW5lciArPSBNZXNzYWdlTGlzdGVuZXJBOworCQkJCQkJY29uc3VtZXJCLkxpc3RlbmVyICs9IE1lc3NhZ2VMaXN0ZW5lckI7CisKKwkJCQkJCWZvcihpbnQgaW5kZXggPSAwOyBpbmRleCA8IHRvdGFsTXNnczsgaW5kZXgrKykKKwkJCQkJCXsKKwkJCQkJCQlzdHJpbmcgbXNnVGV4dCA9ICJNZXNzYWdlICMiICsgaW5kZXg7CisJCQkJCQkJVHJhY2VyLkluZm8oIlNlbmRpbmc6ICIgKyBtc2dUZXh0KTsKKwkJCQkJCQlwcm9kdWNlci5TZW5kKHNlc3Npb24uQ3JlYXRlVGV4dE1lc3NhZ2UobXNnVGV4dCkpOworCQkJCQkJfQorCisJCQkJCQlpbnQgd2FpdENvdW50ID0gMDsKKwkJCQkJCXdoaWxlKHJlY2VpdmVkQSA8IHRvdGFsTXNncyAmJiByZWNlaXZlZEIgPCB0b3RhbE1zZ3MpCisJCQkJCQl7CisJCQkJCQkJaWYod2FpdENvdW50KysgPiA1MCkKKwkJCQkJCQl7CisJCQkJCQkJCUFzc2VydC5GYWlsKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWVzc2FnZSBjb25zdW1lcnMuICBBID0gIiArIHJlY2VpdmVkQSArICIsIEIgPSAiICsgcmVjZWl2ZWRCKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlUcmFjZXIuSW5mbygiV2FpdGluZy4uLiBSZWNlaXZlZCBBID0gIiArIHJlY2VpdmVkQSArICIsIFJlY2VpdmVkIEIgPSAiICsgcmVjZWl2ZWRCKTsKKwkJCQkJCQlUaHJlYWQuU2xlZXAoMjUwKTsKKwkJCQkJCX0KKwkJCQkJfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2l2ZSB0aGUgQnJva2VyIHNvbWUgdGltZSB0byByZW1vdmUgdGhlIHN1YnNjcmlwdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCgyMDAwKTsKKworICAgICAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKChTZXNzaW9uKSBzZXNzaW9uKS5EZWxldGVEZXN0aW5hdGlvbihzZXNzaW9uLkdldFF1ZXVlKENPTlNVTUVSX0FfREVTVElOQVRJT05fTkFNRSkpOworICAgICAgICAgICAgICAgICAgICAgICAgKChTZXNzaW9uKSBzZXNzaW9uKS5EZWxldGVEZXN0aW5hdGlvbihzZXNzaW9uLkdldFF1ZXVlKENPTlNVTUVSX0JfREVTVElOQVRJT05fTkFNRSkpOworCQkJCSAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwkJCX0KKwkJfQorCisJCXByaXZhdGUgdm9pZCBNZXNzYWdlTGlzdGVuZXJBKElNZXNzYWdlIG1lc3NhZ2UpCisJCXsKKwkJCW1lc3NhZ2UuQWNrbm93bGVkZ2UoKTsKKwkJCUlUZXh0TWVzc2FnZSBtZXNzYWdlQSA9IG1lc3NhZ2UgYXMgSVRleHRNZXNzYWdlOworCQkJc3RyaW5nIG1zZ1RleHQgPSAiTWVzc2FnZSAjIiArIHJlY2VpdmVkQTsKKwkJCUFzc2VydC5BcmVFcXVhbChtc2dUZXh0LCBtZXNzYWdlQS5UZXh0LCAiTWVzc2FnZSB0ZXh0IEEgZG9lcyBub3QgbWF0Y2guIik7CisJCQlUcmFjZXIuSW5mbygiUmVjZWl2ZWQgTGlzdGVuZXIgQTogIiArIG1zZ1RleHQpOworCQkJcmVjZWl2ZWRBKys7CisJCX0KKworCQlwcml2YXRlIHZvaWQgTWVzc2FnZUxpc3RlbmVyQihJTWVzc2FnZSBtZXNzYWdlKQorCQl7CisJCQltZXNzYWdlLkFja25vd2xlZGdlKCk7CisJCQlJVGV4dE1lc3NhZ2UgbWVzc2FnZUIgPSBtZXNzYWdlIGFzIElUZXh0TWVzc2FnZTsKKwkJCXN0cmluZyBtc2dUZXh0ID0gIk1lc3NhZ2UgIyIgKyByZWNlaXZlZEI7CisJCQlBc3NlcnQuQXJlRXF1YWwobXNnVGV4dCwgbWVzc2FnZUIuVGV4dCwgIk1lc3NhZ2UgdGV4dCBCIGRvZXMgbm90IG1hdGNoLiIpOworCQkJVHJhY2VyLkluZm8oIlJlY2VpdmVkIExpc3RlbmVyIEI6ICIgKyBtc2dUZXh0KTsKKwkJCXJlY2VpdmVkQisrOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY3NoYXJwL1plcm9QcmVmZXRjaENvbnN1bWVyVGVzdC5jcyBiL3Rlc3QvWmVyb1ByZWZldGNoQ29uc3VtZXJUZXN0LmNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGVzdC9jc2hhcnAvWmVyb1ByZWZldGNoQ29uc3VtZXJUZXN0LmNzCnJlbmFtZSB0byB0ZXN0L1plcm9QcmVmZXRjaENvbnN1bWVyVGVzdC5jcwpkaWZmIC0tZ2l0IGEvdGVzdC9ubXMtb3BlbndpcmUtdGVzdC5jc3Byb2ogYi90ZXN0L25tcy1vcGVud2lyZS10ZXN0LmNzcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTEwYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9ubXMtb3BlbndpcmUtdGVzdC5jc3Byb2oKQEAgLTAsMCArMSwzMyBAQAor77u/PFByb2plY3QgU2RrPSJNaWNyb3NvZnQuTkVULlNkayI+CisKKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEZyYW1ld29yaz5uZXRjb3JlYXBwMi4yPC9UYXJnZXRGcmFtZXdvcms+CisgICAgPFJvb3ROYW1lc3BhY2U+QXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0PC9Sb290TmFtZXNwYWNlPgorICAgIDxBc3NlbWJseU5hbWU+QXBhY2hlLk5NUy5BY3RpdmVNUS5UZXN0PC9Bc3NlbWJseU5hbWU+CisgICAgPEFwcGxpY2F0aW9uSWNvbiAvPgorICAgIDxPdXRwdXRUeXBlPkxpYnJhcnk8L091dHB1dFR5cGU+CisgICAgPFN0YXJ0dXBPYmplY3QgLz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPENvbnRlbnQgSW5jbHVkZT0iLi5cTElDRU5TRS50eHQiIExpbms9IkxJQ0VOU0UudHh0IiAvPgorICAgIDxDb250ZW50IEluY2x1ZGU9Ii4uXE5PVElDRS50eHQiIExpbms9Ik5PVElDRS50eHQiIC8+CisgIDwvSXRlbUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iTlVuaXQiIFZlcnNpb249IjMuMTIuMCIgLz4KKyAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJOVW5pdDNUZXN0QWRhcHRlciIgVmVyc2lvbj0iMy4xMy4wIiAvPgorICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5EYXRhLlNxbENsaWVudCIgVmVyc2lvbj0iNC42LjEiIC8+CisgIDwvSXRlbUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iLi5cc3JjXG5tcy1vcGVud2lyZS5jc3Byb2oiIC8+CisgIDwvSXRlbUdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJBcGFjaGUuTk1TLlRlc3QiPgorICAgICAgPEhpbnRQYXRoPi4uXGV4dF9iaW5cQXBhY2hlLk5NUy5UZXN0LmRsbDwvSGludFBhdGg+CisgICAgPC9SZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS92czIwMDgtYWN0aXZlbXEtdGVzdC5jc3Byb2ogYi92czIwMDgtYWN0aXZlbXEtdGVzdC5jc3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YzU1YTAuLjAwMDAwMDAKLS0tIGEvdnMyMDA4LWFjdGl2ZW1xLXRlc3QuY3Nwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLe+7vzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyIgVG9vbHNWZXJzaW9uPSIzLjUiPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8Q29uZmlndXJhdGlvbiBDb25kaXRpb249IiAnJChDb25maWd1cmF0aW9uKScgPT0gJycgIj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KLSAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSIgJyQoUGxhdGZvcm0pJyA9PSAnJyAiPkFueUNQVTwvUGxhdGZvcm0+Ci0gICAgPFByb2R1Y3RWZXJzaW9uPjkuMC4zMDcyOTwvUHJvZHVjdFZlcnNpb24+Ci0gICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgotICAgIDxQcm9qZWN0R3VpZD57RUI5NDNDNjktMkM5Qi00NUU3LUI5NUItRkI5MTZFNzA1N0VEfTwvUHJvamVjdEd1aWQ+Ci0gICAgPE91dHB1dFR5cGU+TGlicmFyeTwvT3V0cHV0VHlwZT4KLSAgICA8Um9vdE5hbWVzcGFjZT5BcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3Q8L1Jvb3ROYW1lc3BhY2U+Ci0gICAgPEFzc2VtYmx5TmFtZT5BcGFjaGUuTk1TLkFjdGl2ZU1RLlRlc3Q8L0Fzc2VtYmx5TmFtZT4KLSAgICA8V2FybmluZ0xldmVsPjQ8L1dhcm5pbmdMZXZlbD4KLSAgICA8U3RhcnR1cE9iamVjdD4KLSAgICA8L1N0YXJ0dXBPYmplY3Q+Ci0gICAgPEZpbGVVcGdyYWRlRmxhZ3M+Ci0gICAgPC9GaWxlVXBncmFkZUZsYWdzPgotICAgIDxPbGRUb29sc1ZlcnNpb24+Mi4wPC9PbGRUb29sc1ZlcnNpb24+Ci0gICAgPFVwZ3JhZGVCYWNrdXBMb2NhdGlvbj4KLSAgICA8L1VwZ3JhZGVCYWNrdXBMb2NhdGlvbj4KLSAgICA8U2lnbkFzc2VtYmx5PnRydWU8L1NpZ25Bc3NlbWJseT4KLSAgICA8QXNzZW1ibHlPcmlnaW5hdG9yS2V5RmlsZT5rZXlmaWxlXE5NU0tleS5zbms8L0Fzc2VtYmx5T3JpZ2luYXRvcktleUZpbGU+Ci0gICAgPFNjY1Byb2plY3ROYW1lPlN2bjwvU2NjUHJvamVjdE5hbWU+Ci0gICAgPFNjY0xvY2FsUGF0aD5Tdm48L1NjY0xvY2FsUGF0aD4KLSAgICA8U2NjQXV4UGF0aD5Tdm48L1NjY0F1eFBhdGg+Ci0gICAgPFNjY1Byb3ZpZGVyPlN1YnZlcnNpb25TY2M8L1NjY1Byb3ZpZGVyPgotICAgIDxSdW5Qb3N0QnVpbGRFdmVudD5Pbk91dHB1dFVwZGF0ZWQ8L1J1blBvc3RCdWlsZEV2ZW50PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnRGVidWd8QW55Q1BVJyAiPgotICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVidWdTeW1ib2xzPgotICAgIDxEZWJ1Z1R5cGU+ZnVsbDwvRGVidWdUeXBlPgotICAgIDxPcHRpbWl6ZT5mYWxzZTwvT3B0aW1pemU+Ci0gICAgPE91dHB1dFBhdGg+YnVpbGRcbmV0LTIuMFxkZWJ1Z1w8L091dHB1dFBhdGg+Ci0gICAgPERlZmluZUNvbnN0YW50cz5UUkFDRTtERUJVRztORVQsTkVUXzJfMDwvRGVmaW5lQ29uc3RhbnRzPgotICAgIDxBbGxvd1Vuc2FmZUJsb2Nrcz5mYWxzZTwvQWxsb3dVbnNhZmVCbG9ja3M+Ci0gICAgPE5vV2Fybj4zMDE2PC9Ob1dhcm4+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdSZWxlYXNlfEFueUNQVScgIj4KLSAgICA8RGVidWdTeW1ib2xzPnRydWU8L0RlYnVnU3ltYm9scz4KLSAgICA8T3B0aW1pemU+dHJ1ZTwvT3B0aW1pemU+Ci0gICAgPE91dHB1dFBhdGg+YnVpbGRcbmV0LTIuMFxyZWxlYXNlXDwvT3V0cHV0UGF0aD4KLSAgICA8RGVmaW5lQ29uc3RhbnRzPlRSQUNFO05FVCxORVRfMl8wPC9EZWZpbmVDb25zdGFudHM+Ci0gICAgPEFsbG93VW5zYWZlQmxvY2tzPmZhbHNlPC9BbGxvd1Vuc2FmZUJsb2Nrcz4KLSAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KLSAgICA8Tm9XYXJuPjMwMTY8L05vV2Fybj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iQXBhY2hlLk5NUywgVmVyc2lvbj0xLjEuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIHByb2Nlc3NvckFyY2hpdGVjdHVyZT1NU0lMIj4KLSAgICAgIDxTcGVjaWZpY1ZlcnNpb24+RmFsc2U8L1NwZWNpZmljVmVyc2lvbj4KLSAgICAgIDxIaW50UGF0aD5saWJcQXBhY2hlLk5NU1xuZXQtMi4wXEFwYWNoZS5OTVMuZGxsPC9IaW50UGF0aD4KLSAgICA8L1JlZmVyZW5jZT4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IkFwYWNoZS5OTVMuVGVzdCwgVmVyc2lvbj0xLjEuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIHByb2Nlc3NvckFyY2hpdGVjdHVyZT1NU0lMIj4KLSAgICAgIDxTcGVjaWZpY1ZlcnNpb24+RmFsc2U8L1NwZWNpZmljVmVyc2lvbj4KLSAgICAgIDxIaW50UGF0aD5saWJcQXBhY2hlLk5NU1xuZXQtMi4wXEFwYWNoZS5OTVMuVGVzdC5kbGw8L0hpbnRQYXRoPgotICAgIDwvUmVmZXJlbmNlPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0ibnVuaXQuZnJhbWV3b3JrLCBWZXJzaW9uPTIuNC44LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OTZkMDlhMWViN2Y0NGE3NywgcHJvY2Vzc29yQXJjaGl0ZWN0dXJlPU1TSUwiPgotICAgICAgPFNwZWNpZmljVmVyc2lvbj5GYWxzZTwvU3BlY2lmaWNWZXJzaW9uPgotICAgICAgPEhpbnRQYXRoPmxpYlxOVW5pdFxuZXQtMi4wXG51bml0LmZyYW1ld29yay5kbGw8L0hpbnRQYXRoPgotICAgIDwvUmVmZXJlbmNlPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtIiAvPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLkRhdGEiIC8+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uVHJhbnNhY3Rpb25zIiAvPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlhtbCIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXEFNUU5FVDM2NlRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXEFNUU5FVDM3NVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXEFNUVF1ZXVlVHJhbnNhY3Rpb25UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxBTVFSZWRlbGl2ZXJ5UG9saWN5VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQU1RVG9waWNUcmFuc2FjdGlvblRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXEFNUVRyYW5zYWN0aW9uVGVzdFN1cHBvcnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXEJyb2tlclRvTk1TRXhjZXB0aW9uc1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXENvbW1hbmRzXEFjdGl2ZU1RQnl0ZXNNZXNzYWdlVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFNYXBNZXNzYWdlVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFNZXNzYWdlVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFTdHJlYW1NZXNzYWdlVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFUZXh0TWVzc2FnZVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXENvbW1hbmRzXENvbW1hbmRUZXN0LmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxDb21tYW5kc1xNZXNzYWdlQ29tcHJlc3Npb25UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxDb21tb25Bc3NlbWJseUluZm8uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXENvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQ29ubmVjdGlvbk1ldGFEYXRhVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcSW52YWxpZENyZWRlbnRpYWxzVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcRHRjQmFzaWNUcmFuc2FjdGlvbnNUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxEdGNDb25zdW1lclRyYW5zYWN0aW9uc1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXER0Y1Byb2R1Y2VyVHJhbnNhY3Rpb25zVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcRHRjVHJhbnNhY3Rpb25zVGVzdFN1cHBvcnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXE1lc3NhZ2VDb25zdW1lclRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXEV4Y2x1c2l2ZUNvbnN1bWVyVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcSW5kaXZpZHVhbEFja1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXE1lc3NhZ2VMaXN0ZW5lclJlZGVsaXZlcnlUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxNZXNzYWdlUHJvZHVjZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxOZXRUeENvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcTmV0VHhUcmFuc2FjdGlvblRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXE5NU0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcTm1zQ29uc29sZVRyYWNlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcTk1TU2Vzc2lvblJlY292ZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxOb25CbG9ja2luZ0NvbnN1bWVyUmVkZWxpdmVyeVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXE9wZW5XaXJlXEJvb2xlYW5TdHJlYW1UZXN0LmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxPcGVuV2lyZVxNYXhJbmFjdGl2aXR5RHVyYXRpb25UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxPcGVuV2lyZVxQcmVmZXRjaFNpemVaZXJvVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcT3B0aW1pemVkQWNrVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcUXVldWVCcm93c2VyVGVzdHMuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFF1ZXVlQ29uc3VtZXJQcmlvcml0eVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFJvbGxiYWNrUmVkZWxpdmVyeVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFN0YXRlXENvbm5lY3Rpb25TdGF0ZVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFN0YXRlXENvbm5lY3Rpb25TdGF0ZVRyYWNrZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxTdGF0ZVxDb25zdW1lclN0YXRlVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcU3RhdGVcUHJvZHVjZXJTdGF0ZVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFN0YXRlXFNlc3Npb25TdGF0ZVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFN0YXRlXFRyYW5zYWN0aW9uU3RhdGVUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUZW1wRGVzdGluYXRpb25UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUZXN0TWFpbi5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVGVzdE1haW5Bc3luYy5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVGhyZWFkc1xDb21wb3NpdGVUYXNrUnVubmVyVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVGhyZWFkc1xEZWRpY2F0ZWRUYXNrUnVubmVyVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVGhyZWFkc1xTY2hlZHVsZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUaHJlYWRzXFRocmVhZFBvb2xFeGVjdXRvclRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFRocmVhZHNcVGltZXJFeFRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFRyYW5zYWN0aW9uc1xSZWNvdmVyeUZpbGVMb2dnZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUcmFuc2FjdGlvbnNcUmVjb3ZlcnlMb2dnZXJIYXJuZXNzLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUcmFuc2FjdGlvbnNcUmVjb3ZlcnlMb2dnZXJIYXJuZXNzRmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVHJhbnNwb3J0XGZhaWxvdmVyXEZhaWxvdmVyVHJhbnNhY3Rpb25UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUcmFuc3BvcnRcZmFpbG92ZXJcRmFpbG92ZXJUcmFuc3BvcnRUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUcmFuc3BvcnRcSW5hY3Rpdml0eVxJbmFjdGl2aXR5TW9uaXRvclRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFRyYW5zcG9ydFxNb2NrXE1vY2tUcmFuc3BvcnRGYWN0b3J5VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVHJhbnNwb3J0XE1vY2tcTW9ja1RyYW5zcG9ydFRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFRyYW5zcG9ydFxUY3BcVGNwRmF1bHR5VHJhbnNwb3J0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxUcmFuc3BvcnRcVGNwXFRjcEZhdWx0eVRyYW5zcG9ydEZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFRyYW5zcG9ydFxUY3BcVGNwRmF1bHR5VHJhbnNwb3J0VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVXRpbFxBY3RpdmVNUU1lc3NhZ2VBdWRpdFRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFV0aWxcQWN0aXZlTVFNZXNzYWdlVHJhbnNmb3JtYXRpb25UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxVdGlsXEJpdEFycmF5QmluVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVXRpbFxDb25uZWN0aW9uQXVkaXRUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxVdGlsXEZpZm9NZXNzYWdlRGlzcGF0Y2hDaGFubmVsVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcVXRpbFxMUlVDYWNoZVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFV0aWxcTWVtb3J5VXNhZ2VUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1x0ZXN0XGNzaGFycFxVdGlsXFNpbXBsZVByaW9yaXR5TWVzc2FnZURpc3BhdGNoQ2hhbm5lbFRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFZpcnR1YWxUb3BpY1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXHRlc3RcY3NoYXJwXFplcm9QcmVmZXRjaENvbnN1bWVyVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcT3BlbldpcmVcQmFzZURhdGFTdHJlYW1NYXJzaGFsbGVyVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcdGVzdFxjc2hhcnBcQmF0Y2hlZE1lc3NhZ2VQcmlvcml0eUNvbnN1bWVyVGVzdC5jcyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENvbnRlbnQgSW5jbHVkZT0ibm1zcHJvdmlkZXItdGVzdC5jb25maWciPgotICAgICAgPENvcHlUb091dHB1dERpcmVjdG9yeT5QcmVzZXJ2ZU5ld2VzdDwvQ29weVRvT3V0cHV0RGlyZWN0b3J5PgotICAgIDwvQ29udGVudD4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0idnMyMDA4LWFjdGl2ZW1xLmNzcHJvaiI+Ci0gICAgICA8UHJvamVjdD57MDgzMjFGNDItNEIzRC00ODE1LUI1OTItOTU5NjJCQUMzQjlGfTwvUHJvamVjdD4KLSAgICAgIDxOYW1lPnZzMjAwOC1hY3RpdmVtcTwvTmFtZT4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxOb25lIEluY2x1ZGU9IkFwYWNoZS5OTVMuQWN0aXZlTVEuVGVzdC5udW5pdCI+Ci0gICAgICA8Q29weVRvT3V0cHV0RGlyZWN0b3J5PlByZXNlcnZlTmV3ZXN0PC9Db3B5VG9PdXRwdXREaXJlY3Rvcnk+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9ImtleWZpbGVcTk1TS2V5LnNuayIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChNU0J1aWxkQmluUGF0aClcTWljcm9zb2Z0LkNTSEFSUC5UYXJnZXRzIiAvPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Y2QgJChQcm9qZWN0RGlyKQotbmFudCAtbm9sb2dvIC1xIGluc3RhbGwtYWxsIC1EOmNvbXBpbGUuc2tpcD10cnVlPC9Qb3N0QnVpbGRFdmVudD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3ZzMjAwOC1hY3RpdmVtcS5jc3Byb2ogYi92czIwMDgtYWN0aXZlbXEuY3Nwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2ZlOTA2Li4wMDAwMDAwCi0tLSBhL3ZzMjAwOC1hY3RpdmVtcS5jc3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQwICswLDAgQEAKLe+7vzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyIgVG9vbHNWZXJzaW9uPSIzLjUiPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8Q29uZmlndXJhdGlvbiBDb25kaXRpb249IiAnJChDb25maWd1cmF0aW9uKScgPT0gJycgIj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KLSAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSIgJyQoUGxhdGZvcm0pJyA9PSAnJyAiPkFueUNQVTwvUGxhdGZvcm0+Ci0gICAgPFByb2R1Y3RWZXJzaW9uPjkuMC4yMTAyMjwvUHJvZHVjdFZlcnNpb24+Ci0gICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgotICAgIDxQcm9qZWN0R3VpZD57MDgzMjFGNDItNEIzRC00ODE1LUI1OTItOTU5NjJCQUMzQjlGfTwvUHJvamVjdEd1aWQ+Ci0gICAgPE91dHB1dFR5cGU+TGlicmFyeTwvT3V0cHV0VHlwZT4KLSAgICA8Um9vdE5hbWVzcGFjZT5BcGFjaGUuTk1TLkFjdGl2ZU1RPC9Sb290TmFtZXNwYWNlPgotICAgIDxBc3NlbWJseU5hbWU+QXBhY2hlLk5NUy5BY3RpdmVNUTwvQXNzZW1ibHlOYW1lPgotICAgIDxXYXJuaW5nTGV2ZWw+NDwvV2FybmluZ0xldmVsPgotICAgIDxTaWduQXNzZW1ibHk+dHJ1ZTwvU2lnbkFzc2VtYmx5PgotICAgIDxBc3NlbWJseU9yaWdpbmF0b3JLZXlGaWxlPmtleWZpbGVcTk1TS2V5LnNuazwvQXNzZW1ibHlPcmlnaW5hdG9yS2V5RmlsZT4KLSAgICA8RmlsZVVwZ3JhZGVGbGFncz4KLSAgICA8L0ZpbGVVcGdyYWRlRmxhZ3M+Ci0gICAgPE9sZFRvb2xzVmVyc2lvbj4yLjA8L09sZFRvb2xzVmVyc2lvbj4KLSAgICA8VXBncmFkZUJhY2t1cExvY2F0aW9uPgotICAgIDwvVXBncmFkZUJhY2t1cExvY2F0aW9uPgotICAgIDxQdWJsaXNoVXJsPnB1Ymxpc2hcPC9QdWJsaXNoVXJsPgotICAgIDxJbnN0YWxsPnRydWU8L0luc3RhbGw+Ci0gICAgPEluc3RhbGxGcm9tPkRpc2s8L0luc3RhbGxGcm9tPgotICAgIDxVcGRhdGVFbmFibGVkPmZhbHNlPC9VcGRhdGVFbmFibGVkPgotICAgIDxVcGRhdGVNb2RlPkZvcmVncm91bmQ8L1VwZGF0ZU1vZGU+Ci0gICAgPFVwZGF0ZUludGVydmFsPjc8L1VwZGF0ZUludGVydmFsPgotICAgIDxVcGRhdGVJbnRlcnZhbFVuaXRzPkRheXM8L1VwZGF0ZUludGVydmFsVW5pdHM+Ci0gICAgPFVwZGF0ZVBlcmlvZGljYWxseT5mYWxzZTwvVXBkYXRlUGVyaW9kaWNhbGx5PgotICAgIDxVcGRhdGVSZXF1aXJlZD5mYWxzZTwvVXBkYXRlUmVxdWlyZWQ+Ci0gICAgPE1hcEZpbGVFeHRlbnNpb25zPnRydWU8L01hcEZpbGVFeHRlbnNpb25zPgotICAgIDxBcHBsaWNhdGlvblJldmlzaW9uPjA8L0FwcGxpY2F0aW9uUmV2aXNpb24+Ci0gICAgPEFwcGxpY2F0aW9uVmVyc2lvbj4xLjAuMC4lMmE8L0FwcGxpY2F0aW9uVmVyc2lvbj4KLSAgICA8SXNXZWJCb290c3RyYXBwZXI+ZmFsc2U8L0lzV2ViQm9vdHN0cmFwcGVyPgotICAgIDxVc2VBcHBsaWNhdGlvblRydXN0PmZhbHNlPC9Vc2VBcHBsaWNhdGlvblRydXN0PgotICAgIDxCb290c3RyYXBwZXJFbmFibGVkPnRydWU8L0Jvb3RzdHJhcHBlckVuYWJsZWQ+Ci0gICAgPFNjY1Byb2plY3ROYW1lPlN2bjwvU2NjUHJvamVjdE5hbWU+Ci0gICAgPFNjY0xvY2FsUGF0aD5Tdm48L1NjY0xvY2FsUGF0aD4KLSAgICA8U2NjQXV4UGF0aD5Tdm48L1NjY0F1eFBhdGg+Ci0gICAgPFNjY1Byb3ZpZGVyPlN1YnZlcnNpb25TY2M8L1NjY1Byb3ZpZGVyPgotICAgIDxSdW5Qb3N0QnVpbGRFdmVudD5Pbk91dHB1dFVwZGF0ZWQ8L1J1blBvc3RCdWlsZEV2ZW50PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnRGVidWd8QW55Q1BVJyAiPgotICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVidWdTeW1ib2xzPgotICAgIDxEZWJ1Z1R5cGU+ZnVsbDwvRGVidWdUeXBlPgotICAgIDxPcHRpbWl6ZT5mYWxzZTwvT3B0aW1pemU+Ci0gICAgPE91dHB1dFBhdGg+YnVpbGRcbmV0LTIuMFxkZWJ1Z1w8L091dHB1dFBhdGg+Ci0gICAgPERlZmluZUNvbnN0YW50cz5UUkFDRTtERUJVRztORVQsTkVUXzJfMDwvRGVmaW5lQ29uc3RhbnRzPgotICAgIDxBbGxvd1Vuc2FmZUJsb2Nrcz5mYWxzZTwvQWxsb3dVbnNhZmVCbG9ja3M+Ci0gICAgPERvY3VtZW50YXRpb25GaWxlPgotICAgIDwvRG9jdW1lbnRhdGlvbkZpbGU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdSZWxlYXNlfEFueUNQVScgIj4KLSAgICA8RGVidWdTeW1ib2xzPnRydWU8L0RlYnVnU3ltYm9scz4KLSAgICA8T3B0aW1pemU+dHJ1ZTwvT3B0aW1pemU+Ci0gICAgPE91dHB1dFBhdGg+YnVpbGRcbmV0LTIuMFxyZWxlYXNlXDwvT3V0cHV0UGF0aD4KLSAgICA8RGVmaW5lQ29uc3RhbnRzPlRSQUNFO05FVCxORVRfMl8wPC9EZWZpbmVDb25zdGFudHM+Ci0gICAgPEFsbG93VW5zYWZlQmxvY2tzPmZhbHNlPC9BbGxvd1Vuc2FmZUJsb2Nrcz4KLSAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iQXBhY2hlLk5NUywgVmVyc2lvbj0xLjEuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIHByb2Nlc3NvckFyY2hpdGVjdHVyZT1NU0lMIj4KLSAgICAgIDxTcGVjaWZpY1ZlcnNpb24+RmFsc2U8L1NwZWNpZmljVmVyc2lvbj4KLSAgICAgIDxIaW50UGF0aD5saWJcQXBhY2hlLk5NU1xuZXQtMi4wXEFwYWNoZS5OTVMuZGxsPC9IaW50UGF0aD4KLSAgICA8L1JlZmVyZW5jZT4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IklvbmljLlpsaWIsIFZlcnNpb249MS45LjEuNSwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1lZGJlNTFhZDk0MmEzZjVjLCBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9TVNJTCI+Ci0gICAgICA8U3BlY2lmaWNWZXJzaW9uPkZhbHNlPC9TcGVjaWZpY1ZlcnNpb24+Ci0gICAgICA8SGludFBhdGg+bGliXERvdE5ldFppcFxuZXQtMi4wXElvbmljLlpsaWIuZGxsPC9IaW50UGF0aD4KLSAgICA8L1JlZmVyZW5jZT4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbSIgLz4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5EYXRhIiAvPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlRyYW5zYWN0aW9ucyIgLz4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5XZWIiIC8+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uWG1sIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQWR2aXNvcnlDb25zdW1lci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQnJva2VyRXhjZXB0aW9uLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xBY3RpdmVNUUJsb2JNZXNzYWdlLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xBY3RpdmVNUUJ5dGVzTWVzc2FnZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFEZXN0aW5hdGlvbi5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFNYXBNZXNzYWdlLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xBY3RpdmVNUU1lc3NhZ2UuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEFjdGl2ZU1RT2JqZWN0TWVzc2FnZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFRdWV1ZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFTdHJlYW1NZXNzYWdlLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xBY3RpdmVNUVRlbXBEZXN0aW5hdGlvbi5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQWN0aXZlTVFUZW1wUXVldWUuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEFjdGl2ZU1RVGVtcFRvcGljLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xBY3RpdmVNUVRleHRNZXNzYWdlLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xBY3RpdmVNUVRvcGljLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xCYXNlQ29tbWFuZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQmFzZURhdGFTdHJ1Y3R1cmUuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEJvb2xlYW5FeHByZXNzaW9uLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xCcm9rZXJFcnJvci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQnJva2VySWQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEJyb2tlckluZm8uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXENvbW1hbmQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXENvbm5lY3Rpb25Db250cm9sLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xDb25uZWN0aW9uRXJyb3IuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXENvbm5lY3Rpb25JZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQ29ubmVjdGlvbkluZm8uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXENvbnN1bWVyQ29udHJvbC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQ29uc3VtZXJJZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcQ29uc3VtZXJJbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xDb250cm9sQ29tbWFuZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcRGF0YUFycmF5UmVzcG9uc2UuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXERhdGFSZXNwb25zZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcRGF0YVN0cnVjdHVyZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcRGF0YVN0cnVjdHVyZVN1cHBvcnQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXERlc3RpbmF0aW9uSW5mby5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcRGlzY292ZXJ5RXZlbnQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEV4Y2VwdGlvblJlc3BvbnNlLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xGbHVzaENvbW1hbmQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEludGVnZXJSZXNwb25zZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcSm91cm5hbFF1ZXVlQWNrLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xKb3VybmFsVG9waWNBY2suY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXEpvdXJuYWxUcmFjZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcSm91cm5hbFRyYW5zYWN0aW9uLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xLZWVwQWxpdmVJbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xMYXN0UGFydGlhbENvbW1hbmQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXExvY2FsVHJhbnNhY3Rpb25JZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcTWFyc2hhbGxBd2FyZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcTWVzc2FnZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcTWVzc2FnZUFjay5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcTWVzc2FnZURpc3BhdGNoLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xNZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb24uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXE1lc3NhZ2VJZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcTWVzc2FnZVB1bGwuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXE1lc3NhZ2VSZWZlcmVuY2UuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXE5ldHdvcmtCcmlkZ2VGaWx0ZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXFBhcnRpYWxDb21tYW5kLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xQcm9kdWNlckFjay5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcUHJvZHVjZXJJZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcUHJvZHVjZXJJbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xSZW1vdmVJbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xSZW1vdmVTdWJzY3JpcHRpb25JbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xSZXBsYXlDb21tYW5kLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xSZXNwb25zZS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcU2Vzc2lvbklkLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xTZXNzaW9uSW5mby5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbWFuZHNcU2h1dGRvd25JbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xTdWJzY3JpcHRpb25JbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xUcmFuc2FjdGlvbklkLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xUcmFuc2FjdGlvbkluZm8uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXFdpcmVGb3JtYXRJbmZvLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21tYW5kc1xYQVRyYW5zYWN0aW9uSWQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbW1hbmRzXFhpZC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29tbW9uQXNzZW1ibHlJbmZvLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxDb21wcmVzc2lvblBvbGljeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29ubmVjdGlvbi5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbi5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29ubmVjdGlvbkZhY3RvcnkuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbm5lY3Rpb25GYWlsZWRFeGNlcHRpb24uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXENvbm5lY3Rpb25NZXRhRGF0YS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcQ29uc3VtZXJDbG9zZWRFeGNlcHRpb24uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICAgIDxDdXN0b21Ub29sTmFtZXNwYWNlPlQ8L0N1c3RvbVRvb2xOYW1lc3BhY2U+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxEZXN0aW5hdGlvbkZpbHRlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcSUNvbXByZXNzaW9uUG9saWN5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxJRGlzcGF0Y2hlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcSU9FeGNlcHRpb24uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXElTeW5jaHJvbml6YXRpb24uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE1lc3NhZ2VDb25zdW1lci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcTWVzc2FnZVByb2R1Y2VyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxOZXRUeENvbm5lY3Rpb24uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE5ldFR4Q29ubmVjdGlvbkZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE5ldFR4TWVzc2FnZUNvbnN1bWVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxOZXRUeFJlY292ZXJ5UG9saWN5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxOZXRUeFNlc3Npb24uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE5ldFR4VHJhbnNhY3Rpb25Db250ZXh0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxCYXNlRGF0YVN0cmVhbU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXEJvb2xlYW5TdHJlYW0uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXElNYXJzaGFsbGVyRmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcT3BlbldpcmVGb3JtYXQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEFjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEFjdGl2ZU1RRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEFjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxBY3RpdmVNUU9iamVjdE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxBY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQWN0aXZlTVFUZW1wRGVzdGluYXRpb25NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQWN0aXZlTVFUZXh0TWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEJhc2VDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEJyb2tlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQ29ubmVjdGlvbkVycm9yTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxDb25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxDb25zdW1lckNvbnRyb2xNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxDb25zdW1lckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcQ29udHJvbENvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXERlc3RpbmF0aW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxFeGNlcHRpb25SZXNwb25zZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxGbHVzaENvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEpvdXJuYWxRdWV1ZUFja01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxKb3VybmFsVG9waWNBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXEpvdXJuYWxUcmFuc2FjdGlvbk1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxLZWVwQWxpdmVJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxMb2NhbFRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcTWFyc2hhbGxlckZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXE1lc3NhZ2VEaXNwYXRjaE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxNZXNzYWdlRGlzcGF0Y2hOb3RpZmljYXRpb25NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcTWVzc2FnZVB1bGxNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxQcm9kdWNlckFja01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXFByb2R1Y2VySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxSZW1vdmVJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcUmVwbGF5Q29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxSZXNwb25zZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcU2Vzc2lvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcU2h1dGRvd25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjEwXFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxMFxUcmFuc2FjdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMTBcWEFUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcQWN0aXZlTVFCbG9iTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEFjdGl2ZU1RQnl0ZXNNZXNzYWdlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcQWN0aXZlTVFEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEFjdGl2ZU1RTWFwTWVzc2FnZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEFjdGl2ZU1RTWVzc2FnZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEFjdGl2ZU1RT2JqZWN0TWVzc2FnZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEFjdGl2ZU1RUXVldWVNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxBY3RpdmVNUVN0cmVhbU1lc3NhZ2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxBY3RpdmVNUVRlbXBEZXN0aW5hdGlvbk1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEFjdGl2ZU1RVGVtcFF1ZXVlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcQWN0aXZlTVFUZW1wVG9waWNNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxBY3RpdmVNUVRleHRNZXNzYWdlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcQWN0aXZlTVFUb3BpY01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEJhc2VDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcQnJva2VySWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxCcm9rZXJJbmZvTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcQ29ubmVjdGlvbkNvbnRyb2xNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxDb25uZWN0aW9uRXJyb3JNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxDb25uZWN0aW9uSWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxDb25uZWN0aW9uSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXENvbnN1bWVyQ29udHJvbE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXENvbnN1bWVySWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxDb25zdW1lckluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxDb250cm9sQ29tbWFuZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXERhdGFBcnJheVJlc3BvbnNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcRGF0YVJlc3BvbnNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcRGF0YVN0cnVjdHVyZVN1cHBvcnRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXE1hcnNoYWxsZXJGYWN0b3J5LmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcTWVzc2FnZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYxXFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjFcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMVxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxCcm9rZXJJZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXE1hcnNoYWxsZXJGYWN0b3J5LmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcTWVzc2FnZU1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYyXFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjJcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWMlxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFYzXFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjNcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWM1xYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY0XFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjRcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNFxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY1XFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjVcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNVxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY2XFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjZcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWNlxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY3XFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjdcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWN1xYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY4XFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjhcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOFxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxBY3RpdmVNUUJsb2JNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQWN0aXZlTVFCeXRlc01lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxBY3RpdmVNUURlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQWN0aXZlTVFNYXBNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQWN0aXZlTVFNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQWN0aXZlTVFPYmplY3RNZXNzYWdlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQWN0aXZlTVFRdWV1ZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XEFjdGl2ZU1RU3RyZWFtTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XEFjdGl2ZU1RVGVtcERlc3RpbmF0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQWN0aXZlTVFUZW1wUXVldWVNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxBY3RpdmVNUVRlbXBUb3BpY01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XEFjdGl2ZU1RVGV4dE1lc3NhZ2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxBY3RpdmVNUVRvcGljTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQmFzZUNvbW1hbmRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxCcm9rZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XEJyb2tlckluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxDb25uZWN0aW9uQ29udHJvbE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XENvbm5lY3Rpb25FcnJvck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XENvbm5lY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XENvbm5lY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQ29uc3VtZXJDb250cm9sTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcQ29uc3VtZXJJZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XENvbnN1bWVySW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XENvbnRyb2xDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcRGF0YUFycmF5UmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxEYXRhUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxEZXN0aW5hdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxEaXNjb3ZlcnlFdmVudE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XEV4Y2VwdGlvblJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcRmx1c2hDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcSW50ZWdlclJlc3BvbnNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcSm91cm5hbFF1ZXVlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcSm91cm5hbFRvcGljQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcSm91cm5hbFRyYWNlTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcSm91cm5hbFRyYW5zYWN0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcS2VlcEFsaXZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XExhc3RQYXJ0aWFsQ29tbWFuZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XExvY2FsVHJhbnNhY3Rpb25JZE1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XE1hcnNoYWxsZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxNZXNzYWdlQWNrTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcTWVzc2FnZURpc3BhdGNoTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcTWVzc2FnZURpc3BhdGNoTm90aWZpY2F0aW9uTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcTWVzc2FnZUlkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcTWVzc2FnZU1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XE1lc3NhZ2VQdWxsTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcTmV0d29ya0JyaWRnZUZpbHRlck1hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XFBhcnRpYWxDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcUHJvZHVjZXJBY2tNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxQcm9kdWNlcklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcUHJvZHVjZXJJbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcUmVtb3ZlSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XFJlbW92ZVN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxSZXBsYXlDb21tYW5kTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcUmVzcG9uc2VNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxTZXNzaW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxTZXNzaW9uSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XFNodXRkb3duSW5mb01hcnNoYWxsZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXE9wZW5XaXJlXFY5XFN1YnNjcmlwdGlvbkluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxUcmFuc2FjdGlvbklkTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcVHJhbnNhY3Rpb25JbmZvTWFyc2hhbGxlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcT3BlbldpcmVcVjlcV2lyZUZvcm1hdEluZm9NYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxPcGVuV2lyZVxWOVxYQVRyYW5zYWN0aW9uSWRNYXJzaGFsbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxQcmVmZXRjaFBvbGljeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcUXVldWVCcm93c2VyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxSZXF1ZXN0VGltZWRPdXRFeGNlcHRpb24uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFNlc3Npb24uY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFNlc3Npb25FeGVjdXRvci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcU3RhdGVcQ29tbWFuZFZpc2l0b3JBZGFwdGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxTdGF0ZVxDb25uZWN0aW9uU3RhdGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFN0YXRlXENvbm5lY3Rpb25TdGF0ZVRyYWNrZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFN0YXRlXENvbnN1bWVyU3RhdGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFN0YXRlXElDb21tYW5kVmlzaXRvci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcU3RhdGVcUHJvZHVjZXJTdGF0ZS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcU3RhdGVcUmVzcG9uc2VIYW5kbGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxTdGF0ZVxTZXNzaW9uU3RhdGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFN0YXRlXFN5bmNocm9uaXplZE9iamVjdHMuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFN0YXRlXFRyYWNrZWQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFN0YXRlXFRyYW5zYWN0aW9uU3RhdGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRocmVhZHNcQ29tcG9zaXRlVGFzay5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVGhyZWFkc1xDb21wb3NpdGVUYXNrUnVubmVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUaHJlYWRzXERlZGljYXRlZFRhc2tSdW5uZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRocmVhZHNcRGVmYXVsdFRocmVhZFBvb2xzLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUaHJlYWRzXFBvb2xlZFRhc2tSdW5uZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRocmVhZHNcU2NoZWR1bGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUaHJlYWRzXFRhc2suY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRocmVhZHNcVGFza1J1bm5lci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVGhyZWFkc1xUYXNrUnVubmVyRmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVGhyZWFkc1xUaHJlYWRQb29sRXhlY3V0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRocmVhZHNcVGltZXJFeC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVGhyZWFkc1xUaW1lclRhc2suY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zYWN0aW9uQ29udGV4dC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNhY3Rpb25zXElSZWNvdmVyeUxvZ2dlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNhY3Rpb25zXElSZWNvdmVyeUxvZ2dlckZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zYWN0aW9uc1xSZWNvdmVyeUZpbGVMb2dnZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zYWN0aW9uc1xSZWNvdmVyeUZpbGVMb2dnZXJGYWN0b3J5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc2FjdGlvbnNcUmVjb3ZlcnlMb2dnZXJGYWN0b3J5QXR0cmlidXRlLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcQWN0aXZlTVFUcmFuc3BvcnRGYWN0b3J5QXR0cmlidXRlLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcRGlzY292ZXJ5XEFic3RyYWN0RGlzY292ZXJ5QWdlbnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxEaXNjb3ZlcnlcQWN0aXZlTVFEaXNjb3ZlcnlBZ2VudEZhY3RvcnlBdHRyaWJ1dGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxEaXNjb3ZlcnlcRGlzY292ZXJlZFNlcnZpY2VEYXRhLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcRGlzY292ZXJ5XERpc2NvdmVyeUFnZW50RmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XERpc2NvdmVyeVxEaXNjb3ZlcnlUcmFuc3BvcnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxEaXNjb3ZlcnlcRGlzY292ZXJ5VHJhbnNwb3J0RmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XERpc2NvdmVyeVxodHRwXEh0dHBEaXNjb3ZlcnlBZ2VudC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XERpc2NvdmVyeVxodHRwXEh0dHBEaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxEaXNjb3ZlcnlcSURpc2NvdmVyeUFnZW50LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcRGlzY292ZXJ5XElEaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxEaXNjb3ZlcnlcTXVsdGljYXN0XE11bHRpY2FzdERpc2NvdmVyeUFnZW50LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcRGlzY292ZXJ5XE11bHRpY2FzdFxNdWx0aWNhc3REaXNjb3ZlcnlBZ2VudEZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxGYWlsb3ZlclxCYWNrdXBUcmFuc3BvcnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxGYWlsb3ZlclxGYWlsb3ZlclRyYW5zcG9ydC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XEZhaWxvdmVyXEZhaWxvdmVyVHJhbnNwb3J0RmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XEZ1dHVyZVJlc3BvbnNlLmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcSUNvbXBvc2l0ZVRyYW5zcG9ydC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XEluYWN0aXZpdHlNb25pdG9yLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcSVRyYW5zcG9ydC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XElUcmFuc3BvcnRGYWN0b3J5LmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcSVdpcmVGb3JtYXQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxMb2dnaW5nVHJhbnNwb3J0LmNzIj4KLSAgICAgIDxTdWJUeXBlPkNvZGU8L1N1YlR5cGU+Ci0gICAgPC9Db21waWxlPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcTW9ja1xJUmVzcG9uc2VCdWlsZGVyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcTW9ja1xNb2NrVHJhbnNwb3J0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxUcmFuc3BvcnRcTW9ja1xNb2NrVHJhbnNwb3J0RmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XE1vY2tcT3BlbldpcmVSZXNwb25zZUJ1aWxkZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxNdXRleFRyYW5zcG9ydC5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XFJlc3BvbnNlQ29ycmVsYXRvci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XFRjcFxTc2xUcmFuc3BvcnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxUY3BcU3NsVHJhbnNwb3J0RmFjdG9yeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XFRjcFxUY3BUcmFuc3BvcnQuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxUY3BcVGNwVHJhbnNwb3J0RmFjdG9yeS5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVHJhbnNwb3J0XFRyYW5zcG9ydEZhY3RvcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxUcmFuc3BvcnRGaWx0ZXIuY3MiPgotICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4KLSAgICA8L0NvbXBpbGU+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFRyYW5zcG9ydFxXaXJlRm9ybWF0TmVnb3RpYXRvci5jcyI+Ci0gICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPgotICAgIDwvQ29tcGlsZT4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxBY3RpdmVNUU1lc3NhZ2VBdWRpdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxBY3RpdmVNUU1lc3NhZ2VUcmFuc2Zvcm1hdGlvbi5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxBZHZpc29yeVN1cHBvcnQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcQml0QXJyYXkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcQml0QXJyYXlCaW4uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcQ29ubmVjdGlvbkF1ZGl0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9InNyY1xtYWluXGNzaGFycFxVdGlsXEZhY3RvcnlBdHRyaWJ1dGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcRmFjdG9yeUZpbmRlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxGaWZvTWVzc2FnZURpc3BhdGNoQ2hhbm5lbC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxJZEdlbmVyYXRvci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxJbnRyb3NwZWN0aW9uU3VwcG9ydC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxJU3VzcGVuZGFibGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcTFJVQ2FjaGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcTWVtb3J5VXNhZ2UuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0ic3JjXG1haW5cY3NoYXJwXFV0aWxcTWVzc2FnZURpc3BhdGNoQ2hhbm5lbC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxTZXJ2aWNlU3RvcHBlci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJzcmNcbWFpblxjc2hhcnBcVXRpbFxTaW1wbGVQcmlvcml0eU1lc3NhZ2VEaXNwYXRjaENoYW5uZWwuY3MiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDb250ZW50IEluY2x1ZGU9IkxJQ0VOU0UudHh0Ij4KLSAgICAgIDxDb3B5VG9PdXRwdXREaXJlY3Rvcnk+UHJlc2VydmVOZXdlc3Q8L0NvcHlUb091dHB1dERpcmVjdG9yeT4KLSAgICA8L0NvbnRlbnQ+Ci0gICAgPENvbnRlbnQgSW5jbHVkZT0iTk9USUNFLnR4dCI+Ci0gICAgICA8Q29weVRvT3V0cHV0RGlyZWN0b3J5PlByZXNlcnZlTmV3ZXN0PC9Db3B5VG9PdXRwdXREaXJlY3Rvcnk+Ci0gICAgPC9Db250ZW50PgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Qm9vdHN0cmFwcGVyUGFja2FnZSBJbmNsdWRlPSJNaWNyb3NvZnQuTmV0LkZyYW1ld29yay4yLjAiPgotICAgICAgPFZpc2libGU+RmFsc2U8L1Zpc2libGU+Ci0gICAgICA8UHJvZHVjdE5hbWU+Lk5FVCBGcmFtZXdvcmsgMi4wICUyOHg4NiUyOTwvUHJvZHVjdE5hbWU+Ci0gICAgICA8SW5zdGFsbD50cnVlPC9JbnN0YWxsPgotICAgIDwvQm9vdHN0cmFwcGVyUGFja2FnZT4KLSAgICA8Qm9vdHN0cmFwcGVyUGFja2FnZSBJbmNsdWRlPSJNaWNyb3NvZnQuTmV0LkZyYW1ld29yay4zLjAiPgotICAgICAgPFZpc2libGU+RmFsc2U8L1Zpc2libGU+Ci0gICAgICA8UHJvZHVjdE5hbWU+Lk5FVCBGcmFtZXdvcmsgMy4wICUyOHg4NiUyOTwvUHJvZHVjdE5hbWU+Ci0gICAgICA8SW5zdGFsbD5mYWxzZTwvSW5zdGFsbD4KLSAgICA8L0Jvb3RzdHJhcHBlclBhY2thZ2U+Ci0gICAgPEJvb3RzdHJhcHBlclBhY2thZ2UgSW5jbHVkZT0iTWljcm9zb2Z0Lk5ldC5GcmFtZXdvcmsuMy41Ij4KLSAgICAgIDxWaXNpYmxlPkZhbHNlPC9WaXNpYmxlPgotICAgICAgPFByb2R1Y3ROYW1lPi5ORVQgRnJhbWV3b3JrIDMuNTwvUHJvZHVjdE5hbWU+Ci0gICAgICA8SW5zdGFsbD5mYWxzZTwvSW5zdGFsbD4KLSAgICA8L0Jvb3RzdHJhcHBlclBhY2thZ2U+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxOb25lIEluY2x1ZGU9ImtleWZpbGVcTk1TS2V5LnNuayIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChNU0J1aWxkQmluUGF0aClcTWljcm9zb2Z0LkNTSEFSUC5UYXJnZXRzIiAvPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Y2QgJChQcm9qZWN0RGlyKQotbmFudCAtbm9sb2dvIC1xIGluc3RhbGwtYWxsIC1EOmNvbXBpbGUuc2tpcD10cnVlPC9Qb3N0QnVpbGRFdmVudD4KLSAgICA8UHJlQnVpbGRFdmVudD5jZCAkKFByb2plY3REaXIpCi1uYW50IC1ub2xvZ28gZG93bmxvYWQtdmVuZG9yIC1EOnZlbmRvci5idWlsZC5jb25maWc9JChDb25maWd1cmF0aW9uTmFtZSkgLUQ6dmVuZG9yLmJ1aWxkLmZyYW1ld29yaz1uZXQtMi4wPC9QcmVCdWlsZEV2ZW50PgotICA8L1Byb3BlcnR5R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdnMyMDA4LWFjdGl2ZW1xLnNsbiBiL3ZzMjAwOC1hY3RpdmVtcS5zbG4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOGE2MDguLjAwMDAwMDAKLS0tIGEvdnMyMDA4LWFjdGl2ZW1xLnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLe+7vw0KLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEwLjAwDQotIyBWaXN1YWwgU3R1ZGlvIDIwMDgNCi1Qcm9qZWN0KCJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRGNzlFRkJDfSIpID0gInZzMjAwOC1hY3RpdmVtcSIsICJ2czIwMDgtYWN0aXZlbXEuY3Nwcm9qIiwgInswODMyMUY0Mi00QjNELTQ4MTUtQjU5Mi05NTk2MkJBQzNCOUZ9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRGNzlFRkJDfSIpID0gInZzMjAwOC1hY3RpdmVtcS10ZXN0IiwgInZzMjAwOC1hY3RpdmVtcS10ZXN0LmNzcHJvaiIsICJ7RUI5NDNDNjktMkM5Qi00NUU3LUI5NUItRkI5MTZFNzA1N0VEfSINCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU3VidmVyc2lvblNjYykgPSBwcmVTb2x1dGlvbg0KLQkJU3ZuLU1hbmFnZWQgPSBUcnVlDQotCQlNYW5hZ2VyID0gQW5raFNWTiAtIFN1YnZlcnNpb24gU3VwcG9ydCBmb3IgVmlzdWFsIFN0dWRpbw0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1Z3xBbnkgQ1BVID0gRGVidWd8QW55IENQVQ0KLQkJUmVsZWFzZXxBbnkgQ1BVID0gUmVsZWFzZXxBbnkgQ1BVDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCi0JCXswODMyMUY0Mi00QjNELTQ4MTUtQjU5Mi05NTk2MkJBQzNCOUZ9LkRlYnVnfEFueSBDUFUuQWN0aXZlQ2ZnID0gRGVidWd8QW55IENQVQ0KLQkJezA4MzIxRjQyLTRCM0QtNDgxNS1CNTkyLTk1OTYyQkFDM0I5Rn0uRGVidWd8QW55IENQVS5CdWlsZC4wID0gRGVidWd8QW55IENQVQ0KLQkJezA4MzIxRjQyLTRCM0QtNDgxNS1CNTkyLTk1OTYyQkFDM0I5Rn0uUmVsZWFzZXxBbnkgQ1BVLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QW55IENQVQ0KLQkJezA4MzIxRjQyLTRCM0QtNDgxNS1CNTkyLTk1OTYyQkFDM0I5Rn0uUmVsZWFzZXxBbnkgQ1BVLkJ1aWxkLjAgPSBSZWxlYXNlfEFueSBDUFUNCi0JCXtFQjk0M0M2OS0yQzlCLTQ1RTctQjk1Qi1GQjkxNkU3MDU3RUR9LkRlYnVnfEFueSBDUFUuQWN0aXZlQ2ZnID0gRGVidWd8QW55IENQVQ0KLQkJe0VCOTQzQzY5LTJDOUItNDVFNy1COTVCLUZCOTE2RTcwNTdFRH0uRGVidWd8QW55IENQVS5CdWlsZC4wID0gRGVidWd8QW55IENQVQ0KLQkJe0VCOTQzQzY5LTJDOUItNDVFNy1COTVCLUZCOTE2RTcwNTdFRH0uUmVsZWFzZXxBbnkgQ1BVLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QW55IENQVQ0KLQkJe0VCOTQzQzY5LTJDOUItNDVFNy1COTVCLUZCOTE2RTcwNTdFRH0uUmVsZWFzZXxBbnkgQ1BVLkJ1aWxkLjAgPSBSZWxlYXNlfEFueSBDUFUNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCg==